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);
+    }
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+