Package org.adamtacy.client.ui.effects.impl

Source Code of org.adamtacy.client.ui.effects.impl.SlideBase

/*
* Copyright 2008-2009 Adam Tacy <adam.tacy AT gmail.com>
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package org.adamtacy.client.ui.effects.impl;

import org.adamtacy.client.ui.effects.core.NMorphStyle;
import org.adamtacy.client.ui.effects.events.EffectSteppingEvent;
import org.adamtacy.client.ui.effects.events.EffectSteppingHandler;
import org.adamtacy.client.ui.effects.impl.css.Rule;

import com.google.gwt.dom.client.Element;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.DeferredCommand;

public class SlideBase extends NMorphStyle{

 
  public void setDisplayOutsideBounds(boolean newValue){
    displayOutsideBounds = newValue;
  }
 
  public SlideBase() {
    super(new Rule("slideStart{left: -400px; top: -400px; }"), new Rule("slideEnd{left: 0px; top: 0px; }"));
  }
 
  public SlideBase(Element el){
    this();
    addEffectElement(el);
  }
 
 
  public void setNewStartStyle(Rule start){
    registerProperties(start, theEnd, null,null);
    theStart = start;
    super.setUpEffect();
  }
 
  protected String newEnd;
  protected int height;
  protected int width;
  protected boolean displayOutsideBounds = false;
 
  Element effectElement;
 
  public void addEffectElement(Element el){
    super.addEffectElement(el);
    effectElement = effectElements.get(0);
  }
 
  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 tearDownEffect(){
    if(thePanel!=null){
      effectElements.get(0).getStyle().setProperty("top", thePanel.getElement().getStyle().getProperty("top"));
      effectElements.get(0).getStyle().setProperty("left", thePanel.getElement().getStyle().getProperty("left"));
      thePanel.getElement().getStyle().setProperty("overflow", "visible");
    }
  }
}
TOP

Related Classes of org.adamtacy.client.ui.effects.impl.SlideBase

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.