package com.remainsoftware.ece2013.nebula.snippets.transition;
import org.eclipse.nebula.effects.stw.Transition;
import org.eclipse.nebula.effects.stw.TransitionListener;
import org.eclipse.nebula.effects.stw.TransitionManager;
import org.eclipse.nebula.effects.stw.transitions.CubicRotationTransition;
import org.eclipse.nebula.effects.stw.transitions.FadeTransition;
import org.eclipse.nebula.effects.stw.transitions.SlideTransition;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
public abstract class AbstractSTWDemoFrame {
public static final String[] DIRECTIONS_NAMES = {
"Left"
, "Right"
, "Up"
, "Down"
, "Right/Left"
, "Down/Up"
, "Random right and left"
, "Random up and down"
, "Random"
};
public static final int DIR_LEFT = 0;
public static final int DIR_RIGHT = 1;
public static final int DIR_UP = 2;
public static final int DIR_DOWN = 3;
public static final int DIR_RIGHT_LEFT = 4;
public static final int DIR_DOWN_UP = 5;
public static final int DIR_RANDOM_RIGHT_AND_LEFT = 6;
public static final int DIR_RANDOM_UP_AND_DOWN = 7;
public static final int DIR_RANDOM = 8;
private int _selectedDirection = DIR_RANDOM;
protected Composite _containerComposite = null;
protected TransitionManager _tm = null;
public static final int TRANSITION_FADE = 0;
public static final int TRANSITION_SLIDE = 1;
public static final int TRANSITION_CUBIC_ROTATION = 2;
private Transition[] _transitions;
public void init(Composite parent) {
_containerComposite = new Composite(parent, SWT.NONE);
init();
_transitions = new Transition[] {
new FadeTransition(_tm)
, new SlideTransition(_tm)
, new CubicRotationTransition(_tm)
};
_tm.setTransition(_transitions[0]);
_tm.addTransitionListener(new TransitionListener() {
public void transitionFinished(TransitionManager transition) {
System.out.println("End Of Transition! current item: "
+ transition.getTransitionable().getSelection());
}
});
}
protected abstract void init();
public Composite getContainerComposiste() {
return _containerComposite;
}
public TransitionManager getTransitionManager() {
return _tm;
}
public Transition getTransitionEffect(int transition) {
return _transitions[transition];
}
public void selectDirection(int direction) {
if(direction >= 0 && direction < DIRECTIONS_NAMES.length)
_selectedDirection = direction;
}
protected double getSelectedDirection(int toIndex, int fromIndex) {
switch(_selectedDirection) {
case DIR_RIGHT:
return Transition.DIR_RIGHT;
case DIR_LEFT:
return Transition.DIR_LEFT;
case DIR_UP:
return Transition.DIR_UP;
case DIR_DOWN:
return Transition.DIR_DOWN;
case DIR_RIGHT_LEFT:
return toIndex > fromIndex ? Transition.DIR_RIGHT : Transition.DIR_LEFT;
case DIR_DOWN_UP:
return toIndex > fromIndex ? Transition.DIR_DOWN : Transition.DIR_UP;
case DIR_RANDOM_RIGHT_AND_LEFT:
return Math.random() > 0.5 ? Transition.DIR_RIGHT : Transition.DIR_LEFT;
case DIR_RANDOM_UP_AND_DOWN:
return Math.random() > 0.5 ? Transition.DIR_DOWN : Transition.DIR_UP;
default:
case DIR_RANDOM:
if(Math.random() > 0.5)
return Math.random() > 0.5 ? Transition.DIR_RIGHT : Transition.DIR_LEFT;
else
return Math.random() > 0.5 ? Transition.DIR_DOWN : Transition.DIR_UP;
}
}
}