package com.remainsoftware.ece2013.nebula.snippets.transition; import javax.annotation.PostConstruct; import org.eclipse.e4.ui.di.Focus; import org.eclipse.nebula.effects.stw.Transition; import org.eclipse.nebula.effects.stw.transitions.CubicRotationTransition; import org.eclipse.nebula.effects.stw.transitions.FadeTransition; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.StackLayout; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.FormAttachment; import org.eclipse.swt.layout.FormData; import org.eclipse.swt.layout.FormLayout; import org.eclipse.swt.layout.RowLayout; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Spinner; public class STWDemo { static final String[] demos = { "Demo1", "Demo2", "Demo3" }; AbstractSTWDemoFrame[] demoFrames = { new TransitionTest(), new TransitionTest1(), new TransitionTest2() }; static final String[] transitions = { "Fade", "Slide", "Cubic Rotation" }; public static final String ID = "transitionDemo"; Shell sShell; Composite frameHolder; StackLayout frameHolderStackLayout; Composite currentSpecificOptionsComposite; Composite fadeOptionsComposite; Composite cubicRotationOptionsComposite; AbstractSTWDemoFrame currentDemo; Transition currentTransition; int currentDirection; int currentT; int currentFPS; int currentFOS; int currentFOP; int currentFIS; int currentFIP; int currentQuality; public static void main(String[] args) { /* * Before this is run, be sure to set up the launch configuration * (Arguments->VM Arguments) for the correct SWT library path in order * to run with the SWT dlls. The dlls are located in the SWT plugin jar. * For example, on Windows the Eclipse SWT 3.1 plugin jar is: * installation_directory\plugins\org.eclipse.swt.win32_3.1.0.jar */ Display display = Display.getDefault(); STWDemo thisClass = new STWDemo(); thisClass.createSShell(); thisClass.sShell.open(); while (!thisClass.sShell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); } /** * This method initializes sShell */ private void createSShell() { sShell = new Shell(); sShell.setText("STW Demo"); sShell.setSize(new Point(1000, 600)); sShell.setLayout(new FillLayout()); createMainComposite(sShell); } @PostConstruct private Composite createMainComposite(Composite parent) { Composite mainComposite = new Composite(parent, SWT.NONE); mainComposite.setLayout(new FormLayout()); FormData fd; frameHolder = new Composite(mainComposite, SWT.BORDER); fd = new FormData(); fd.left = new FormAttachment(0, 0); fd.right = new FormAttachment(75, 0); fd.top = new FormAttachment(0, 0); fd.bottom = new FormAttachment(100, 0); frameHolder.setLayoutData(fd); frameHolderStackLayout = new StackLayout(); frameHolder.setLayout(frameHolderStackLayout); parent.addListener(SWT.Resize, new Listener() { public void handleEvent(Event e) { frameHolder.layout(); } }); // init frames for (AbstractSTWDemoFrame frame : demoFrames) { frame.init(frameHolder); frame.getContainerComposiste().setVisible(false); } Composite optionsComposite = new Composite(mainComposite, SWT.NONE); fd = new FormData(); fd.left = new FormAttachment(frameHolder, 5); fd.right = new FormAttachment(100, -5); fd.top = new FormAttachment(0, 5); fd.bottom = new FormAttachment(100, -5); optionsComposite.setLayoutData(fd); optionsComposite.setLayout(new RowLayout(SWT.VERTICAL)); new Label(optionsComposite, SWT.TRANSPARENT).setText("Demo:"); final Combo comboDemo = new Combo(optionsComposite, SWT.DROP_DOWN | SWT.READ_ONLY); comboDemo.setItems(demos); comboDemo.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { selectDemo(comboDemo.getSelectionIndex()); } }); comboDemo.select(0); currentDemo = demoFrames[0]; new Label(optionsComposite, SWT.TRANSPARENT) .setText("Transition Effect:"); final Combo comboTransition = new Combo(optionsComposite, SWT.DROP_DOWN | SWT.READ_ONLY); comboTransition.setItems(transitions); comboTransition.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { selectTransition(comboTransition.getSelectionIndex()); } }); comboTransition.select(0); currentTransition = currentDemo.getTransitionEffect(0); currentDemo.getTransitionManager().setTransition(currentTransition); new Label(optionsComposite, SWT.TRANSPARENT).setText("Direction:"); final Combo comboDirection = new Combo(optionsComposite, SWT.DROP_DOWN | SWT.READ_ONLY); comboDirection.setItems(AbstractSTWDemoFrame.DIRECTIONS_NAMES); comboDirection.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { selectDirection(comboDirection.getSelectionIndex()); } }); comboDirection.select(0); currentDirection = 0; currentDemo.selectDirection(0); new Label(optionsComposite, SWT.TRANSPARENT) .setText("Total Transition Time (ms):"); final Spinner spnrT = new Spinner(optionsComposite, SWT.NONE); spnrT.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { setT(spnrT.getSelection()); } }); spnrT.setMinimum(0); spnrT.setMaximum(Integer.MAX_VALUE); spnrT.setIncrement(1); spnrT.setPageIncrement(50); spnrT.setSelection(1000); setT(1000); new Label(optionsComposite, SWT.TRANSPARENT) .setText("Frames Per Second (fps):"); final Spinner spnrFPS = new Spinner(optionsComposite, SWT.NONE); spnrFPS.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { setFPS(spnrFPS.getSelection()); } }); spnrFPS.setMinimum(1); spnrFPS.setMaximum(Integer.MAX_VALUE); spnrFPS.setIncrement(1); spnrFPS.setPageIncrement(10); spnrFPS.setSelection(60); setFPS(60); // specificOptionsComposite Composite specificOptionsComposite = new Composite(optionsComposite, SWT.NONE); StackLayout specificOptionsStackLayout = new StackLayout(); specificOptionsComposite.setLayout(specificOptionsStackLayout); fadeOptionsComposite = new Composite(specificOptionsComposite, SWT.NONE); fadeOptionsComposite.setLayout(new RowLayout(SWT.VERTICAL)); new Label(fadeOptionsComposite, SWT.TRANSPARENT) .setText("Fade Out Start (%):"); final Spinner spnrFOS = new Spinner(fadeOptionsComposite, SWT.NONE); spnrFOS.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { setFOS(spnrFOS.getSelection()); } }); spnrFOS.setMinimum(0); spnrFOS.setMaximum(100); spnrFOS.setIncrement(1); spnrFOS.setPageIncrement(10); spnrFOS.setSelection(0); setFOS(0); new Label(fadeOptionsComposite, SWT.TRANSPARENT) .setText("Fade Out Stop (%):"); final Spinner spnrFOP = new Spinner(fadeOptionsComposite, SWT.NONE); spnrFOP.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { setFOP(spnrFOP.getSelection()); } }); spnrFOP.setMinimum(0); spnrFOP.setMaximum(100); spnrFOP.setIncrement(1); spnrFOP.setPageIncrement(10); spnrFOP.setSelection(100); setFOP(100); new Label(fadeOptionsComposite, SWT.TRANSPARENT) .setText("Fade In Start (%):"); final Spinner spnrFIS = new Spinner(fadeOptionsComposite, SWT.NONE); spnrFIS.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { setFIS(spnrFIS.getSelection()); } }); spnrFIS.setMinimum(0); spnrFIS.setMaximum(100); spnrFIS.setIncrement(1); spnrFIS.setPageIncrement(10); spnrFIS.setSelection(0); setFIS(0); new Label(fadeOptionsComposite, SWT.TRANSPARENT) .setText("Fade In Stop (%):"); final Spinner spnrFIP = new Spinner(fadeOptionsComposite, SWT.NONE); spnrFIP.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { setFIP(spnrFIP.getSelection()); } }); spnrFIP.setMinimum(0); spnrFIP.setMaximum(100); spnrFIP.setIncrement(1); spnrFIP.setPageIncrement(10); spnrFIP.setSelection(100); setFIP(100); cubicRotationOptionsComposite = new Composite(specificOptionsComposite, SWT.NONE); cubicRotationOptionsComposite.setLayout(new RowLayout(SWT.VERTICAL)); new Label(cubicRotationOptionsComposite, SWT.TRANSPARENT) .setText("Quality (%):"); final Spinner spnrQuality = new Spinner(cubicRotationOptionsComposite, SWT.NONE); spnrQuality.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { setQuality(spnrQuality.getSelection()); } }); spnrQuality.setMinimum(0); spnrQuality.setMaximum(100); spnrQuality.setIncrement(1); spnrQuality.setPageIncrement(10); spnrQuality.setSelection(100); setQuality(100); currentSpecificOptionsComposite = fadeOptionsComposite; specificOptionsStackLayout.topControl = currentSpecificOptionsComposite; selectDemo(0); return mainComposite; } private void selectDemo(int index) { if (null != currentDemo) currentDemo.getContainerComposiste().setVisible(false); currentDemo = demoFrames[index]; currentDemo.getContainerComposiste().setVisible(true); frameHolderStackLayout.topControl = currentDemo .getContainerComposiste(); currentDemo.getTransitionManager().setTransition(currentTransition); currentDemo.selectDirection(currentDirection); currentTransition.setTotalTransitionTime(currentT); currentTransition.setFPS(currentFPS); } private void selectTransition(int index) { currentTransition = currentDemo.getTransitionEffect(index); if (null != currentSpecificOptionsComposite) currentSpecificOptionsComposite.setVisible(false); if (currentTransition instanceof FadeTransition) { currentSpecificOptionsComposite = fadeOptionsComposite; currentSpecificOptionsComposite.setVisible(true); } else if (currentTransition instanceof CubicRotationTransition) { currentSpecificOptionsComposite = cubicRotationOptionsComposite; currentSpecificOptionsComposite.setVisible(true); } else { currentSpecificOptionsComposite = null; } currentDemo.getTransitionManager().setTransition(currentTransition); currentTransition.setTotalTransitionTime(currentT); currentTransition.setFPS(currentFPS); } private void selectDirection(int index) { currentDirection = index; currentDemo.selectDirection(currentDirection); } private void setT(int T) { currentT = T; currentTransition.setTotalTransitionTime(currentT); } private void setFPS(int fps) { currentFPS = fps; currentTransition.setFPS(currentFPS); } private void setFOS(int fos) { currentFOS = fos; if (currentTransition instanceof FadeTransition) { ((FadeTransition) currentTransition).setFadeOutStart(currentFOS); } } private void setFOP(int fop) { currentFOP = fop; if (currentTransition instanceof FadeTransition) { ((FadeTransition) currentTransition).setFadeOutStop(currentFOP); } } private void setFIS(int fis) { currentFIS = fis; if (currentTransition instanceof FadeTransition) { ((FadeTransition) currentTransition).setFadeInStart(currentFIS); } } private void setFIP(int fip) { currentFIP = fip; if (currentTransition instanceof FadeTransition) { ((FadeTransition) currentTransition).setFadeInStop(currentFIP); } } private void setQuality(int quality) { currentQuality = quality; if (currentTransition instanceof CubicRotationTransition) { ((CubicRotationTransition) currentTransition) .setQuality(currentQuality); } } @Focus void setFocus() { frameHolder.setFocus(); } }