Mercurial > projects > dwt-samples
diff jface/FileTreeViewer.d @ 62:caaf053c44d6
more examples
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Fri, 11 Apr 2008 17:08:20 +0200 |
parents | |
children | 59ae5360d98f |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jface/FileTreeViewer.d Fri Apr 11 17:08:20 2008 +0200 @@ -0,0 +1,226 @@ +module jface.FileTreeViewer; + +import dwt.DWT; +import dwt.widgets.Label; +import dwt.widgets.Control; +import dwt.widgets.Composite; +import dwt.widgets.Display; +import dwt.widgets.Shell; +import dwt.widgets.Button; + +import dwt.events.SelectionAdapter; +import dwt.events.SelectionEvent; + +import dwt.graphics.Image; +import dwt.graphics.ImageData; + +import dwt.layout.GridLayout; +import dwt.layout.GridData; + +import dwtx.jface.window.ApplicationWindow; + +import dwtx.jface.viewers.Viewer; +import dwtx.jface.viewers.TreeViewer; +import dwtx.jface.viewers.ITreeContentProvider; +import dwtx.jface.viewers.ILabelProvider; +import dwtx.jface.viewers.ILabelProviderListener; +import dwtx.jface.viewers.LabelProviderChangedEvent; + +import jive.stacktrace; + +import dwt.dwthelper.utils; +import dwt.dwthelper.ByteArrayInputStream; + +//------------------------------------ +//import dwt.dwthelper.utils; +//------------------------------------ + +import tango.io.FileRoots; +import tango.io.FilePath; + +import tango.util.collection.model.Seq; +import tango.util.collection.ArraySeq; + + +void main(){ + auto hw = new FileTree; + hw.run(); +} + +class FileTree : ApplicationWindow { + + TreeViewer tv; + + this(){ + super(null); + } + + public void run(){ + setBlockOnOpen(true); + open(); + Display.getCurrent().dispose(); + } + + protected void configureShell( Shell shell ){ + super.configureShell(shell); + shell.setText( "File Tree" ); + shell.setSize( 400, 400 ); + } + + protected Control createContents(Composite parent){ +/+ Label label = new Label( parent, DWT.CENTER ); + label.setText( "Hello, World" ); + return label;+/ + + auto composite = new Composite( parent, DWT.NONE ); + composite.setLayout( new GridLayout(1,false)); + + // Add a checkbox to toggle whether the labels preserve case + auto preserveCase = new Button( composite, DWT.CHECK ); + preserveCase.setText( "&Preserve case" ); + + // Create the tree viewer to display the file tree + tv = new TreeViewer( composite ); + tv.getTree().setLayoutData( new GridData( GridData.FILL_BOTH )); + tv.setContentProvider( new FileTreeContentProvider()); + tv.setLabelProvider( new FileTreeLabelProvider() ); + tv.setInput( stringcast("root") ); + + // When user checks the checkbox, toggle the preserve case attribute + // of the label provider + preserveCase.addSelectionListener( new class SelectionAdapter{ + public void widgetSelected( SelectionEvent event ){ + auto preserveCase = (cast(Button)event.widget).getSelection(); + auto ftlp = cast(FileTreeLabelProvider) tv.getLabelProvider(); + ftlp.setPreserveCase(preserveCase); + } + }); + return composite; + } +} + +class FileTreeContentProvider : ITreeContentProvider { + public override Object[] getChildren( Object arg0 ){ + Trace.formatln( "trc line={} ", __LINE__ ); + try{ + auto fp = cast(FilePath)arg0; + Object[] res; + if( !fp.isFolder()) { + return null; + } + foreach( item; fp ){ + res ~= FilePath.from( item ); + } + + Trace.formatln( "trc line={} ", __LINE__ ); + return res; + } + catch( Exception e ){ + ExceptionPrintStackTrace(e); + return null; + } + } + + public override Object getParent(Object arg0 ){ + Trace.formatln( "trc line={} ", __LINE__ ); + auto fp = cast(FilePath)arg0; + return fp.pop; + } + + public override bool hasChildren(Object arg0 ){ + Trace.formatln( "trc line={} ", __LINE__ ); + auto obj = getChildren(arg0); + return obj is null ? false : obj.length > 0; + } + + public override Object[] getElements( Object arg0 ){ + Trace.formatln( "trc line={} ", __LINE__ ); + Object[] res; + res ~= new FilePath( "/" ); +// foreach( root; FileRoots.list()){ +// res ~= new FilePath( root ); +// } + return res; + } + + public override void dispose(){ + } + + public override void inputChanged(Viewer arg0, Object arg1, Object arg2 ){ + } + +} + +class FileTreeLabelProvider : ILabelProvider { + + private Seq!(ILabelProviderListener) listeners; + + private Image file; + private Image dir; + + private bool preserveCase; + + public this(){ + Trace.formatln( "trc line={} Label", __LINE__ ); + listeners = new ArraySeq!(ILabelProviderListener); + + file = new Image( null, new ImageData( new ByteArrayInputStream( cast(byte[])import( "file.png" )))); + dir = new Image( null, new ImageData( new ByteArrayInputStream( cast(byte[])import( "folder.png" )))); + } + + public void setPreserveCase(bool preserveCase){ + Trace.formatln( "trc line={} Label", __LINE__ ); + this.preserveCase = preserveCase; + auto event = new LabelProviderChangedEvent(this); + for( int i = 0, n = listeners.size(); i < n; i++ ){ + auto ilpl = listeners.get(i); + ilpl.labelProviderChanged(event); + } + } + + public override Image getImage(Object arg0){ + Trace.formatln( "trc line={} Label", __LINE__ ); + return (cast(FilePath)arg0).isFolder() ? dir : file; + } + + public override char[] getText(Object arg0){ + auto text = (cast(FilePath)arg0).name(); +// if( text.length is 0 ){ +// text = (cast(FilePath)arg0).pop.name(); +// } + Trace.formatln( "name={} ", text ); + Trace.formatln( "trc line={} Label", __LINE__ ); + return "x" ~ (preserveCase ? text : text.toUpperCase()); + } + + public void addListener( ILabelProviderListener arg0 ){ + listeners.append(arg0); + } + + public void dispose(){ + if( dir !is null ) dir.dispose(); + if( file !is null ) file.dispose(); + } + + public bool isLabelProperty(Object arg0, char[] arg1){ + return false; + } + + public void removeListener(ILabelProviderListener arg0){ + listeners.remove(arg0); + } +} + + + + + + + + + + + + + +