1 #ifndef FILEPANEL_H
2 #define FILEPANEL_H
3 
4 #include <map>
5 
6 #include "Properties.h"
7 #include "FileList.h"
8 #include "PathLinker.h"
9 #include "InputDialog.h"
10 #include "BrowseInputDialog.h"
11 #include "HistInputDialog.h"
12 #include "ArchInputDialog.h"
13 
14 // Clipboard operations
15 enum
16 {
17     COPY_CLIPBOARD,
18     CUT_CLIPBOARD,
19 };
20 
21 
22 
23 // Typedef for the map between program string identifiers and integer indexes
24 typedef std::map<FXString, int>   progsmap;
25 
26 
27 class FilePanel : public FXVerticalFrame
28 {
29     FXDECLARE(FilePanel)
30 protected:
31     FilePanel*             current;
32     FileList*              list;
33     FilePanel*             next;
34     DirPanel*              dirpanel;
35     PathLinker*            pathlink;
36     FXPacker*              statusbar;
37     FXLabel*               statuslabel;
38     FXLabel*               filterlabel;
39     FXHorizontalSeparator* panelsep;
40     FXButton*               activeicon;
41     FXString               name;
42     FXbool                 ctrlkey;
43     FXbool                 selmult;
44     FXString               trashlocation;
45     FXString               trashfileslocation;
46     FXString               trashinfolocation;
47     FXString               startlocation;
48     FXDragCorner*          corner;
49     FXDragType             urilistType;      // Standard uri-list type
50     FXDragType             xfelistType;      // Xfe, Gnome and XFCE list type
51     FXDragType             kdelistType;      // KDE list type
52     FXDragType             utf8Type;         // UTF-8 text type
53     FXbool                 clipboard_locked; // Clipboard locked to prevent changes when viewing it
54     InputDialog*           newfiledialog;
55     InputDialog*           newdirdialog;
56     InputDialog*           newlinkdialog;
57     HistInputDialog*       opendialog;
58     ArchInputDialog*       archdialog;
59     HistInputDialog*       filterdialog;
60     BrowseInputDialog*     operationdialogsingle;
61     InputDialog*           operationdialogrename;
62     BrowseInputDialog*     operationdialogmultiple;
63     BrowseInputDialog*     comparedialog;
64     FXbool                 fromPaste;
65     FXbool                 ctrl;        // Flag to select the right click control menu
66     FXbool                 shiftf10;    // Flag indicating that Shift-F10 was pressed
67     TextLabel*             pathtext;
68     FXbool                 isactive;
69     FXbool                 stopListRefresh;
70     FXColor                attenclr;
71     progsmap               progs;       // Map between program string identifiers and integer indexes
72 
73 public:
74 
75     FilePanel(FXWindow* owner, const char*, FXComposite*, DirPanel*, FXuint name_size = 200, FXuint size_size = 60, FXuint type_size = 100, FXuint ext_size = 100,
76               FXuint modd_size = 150, FXuint user_size = 50, FXuint grou_size = 50, FXuint attr_size = 100, FXuint deldate_size = 150, FXuint origpath_size = 200, FXbool showthumbs = false,
77               FXColor listbackcolor = FXRGB(255, 255, 255), FXColor listforecolor = FXRGB(0, 0, 0), FXColor attentioncolor = FXRGB(255, 0, 0), FXbool smoothscroll = true,
78               FXuint opts = 0, int x = 0, int y = 0, int w = 0, int h = 0);
79 
FilePanel()80     FilePanel() : current(NULL), list(NULL), next(NULL), dirpanel(NULL), pathlink(NULL), statusbar(NULL), statuslabel(NULL), filterlabel(NULL),
81                   panelsep(NULL), activeicon(NULL), ctrlkey(false), selmult(false), corner(NULL), urilistType(0), xfelistType(0),
82                   kdelistType(0), utf8Type(0), clipboard_locked(false), newfiledialog(NULL), newdirdialog(NULL), newlinkdialog(NULL),
83                   opendialog(NULL), archdialog(NULL), filterdialog(NULL), operationdialogsingle(NULL), operationdialogrename(NULL),
84                   operationdialogmultiple(NULL), comparedialog(NULL), fromPaste(false), ctrl(false), shiftf10(false), pathtext(NULL),
85                   isactive(false), stopListRefresh(false), attenclr(FXRGB(0, 0, 0))
86     {}
87     virtual void create();
88 
89     ~FilePanel();
90 
91     void setActive();
92 
93     void setInactive(FXbool = true);
94 
95     void Next(FilePanel*);
96     void updateLocation();
97     void showCorner(FXbool show);
98     void showActiveIcon(FXbool show);
99     void execFile(FXString pathname);
100     int readScriptDir(FXMenuPane* scriptsmenu, FXString dir);
101 
102     enum
103     {
104         ID_FILELIST=FXVerticalFrame::ID_LAST,
105         ID_STOP_LIST_REFRESH_TIMER,
106         ID_DIRECTORY_UP,
107         ID_VIEW,
108         ID_EDIT,
109         ID_COMPARE,
110         ID_PROPERTIES,
111         ID_FILE_COPY,
112         ID_FILE_CUT,
113         ID_FILE_COPYTO,
114         ID_FILE_MOVETO,
115         ID_FILE_RENAME,
116         ID_FILE_SYMLINK,
117         ID_FILE_DELETE,
118         ID_FILE_TRASH,
119         ID_FILE_RESTORE,
120         ID_FILE_ASSOC,
121         ID_POPUP_MENU,
122         ID_XTERM,
123         ID_EXTRACT,
124         ID_RUN_SCRIPT,
125         ID_GO_SCRIPTDIR,
126         ID_EXTRACT_TO_FOLDER,
127         ID_EXTRACT_HERE,
128         ID_DIR_USAGE,
129         ID_NEW_DIR,
130         ID_NEW_FILE,
131         ID_NEW_SYMLINK,
132         ID_ADD_TO_ARCH,
133         ID_GO_HOME,
134         ID_GO_TRASH,
135         ID_COPY_CLIPBOARD,
136         ID_CUT_CLIPBOARD,
137         ID_ADDCOPY_CLIPBOARD,
138         ID_ADDCUT_CLIPBOARD,
139         ID_PASTE_CLIPBOARD,
140         ID_OPEN,
141         ID_OPEN_WITH,
142         ID_FILTER,
143         ID_FILTER_CURRENT,
144         ID_STATUS,
145         ID_LABEL,
146         ID_REFRESH,
147         ID_SELECT_ALL,
148         ID_DESELECT_ALL,
149         ID_SELECT_INVERSE,
150         ID_SHOW_BIG_ICONS,
151         ID_SHOW_MINI_ICONS,
152         ID_SHOW_DETAILS,
153         ID_TOGGLE_HIDDEN,
154         ID_TOGGLE_THUMBNAILS,
155 #if defined(linux)
156         ID_MOUNT,
157         ID_UMOUNT,
158         ID_PKG_QUERY,
159         ID_PKG_INSTALL,
160         ID_PKG_UNINSTALL,
161 #endif
162         ID_LAST,
163     };
164 public:
165     long onClipboardGained(FXObject*, FXSelector, void*);
166     long onClipboardLost(FXObject*, FXSelector, void*);
167     long onClipboardRequest(FXObject*, FXSelector, void*);
168     long onUpdStatus(FXObject*, FXSelector, void*);
169     long onCmdItemDoubleClicked(FXObject*, FXSelector, void*);
170     long onCmdItemClicked(FXObject*, FXSelector, void*);
171     long onCmdFocus(FXObject*, FXSelector, void*);
172     long onCmdItemFilter(FXObject*, FXSelector, void*);
173     long onCmdCopyCut(FXObject*, FXSelector, void*);
174     long onCmdPaste(FXObject*, FXSelector, void*);
175     long onCmdDirectoryUp(FXObject*, FXSelector, void*);
176     long onCmdGoHome(FXObject*, FXSelector, void*);
177     long onCmdGoTrash(FXObject*, FXSelector, void*);
178     long onCmdEdit(FXObject*, FXSelector, void*);
179     long onCmdCompare(FXObject*, FXSelector, void*);
180     long onCmdProperties(FXObject*, FXSelector, void*);
181     long onCmdFileMan(FXObject*, FXSelector, void*);
182     long onCmdFileTrash(FXObject*, FXSelector, void*);
183     long onCmdFileRestore(FXObject*, FXSelector, void*);
184     long onCmdFileDelete(FXObject*, FXSelector, void*);
185     long onCmdFileAssoc(FXObject*, FXSelector, void*);
186     long onCmdNewDir(FXObject*, FXSelector, void*);
187     long onCmdNewFile(FXObject*, FXSelector, void*);
188     long onCmdNewSymlink(FXObject*, FXSelector, void*);
189     long onCmdOpen(FXObject*, FXSelector, void*);
190     long onCmdOpenWith(FXObject*, FXSelector, void*);
191     long onCmdXTerm(FXObject*, FXSelector, void*);
192     long onCmdExtract(FXObject*, FXSelector, void*);
193     long onCmdExtractToFolder(FXObject*, FXSelector, void*);
194     long onCmdExtractHere(FXObject*, FXSelector, void*);
195     long onCmdRefresh(FXObject*, FXSelector, void*);
196     long onCmdSelect(FXObject*, FXSelector, void*);
197     long onCmdPopupMenu(FXObject*, FXSelector, void*);
198     long onCmdShow(FXObject*, FXSelector, void*);
199     long onUpdShow(FXObject*, FXSelector, void*);
200     long onUpdUp(FXObject*, FXSelector, void*);
201     long onUpdPaste(FXObject*, FXSelector, void*);
202     long onCmdToggleHidden(FXObject*, FXSelector, void*);
203     long onUpdToggleHidden(FXObject*, FXSelector, void*);
204     long onCmdToggleThumbnails(FXObject*, FXSelector, void*);
205     long onCmdRunScript(FXObject*, FXSelector, void*);
206 	long onCmdDirUsage(FXObject*, FXSelector, void*);
207 
208     long onUpdDirUsage(FXObject*, FXSelector, void*);
209     long onUpdToggleThumbnails(FXObject*, FXSelector, void*);
210     long onCmdAddToArch(FXObject*, FXSelector, void*);
211     long onUpdMenu(FXObject*, FXSelector, void*);
212     long onUpdOpen(FXObject*, FXSelector, void*);
213     long onUpdAddToArch(FXObject*, FXSelector, void*);
214     long onUpdSelMult(FXObject*, FXSelector, void*);
215     long onUpdCompare(FXObject*, FXSelector, void*);
216     long onUpdFileDelete(FXObject*, FXSelector, void*);
217     long onUpdFileTrash(FXObject*, FXSelector, void*);
218     long onUpdFileRestore(FXObject*, FXSelector, void*);
219     long onUpdGoTrash(FXObject*, FXSelector, void*);
220     void updatePath();
221 
222     long onCmdStopListRefreshTimer(FXObject*, FXSelector, void*);
223     long onUpdRunScript(FXObject*, FXSelector, void*);
224     long onCmdGoScriptDir(FXObject*, FXSelector, void*);
225 
226 #if defined(linux)
227     long onCmdMount(FXObject*, FXSelector, void*);
228     long onUpdMount(FXObject*, FXSelector, void*);
229     long onUpdUnmount(FXObject*, FXSelector, void*);
230     long onCmdPkgQuery(FXObject*, FXSelector, void*);
231     long onUpdPkgQuery(FXObject*, FXSelector, void*);
232     long onCmdPkgInstall(FXObject*, FXSelector, void*);
233     long onCmdPkgUninstall(FXObject*, FXSelector, void*);
234 #endif
235 public:
236 
237     // Change path text
setPathText(FXString title)238     void setPathText(FXString title)
239     {
240         pathtext->setText(title);
241     }
242 
243     // Toggle FileList refresh
setAllowRefresh(FXbool flag)244     void setAllowRefresh(FXbool flag)
245     {
246         list->setAllowRefresh(flag);
247     }
248 
249     // Change sort function
setSortFunc(IconListSortFunc func)250     void setSortFunc(IconListSortFunc func)
251     {
252         list->setSortFunc(func);
253     }
254 
255     // Return sort function
getSortFunc()256     IconListSortFunc getSortFunc() const
257     {
258         return(list->getSortFunc());
259     }
260 
261     // Change default cursor
setDefaultCursor(FXCursor * cur)262     void setDefaultCursor(FXCursor* cur)
263     {
264         list->setDefaultCursor(cur);
265     }
266 
267 	// Deselect all items
deselectAll(void)268 	void deselectAll(void)
269 	{
270 		list->onCmdDeselectAll(0,0,0);
271 	}
272 
273     // Redraw file list
redraw(void)274     void redraw(void)
275     {
276         list->recalc();
277     }
278 
279     // Return a pointer on the current panel
getCurrent(void)280     FilePanel* getCurrent(void) const
281     {
282         return(current);
283     }
284 
285     // Return a pointer on the next panel
getNext(void)286     FilePanel* getNext(void) const
287     {
288         return(next);
289     }
290 
291     // Set current directory
292     void setDirectory(FXString pathname, FXbool notify = false)
293     {
294         list->setDirectory(pathname, notify);
295     }
296 
297     // Get current directory
getDirectory(void)298     FXString getDirectory(void) const
299     {
300         return(list->getDirectory());
301     }
302 
303     // Get associations
getAssociations(void)304     FileDict* getAssociations(void)
305     {
306         return(list->getAssociations());
307     }
308 
309     // Get header size given its index
getHeaderSize(int index)310     int getHeaderSize(int index) const
311     {
312         return(list->getHeaderSize(index));
313     }
314 
315     // Hidden files shown?
shownHiddenFiles(void)316     FXbool shownHiddenFiles(void) const
317     {
318         return(list->shownHiddenFiles());
319     }
320 
321     // Show hidden files
showHiddenFiles(FXbool shown)322     void showHiddenFiles(FXbool shown)
323     {
324         list->showHiddenFiles(shown);
325     }
326 
327     // Thumbnails shown?
shownThumbnails(void)328     FXbool shownThumbnails(void) const
329     {
330         return(list->shownThumbnails());
331     }
332 
333     // Show thumbnails
showThumbnails(FXbool shown)334     void showThumbnails(FXbool shown)
335     {
336         list->showThumbnails(shown);
337     }
338 
339     // Get the current icon list style
getListStyle(void)340     FXuint getListStyle(void) const
341     {
342         return(list->getListStyle());
343     }
344 
345     // Get the current icon list style
setListStyle(FXuint style)346     void setListStyle(FXuint style)
347     {
348         list->setListStyle(style);
349     }
350 
351     // Return pointer on the file list
getList(void)352     FileList* getList(void) const
353     {
354         return(list);
355     }
356 
357     // Set ignore case
setIgnoreCase(FXbool ignorecase)358     void setIgnoreCase(FXbool ignorecase)
359     {
360         list->setIgnoreCase(ignorecase);
361     }
362 
363     // Get ignore case
getIgnoreCase(void)364     FXbool getIgnoreCase(void)
365     {
366         return(list->getIgnoreCase());
367     }
368 
369     // Set directory first
setDirsFirst(FXbool dirsfirst)370     void setDirsFirst(FXbool dirsfirst)
371     {
372         list->setDirsFirst(dirsfirst);
373     }
374 
375     // Set directory first
getDirsFirst(void)376     FXbool getDirsFirst(void)
377     {
378         return(list->getDirsFirst());
379     }
380 
381     // Set focus on file list
setFocusOnList(void)382     void setFocusOnList(void)
383     {
384         list->setFocus();
385     }
386 
387     // Is panel active?
isActive(void)388     FXbool isActive(void)
389     {
390         return(isactive);
391     }
392 
393     // Get current item
getCurrentItem(void)394     int getCurrentItem(void) const
395     {
396         return(list->getCurrentItem());
397     }
398 
399     // Set current item
setCurrentItem(int item)400     void setCurrentItem(int item)
401     {
402         list->setCurrentItem(item);
403         list->makeItemVisible(item);
404     }
405 
406     // Select item
selectItem(int item)407     void selectItem(int item)
408     {
409         list->selectItem(item);
410     }
411 
412     // Deselect item
deselectItem(int item)413     void deselectItem(int item)
414     {
415         list->deselectItem(item);
416     }
417 
418     // Is item selected?
isItemSelected(int item)419     FXbool isItemSelected(int item)
420     {
421         return(list->isItemSelected(item));
422     }
423 
424     // Get number od selected items
getNumSelectedItems(void)425     int getNumSelectedItems(void)
426     {
427         return(list->getNumSelectedItems());
428     }
429 
430     // Status bar is shown?
statusbarShown(void)431     FXbool statusbarShown(void)
432     {
433         return(statusbar->shown());
434     }
435 
436     // Toggle status bar
toggleStatusbar(void)437     void toggleStatusbar(void)
438     {
439         statusbar->handle(this, FXSEL(SEL_COMMAND, FXWindow::ID_TOGGLESHOWN), NULL);
440     }
441 
442     // Set path of the path linker
setPathLink(FXString pathname)443     void setPathLink(FXString pathname)
444     {
445         pathlink->setPath(pathname);
446     }
447 
448     // Get back history first item
backhistGetFirst(void)449     StringItem* backhistGetFirst(void)
450     {
451         return(list->backhist->getFirst());
452     }
453 
454     // Get forward history first item
forwardhistGetFirst(void)455     StringItem* forwardhistGetFirst(void)
456     {
457         return(list->forwardhist->getFirst());
458     }
459 
460     // Get back history next item
backhistGetNext(StringItem * item)461     StringItem* backhistGetNext(StringItem* item)
462     {
463         return(list->backhist->getNext(item));
464     }
465 
466     // Get forward history next item
forwardhistGetNext(StringItem * item)467     StringItem* forwardhistGetNext(StringItem* item)
468     {
469         return(list->forwardhist->getNext(item));
470     }
471 
472     // Get back history string from item
backhistGetString(StringItem * item)473     FXString backhistGetString(StringItem* item)
474     {
475         return(list->backhist->getString(item));
476     }
477 
478     // Get forward history string from item
forwardhistGetString(StringItem * item)479     FXString forwardhistGetString(StringItem* item)
480     {
481         return(list->forwardhist->getString(item));
482     }
483 
484     // Remove back history first item
backhistRemoveFirstItem(void)485     void backhistRemoveFirstItem(void)
486     {
487         list->backhist->removeFirstItem();
488     }
489 
490     // Remove forward history first item
forwardhistRemoveFirstItem(void)491     void forwardhistRemoveFirstItem(void)
492     {
493         list->forwardhist->removeFirstItem();
494     }
495 
496     // Insert back history first item
backhistInsertFirstItem(FXString item)497     void backhistInsertFirstItem(FXString item)
498     {
499         list->backhist->insertFirstItem(item);
500     }
501 
502     // Insert forward history first item
forwardhistInsertFirstItem(FXString item)503     void forwardhistInsertFirstItem(FXString item)
504     {
505         list->forwardhist->insertFirstItem(item);
506     }
507 
508     // Get back history number of items
backhistGetNumItems(void)509     int backhistGetNumItems(void)
510     {
511         if (list->backhist)
512         {
513             return(list->backhist->getNumItems());
514         }
515         else
516         {
517             return(0);
518         }
519     }
520 
521     // Get forward history number of items
forwardhistGetNumItems(void)522     int forwardhistGetNumItems(void)
523     {
524         if (list->forwardhist)
525         {
526             return(list->forwardhist->getNumItems());
527         }
528         else
529         {
530             return(0);
531         }
532     }
533 
534     // Remove all back history items
backhistRemoveAllItems(void)535     void backhistRemoveAllItems(void)
536     {
537         list->backhist->removeAllItems();
538     }
539 
540     // Remove all forward history items
forwardhistRemoveAllItems(void)541     void forwardhistRemoveAllItems(void)
542     {
543         list->forwardhist->removeAllItems();
544     }
545 
546     // Remove all back history items before item
backhistRemoveAllItemsBefore(StringItem * item)547     void backhistRemoveAllItemsBefore(StringItem* item)
548     {
549         list->backhist->removeAllItemsBefore(item);
550     }
551 
552     // Remove all forward history items before item
forwardhistRemoveAllItemsBefore(StringItem * item)553     void forwardhistRemoveAllItemsBefore(StringItem* item)
554     {
555         list->forwardhist->removeAllItemsBefore(item);
556     }
557 
558     // Get back history item at position pos
backhistGetItemAtPos(int pos)559     StringItem* backhistGetItemAtPos(int pos)
560     {
561         return(list->backhist->getItemAtPos(pos));
562     }
563 
564     // Get forward history item at position pos
forwardhistGetItemAtPos(int pos)565     StringItem* forwardhistGetItemAtPos(int pos)
566     {
567         return(list->forwardhist->getItemAtPos(pos));
568     }
569 
570     // Show panel separator
showPanelSeparator(void)571     void showPanelSeparator(void)
572     {
573         panelsep->setSeparatorStyle(SEPARATOR_GROOVE);
574     }
575 
576     // Hide panel separator
hidePanelSeparator(void)577     void hidePanelSeparator(void)
578     {
579         panelsep->setSeparatorStyle(SEPARATOR_NONE);
580     }
581 };
582 #endif
583