Mercurial > projects > dwt-samples
view jface/ActionAndStatusbar.d @ 171:0a21c7cabc16
presentation windows
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Sun, 26 Oct 2008 14:07:11 +0100 |
parents | 6e6405809faf |
children |
line wrap: on
line source
/* DWT/JFace in Action GUI Design with Eclipse 3.0 Matthew Scarpino, Stephen Holder, Stanford Ng, and Laurent Mihalkovic ISBN: 1932394273 Publisher: Manning Port to the D programming language: Frank Benoit <benoit@tionex.de> Added some stuff to play with the statusbar and its progressmonitor */ module jface.ActionAndStatusbar; import dwtx.jface.action.Action; import dwtx.jface.action.ActionContributionItem; import dwtx.jface.action.MenuManager; import dwtx.jface.action.StatusLineManager; import dwtx.jface.action.ToolBarManager; import dwtx.jface.action.Separator; import dwtx.jface.resource.ImageDescriptor; import dwtx.jface.window.ApplicationWindow; import dwtx.core.runtime.IProgressMonitor; import dwt.DWT; import dwt.widgets.Composite; import dwt.widgets.Control; import dwt.widgets.Display; import dwt.widgets.Group; import dwt.widgets.Button; import dwt.widgets.Event; import dwt.widgets.Listener; import dwt.widgets.Text; import dwt.layout.GridData; import dwt.layout.GridLayout; import tango.text.convert.Format; version(JIVE) import jive.stacktrace; import dwt.dwthelper.utils; import dwt.dwthelper.Runnable; void main() { auto swin = new ActionAndStatusbar(); swin.setBlockOnOpen(true); swin.open(); Display.getCurrent().dispose(); } public class ActionAndStatusbar : ApplicationWindow { StatusLineManager slm; StatusAction status_action; ActionContributionItem aci; public this() { super(null); slm = new StatusLineManager(); status_action = new StatusAction(slm); aci = new ActionContributionItem(status_action); addStatusLine(); addMenuBar(); addToolBar(DWT.FLAT | DWT.WRAP); } protected Control createContents(Composite parent) { getShell().setText("Action/Contribution Example"); //parent.setSize(290, 150); //aci.fill(parent); Composite comp = cast(Composite) super.createContents(parent); comp.setLayout( new GridLayout()); new Text( comp, DWT.BORDER ); auto grp = new Group(comp, DWT.None); grp.setLayoutData( new GridData( GridData.FILL_BOTH )); //grp.setSize( 200, 200 ); grp.setText("Action enable" ); grp.setLayout(new GridLayout( 1, true )); with( new Button( grp, DWT.RADIO )){ setText( "On" ); addListener( DWT.Selection, dgListener( &doEnable, true )); } with( new Button( grp, DWT.RADIO )){ setText( "Off" ); addListener( DWT.Selection, dgListener( &doEnable, false )); } return comp; } void doEnable( Event e, bool state ){ status_action.setEnabled( state ); } protected MenuManager createMenuManager() { MenuManager main_menu = new MenuManager(null); MenuManager file_menu = new MenuManager("File"); MenuManager action_menu = new MenuManager("Menu"); main_menu.add(file_menu); main_menu.add(action_menu); action_menu.add(status_action); file_menu.add(status_action); return main_menu; } protected ToolBarManager createToolBarManager(int style) { ToolBarManager tool_bar_manager = new ToolBarManager(style); tool_bar_manager.add(status_action); tool_bar_manager.add(new Separator()); tool_bar_manager.add(status_action); return tool_bar_manager; } protected StatusLineManager createStatusLineManager() { return slm; } } class StatusAction : Action { StatusLineManager statman; short triggercount = 0; public this(StatusLineManager sm) { super("&Trigger@Ctrl+T", AS_PUSH_BUTTON); statman = sm; setToolTipText("Trigger the Action"); setImageDescriptor(ImageDescriptor.createFromFile( getImportData!("eclipse-icon-red-16.png"))); } public void run() { triggercount++; statman.setMessage( Format("The status action has fired. Count: {}", triggercount)); if( triggercount % 5 == 0 ){ statman.setCancelEnabled(true); auto pm = statman.getProgressMonitor(); pm.setCanceled(false); pm.beginTask( "Task", 100 ); auto runner = new class(pm) Runnable { IProgressMonitor pm; int w; this(IProgressMonitor a){ this.pm = a; } void run(){ const incr = 2; this.pm.worked( incr ); w += incr; if( w < 100 && !this.pm.isCanceled() ){ Display.getCurrent().timerExec( 100, this); } else{ this.pm.done(); } } }; Display.getCurrent().syncExec(runner); } } }