@Override
  public void doShow() {
    if (!isHidden) {
      return;
    }
    this.getElement().getStyle().setOpacity(0);
    setPopupPosition(336, 88);

    NMorphStyle eff = CUtil.opacityEffect(this.getElement(), null, 0, 100);
    eff.play();

    isHidden = false;
  }
  @Override
  public void doHide() {
    if (isHidden) {
      return;
    }
    NMorphStyle eff = CUtil.opacityEffect(this.getElement(), null, 100, 0);
    eff.addEffectCompletedHandler(
        new EffectCompletedHandler() {
          @Override
          public void onEffectCompleted(EffectCompletedEvent event) {
            setPopupPosition(1025, 0);
          }
        });
    eff.play();

    isHidden = true;
  }
 protected void setUpEffect(final Command command) {
   if (thePanel != null) thePanel.getElement().getStyle().setProperty("overflow", "hidden");
   // Need to call set up first, so that the panel gets hidden before being displayed
   // Dimensions are set up in Deferred Command below, which might take longer to execute than
   // the control back in the NEffect which displays the widget.  BY setting the initial effect to
   // large values in the constructor, we can then immediately hide this panel by position, then
   // the
   // deferred command can do its work and place it where needed for sliding in.
   super.setUpEffect();
   DeferredCommand.addCommand(
       new Command() {
         public void execute() {
           height = effectElements.get(0).getOffsetHeight();
           width = effectElements.get(0).getOffsetWidth();
           command.execute();
           setNewStartStyle(new Rule(newEnd));
         }
       });
   // This change listener will allow the panel to be visible outside of bounding box (for example
   // we would like this on the elastic transition physics so that once the effect is greater than
   // 1.0
   // we display, and below 1.0 we hide overshots.
   // However, since this is only really applicable to the elastic transition physics and would
   // carry an overhead
   // for others, we allow a boolean to indicate if available or not.
   if ((displayOutsideBounds) && (thePanel != null)) {
     this.addEffectSteppingHandler(
         new EffectSteppingHandler() {
           public void onEffectStep(EffectSteppingEvent handler) {
             if (getProgressInterpolated() > 1)
               thePanel.getElement().getStyle().setProperty("overflow", "visible");
             else thePanel.getElement().getStyle().setProperty("overflow", "hidden");
           }
         });
   }
 }
 public void addEffectElement(Element el) {
   super.addEffectElement(el);
   effectElement = effectElements.get(0);
 }
 public void setNewStartStyle(Rule start) {
   registerProperties(start, theEnd, null, null);
   theStart = start;
   super.setUpEffect();
 }