/* * NaviToolbar.java * * Created on 2009-04-15, 20:45:36 */ package app.navigps.gui.ToolBar; import app.navigps.gui.ToolBar.UI.NaviToolBarUI; import app.navigps.gui.borders.OvalBorder; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Point; import java.awt.Rectangle; import javax.swing.JToolBar; import org.jdesktop.animation.timing.Animator; import org.jdesktop.animation.timing.TimingTargetAdapter; import org.jdesktop.animation.timing.interpolation.Interpolator; import org.jdesktop.animation.timing.interpolation.KeyFrames; import org.jdesktop.animation.timing.interpolation.KeyTimes; import org.jdesktop.animation.timing.interpolation.KeyValues; import org.jdesktop.animation.timing.interpolation.PropertySetter; import org.jdesktop.animation.timing.interpolation.SplineInterpolator; /** * * @author Grzegorz (wara) Warywoda */ public class NaviToolBar extends JToolBar{ private Animator animator; private int [] duration = {1000,500}; public static final int INITIAL_TOOLBAR_TIME = 0; public static final int NORMAL_TOOLBAR_TIME = 0; private int typeTime=1; public NaviToolBar(String name){ super(name); init(); } public NaviToolBar( int orientation ){ super(orientation); init(); } public NaviToolBar( String name , int orientation) { super(name, orientation); init(); } private void init() { setBorder(new OvalBorder(3,3,3,3,10,10,new Color(166,166,166))); addSeparator(); setUI(new NaviToolBarUI()); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); } @Override public void setVisible(boolean aFlag) { if(isVisible() != aFlag){ super.setVisible(aFlag); } } @Override public void setLocation(Point p) { super.setLocation(p); } @Override public void setBounds(Rectangle r) { animationBounds(r,duration[getTypeTime()]); } private void animationBounds(Rectangle newrec,int duration){ Rectangle oldrec = getBounds();//current position if(newrec.equals(oldrec)){ //System.out.println("the same rect, return"); return; } setLocation(newrec.x, newrec.y); Dimension oldDim = new Dimension(oldrec.width, oldrec.height); Dimension newDim = new Dimension(newrec.width, newrec.height); if(animator != null && animator.isRunning()){ animator.stop(); } Interpolator splines = new SplineInterpolator(0.40f, 0.00f, 0.00f, 1.00f); KeyTimes times = new KeyTimes(.0f, 1.0f); KeyValues values = KeyValues.create(oldDim,newDim); KeyFrames frames = new KeyFrames(values,times, splines); animator = PropertySetter.createAnimator(duration,this,"size",frames); //animator.setResolution(10); animator.setDeceleration(.5f); animator.setAcceleration(0.3f); animator.addTarget(new TimingTargetAdapter(){ @Override public void timingEvent(float fraction) { //System.out.println("timing event "+fraction); //repaint(); validate(); } @Override public void end() { //repaint(); } @Override public void begin() { } }); animator.start(); } /** * @return the typeTime */ public int getTypeTime() { return typeTime; } /** * @param typeTime the typeTime to set */ public void setTypeTime(int typeTime) throws IllegalArgumentException{ if(typeTime <0 || typeTime > duration.length-1){ throw new IllegalArgumentException("argument must be >-1 and <"+(duration.length-1)); } this.typeTime = typeTime; } }