Mercurial > projects > dwt-samples
annotate jface/FileTreeViewer.d @ 111:5fe95b1ccf68
Fix: compile error for tango svn
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Sun, 06 Jul 2008 23:35:10 +0200 |
parents | 9ff9b8f7284b |
children | ae94c6a65f9e |
rev | line source |
---|---|
62 | 1 module jface.FileTreeViewer; |
2 | |
3 import dwt.DWT; | |
4 import dwt.widgets.Label; | |
5 import dwt.widgets.Control; | |
6 import dwt.widgets.Composite; | |
7 import dwt.widgets.Display; | |
8 import dwt.widgets.Shell; | |
9 import dwt.widgets.Button; | |
10 | |
11 import dwt.events.SelectionAdapter; | |
12 import dwt.events.SelectionEvent; | |
13 | |
14 import dwt.graphics.Image; | |
15 import dwt.graphics.ImageData; | |
16 | |
17 import dwt.layout.GridLayout; | |
18 import dwt.layout.GridData; | |
19 | |
20 import dwtx.jface.window.ApplicationWindow; | |
21 | |
22 import dwtx.jface.viewers.Viewer; | |
23 import dwtx.jface.viewers.TreeViewer; | |
24 import dwtx.jface.viewers.ITreeContentProvider; | |
25 import dwtx.jface.viewers.ILabelProvider; | |
26 import dwtx.jface.viewers.ILabelProviderListener; | |
27 import dwtx.jface.viewers.LabelProviderChangedEvent; | |
28 | |
67 | 29 version(JIVE) import jive.stacktrace; |
62 | 30 |
31 import dwt.dwthelper.utils; | |
32 import dwt.dwthelper.ByteArrayInputStream; | |
33 | |
34 //------------------------------------ | |
35 //import dwt.dwthelper.utils; | |
36 //------------------------------------ | |
37 | |
111
5fe95b1ccf68
Fix: compile error for tango svn
Frank Benoit <benoit@tionex.de>
parents:
73
diff
changeset
|
38 version(TANGOSVN){ |
5fe95b1ccf68
Fix: compile error for tango svn
Frank Benoit <benoit@tionex.de>
parents:
73
diff
changeset
|
39 import tango.io.FileSystem; |
5fe95b1ccf68
Fix: compile error for tango svn
Frank Benoit <benoit@tionex.de>
parents:
73
diff
changeset
|
40 } |
5fe95b1ccf68
Fix: compile error for tango svn
Frank Benoit <benoit@tionex.de>
parents:
73
diff
changeset
|
41 else{ |
62 | 42 import tango.io.FileRoots; |
111
5fe95b1ccf68
Fix: compile error for tango svn
Frank Benoit <benoit@tionex.de>
parents:
73
diff
changeset
|
43 } |
62 | 44 import tango.io.FilePath; |
68 | 45 import tango.util.log.Trace; |
62 | 46 |
47 import tango.util.collection.model.Seq; | |
48 import tango.util.collection.ArraySeq; | |
73
9ff9b8f7284b
FileTreeViewer now work on windows without error dialog.
Frank Benoit <benoit@tionex.de>
parents:
70
diff
changeset
|
49 import tango.text.convert.Utf; |
62 | 50 |
51 void main(){ | |
52 auto hw = new FileTree; | |
53 hw.run(); | |
54 } | |
55 | |
56 class FileTree : ApplicationWindow { | |
57 | |
58 TreeViewer tv; | |
59 | |
60 this(){ | |
61 super(null); | |
62 } | |
63 | |
64 public void run(){ | |
65 setBlockOnOpen(true); | |
66 open(); | |
67 Display.getCurrent().dispose(); | |
68 } | |
69 | |
70 protected void configureShell( Shell shell ){ | |
71 super.configureShell(shell); | |
72 shell.setText( "File Tree" ); | |
73 shell.setSize( 400, 400 ); | |
74 } | |
75 | |
76 protected Control createContents(Composite parent){ | |
77 | |
78 auto composite = new Composite( parent, DWT.NONE ); | |
79 composite.setLayout( new GridLayout(1,false)); | |
80 | |
81 // Add a checkbox to toggle whether the labels preserve case | |
82 auto preserveCase = new Button( composite, DWT.CHECK ); | |
83 preserveCase.setText( "&Preserve case" ); | |
84 | |
85 // Create the tree viewer to display the file tree | |
86 tv = new TreeViewer( composite ); | |
87 tv.getTree().setLayoutData( new GridData( GridData.FILL_BOTH )); | |
88 tv.setContentProvider( new FileTreeContentProvider()); | |
89 tv.setLabelProvider( new FileTreeLabelProvider() ); | |
90 tv.setInput( stringcast("root") ); | |
91 | |
92 // When user checks the checkbox, toggle the preserve case attribute | |
93 // of the label provider | |
94 preserveCase.addSelectionListener( new class SelectionAdapter{ | |
95 public void widgetSelected( SelectionEvent event ){ | |
96 auto preserveCase = (cast(Button)event.widget).getSelection(); | |
97 auto ftlp = cast(FileTreeLabelProvider) tv.getLabelProvider(); | |
98 ftlp.setPreserveCase(preserveCase); | |
99 } | |
100 }); | |
101 return composite; | |
102 } | |
103 } | |
104 | |
105 class FileTreeContentProvider : ITreeContentProvider { | |
106 public override Object[] getChildren( Object arg0 ){ | |
69 | 107 auto fp = cast(FilePath)arg0; |
62 | 108 try{ |
69 | 109 if( !fp.isFolder() ){ |
110 return null; | |
111 } | |
65
a84ba4d1820f
restructure the dsss.conf and resources
Frank Benoit <benoit@tionex.de>
parents:
63
diff
changeset
|
112 Object[] res; |
69 | 113 foreach( item; fp ){ |
65
a84ba4d1820f
restructure the dsss.conf and resources
Frank Benoit <benoit@tionex.de>
parents:
63
diff
changeset
|
114 res ~= FilePath.from( item ); |
a84ba4d1820f
restructure the dsss.conf and resources
Frank Benoit <benoit@tionex.de>
parents:
63
diff
changeset
|
115 } |
a84ba4d1820f
restructure the dsss.conf and resources
Frank Benoit <benoit@tionex.de>
parents:
63
diff
changeset
|
116 return res; |
62 | 117 } |
118 catch( Exception e ){ | |
119 return null; | |
120 } | |
121 } | |
122 | |
123 public override Object getParent(Object arg0 ){ | |
124 auto fp = cast(FilePath)arg0; | |
125 return fp.pop; | |
126 } | |
127 | |
128 public override bool hasChildren(Object arg0 ){ | |
129 auto obj = getChildren(arg0); | |
130 return obj is null ? false : obj.length > 0; | |
131 } | |
132 | |
133 public override Object[] getElements( Object arg0 ){ | |
134 Object[] res; | |
63 | 135 |
111
5fe95b1ccf68
Fix: compile error for tango svn
Frank Benoit <benoit@tionex.de>
parents:
73
diff
changeset
|
136 version(TANGOSVN){ |
5fe95b1ccf68
Fix: compile error for tango svn
Frank Benoit <benoit@tionex.de>
parents:
73
diff
changeset
|
137 foreach( root; FileSystem.roots()){ |
5fe95b1ccf68
Fix: compile error for tango svn
Frank Benoit <benoit@tionex.de>
parents:
73
diff
changeset
|
138 // ignore floppy drives, they bring up strange error messages |
5fe95b1ccf68
Fix: compile error for tango svn
Frank Benoit <benoit@tionex.de>
parents:
73
diff
changeset
|
139 if( root == `A:\`|| root == `B:\` ){ |
5fe95b1ccf68
Fix: compile error for tango svn
Frank Benoit <benoit@tionex.de>
parents:
73
diff
changeset
|
140 continue; |
5fe95b1ccf68
Fix: compile error for tango svn
Frank Benoit <benoit@tionex.de>
parents:
73
diff
changeset
|
141 } |
5fe95b1ccf68
Fix: compile error for tango svn
Frank Benoit <benoit@tionex.de>
parents:
73
diff
changeset
|
142 res ~= new FilePath( root ); |
5fe95b1ccf68
Fix: compile error for tango svn
Frank Benoit <benoit@tionex.de>
parents:
73
diff
changeset
|
143 } |
5fe95b1ccf68
Fix: compile error for tango svn
Frank Benoit <benoit@tionex.de>
parents:
73
diff
changeset
|
144 } |
5fe95b1ccf68
Fix: compile error for tango svn
Frank Benoit <benoit@tionex.de>
parents:
73
diff
changeset
|
145 else{ |
63 | 146 foreach( root; FileRoots.list()){ |
73
9ff9b8f7284b
FileTreeViewer now work on windows without error dialog.
Frank Benoit <benoit@tionex.de>
parents:
70
diff
changeset
|
147 // ignore floppy drives, they bring up strange error messages |
9ff9b8f7284b
FileTreeViewer now work on windows without error dialog.
Frank Benoit <benoit@tionex.de>
parents:
70
diff
changeset
|
148 if( root == `A:\`|| root == `B:\` ){ |
9ff9b8f7284b
FileTreeViewer now work on windows without error dialog.
Frank Benoit <benoit@tionex.de>
parents:
70
diff
changeset
|
149 continue; |
9ff9b8f7284b
FileTreeViewer now work on windows without error dialog.
Frank Benoit <benoit@tionex.de>
parents:
70
diff
changeset
|
150 } |
63 | 151 res ~= new FilePath( root ); |
152 } | |
111
5fe95b1ccf68
Fix: compile error for tango svn
Frank Benoit <benoit@tionex.de>
parents:
73
diff
changeset
|
153 } |
62 | 154 return res; |
155 } | |
156 | |
157 public override void dispose(){ | |
158 } | |
159 | |
160 public override void inputChanged(Viewer arg0, Object arg1, Object arg2 ){ | |
161 } | |
162 | |
163 } | |
164 | |
165 class FileTreeLabelProvider : ILabelProvider { | |
166 | |
167 private Seq!(ILabelProviderListener) listeners; | |
168 | |
169 private Image file; | |
170 private Image dir; | |
171 | |
172 private bool preserveCase; | |
173 | |
174 public this(){ | |
175 listeners = new ArraySeq!(ILabelProviderListener); | |
176 | |
177 file = new Image( null, new ImageData( new ByteArrayInputStream( cast(byte[])import( "file.png" )))); | |
178 dir = new Image( null, new ImageData( new ByteArrayInputStream( cast(byte[])import( "folder.png" )))); | |
179 } | |
180 | |
181 public void setPreserveCase(bool preserveCase){ | |
182 this.preserveCase = preserveCase; | |
183 auto event = new LabelProviderChangedEvent(this); | |
184 for( int i = 0, n = listeners.size(); i < n; i++ ){ | |
185 auto ilpl = listeners.get(i); | |
186 ilpl.labelProviderChanged(event); | |
187 } | |
188 } | |
189 | |
190 public override Image getImage(Object arg0){ | |
73
9ff9b8f7284b
FileTreeViewer now work on windows without error dialog.
Frank Benoit <benoit@tionex.de>
parents:
70
diff
changeset
|
191 auto fp = cast(FilePath)arg0; |
9ff9b8f7284b
FileTreeViewer now work on windows without error dialog.
Frank Benoit <benoit@tionex.de>
parents:
70
diff
changeset
|
192 // is a root |
9ff9b8f7284b
FileTreeViewer now work on windows without error dialog.
Frank Benoit <benoit@tionex.de>
parents:
70
diff
changeset
|
193 if( fp.name.length is 0 ){ |
9ff9b8f7284b
FileTreeViewer now work on windows without error dialog.
Frank Benoit <benoit@tionex.de>
parents:
70
diff
changeset
|
194 return dir; |
9ff9b8f7284b
FileTreeViewer now work on windows without error dialog.
Frank Benoit <benoit@tionex.de>
parents:
70
diff
changeset
|
195 } |
9ff9b8f7284b
FileTreeViewer now work on windows without error dialog.
Frank Benoit <benoit@tionex.de>
parents:
70
diff
changeset
|
196 return fp.isFolder() ? dir : file; |
62 | 197 } |
198 | |
199 public override char[] getText(Object arg0){ | |
73
9ff9b8f7284b
FileTreeViewer now work on windows without error dialog.
Frank Benoit <benoit@tionex.de>
parents:
70
diff
changeset
|
200 auto fp = cast(FilePath)arg0; |
9ff9b8f7284b
FileTreeViewer now work on windows without error dialog.
Frank Benoit <benoit@tionex.de>
parents:
70
diff
changeset
|
201 auto text = fp.name(); |
70 | 202 if( text.length is 0 ){ |
203 // now take all info, it will be drive or the root folder | |
73
9ff9b8f7284b
FileTreeViewer now work on windows without error dialog.
Frank Benoit <benoit@tionex.de>
parents:
70
diff
changeset
|
204 text = fp.toString(); |
70 | 205 } |
206 return preserveCase ? text : text.toUpperCase(); | |
62 | 207 } |
208 | |
209 public void addListener( ILabelProviderListener arg0 ){ | |
210 listeners.append(arg0); | |
211 } | |
212 | |
213 public void dispose(){ | |
214 if( dir !is null ) dir.dispose(); | |
215 if( file !is null ) file.dispose(); | |
216 } | |
217 | |
218 public bool isLabelProperty(Object arg0, char[] arg1){ | |
219 return false; | |
220 } | |
221 | |
222 public void removeListener(ILabelProviderListener arg0){ | |
223 listeners.remove(arg0); | |
224 } | |
225 } | |
226 | |
227 | |
228 | |
229 | |
230 | |
231 | |
232 | |
233 | |
234 | |
235 | |
236 | |
237 | |
238 | |
239 |