1 #ifndef DIRPANEL_H
2 #define DIRPANEL_H
3 #include "DirList.h"
4 #include "Properties.h"
5 #include "InputDialog.h"
6 #include "ArchInputDialog.h"
7 #include "BrowseInputDialog.h"
8 
9 
10 #include <sys/types.h>
11 
12 
13 
14 class DirPanel : public FXVerticalFrame
15 {
16     FXDECLARE(DirPanel)
17 protected:
18     DirList*           list;
19     FXPacker*          statusbar;
20     FXLabel*           status;
21     FXButton*          activeicon;
22     FXString           trashlocation;
23     FXString           trashfileslocation;
24     FXString           trashinfolocation;
25     FXString           startlocation;
26     FXDragType         urilistType;      // Standard uri-list type
27     FXDragType         xfelistType;      // Xfe, Gnome and XFCE list type
28     FXDragType         kdelistType;      // KDE list type
29     FXDragType         utf8Type;         // UTF-8 text type
30     FXbool             clipboard_locked; // Clipboard locked to prevent changes when viewing it
31     InputDialog*       newdirdialog;
32     ArchInputDialog*   archdialog;
33     BrowseInputDialog* operationdialog;
34     InputDialog*       operationdialogrename;
35     FXbool             fromPaste;
36     FXWindow*          focuswindow;
37     FXbool             ctrlflag;            // Flag to select the right click control menu
38     TextLabel*         paneltitle;          // Panel title
39     FXbool             isactive;            // Flag to indicate is panel has keyboard focus
40     FXbool             stopListRefresh;     // To stop refreshing in some cases
41     time_t             curr_mtime;          // Current directory mtime
42     FXString           curr_dirpath;        // Current directory path
43     FXbool             allowDirsizeRefresh; // Allow or avoid directory size refresh
44 
45 
46 public:
47     DirPanel(FXWindow* owner, FXComposite* p, FXColor listbackcolor = FXRGB(255, 255, 255), FXColor listforecolor = FXRGB(0, 0, 0),
48              FXbool smoothscroll = true, FXuint opts = 0, int x = 0, int y = 0, int w = 0, int h = 0);
DirPanel()49     DirPanel() : list(NULL), statusbar(NULL), status(NULL), activeicon(NULL), urilistType(0), xfelistType(0), kdelistType(0),
50                  utf8Type(0), clipboard_locked(false), newdirdialog(NULL), archdialog(NULL), operationdialog(NULL), operationdialogrename(NULL),
51                  fromPaste(false), focuswindow(NULL), ctrlflag(false), paneltitle(NULL), isactive(false), stopListRefresh(false), curr_mtime(0),
52                  allowDirsizeRefresh(false)
53     {}
54     virtual void create();
55 
56     ~DirPanel();
57     enum
58     {
59         ID_FILELIST=FXVerticalFrame::ID_LAST,
60         ID_STOP_LIST_REFRESH_TIMER,
61         ID_EXPANDTREE,
62         ID_TOGGLE_HIDDEN,
63         ID_COLLAPSEDIR,
64         ID_COLLAPSETREE,
65         ID_PROPERTIES,
66         ID_ARCHIVE,
67         ID_DIR_COPY,
68         ID_DIR_CUT,
69         ID_DIR_COPYTO,
70         ID_DIR_MOVETO,
71         ID_DIR_RENAME,
72         ID_DIR_SYMLINK,
73         ID_DIR_DELETE,
74         ID_DIR_TRASH,
75         ID_DIR_RESTORE,
76         ID_NEW_DIR,
77         ID_XTERM,
78         ID_COPY_CLIPBOARD,
79         ID_CUT_CLIPBOARD,
80         ID_ADDCOPY_CLIPBOARD,
81         ID_ADDCUT_CLIPBOARD,
82         ID_PASTE_CLIPBOARD,
83         ID_TOGGLE_TREE,
84         ID_TITLE,
85         ID_DIRSIZE_REFRESH,
86         ID_POPUP_MENU,
87 #if defined(linux)
88         ID_MOUNT,
89         ID_UMOUNT,
90 #endif
91         ID_LAST,
92     };
93     long exploreUp(DirItem* item, const DirItem* rootitem, const int task);
94     long exploreDown(DirItem* item, const DirItem* rootitem, const int task);
95 
96 public:
97     long onClipboardGained(FXObject*, FXSelector, void*);
98     long onClipboardLost(FXObject*, FXSelector, void*);
99     long onClipboardRequest(FXObject*, FXSelector, void*);
100     long onCmdToggleHidden(FXObject*, FXSelector, void*);
101     long onUpdToggleHidden(FXObject* sender, FXSelector, void*);
102     long onCmdPopupMenu(FXObject*, FXSelector, void*);
103     long onExpandTree(FXObject*, FXSelector, void*);
104     long onCollapseTree(FXObject*, FXSelector, void*);
105     long onCmdProperties(FXObject*, FXSelector, void*);
106     long onCmdAddToArch(FXObject*, FXSelector, void*);
107     long onCmdDirMan(FXObject*, FXSelector, void*);
108     long onCmdDirDelete(FXObject*, FXSelector, void*);
109     long onCmdDirTrash(FXObject*, FXSelector, void*);
110     long onCmdDirRestore(FXObject*, FXSelector, void*);
111     long onCmdNewDir(FXObject*, FXSelector, void*);
112     long onCmdXTerm(FXObject*, FXSelector, void*);
113     long onCmdCopyCut(FXObject*, FXSelector, void*);
114     long onCmdPaste(FXObject*, FXSelector, void*);
115     long onUpdPaste(FXObject*, FXSelector, void*);
116     long onCmdDirectory(FXObject*, FXSelector, void*);
117     long onCmdToggleTree(FXObject*, FXSelector sel, void*);
118 
119     long onCmdDirsizeRefresh(FXObject*, FXSelector, void*);
120     long onUpdToggleTree(FXObject*, FXSelector, void*);
121     long onUpdMount(FXObject*, FXSelector, void*);
122     long onUpdUnmount(FXObject*, FXSelector, void*);
123     long onUpdMenu(FXObject*, FXSelector, void*);
124     long onUpdDirTrash(FXObject*, FXSelector, void*);
125     long onUpdDirRestore(FXObject*, FXSelector, void*);
126     long onUpdDirDelete(FXObject*, FXSelector, void*);
127     long onUpdTitle(FXObject*, FXSelector, void*);
128     long onUpdStatus(FXObject*, FXSelector, void*);
129     long onExpand(FXObject*, FXSelector, void*);
130     long onKeyPress(FXObject*, FXSelector, void*);
131     long onCmdFocus(FXObject*, FXSelector, void*);
132     long onCmdStopListRefreshTimer(FXObject*, FXSelector, void*);
133     long onUpdDirsizeRefresh(FXObject*, FXSelector, void*);
134 #if defined(linux)
135     long onCmdMount(FXObject*, FXSelector, void*);
136 #endif
137 public:
138 
139     void setActive();
140     void setInactive();
141 
142     // Toggle dirsize refresh and force refresh if flag is true
143     void setAllowDirsizeRefresh(FXbool flag);
144 
145     // Change sort function
setSortFunc(FXTreeListSortFunc func)146     void setSortFunc(FXTreeListSortFunc func)
147     {
148         list->setSortFunc(func);
149     }
150 
151     // Return sort function
getSortFunc()152     FXTreeListSortFunc getSortFunc() const
153     {
154         return(list->getSortFunc());
155     }
156 
157     // Change default cursor
setDefaultCursor(FXCursor * cur)158     void setDefaultCursor(FXCursor* cur)
159     {
160         list->setDefaultCursor(cur);
161     }
162 
163     // Set current directory
164     void setDirectory(const FXString& pathname, FXbool notify = false)
165     {
166         list->setDirectory(pathname, notify);
167     }
168 
169     // Get current directory
getDirectory(void)170     FXString getDirectory(void) const
171     {
172         return(list->getDirectory());
173     }
174 
175     // Get current item
getCurrentItem(void)176     DirItem* getCurrentItem(void) const
177     {
178         return((DirItem*)list->getCurrentItem());
179     }
180 
181     // Get current path name
getItemPathname(const DirItem * item)182     FXString getItemPathname(const DirItem* item) const
183     {
184         return(list->getItemPathname((TreeItem*)item));
185     }
186 
187     // Hidden files shown?
shownHiddenFiles()188     FXbool shownHiddenFiles() const
189     {
190         return(list->shownHiddenFiles());
191     }
192 
193     // Show hidden files
showHiddenFiles(FXbool shown)194     void showHiddenFiles(FXbool shown)
195     {
196         list->showHiddenFiles(shown);
197     }
198 
199     // Set focus on list
setFocusOnList(void)200     void setFocusOnList(void)
201     {
202         list->setFocus();
203     }
204 
205     // Is panel active?
isActive(void)206     FXbool isActive(void)
207     {
208         return(isactive);
209     }
210 
211     // Force dir panel refresh
forceRefresh(void)212     void forceRefresh(void)
213     {
214         list->onCmdRefresh(0, 0, 0);
215     }
216 
getList(void)217     DirList* getList(void)
218     {
219         return(list);
220     }
221 
222 #if defined(linux)
223     // Force devices refresh
forceDevicesRefresh(void)224     void forceDevicesRefresh(void)
225     {
226         list->onMtdevicesRefresh(0, 0, 0);
227         list->onUpdevicesRefresh(0, 0, 0);
228     }
229 
230 #endif
231 
232     // Toggle status bar
toggleStatusbar(void)233     void toggleStatusbar(void)
234     {
235         statusbar->handle(this, FXSEL(SEL_COMMAND, FXWindow::ID_TOGGLESHOWN), NULL);
236     }
237 };
238 #endif
239