Mercurial > projects > dwt-samples
view 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 source
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); } }