98b197145d347cabf80680f6df97aa27771b9b6c
[ede] / newexplorer / src / ExplorerWindow.ec
1 import "Explorer"
2 import "IconBag"
3 import "ToolBar"
4
5 enum ExplorerToolId
6 {
7    none,
8    newWindow, goBack, goForward, goUp, goHome,
9    browse,
10    panelTree, panelSearch,
11    addressBar,
12    refresh,
13    viewList, viewDetails, viewIcons, viewCards, viewShowcase, viewCustom,
14    previewPictures
15 };
16
17 class ExplorerWindow : Window
18 {
19    text = "Ecere Explorer";
20    background = activeBorder;
21    borderStyle = sizable;
22    hasMaximize = true;
23    hasMinimize = true;
24    hasClose = true;
25    size = { 840, 480 };
26    minClientSize = { 600, 300 };
27    nativeDecorations = true;
28
29    IconBag<ExplorerToolId> iconBag
30    {
31       //window = guiApp.desktop;
32       window = this;
33       alphaBlend = true;
34       iconNames =
35       [
36          "<:ecere>emblems/unreadable.png",     /* none */
37
38          "<:ecere>actions/windowNew.png",            /* newWindow */
39          "<:ecere>actions/goPrevious.png",           /* goBack */
40          "<:ecere>actions/goNext.png",               /* goForward */
41          "<:ecere>actions/goUp.png",                 /* goUp */
42          "<:ecere>actions/goHome.png",               /* goHome */
43
44          ":browse.png",                                           /* browse */
45
46          ":panel-tree.png",                                       /* panelTree */
47          "<:ecere>actions/editFind.png",             /* panelSearch */
48
49          "<:ecere>emblems/unreadable.png",     /* addressBar */
50
51          "<:ecere>actions/viewRefresh.png",          /* refresh */
52
53          ":view-list.png",                                        /* viewList */
54          ":view-details.png",                                     /* viewDetails */
55          ":view-icons.png",                                       /* viewIcons */
56          ":view-cards.png",                                       /* viewCards */
57          ":view-showcase-right.png",                              /* viewShowcase */
58          ":view-custom.png",                                      /* viewCustom */
59          
60          "<:ecere>mimeTypes/image.png"     /* previewPictures */
61       ];
62    };
63
64    Stacker stack
65    {
66       this;
67       gap = 0;
68       direction = vertical;
69       background = activeBorder;
70       //opacity = 1.0f;
71       
72       anchor = { left = 0, top = 0, right = 0, bottom = 0 };
73       //moveable = false;
74    };
75
76    ToolBar/*<ExplorerToolId>*/ toolBar
77    {
78       stack, this;
79       iconBag = iconBag;
80       size = { h = 32 };
81       //moveable = false;
82
83       void NotifyToolClick(ToolButton button)
84       {
85          ExplorerToolId id = (ExplorerToolId)button.id;
86          switch(id)
87          {
88             case none:
89                break;
90             case newWindow:
91                ExplorerWindow { }.Create();
92                break;
93             case goBack:
94             case goForward:
95                break;
96             case goUp:
97             {
98                char * path = view.path;
99                char * newPath = new char[strlen(path)];
100                StripLastDirectory(path, newPath);
101                if(!newPath[0])
102                {
103                   newPath[0] = '/';
104                   newPath[1] = 0;
105                }
106                view.path = newPath;
107                delete newPath;
108                break;
109             }
110             case panelTree:
111                // TODO TOFIX : need to fix Stacker for this to work
112                tree.visible = button.checked;
113                //search.visible = !button.checked;
114                panels.size = { panels.size.w, panels.size.h }; // TOFIX : another Stacker fix needed
115                break;
116             case panelSearch:
117                // TODO TOFIX : need to fix Stacker for this to work
118                //search.visible = button.checked;
119                tree.visible = !button.checked;
120                panels.size = { panels.size.w, panels.size.h }; // TOFIX : another Stacker fix needed
121                break;
122             case refresh:
123                if(tree.visible)
124                   tree.Refresh();
125                view.Refresh();
126                break;
127             case previewPictures:
128                view.previewPictures = button.checked;
129                view.Refresh();
130                break;
131             case viewList:
132             case viewDetails:
133             case viewIcons:
134             case viewCards:
135             case viewShowcase:
136                //SwitchViews(toolId);
137                break;
138          }
139       }
140    };
141
142    Window s1 { toolBar, size = { w = 8 } };
143    ToolButton goBack { toolBar, this, id = ExplorerToolId::goBack };
144    Window s2 { toolBar, size = { w = 2 } };
145    ToolButton goForward { toolBar, this, id = ExplorerToolId::goForward };
146    Window s3 { toolBar, size = { w = 2 } };
147    ToolButton refresh { toolBar, this, id = ExplorerToolId::refresh };
148    Window s4 { toolBar, size = { w = 2 } };
149    ToolButton goHome { toolBar, this, id = ExplorerToolId::goHome };
150    Window s5 { toolBar, size = { w = 8 } };
151    PathBox addressBar
152    {
153       toolBar, this;
154       size = { 300, 23 }, id = ExplorerToolId::addressBar;
155       typeExpected = directory;
156
157       bool OnKeyDown(Key key, unichar ch)
158       {
159          if((SmartKey)key == enter)
160          {
161             // how to make enter effect a modification
162             // how to implement in PathBox
163          }
164          return true;
165       }
166
167       bool NotifyModified(PathBox pathBox)
168       {
169          view.path = pathBox.path;
170          return true;
171       }
172    };
173    FlipStacker { toolBar, spring = previous };
174    Window s6 { toolBar, size = { w = 8 } };
175    ToolButton goUp { toolBar, this, id = ExplorerToolId::goUp };
176    Window s7 { toolBar, size = { w = 8 } };
177    GroupToggleToolButton selectedPanel;
178    GroupToggleToolButton panelTree   { toolBar, this, id = ExplorerToolId::panelTree, selected = &selectedPanel, checked = true };
179    GroupToggleToolButton panelSearch { toolBar, this, id = ExplorerToolId::panelSearch, selected = &selectedPanel };
180    selectedPanel = panelTree;
181    Window s8 { toolBar, size = { w = 8 } };
182    OptionToolButton selectedView;
183    OptionToolButton viewList     { toolBar, this, id = ExplorerToolId::viewList, selected = &selectedView, checked = true };
184    OptionToolButton viewDetails  { toolBar, this, id = ExplorerToolId::viewDetails, selected = &selectedView };
185    OptionToolButton viewIcons    { toolBar, this, id = ExplorerToolId::viewIcons, selected = &selectedView };
186    OptionToolButton viewTiles    { toolBar, this, id = ExplorerToolId::viewCards, selected = &selectedView };
187    OptionToolButton viewShowcase { toolBar, this, id = ExplorerToolId::viewShowcase, selected = &selectedView };
188    selectedView = viewList;
189    Window s9 { toolBar, size = { w = 8 } };
190    ToggleToolButton previewPictures { toolBar, this, id = ExplorerToolId::previewPictures };
191
192    Window s10 { toolBar, size = { w = 8 } };
193    ToolButton newWindow { toolBar, this, id = ExplorerToolId::newWindow };
194    Window s11 { toolBar, size = { w = 8 } };
195
196    /*void OnDestroy()
197    {
198       iconBag.window = null;
199       delete iconBag;
200    }*/
201
202    bool OnLoadGraphics()
203    {
204       iconBag.Load();
205       return true;
206    }
207
208    void OnUnloadGraphics()
209    {
210       iconBag.Unload();
211    }
212
213    Stacker panels
214    {
215       stack, this;
216       gap = 0;
217       direction = horizontal;
218       background = yellow;//activeBorder;
219       //opacity = 1.0f;
220
221       anchor.left = 0;
222       anchor.bottom = 0;
223       anchor.right = 0;
224    };
225
226    //FlipStacker flipStack { stack, spring = previous };
227
228    /*SearchPanel searchPanel
229    {
230       panels, this;
231    };*/
232
233    /*Tree*/FileSystemBox tree
234    {
235       panels, this;
236       size = { w = 240 };
237       anchor.top = 0;
238       anchor.bottom = 0;
239       navigateFolders = true;
240       treeBranches = true;
241       foldersOnly = true;
242       borderStyle = none;
243       visible = false;
244    };
245
246    FileSystemBox view
247    {
248       panels, this;
249       anchor.top = 0;
250       anchor.bottom = 0;
251       anchor.right = 0;
252       locationBox = addressBar;
253       navigateFolders = true;
254       borderStyle = none;
255    };
256
257    // Preview / Showcase
258    /*PreviewArea previewArea
259    {
260       panels, this;
261    };*/
262
263    //FlipStacker flipPanels { panels, spring = previous };
264
265    bool OnPostCreate()
266    {
267       addressBar.path = view.path;
268       return true;
269    }
270 }
271
272 //class TreeFileSystemBox : FileSystemBox { }