13
#include <FXPNGIcon.h>
20
#include "startupnotification.h"
24
#include "Preferences.h"
25
#include "FilePanel.h"
26
#include "InputDialog.h"
27
#include "HistInputDialog.h"
29
#include "MessageBox.h"
30
#include "TextWindow.h"
31
#include "CommandWindow.h"
32
#include "Bookmarks.h"
33
#include "FileDialog.h"
35
#include "DirHistBox.h"
36
#include "XFileExplorer.h"
39
// Size of the location bar
40
#define LOCATION_BAR_LENGTH 60
41
#define LOCATION_BAR_HEIGHT 6
45
FXString clipboard="";
46
FXchar OpenHistory[OPEN_HIST_SIZE][MAX_COMMAND_SIZE];
48
FXchar FilterHistory[FILTER_HIST_SIZE][MAX_PATTERN_SIZE];
51
FXbool allowPopupScroll=FALSE;
54
FXbool relative_resize;
55
//FXbool save_win_pos;
58
// External global variables
60
extern FXint panel_mode;
61
extern FXString homedir;
62
extern FXString xdgdatahome;
63
extern FXString xdgconfighome;
67
extern FXStringDict* fsdevices;
68
extern FXStringDict* updevices;
73
// Helper function to draw a toolbar separator
74
void toolbarSeparator(FXToolBar* tb)
78
new FXFrame(tb,LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT,0,0,SEP_SPACE);
79
new FXVerticalSeparator(tb,LAYOUT_SIDE_TOP|LAYOUT_CENTER_Y|SEPARATOR_GROOVE|LAYOUT_FIX_HEIGHT,0,0,0,SEP_HEIGHT);
80
new FXFrame(tb,LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT,0,0,SEP_SPACE);
86
FXDEFMAP(XFileExplorer) XFileExplorerMap[]=
88
FXMAPFUNC(SEL_COMMAND,XFileExplorer::ID_TOGGLE_STATUS,XFileExplorer::onCmdToggleStatus),
89
FXMAPFUNC(SEL_COMMAND,XFileExplorer::ID_RUN,XFileExplorer::onCmdRun),
90
FXMAPFUNC(SEL_COMMAND,XFileExplorer::ID_SU,XFileExplorer::onCmdSu),
91
FXMAPFUNC(SEL_COMMAND,XFileExplorer::ID_FILE_COPY,XFileExplorer::onCmdFileCopyClp),
92
FXMAPFUNC(SEL_COMMAND,XFileExplorer::ID_FILE_CUT,XFileExplorer::onCmdFileCutClp),
93
FXMAPFUNC(SEL_COMMAND,XFileExplorer::ID_FILE_PASTE,XFileExplorer::onCmdFilePasteClp),
94
FXMAPFUNC(SEL_COMMAND,XFileExplorer::ID_FILE_RENAME,XFileExplorer::onCmdFileRename),
95
FXMAPFUNC(SEL_COMMAND,XFileExplorer::ID_FILE_COPYTO,XFileExplorer::onCmdFileCopyto),
96
FXMAPFUNC(SEL_COMMAND,XFileExplorer::ID_FILE_MOVETO,XFileExplorer::onCmdFileMoveto),
97
FXMAPFUNC(SEL_COMMAND,XFileExplorer::ID_FILE_SYMLINK,XFileExplorer::onCmdFileSymlink),
98
FXMAPFUNC(SEL_COMMAND,XFileExplorer::ID_FILE_PROPERTIES,XFileExplorer::onCmdFileProperties),
99
FXMAPFUNC(SEL_COMMAND,XFileExplorer::ID_FILE_DELETE,XFileExplorer::onCmdFileDelete),
100
FXMAPFUNC(SEL_COMMAND,XFileExplorer::ID_FILE_TRASH,XFileExplorer::onCmdFileTrash),
101
FXMAPFUNC(SEL_COMMAND,XFileExplorer::ID_FILE_RESTORE,XFileExplorer::onCmdFileRestore),
102
FXMAPFUNC(SEL_COMMAND,XFileExplorer::ID_QUIT,XFileExplorer::onQuit),
103
FXMAPFUNC(SEL_COMMAND,XFileExplorer::ID_HELP,XFileExplorer::onCmdHelp),
104
FXMAPFUNC(SEL_COMMAND,XFileExplorer::ID_ABOUT,XFileExplorer::onCmdAbout),
105
FXMAPFUNC(SEL_COMMAND,XFileExplorer::ID_FILE_ASSOC,XFileExplorer::onCmdFileAssoc),
106
FXMAPFUNC(SEL_COMMAND,XFileExplorer::ID_REFRESH,XFileExplorer::onCmdRefresh),
107
FXMAPFUNC(SEL_COMMAND,XFileExplorer::ID_EMPTY_TRASH,XFileExplorer::onCmdEmptyTrash),
108
FXMAPFUNC(SEL_COMMAND,XFileExplorer::ID_TRASH_SIZE,XFileExplorer::onCmdTrashSize),
109
FXMAPFUNC(SEL_COMMAND,XFileExplorer::ID_XTERM,XFileExplorer::onCmdXTerm),
110
FXMAPFUNC(SEL_COMMAND,XFileExplorer::ID_CLEAR_LOCATION,XFileExplorer::onCmdClearLocation),
111
FXMAPFUNC(SEL_COMMAND,XFileExplorer::ID_GOTO_LOCATION,XFileExplorer::onCmdGotoLocation),
112
FXMAPFUNC(SEL_COMMAND,XFileExplorer::ID_PREFS,XFileExplorer::onCmdPrefs),
113
FXMAPFUNC(SEL_COMMAND,XFileExplorer::ID_SHOW_ONE_PANEL,XFileExplorer::onCmdShowPanels),
114
FXMAPFUNC(SEL_COMMAND,XFileExplorer::ID_SHOW_TWO_PANELS,XFileExplorer::onCmdShowPanels),
115
FXMAPFUNC(SEL_COMMAND,XFileExplorer::ID_SHOW_TREE_PANEL,XFileExplorer::onCmdShowPanels),
116
FXMAPFUNC(SEL_COMMAND,XFileExplorer::ID_SHOW_TREE_TWO_PANELS,XFileExplorer::onCmdShowPanels),
117
FXMAPFUNC(SEL_COMMAND,XFileExplorer::ID_SYNCHRONIZE_PANELS,XFileExplorer::onCmdSynchronizePanels),
118
FXMAPFUNC(SEL_COMMAND,XFileExplorer::ID_SWITCH_PANELS,XFileExplorer::onCmdSwitchPanels),
119
FXMAPFUNC(SEL_COMMAND,XFileExplorer::ID_RESTART,XFileExplorer::onCmdRestart),
120
FXMAPFUNC(SEL_COMMAND,XFileExplorer::ID_NEW_WIN,XFileExplorer::onCmdNewWindow),
121
FXMAPFUNC(SEL_COMMAND,XFileExplorer::ID_BOOKMARK,XFileExplorer::onCmdBookmark),
122
FXMAPFUNC(SEL_COMMAND,XFileExplorer::ID_DIR_UP,XFileExplorer::onCmdDirUp),
123
FXMAPFUNC(SEL_COMMAND,XFileExplorer::ID_ADD_BOOKMARK,XFileExplorer::onCmdBookmark),
124
FXMAPFUNC(SEL_COMMAND,XFileExplorer::ID_DIR_BACK,XFileExplorer::onCmdDirBack),
125
FXMAPFUNC(SEL_COMMAND,XFileExplorer::ID_DIR_FORWARD,XFileExplorer::onCmdDirForward),
126
FXMAPFUNC(SEL_COMMAND,XFileExplorer::ID_DIR_BACK_HIST,XFileExplorer::onCmdDirBackHist),
127
FXMAPFUNC(SEL_COMMAND,XFileExplorer::ID_DIR_FORWARD_HIST,XFileExplorer::onCmdDirForwardHist),
128
FXMAPFUNC(SEL_KEYPRESS,0,XFileExplorer::onKeyPress),
129
FXMAPFUNC(SEL_SIGNAL,XFileExplorer::ID_HARVEST,XFileExplorer::onSigHarvest),
130
FXMAPFUNC(SEL_CLOSE,0,XFileExplorer::onQuit),
131
FXMAPFUNC(SEL_UPDATE,XFileExplorer::ID_DIR_FORWARD_HIST,XFileExplorer::onUpdDirForwardHist),
132
FXMAPFUNC(SEL_UPDATE,XFileExplorer::ID_DIR_BACK_HIST,XFileExplorer::onUpdDirBackHist),
133
FXMAPFUNC(SEL_UPDATE,XFileExplorer::ID_DIR_BACK,XFileExplorer::onUpdDirBack),
134
FXMAPFUNC(SEL_UPDATE,XFileExplorer::ID_DIR_FORWARD,XFileExplorer::onUpdDirForward),
135
FXMAPFUNC(SEL_UPDATE,XFileExplorer::ID_TOGGLE_STATUS,XFileExplorer::onUpdToggleStatus),
136
FXMAPFUNC(SEL_UPDATE,XFileExplorer::ID_SHOW_ONE_PANEL,XFileExplorer::onUpdShowPanels),
137
FXMAPFUNC(SEL_UPDATE,XFileExplorer::ID_SHOW_TWO_PANELS,XFileExplorer::onUpdShowPanels),
138
FXMAPFUNC(SEL_UPDATE,XFileExplorer::ID_SHOW_TREE_PANEL,XFileExplorer::onUpdShowPanels),
139
FXMAPFUNC(SEL_UPDATE,XFileExplorer::ID_SHOW_TREE_TWO_PANELS,XFileExplorer::onUpdShowPanels),
140
FXMAPFUNC(SEL_UPDATE,XFileExplorer::ID_GOTO_LOCATION,XFileExplorer::onUpdFileLocation),
141
FXMAPFUNC(SEL_UPDATE,XFileExplorer::ID_EMPTY_TRASH,XFileExplorer::onUpdEmptyTrash),
142
FXMAPFUNC(SEL_UPDATE,XFileExplorer::ID_EMPTY_TRASH,XFileExplorer::onUpdTrashSize),
143
FXMAPFUNC(SEL_UPDATE,XFileExplorer::ID_FILE_DELETE,XFileExplorer::onUpdFileDelete),
144
FXMAPFUNC(SEL_UPDATE,XFileExplorer::ID_FILE_TRASH,XFileExplorer::onUpdFileTrash),
145
FXMAPFUNC(SEL_UPDATE,XFileExplorer::ID_FILE_RESTORE,XFileExplorer::onUpdFileRestore),
146
FXMAPFUNC(SEL_UPDATE,XFileExplorer::ID_FILE_RENAME,XFileExplorer::onUpdFileRename),
147
FXMAPFUNC(SEL_UPDATE,XFileExplorer::ID_FILE_PROPERTIES,XFileExplorer::onUpdFileMan),
148
FXMAPFUNC(SEL_UPDATE,XFileExplorer::ID_FILE_COPYTO,XFileExplorer::onUpdFileMan),
149
FXMAPFUNC(SEL_UPDATE,XFileExplorer::ID_FILE_MOVETO,XFileExplorer::onUpdFileMan),
150
FXMAPFUNC(SEL_UPDATE,XFileExplorer::ID_FILE_SYMLINK,XFileExplorer::onUpdFileMan),
151
FXMAPFUNC(SEL_UPDATE,XFileExplorer::ID_FILE_COPY,XFileExplorer::onUpdFileMan),
152
FXMAPFUNC(SEL_UPDATE,XFileExplorer::ID_FILE_CUT,XFileExplorer::onUpdFileMan),
153
FXMAPFUNC(SEL_UPDATE,XFileExplorer::ID_FILE_PASTE,XFileExplorer::onUpdFilePaste),
154
FXMAPFUNC(SEL_UPDATE,XFileExplorer::ID_SYNCHRONIZE_PANELS,XFileExplorer::onUpdSynchronizePanels),
155
FXMAPFUNC(SEL_UPDATE,XFileExplorer::ID_SWITCH_PANELS,XFileExplorer::onUpdSwitchPanels),
156
FXMAPFUNC(SEL_UPDATE,XFileExplorer::ID_SU,XFileExplorer::onUpdSu),
160
// Object implementation
161
FXIMPLEMENT(XFileExplorer,FXMainWindow,XFileExplorerMap,ARRAYNUMBER(XFileExplorerMap))
165
XFileExplorer::XFileExplorer(FXApp *app, const FXbool iconic, const FXbool maximized, const FXString startdir, const char *title,FXIcon *bigicon,FXIcon *miniicon):
166
FXMainWindow(app,title,bigicon,miniicon,DECOR_ALL)
168
bookmarks=new Bookmarks("bookmarks",this,ID_BOOKMARK);
171
menubar=new FXMenuBar(this,LAYOUT_SIDE_TOP|LAYOUT_FILL_X|FRAME_RAISED);
173
// Sites where to dock (for toolbars)
174
FXDockSite* topdock=new FXDockSite(this,LAYOUT_SIDE_TOP|LAYOUT_FILL_X);
175
new FXDockSite(this,LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X);
176
new FXDockSite(this,LAYOUT_SIDE_LEFT|LAYOUT_FILL_Y);
177
new FXDockSite(this,LAYOUT_SIDE_RIGHT|LAYOUT_FILL_Y);
180
FXToolBarShell* dragshell1=new FXToolBarShell(this,FRAME_RAISED);
181
generaltoolbar=new FXToolBar(topdock,dragshell1,LAYOUT_DOCK_NEXT|LAYOUT_SIDE_TOP|FRAME_RAISED|LAYOUT_FILL_Y);
182
new FXToolBarGrip(generaltoolbar,generaltoolbar,FXToolBar::ID_TOOLBARGRIP,TOOLBARGRIP_DOUBLE);
185
FXToolBarShell* dragshell2=new FXToolBarShell(this,FRAME_RAISED);
186
toolstoolbar=new FXToolBar(topdock,dragshell2,LAYOUT_DOCK_SAME|LAYOUT_SIDE_TOP|FRAME_RAISED|LAYOUT_FILL_Y);
187
new FXToolBarGrip(toolstoolbar,toolstoolbar,FXToolBar::ID_TOOLBARGRIP,TOOLBARGRIP_DOUBLE);
190
FXToolBarShell* dragshell3=new FXToolBarShell(this,FRAME_RAISED);
191
paneltoolbar=new FXToolBar(topdock,dragshell3,LAYOUT_DOCK_SAME|LAYOUT_SIDE_TOP|FRAME_RAISED|LAYOUT_FILL_X|LAYOUT_FILL_Y);
192
new FXToolBarGrip(paneltoolbar,paneltoolbar,FXToolBar::ID_TOOLBARGRIP,TOOLBARGRIP_DOUBLE);
195
FXToolBarShell* dragshell4=new FXToolBarShell(this,FRAME_RAISED);
196
locationbar=new FXToolBar(topdock,dragshell4,LAYOUT_DOCK_NEXT|LAYOUT_SIDE_TOP|FRAME_RAISED|LAYOUT_FILL_X|LAYOUT_FILL_Y);
197
new FXToolBarGrip(locationbar,locationbar,FXToolBar::ID_TOOLBARGRIP,TOOLBARGRIP_DOUBLE);
200
FXHorizontalFrame* splitterbox=new FXHorizontalFrame(this,LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_NONE,0,0,0,0, 0,0,0,0, 0,0);
201
FXSplitter* mainsplit=new FXSplitter(splitterbox,LAYOUT_SIDE_TOP|LAYOUT_FILL_X|LAYOUT_FILL_Y|SPLITTER_TRACKING|FRAME_NONE);
203
// File list background, foreground, highlight, progress bar and attention colors
204
listbackcolor=getApp()->reg().readColorEntry("SETTINGS","listbackcolor",FXRGB(255,255,255));
205
listforecolor=getApp()->reg().readColorEntry("SETTINGS","listforecolor",FXRGB(0,0,0));
206
highlightcolor=getApp()->reg().readColorEntry("SETTINGS","highlightcolor",FXRGB(238,238,238));
207
pbarcolor=getApp()->reg().readColorEntry("SETTINGS","pbarcolor",FXRGB(0,0,255));
208
attentioncolor=getApp()->reg().readColorEntry("SETTINGS","attentioncolor",FXRGB(255,0,0));
211
smoothscroll=getApp()->reg().readUnsignedEntry("SETTINGS","smooth_scroll",TRUE);
213
// Directory panel on the left (with minimum size)
214
dirpanel=new DirPanel(this,mainsplit,listbackcolor,listforecolor,smoothscroll,LAYOUT_SIDE_TOP|LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_NONE,0,0,0,0);
216
// File panels on the right : remembers size of each field
217
lpanel=new FilePanel(this,"LEFT PANEL",mainsplit,dirpanel,
218
getApp()->reg().readUnsignedEntry("LEFT PANEL","name_size",200),
219
getApp()->reg().readUnsignedEntry("LEFT PANEL","size_size",60),
220
getApp()->reg().readUnsignedEntry("LEFT PANEL","type_size",100),
221
getApp()->reg().readUnsignedEntry("LEFT PANEL","ext_size",100),
222
getApp()->reg().readUnsignedEntry("LEFT PANEL","modd_size",150),
223
getApp()->reg().readUnsignedEntry("LEFT PANEL","user_size",50),
224
getApp()->reg().readUnsignedEntry("LEFT PANEL","grou_size",50),
225
getApp()->reg().readUnsignedEntry("LEFT PANEL","attr_size",100),
226
getApp()->reg().readUnsignedEntry("LEFT PANEL","deldate_size",150),
227
getApp()->reg().readUnsignedEntry("LEFT PANEL","origpath_size",200),
228
getApp()->reg().readUnsignedEntry("LEFT PANEL","showthumbnails",0),
229
listbackcolor,listforecolor,attentioncolor,smoothscroll,
230
LAYOUT_SIDE_TOP|LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_NONE,0,0,0,0);
231
rpanel=new FilePanel(this,"RIGHT PANEL",mainsplit,dirpanel,
232
getApp()->reg().readUnsignedEntry("RIGHT PANEL","name_size",200),
233
getApp()->reg().readUnsignedEntry("RIGHT PANEL","size_size",60),
234
getApp()->reg().readUnsignedEntry("RIGHT PANEL","type_size",100),
235
getApp()->reg().readUnsignedEntry("RIGHT PANEL","ext_size",100),
236
getApp()->reg().readUnsignedEntry("RIGHT PANEL","modd_size",150),
237
getApp()->reg().readUnsignedEntry("RIGHT PANEL","user_size",50),
238
getApp()->reg().readUnsignedEntry("RIGHT PANEL","grou_size",50),
239
getApp()->reg().readUnsignedEntry("RIGHT PANEL","attr_size",100),
240
getApp()->reg().readUnsignedEntry("RIGHT PANEL","deldate_size",150),
241
getApp()->reg().readUnsignedEntry("RIGHT PANEL","origpath_size",200),
242
getApp()->reg().readUnsignedEntry("RIGHT PANEL","showthumbnails",0),
243
listbackcolor,listforecolor,attentioncolor,smoothscroll,
244
LAYOUT_SIDE_TOP|LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_NONE,0,0,0,0);
246
lpanel->Next(rpanel);
247
rpanel->Next(lpanel);
253
sort_func=getApp()->reg().readStringEntry("DIR PANEL","sort_func","ascendingCase");
254
if (sort_func=="ascendingCase")
255
dirpanel->setSortFunc(DirList::ascendingCase);
256
else if (sort_func=="descendingCase")
257
dirpanel->setSortFunc(DirList::descendingCase);
258
else if (sort_func=="ascending")
259
dirpanel->setSortFunc(DirList::ascending);
260
else if (sort_func=="descending")
261
dirpanel->setSortFunc(DirList::descending);
263
// Left panel options
264
sort_func=getApp()->reg().readStringEntry("LEFT PANEL","sort_func","ascendingCase");
265
if (sort_func=="ascendingCase")
266
lpanel->setSortFunc(FileList::ascendingCase);
267
else if (sort_func=="ascendingCaseMix")
268
lpanel->setSortFunc(FileList::ascendingCaseMix);
269
else if (sort_func=="descendingCase")
270
lpanel->setSortFunc(FileList::descendingCase);
271
else if (sort_func=="descendingCaseMix")
272
lpanel->setSortFunc(FileList::descendingCaseMix);
273
else if (sort_func=="ascending")
274
lpanel->setSortFunc(FileList::ascending);
275
else if (sort_func=="ascendingMix")
276
lpanel->setSortFunc(FileList::ascendingMix);
277
else if (sort_func=="descending")
278
lpanel->setSortFunc(FileList::descending);
279
else if (sort_func=="descendingMix")
280
lpanel->setSortFunc(FileList::descendingMix);
281
else if (sort_func=="ascendingSize")
282
lpanel->setSortFunc(FileList::ascendingSize);
283
else if (sort_func=="ascendingSizeMix")
284
lpanel->setSortFunc(FileList::ascendingSizeMix);
285
else if (sort_func=="descendingSize")
286
lpanel->setSortFunc(FileList::descendingSize);
287
else if (sort_func=="descendingSizeMix")
288
lpanel->setSortFunc(FileList::descendingSizeMix);
289
else if (sort_func=="ascendingType")
290
lpanel->setSortFunc(FileList::ascendingType);
291
else if (sort_func=="ascendingTypeMix")
292
lpanel->setSortFunc(FileList::ascendingTypeMix);
293
else if (sort_func=="descendingType")
294
lpanel->setSortFunc(FileList::descendingType);
295
else if (sort_func=="descendingTypeMix")
296
lpanel->setSortFunc(FileList::descendingTypeMix);
297
else if (sort_func=="ascendingExt")
298
lpanel->setSortFunc(FileList::ascendingExt);
299
else if (sort_func=="ascendingExtMix")
300
lpanel->setSortFunc(FileList::ascendingExtMix);
301
else if (sort_func=="descendingExt")
302
lpanel->setSortFunc(FileList::descendingExt);
303
else if (sort_func=="descendingExtMix")
304
lpanel->setSortFunc(FileList::descendingExtMix);
305
else if (sort_func=="ascendingTime")
306
lpanel->setSortFunc(FileList::ascendingTime);
307
else if (sort_func=="ascendingTimeMix")
308
lpanel->setSortFunc(FileList::ascendingTimeMix);
309
else if (sort_func=="descendingTime")
310
lpanel->setSortFunc(FileList::descendingTime);
311
else if (sort_func=="descendingTimeMix")
312
lpanel->setSortFunc(FileList::descendingTimeMix);
313
else if (sort_func=="ascendingUser")
314
lpanel->setSortFunc(FileList::ascendingUser);
315
else if (sort_func=="ascendingUserMix")
316
lpanel->setSortFunc(FileList::ascendingUserMix);
317
else if (sort_func=="descendingUser")
318
lpanel->setSortFunc(FileList::descendingUser);
319
else if (sort_func=="descendingUserMix")
320
lpanel->setSortFunc(FileList::descendingUserMix);
321
else if (sort_func=="ascendingGroup")
322
lpanel->setSortFunc(FileList::ascendingGroup);
323
else if (sort_func=="ascendingGroupMix")
324
lpanel->setSortFunc(FileList::ascendingGroupMix);
325
else if (sort_func=="descendingGroup")
326
lpanel->setSortFunc(FileList::descendingGroup);
327
else if (sort_func=="descendingGroupMix")
328
lpanel->setSortFunc(FileList::descendingGroupMix);
329
else if (sort_func=="ascendingPerm")
330
lpanel->setSortFunc(FileList::ascendingPerm);
331
else if (sort_func=="ascendingPermMix")
332
lpanel->setSortFunc(FileList::ascendingPermMix);
333
else if (sort_func=="descendingPerm")
334
lpanel->setSortFunc(FileList::descendingPerm);
335
else if (sort_func=="descendingPermMix")
336
lpanel->setSortFunc(FileList::descendingPermMix);
337
FXuint ignore_case=getApp()->reg().readUnsignedEntry("LEFT PANEL","ignore_case",1);
338
lpanel->setIgnoreCase(ignore_case);
339
FXuint dirs_first=getApp()->reg().readUnsignedEntry("LEFT PANEL","dirs_first",1);
340
lpanel->setDirsFirst(dirs_first);
342
// Right panel options
343
sort_func=getApp()->reg().readStringEntry("RIGHT PANEL","sort_func","ascendingCase");
344
if (sort_func=="ascendingCase")
345
rpanel->setSortFunc(FileList::ascendingCase);
346
else if (sort_func=="ascendingCaseMix")
347
rpanel->setSortFunc(FileList::ascendingCaseMix);
348
else if (sort_func=="descendingCase")
349
rpanel->setSortFunc(FileList::descendingCase);
350
else if (sort_func=="descendingCaseMix")
351
rpanel->setSortFunc(FileList::descendingCaseMix);
352
else if (sort_func=="ascending")
353
rpanel->setSortFunc(FileList::ascending);
354
else if (sort_func=="ascendingMix")
355
rpanel->setSortFunc(FileList::ascendingMix);
356
else if (sort_func=="descending")
357
rpanel->setSortFunc(FileList::descending);
358
else if (sort_func=="descendingMix")
359
rpanel->setSortFunc(FileList::descendingMix);
360
else if (sort_func=="ascendingSize")
361
rpanel->setSortFunc(FileList::ascendingSize);
362
else if (sort_func=="ascendingSizeMix")
363
rpanel->setSortFunc(FileList::ascendingSizeMix);
364
else if (sort_func=="descendingSize")
365
rpanel->setSortFunc(FileList::descendingSize);
366
else if (sort_func=="descendingSizeMix")
367
rpanel->setSortFunc(FileList::descendingSizeMix);
368
else if (sort_func=="ascendingType")
369
rpanel->setSortFunc(FileList::ascendingType);
370
else if (sort_func=="ascendingTypeMix")
371
rpanel->setSortFunc(FileList::ascendingTypeMix);
372
else if (sort_func=="descendingType")
373
rpanel->setSortFunc(FileList::descendingType);
374
else if (sort_func=="descendingTypeMix")
375
rpanel->setSortFunc(FileList::descendingTypeMix);
376
else if (sort_func=="ascendingExt")
377
rpanel->setSortFunc(FileList::ascendingExt);
378
else if (sort_func=="ascendingExtMix")
379
rpanel->setSortFunc(FileList::ascendingExtMix);
380
else if (sort_func=="descendingExt")
381
rpanel->setSortFunc(FileList::descendingExt);
382
else if (sort_func=="descendingExtMix")
383
rpanel->setSortFunc(FileList::descendingExtMix);
384
else if (sort_func=="ascendingTime")
385
rpanel->setSortFunc(FileList::ascendingTime);
386
else if (sort_func=="ascendingTimeMix")
387
rpanel->setSortFunc(FileList::ascendingTimeMix);
388
else if (sort_func=="descendingTime")
389
rpanel->setSortFunc(FileList::descendingTime);
390
else if (sort_func=="descendingTimeMix")
391
rpanel->setSortFunc(FileList::descendingTimeMix);
392
else if (sort_func=="ascendingUser")
393
rpanel->setSortFunc(FileList::ascendingUser);
394
else if (sort_func=="ascendingUserMix")
395
rpanel->setSortFunc(FileList::ascendingUserMix);
396
else if (sort_func=="descendingUser")
397
rpanel->setSortFunc(FileList::descendingUser);
398
else if (sort_func=="descendingUserMix")
399
rpanel->setSortFunc(FileList::descendingUserMix);
400
else if (sort_func=="ascendingGroup")
401
rpanel->setSortFunc(FileList::ascendingGroup);
402
else if (sort_func=="ascendingGroupMix")
403
rpanel->setSortFunc(FileList::ascendingGroupMix);
404
else if (sort_func=="descendingGroup")
405
rpanel->setSortFunc(FileList::descendingGroup);
406
else if (sort_func=="descendingGroupMix")
407
rpanel->setSortFunc(FileList::descendingGroupMix);
408
else if (sort_func=="ascendingPerm")
409
rpanel->setSortFunc(FileList::ascendingPerm);
410
else if (sort_func=="ascendingPermMix")
411
rpanel->setSortFunc(FileList::ascendingPermMix);
412
else if (sort_func=="descendingPerm")
413
rpanel->setSortFunc(FileList::descendingPerm);
414
else if (sort_func=="descendingPermMix")
415
rpanel->setSortFunc(FileList::descendingPermMix);
416
ignore_case=getApp()->reg().readUnsignedEntry("RIGHT PANEL","ignore_case",1);
417
rpanel->setIgnoreCase(ignore_case);
418
dirs_first=getApp()->reg().readUnsignedEntry("RIGHT PANEL","dirs_first",1);
419
rpanel->setDirsFirst(dirs_first);
426
key=getApp()->reg().readStringEntry("KEYBINDINGS","go_back","Ctrl-Backspace");
427
btn=new FXButton(generaltoolbar,TAB+_("Go to previous directory")+PARS(key),dirbackicon,this,XFileExplorer::ID_DIR_BACK,BUTTON_TOOLBAR|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT);
428
hotkey=_parseAccel(key);
429
btn->addHotKey(hotkey);
431
btnbackhist=new FXArrowButton(generaltoolbar,this,XFileExplorer::ID_DIR_BACK_HIST,LAYOUT_FILL_Y|FRAME_RAISED|FRAME_THICK|ARROW_DOWN|ARROW_TOOLBAR);
433
key=getApp()->reg().readStringEntry("KEYBINDINGS","go_forward","Shift-Backspace");
434
btn=new FXButton(generaltoolbar,TAB+_("Go to next directory")+PARS(key),dirforwardicon,this,XFileExplorer::ID_DIR_FORWARD,BUTTON_TOOLBAR|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT);
435
hotkey=_parseAccel(key);
436
btn->addHotKey(hotkey);
438
btnforwardhist=new FXArrowButton(generaltoolbar,this,XFileExplorer::ID_DIR_FORWARD_HIST,LAYOUT_FILL_Y|FRAME_RAISED|FRAME_THICK|ARROW_DOWN|ARROW_TOOLBAR);
440
key=getApp()->reg().readStringEntry("KEYBINDINGS","go_up","Backspace");
441
btn=new FXButton(generaltoolbar,TAB+_("Go to parent directory")+PARS(key),dirupicon,this,XFileExplorer::ID_DIR_UP,BUTTON_TOOLBAR|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT);
442
hotkey=_parseAccel(key);
443
btn->addHotKey(hotkey);
445
toolbarSeparator(generaltoolbar);
447
key=getApp()->reg().readStringEntry("KEYBINDINGS","go_home","Ctrl-H");
448
new FXButton(generaltoolbar,TAB+_("Go to home directory")+PARS(key),homeicon,lpanel,FilePanel::ID_GO_HOME,BUTTON_TOOLBAR|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT);
450
key=getApp()->reg().readStringEntry("KEYBINDINGS","refresh","Ctrl-R");
451
new FXButton(generaltoolbar,TAB+_("Refresh panels")+PARS(key),reloadicon,this,XFileExplorer::ID_REFRESH,BUTTON_TOOLBAR|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT);
453
toolbarSeparator(generaltoolbar);
455
key=getApp()->reg().readStringEntry("KEYBINDINGS","new_file","F2");
456
new FXButton(generaltoolbar,TAB+_("Create new file")+PARS(key),newfileicon,lpanel,FilePanel::ID_NEW_FILE,BUTTON_TOOLBAR|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT);
458
key=getApp()->reg().readStringEntry("KEYBINDINGS","new_folder","F7");
459
new FXButton(generaltoolbar,TAB+_("Create new folder")+PARS(key),newfoldericon,lpanel,FilePanel::ID_NEW_DIR,BUTTON_TOOLBAR|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT);
461
key=getApp()->reg().readStringEntry("KEYBINDINGS","new_symlink","Ctrl-J");
462
new FXButton(generaltoolbar,TAB+_("Create new symlink")+PARS(key),newlinkicon,lpanel,FilePanel::ID_NEW_SYMLINK,BUTTON_TOOLBAR|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT);
464
toolbarSeparator(generaltoolbar);
466
key=getApp()->reg().readStringEntry("KEYBINDINGS","copy","Ctrl-C");
467
new FXButton(generaltoolbar,TAB+_("Copy selected files to clipboard")+PARS(key),copy_clpicon,this,XFileExplorer::ID_FILE_COPY,BUTTON_TOOLBAR|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT|ICON_BEFORE_TEXT);
469
key=getApp()->reg().readStringEntry("KEYBINDINGS","cut","Ctrl-X");
470
new FXButton(generaltoolbar,TAB+_("Cut selected files to clipboard")+PARS(key),cut_clpicon,this,XFileExplorer::ID_FILE_CUT,BUTTON_TOOLBAR|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT|ICON_BEFORE_TEXT);
472
key=getApp()->reg().readStringEntry("KEYBINDINGS","paste","Ctrl-V");
473
new FXButton(generaltoolbar,TAB+_("Paste from clipboard")+PARS(key),paste_clpicon,this,XFileExplorer::ID_FILE_PASTE,BUTTON_TOOLBAR|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT|ICON_BEFORE_TEXT);
475
key=getApp()->reg().readStringEntry("KEYBINDINGS","properties","F9");
476
new FXButton(generaltoolbar,TAB+_("Show properties of selected files")+PARS(key),attribicon,this,XFileExplorer::ID_FILE_PROPERTIES,BUTTON_TOOLBAR|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT|ICON_BEFORE_TEXT);
478
toolbarSeparator(generaltoolbar);
480
key=getApp()->reg().readStringEntry("KEYBINDINGS","move_to_trash","Del");
481
new FXButton(generaltoolbar,TAB+_("Move selected files to trash can")+PARS(key),filedeleteicon,this,XFileExplorer::ID_FILE_TRASH,BUTTON_TOOLBAR|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT|ICON_BEFORE_TEXT);
483
key=getApp()->reg().readStringEntry("KEYBINDINGS","restore_from_trash","Alt-Del");
484
new FXButton(generaltoolbar,TAB+_("Restore selected files from trash can")+PARS(key),filerestoreicon,this,XFileExplorer::ID_FILE_RESTORE,BUTTON_TOOLBAR|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT|ICON_BEFORE_TEXT);
486
key=getApp()->reg().readStringEntry("KEYBINDINGS","delete","Shift-Del");
487
new FXButton(generaltoolbar,TAB+_("Delete selected files")+PARS(key),filedelete_permicon,this,XFileExplorer::ID_FILE_DELETE,BUTTON_TOOLBAR|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT|ICON_BEFORE_TEXT);
489
key=getApp()->reg().readStringEntry("KEYBINDINGS","new_window","F3");
490
new FXButton(toolstoolbar,TAB+_("Launch Xfe")+PARS(key),minixfeicon,this,XFileExplorer::ID_NEW_WIN,BUTTON_TOOLBAR|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT);
492
key=getApp()->reg().readStringEntry("KEYBINDINGS","new_root_window","Shift-F3");
493
new FXButton(toolstoolbar,TAB+_("Launch Xfe as root")+PARS(key),minixferooticon,this,XFileExplorer::ID_SU,BUTTON_TOOLBAR|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT);
495
key=getApp()->reg().readStringEntry("KEYBINDINGS","execute_command","Ctrl-E");
496
new FXButton(toolstoolbar,TAB+_("Execute command")+PARS(key),runicon,this,XFileExplorer::ID_RUN,BUTTON_TOOLBAR|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT);
498
key=getApp()->reg().readStringEntry("KEYBINDINGS","terminal","Ctrl-T");
499
new FXButton(toolstoolbar,TAB+_("Launch terminal")+PARS(key),shellicon,this,XFileExplorer::ID_XTERM,BUTTON_TOOLBAR|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT);
502
toolbarSeparator(toolstoolbar);
504
// Mount and unmount buttons
505
key=getApp()->reg().readStringEntry("KEYBINDINGS","mount","Ctrl-M");
506
btn=new FXButton(toolstoolbar,TAB+_("Mount (Linux only)")+PARS(key),maphosticon,lpanel,FilePanel::ID_MOUNT,BUTTON_TOOLBAR|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT);
507
hotkey=_parseAccel(key);
508
btn->addHotKey(hotkey);
510
key=getApp()->reg().readStringEntry("KEYBINDINGS","unmount","Ctrl-U");
511
btn=new FXButton(toolstoolbar,TAB+_("Unmount (Linux only)")+PARS(key),unmaphosticon,lpanel,FilePanel::ID_UMOUNT,BUTTON_TOOLBAR|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT);
512
hotkey=_parseAccel(key);
513
btn->addHotKey(hotkey);
519
key=getApp()->reg().readStringEntry("KEYBINDINGS","one_panel","Ctrl-F1");
520
btn=new FXButton(paneltoolbar,TAB+_("Show one panel")+PARS(key),onepanelicon,this,XFileExplorer::ID_SHOW_ONE_PANEL,BUTTON_TOOLBAR|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT|ICON_BEFORE_TEXT);
521
hotkey=_parseAccel(key);
522
btn->addHotKey(hotkey);
524
// Show tree and panel
525
key=getApp()->reg().readStringEntry("KEYBINDINGS","tree_panel","Ctrl-F2");
526
btn=new FXButton(paneltoolbar,TAB+_("Show tree and panel")+PARS(key),treeonepanelicon,this,XFileExplorer::ID_SHOW_TREE_PANEL,BUTTON_TOOLBAR|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT|ICON_BEFORE_TEXT);
527
hotkey=_parseAccel(key);
528
btn->addHotKey(hotkey);
531
key=getApp()->reg().readStringEntry("KEYBINDINGS","two_panels","Ctrl-F3");
532
btn=new FXButton(paneltoolbar,TAB+_("Show two panels")+PARS(key),twopanelsicon,this,XFileExplorer::ID_SHOW_TWO_PANELS,BUTTON_TOOLBAR|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT|ICON_BEFORE_TEXT);
533
hotkey=_parseAccel(key);
534
btn->addHotKey(hotkey);
536
// Show tree and two panels
537
key=getApp()->reg().readStringEntry("KEYBINDINGS","tree_two_panels","Ctrl-F4");
538
btn = new FXButton(paneltoolbar,TAB+_("Show tree and two panels")+PARS(key),treetwopanelsicon,this,XFileExplorer::ID_SHOW_TREE_TWO_PANELS,BUTTON_TOOLBAR|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT|ICON_BEFORE_TEXT);
539
hotkey=_parseAccel(key);
540
btn->addHotKey(hotkey);
542
toolbarSeparator(paneltoolbar);
544
// Switch display modes
545
key=getApp()->reg().readStringEntry("KEYBINDINGS","big_icons","F10");
546
btn=new FXButton(paneltoolbar,TAB+_("Big icon list")+PARS(key),bigiconsicon,lpanel,FilePanel::ID_SHOW_BIG_ICONS,BUTTON_TOOLBAR|LAYOUT_TOP|LAYOUT_LEFT|ICON_BEFORE_TEXT|FRAME_RAISED);
547
hotkey=_parseAccel(key);
548
btn->addHotKey(hotkey);
550
key=getApp()->reg().readStringEntry("KEYBINDINGS","small_icons","F11");
551
btn=new FXButton(paneltoolbar,TAB+_("Small icon list")+PARS(key),smalliconsicon,lpanel,FilePanel::ID_SHOW_MINI_ICONS,BUTTON_TOOLBAR|LAYOUT_TOP|LAYOUT_LEFT|ICON_BEFORE_TEXT|FRAME_RAISED);
552
hotkey=_parseAccel(key);
553
btn->addHotKey(hotkey);
555
key=getApp()->reg().readStringEntry("KEYBINDINGS","detailed_file_list","F12");
556
btn=new FXButton(paneltoolbar,TAB+_("Detailed file list")+PARS(key),detailsicon,lpanel,FilePanel::ID_SHOW_DETAILS,BUTTON_TOOLBAR|LAYOUT_TOP|LAYOUT_LEFT|ICON_BEFORE_TEXT|FRAME_RAISED);
557
hotkey=_parseAccel(key);
558
btn->addHotKey(hotkey);
561
new FXLabel(locationbar,_("Location:"));
562
key=getApp()->reg().readStringEntry("KEYBINDINGS","clear_location","Ctrl-L");
563
btn = new FXButton(locationbar,TAB+_("Clear location")+PARS(key),locationicon,this,ID_CLEAR_LOCATION,BUTTON_TOOLBAR|LAYOUT_CENTER_Y|LAYOUT_LEFT|ICON_BEFORE_TEXT|FRAME_RAISED);
564
hotkey=_parseAccel(key);
565
btn->addHotKey(hotkey);
566
address=new ComboBox(locationbar,LOCATION_BAR_LENGTH,this,ID_GOTO_LOCATION,COMBOBOX_INSERT_LAST|JUSTIFY_LEFT|LAYOUT_CENTER_Y);
567
address->setNumVisible(5);
568
new FXButton(locationbar,TAB+_("Go to location"),entericon,this,ID_GOTO_LOCATION,BUTTON_TOOLBAR|LAYOUT_CENTER_Y|LAYOUT_LEFT|ICON_BEFORE_TEXT|FRAME_RAISED);
574
filemenu=new FXMenuPane(this);
575
FXMenuCommand* mc = NULL;
577
mc=new FXMenuCommand(filemenu,_("New &file..."),newfileicon,lpanel,FilePanel::ID_NEW_FILE);
578
key=getApp()->reg().readStringEntry("KEYBINDINGS","new_file","F2");
579
mc->setAccelText(key);
580
hotkey=_parseAccel(key);
581
getAccelTable()->addAccel(hotkey,mc,FXSEL(SEL_COMMAND,FXMenuCommand::ID_ACCEL));
583
mc=new FXMenuCommand(filemenu,_("New fo&lder..."),newfoldericon,lpanel,FilePanel::ID_NEW_DIR);
584
key=getApp()->reg().readStringEntry("KEYBINDINGS","new_folder","F7");
585
mc->setAccelText(key);
586
hotkey=_parseAccel(key);
587
getAccelTable()->addAccel(hotkey,mc,FXSEL(SEL_COMMAND,FXMenuCommand::ID_ACCEL));
589
mc=new FXMenuCommand(filemenu,_("New s&ymlink..."),newlinkicon,lpanel,FilePanel::ID_NEW_SYMLINK);
590
key=getApp()->reg().readStringEntry("KEYBINDINGS","new_symlink","Ctrl-J");
591
mc->setAccelText(key);
592
hotkey=_parseAccel(key);
593
getAccelTable()->addAccel(hotkey,mc,FXSEL(SEL_COMMAND,FXMenuCommand::ID_ACCEL));
595
mc=new FXMenuCommand(filemenu,_("Go &home"),homeicon,lpanel,FilePanel::ID_GO_HOME);
596
key=getApp()->reg().readStringEntry("KEYBINDINGS","go_home","Ctrl-H");
597
mc->setAccelText(key);
598
hotkey=_parseAccel(key);
599
getAccelTable()->addAccel(hotkey,mc,FXSEL(SEL_COMMAND,FXMenuCommand::ID_ACCEL));
601
mc=new FXMenuCommand(filemenu,_("&Refresh"),reloadicon,this,XFileExplorer::ID_REFRESH);
602
key=getApp()->reg().readStringEntry("KEYBINDINGS","refresh","Ctrl-R");
603
mc->setAccelText(key);
604
hotkey=_parseAccel(key);
605
getAccelTable()->addAccel(hotkey,mc,FXSEL(SEL_COMMAND,FXMenuCommand::ID_ACCEL));
607
new FXMenuSeparator(filemenu);
609
mc=new FXMenuCommand(filemenu,_("&Open..."),fileopenicon,lpanel,FilePanel::ID_OPEN);
610
key=getApp()->reg().readStringEntry("KEYBINDINGS","open","Ctrl-O");
611
mc->setAccelText(key);
612
hotkey=_parseAccel(key);
613
getAccelTable()->addAccel(hotkey,mc,FXSEL(SEL_COMMAND,FXMenuCommand::ID_ACCEL));
615
mc=new FXMenuCommand(filemenu,_("Re&name..."),renameiticon,this,XFileExplorer::ID_FILE_RENAME);
616
key=getApp()->reg().readStringEntry("KEYBINDINGS","rename","Ctrl-N");
617
mc->setAccelText(key);
618
hotkey=_parseAccel(key);
619
getAccelTable()->addAccel(hotkey,mc,FXSEL(SEL_COMMAND,FXMenuCommand::ID_ACCEL));
621
mc=new FXMenuCommand(filemenu,_("&Copy to..."),copy_clpicon,this,XFileExplorer::ID_FILE_COPYTO);
622
key=getApp()->reg().readStringEntry("KEYBINDINGS","copy_to","F5");
623
mc->setAccelText(key);
624
hotkey=_parseAccel(key);
625
getAccelTable()->addAccel(hotkey,mc,FXSEL(SEL_COMMAND,FXMenuCommand::ID_ACCEL));
627
mc=new FXMenuCommand(filemenu,_("&Move to..."),moveiticon,this,XFileExplorer::ID_FILE_MOVETO);
628
key=getApp()->reg().readStringEntry("KEYBINDINGS","move_to","F6");
629
mc->setAccelText(key);
630
hotkey=_parseAccel(key);
631
getAccelTable()->addAccel(hotkey,mc,FXSEL(SEL_COMMAND,FXMenuCommand::ID_ACCEL));
633
mc=new FXMenuCommand(filemenu,_("&Symlink to..."),minilinkicon,this,XFileExplorer::ID_FILE_SYMLINK);
634
key=getApp()->reg().readStringEntry("KEYBINDINGS","symlink_to","Ctrl-S");
635
mc->setAccelText(key);
636
hotkey=_parseAccel(key);
637
getAccelTable()->addAccel(hotkey,mc,FXSEL(SEL_COMMAND,FXMenuCommand::ID_ACCEL));
639
mc=new FXMenuCommand(filemenu,_("Mo&ve to trash"),filedeleteicon,this,XFileExplorer::ID_FILE_TRASH);
640
key=getApp()->reg().readStringEntry("KEYBINDINGS","move_to_trash","Del");
641
mc->setAccelText(key);
642
hotkey=_parseAccel(key);
643
getAccelTable()->addAccel(hotkey,mc,FXSEL(SEL_COMMAND,FXMenuCommand::ID_ACCEL));
645
mc=new FXMenuCommand(filemenu,_("R&estore from trash"),filerestoreicon,this,XFileExplorer::ID_FILE_RESTORE);
646
key=getApp()->reg().readStringEntry("KEYBINDINGS","restore_from_trash","Alt-Del");
647
mc->setAccelText(key);
648
hotkey=_parseAccel(key);
649
getAccelTable()->addAccel(hotkey,mc,FXSEL(SEL_COMMAND,FXMenuCommand::ID_ACCEL));
651
mc=new FXMenuCommand(filemenu,_("&Delete"),filedelete_permicon,this,XFileExplorer::ID_FILE_DELETE);
652
key=getApp()->reg().readStringEntry("KEYBINDINGS","delete","Shift-Del");
653
mc->setAccelText(key);
654
hotkey=_parseAccel(key);
655
getAccelTable()->addAccel(hotkey,mc,FXSEL(SEL_COMMAND,FXMenuCommand::ID_ACCEL));
657
mc=new FXMenuCommand(filemenu,_("&Properties..."),attribicon,this,XFileExplorer::ID_FILE_PROPERTIES);
658
key=getApp()->reg().readStringEntry("KEYBINDINGS","properties","F9");
659
mc->setAccelText(key);
660
hotkey=_parseAccel(key);
661
getAccelTable()->addAccel(hotkey,mc,FXSEL(SEL_COMMAND,FXMenuCommand::ID_ACCEL));
663
new FXMenuSeparator(filemenu);
665
mc=new FXMenuCommand(filemenu,_("&Quit"),quiticon,this,XFileExplorer::ID_QUIT);
666
key=getApp()->reg().readStringEntry("KEYBINDINGS","quit","Ctrl-Q");
667
mc->setAccelText(key);
668
hotkey=_parseAccel(key);
669
getAccelTable()->addAccel(hotkey,mc,FXSEL(SEL_COMMAND,FXMenuCommand::ID_ACCEL));
671
filemenutitle=new FXMenuTitle(menubar,_("&File"),NULL,filemenu);
674
editmenu=new FXMenuPane(this);
676
mc=new FXMenuCommand(editmenu,_("&Copy"),copy_clpicon,this,XFileExplorer::ID_FILE_COPY);
677
key=getApp()->reg().readStringEntry("KEYBINDINGS","copy","Ctrl-C");
678
mc->setAccelText(key);
679
hotkey=_parseAccel(key);
680
getAccelTable()->addAccel(hotkey,mc,FXSEL(SEL_COMMAND,FXMenuCommand::ID_ACCEL));
682
mc=new FXMenuCommand(editmenu,_("C&ut"),cut_clpicon,this,XFileExplorer::ID_FILE_CUT);
683
key=getApp()->reg().readStringEntry("KEYBINDINGS","cut","Ctrl-X");
684
mc->setAccelText(key);
685
hotkey=_parseAccel(key);
686
getAccelTable()->addAccel(hotkey,mc,FXSEL(SEL_COMMAND,FXMenuCommand::ID_ACCEL));
688
mc=new FXMenuCommand(editmenu,_("&Paste"),paste_clpicon,this,XFileExplorer::ID_FILE_PASTE);
689
key=getApp()->reg().readStringEntry("KEYBINDINGS","paste","Ctrl-V");
690
mc->setAccelText(key);
691
hotkey=_parseAccel(key);
692
getAccelTable()->addAccel(hotkey,mc,FXSEL(SEL_COMMAND,FXMenuCommand::ID_ACCEL));
694
new FXMenuSeparator(editmenu);
696
mc=new FXMenuCommand(editmenu,_("&Select all"),selallicon,lpanel,FilePanel::ID_SELECT_ALL);
697
key=getApp()->reg().readStringEntry("KEYBINDINGS","select_all","Ctrl-A");
698
mc->setAccelText(key);
699
hotkey=_parseAccel(key);
700
getAccelTable()->addAccel(hotkey,mc,FXSEL(SEL_COMMAND,FXMenuCommand::ID_ACCEL));
702
mc=new FXMenuCommand(editmenu,_("&Deselect all"),deselicon,lpanel,FilePanel::ID_DESELECT_ALL);
703
key=getApp()->reg().readStringEntry("KEYBINDINGS","deselect_all","Ctrl-Z");
704
mc->setAccelText(key);
705
hotkey=_parseAccel(key);
706
getAccelTable()->addAccel(hotkey,mc,FXSEL(SEL_COMMAND,FXMenuCommand::ID_ACCEL));
708
mc=new FXMenuCommand(editmenu,_("&Invert selection"),invselicon,lpanel,FilePanel::ID_SELECT_INVERSE);
709
key=getApp()->reg().readStringEntry("KEYBINDINGS","invert_selection","Ctrl-I");
710
mc->setAccelText(key);
711
hotkey=_parseAccel(key);
712
getAccelTable()->addAccel(hotkey,mc,FXSEL(SEL_COMMAND,FXMenuCommand::ID_ACCEL));
714
new FXMenuSeparator(editmenu);
715
new FXMenuCommand(editmenu,_("P&references"),prefsicon,this,XFileExplorer::ID_PREFS);
717
editmenutitle=new FXMenuTitle(menubar,_("&Edit"),NULL,editmenu);
720
bookmarksmenu=new FXMenuPane(this);
721
mc=new FXMenuCommand(bookmarksmenu,_("&Add bookmark"),setbookicon,this,ID_ADD_BOOKMARK);
722
key=getApp()->reg().readStringEntry("KEYBINDINGS","add_bookmark","Ctrl-B");
723
mc->setAccelText(key);
724
hotkey=_parseAccel(key);
725
getAccelTable()->addAccel(hotkey,mc,FXSEL(SEL_COMMAND,FXMenuCommand::ID_ACCEL));
727
new FXMenuSeparator(bookmarksmenu);
728
new FXMenuCommand(bookmarksmenu,FXString::null,NULL,bookmarks,Bookmarks::ID_BOOKMARK_1);
729
new FXMenuCommand(bookmarksmenu,FXString::null,NULL,bookmarks,Bookmarks::ID_BOOKMARK_2);
730
new FXMenuCommand(bookmarksmenu,FXString::null,NULL,bookmarks,Bookmarks::ID_BOOKMARK_3);
731
new FXMenuCommand(bookmarksmenu,FXString::null,NULL,bookmarks,Bookmarks::ID_BOOKMARK_4);
732
new FXMenuCommand(bookmarksmenu,FXString::null,NULL,bookmarks,Bookmarks::ID_BOOKMARK_5);
733
new FXMenuCommand(bookmarksmenu,FXString::null,NULL,bookmarks,Bookmarks::ID_BOOKMARK_6);
734
new FXMenuCommand(bookmarksmenu,FXString::null,NULL,bookmarks,Bookmarks::ID_BOOKMARK_7);
735
new FXMenuCommand(bookmarksmenu,FXString::null,NULL,bookmarks,Bookmarks::ID_BOOKMARK_8);
736
new FXMenuCommand(bookmarksmenu,FXString::null,NULL,bookmarks,Bookmarks::ID_BOOKMARK_9);
737
new FXMenuCommand(bookmarksmenu,FXString::null,NULL,bookmarks,Bookmarks::ID_BOOKMARK_10);
738
new FXMenuCommand(bookmarksmenu,FXString::null,NULL,bookmarks,Bookmarks::ID_BOOKMARK_11);
739
new FXMenuCommand(bookmarksmenu,FXString::null,NULL,bookmarks,Bookmarks::ID_BOOKMARK_12);
740
new FXMenuCommand(bookmarksmenu,FXString::null,NULL,bookmarks,Bookmarks::ID_BOOKMARK_13);
741
new FXMenuCommand(bookmarksmenu,FXString::null,NULL,bookmarks,Bookmarks::ID_BOOKMARK_14);
742
new FXMenuCommand(bookmarksmenu,FXString::null,NULL,bookmarks,Bookmarks::ID_BOOKMARK_15);
743
new FXMenuCommand(bookmarksmenu,FXString::null,NULL,bookmarks,Bookmarks::ID_BOOKMARK_16);
744
new FXMenuCommand(bookmarksmenu,FXString::null,NULL,bookmarks,Bookmarks::ID_BOOKMARK_17);
745
new FXMenuCommand(bookmarksmenu,FXString::null,NULL,bookmarks,Bookmarks::ID_BOOKMARK_18);
746
new FXMenuCommand(bookmarksmenu,FXString::null,NULL,bookmarks,Bookmarks::ID_BOOKMARK_19);
747
new FXMenuCommand(bookmarksmenu,FXString::null,NULL,bookmarks,Bookmarks::ID_BOOKMARK_20);
748
new FXMenuSeparator(bookmarksmenu);
749
new FXMenuCommand(bookmarksmenu,_("&Clear bookmarks"),clrbookicon,bookmarks,Bookmarks::ID_CLEAR);
751
bookmarksmenutitle=new FXMenuTitle(menubar,_("&Bookmarks"),NULL,bookmarksmenu);
754
viewmenu=new FXMenuPane(this);
755
new FXMenuCheck(viewmenu,_("&General toolbar"),generaltoolbar,FXWindow::ID_TOGGLESHOWN);
756
new FXMenuCheck(viewmenu,_("&Tools toolbar"),toolstoolbar,FXWindow::ID_TOGGLESHOWN);
757
new FXMenuCheck(viewmenu,_("&Panel toolbar"),paneltoolbar,FXWindow::ID_TOGGLESHOWN);
758
new FXMenuCheck(viewmenu,_("&Location bar"),locationbar,FXWindow::ID_TOGGLESHOWN);
759
new FXMenuCheck(viewmenu,_("&Status bar"),this,XFileExplorer::ID_TOGGLE_STATUS);
761
new FXMenuSeparator(viewmenu);
763
mc=new FXMenuRadio(viewmenu,_("&One panel"),this,XFileExplorer::ID_SHOW_ONE_PANEL);
764
key=getApp()->reg().readStringEntry("KEYBINDINGS","one_panel","Ctrl-F1");
765
mc->setAccelText(key);
767
mc=new FXMenuRadio(viewmenu,_("T&ree and panel"),this,XFileExplorer::ID_SHOW_TREE_PANEL);
768
key=getApp()->reg().readStringEntry("KEYBINDINGS","tree_panel","Ctrl-F2");
769
mc->setAccelText(key);
771
mc=new FXMenuRadio(viewmenu,_("Two &panels"),this,XFileExplorer::ID_SHOW_TWO_PANELS);
772
key=getApp()->reg().readStringEntry("KEYBINDINGS","two_panels","Ctrl-F3");
773
mc->setAccelText(key);
775
mc=new FXMenuRadio(viewmenu,_("Tr&ee and two panels"),this,XFileExplorer::ID_SHOW_TREE_TWO_PANELS);
776
key=getApp()->reg().readStringEntry("KEYBINDINGS","tree_two_panels","Ctrl-F4");
777
mc->setAccelText(key);
779
viewmenutitle=new FXMenuTitle(menubar,_("&View"),NULL,viewmenu);
782
lpanelmenu=new FXMenuPane(this);
783
new FXMenuCommand(lpanelmenu,_("&Filter..."),filtericon,lpanel,FilePanel::ID_FILTER);
784
new FXMenuCheck(lpanelmenu,_("&Hidden files"),lpanel->getList(),FileList::ID_TOGGLE_HIDDEN);
785
new FXMenuCheck(lpanelmenu,_("&Thumbnails"),lpanel->getList(),FileList::ID_TOGGLE_THUMBNAILS);
786
new FXMenuSeparator(lpanelmenu);
787
new FXMenuRadio(lpanelmenu,_("&Big icons"),lpanel->getList(),IconList::ID_SHOW_BIG_ICONS);
788
new FXMenuRadio(lpanelmenu,_("&Small icons"),lpanel->getList(),IconList::ID_SHOW_MINI_ICONS);
789
new FXMenuRadio(lpanelmenu,_("F&ull file list"),lpanel->getList(),IconList::ID_SHOW_DETAILS);
790
new FXMenuSeparator(lpanelmenu);
791
new FXMenuRadio(lpanelmenu,_("&Rows"),lpanel->getList(),FileList::ID_ARRANGE_BY_ROWS);
792
new FXMenuRadio(lpanelmenu,_("&Columns"),lpanel->getList(),FileList::ID_ARRANGE_BY_COLUMNS);
793
new FXMenuCheck(lpanelmenu,_("Autosize"),lpanel->getList(),FileList::ID_AUTOSIZE);
794
new FXMenuSeparator(lpanelmenu);
795
new FXMenuRadio(lpanelmenu,_("&Name"),lpanel->getList(),FileList::ID_SORT_BY_NAME);
796
new FXMenuRadio(lpanelmenu,_("Si&ze"),lpanel->getList(),FileList::ID_SORT_BY_SIZE);
797
new FXMenuRadio(lpanelmenu,_("T&ype"),lpanel->getList(),FileList::ID_SORT_BY_TYPE);
798
new FXMenuRadio(lpanelmenu,_("E&xtension"),lpanel->getList(),FileList::ID_SORT_BY_EXT);
799
new FXMenuRadio(lpanelmenu,_("D&ate"),lpanel->getList(),FileList::ID_SORT_BY_TIME);
800
new FXMenuRadio(lpanelmenu,_("Us&er"),lpanel->getList(),FileList::ID_SORT_BY_USER);
801
new FXMenuRadio(lpanelmenu,_("Gr&oup"),lpanel->getList(),FileList::ID_SORT_BY_GROUP);
802
new FXMenuRadio(lpanelmenu,_("&Permissions"),lpanel->getList(),FileList::ID_SORT_BY_PERM);
803
new FXMenuRadio(lpanelmenu,_("Deletion date"),lpanel->getList(),FileList::ID_SORT_BY_DELTIME);
804
new FXMenuRadio(lpanelmenu,_("Original path"),lpanel->getList(),FileList::ID_SORT_BY_ORIGPATH);
805
new FXMenuSeparator(lpanelmenu);
806
new FXMenuCheck(lpanelmenu,_("I&gnore case"),lpanel->getList(),FileList::ID_SORT_CASE);
807
new FXMenuCheck(lpanelmenu,_("&Directories first"),lpanel->getList(),FileList::ID_DIRS_FIRST);
808
new FXMenuCheck(lpanelmenu,_("Re&verse order"),lpanel->getList(),FileList::ID_SORT_REVERSE);
809
lpanelmenutitle=new FXMenuTitle(menubar,_("&Left panel"),NULL,lpanelmenu);
812
rpanelmenu=new FXMenuPane(this);
813
new FXMenuCommand(rpanelmenu,_("&Filter"),filtericon,rpanel,FilePanel::ID_FILTER);
814
new FXMenuCheck(rpanelmenu,_("&Hidden files"),rpanel->getList(),FileList::ID_TOGGLE_HIDDEN);
815
new FXMenuCheck(rpanelmenu,_("&Thumbnails"),rpanel->getList(),FileList::ID_TOGGLE_THUMBNAILS);
816
new FXMenuSeparator(rpanelmenu);
817
new FXMenuRadio(rpanelmenu,_("&Big icons"),rpanel->getList(),IconList::ID_SHOW_BIG_ICONS);
818
new FXMenuRadio(rpanelmenu,_("&Small icons"),rpanel->getList(),IconList::ID_SHOW_MINI_ICONS);
819
new FXMenuRadio(rpanelmenu,_("F&ull file list"),rpanel->getList(),IconList::ID_SHOW_DETAILS);
820
new FXMenuSeparator(rpanelmenu);
821
new FXMenuRadio(rpanelmenu,_("&Rows"),rpanel->getList(),FileList::ID_ARRANGE_BY_ROWS);
822
new FXMenuRadio(rpanelmenu,_("&Columns"),rpanel->getList(),FileList::ID_ARRANGE_BY_COLUMNS);
823
new FXMenuCheck(rpanelmenu,_("Autosize"),rpanel->getList(),FileList::ID_AUTOSIZE);
824
new FXMenuSeparator(rpanelmenu);
825
new FXMenuRadio(rpanelmenu,_("&Name"),rpanel->getList(),FileList::ID_SORT_BY_NAME);
826
new FXMenuRadio(rpanelmenu,_("Si&ze"),rpanel->getList(),FileList::ID_SORT_BY_SIZE);
827
new FXMenuRadio(rpanelmenu,_("T&ype"),rpanel->getList(),FileList::ID_SORT_BY_TYPE);
828
new FXMenuRadio(rpanelmenu,_("E&xtension"),rpanel->getList(),FileList::ID_SORT_BY_EXT);
829
new FXMenuRadio(rpanelmenu,_("D&ate"),rpanel->getList(),FileList::ID_SORT_BY_TIME);
830
new FXMenuRadio(rpanelmenu,_("Us&er"),rpanel->getList(),FileList::ID_SORT_BY_USER);
831
new FXMenuRadio(rpanelmenu,_("Gr&oup"),rpanel->getList(),FileList::ID_SORT_BY_GROUP);
832
new FXMenuRadio(rpanelmenu,_("&Permissions"),rpanel->getList(),FileList::ID_SORT_BY_PERM);
833
new FXMenuRadio(rpanelmenu,_("Deletion date"),rpanel->getList(),FileList::ID_SORT_BY_DELTIME);
834
new FXMenuRadio(rpanelmenu,_("Original path"),rpanel->getList(),FileList::ID_SORT_BY_ORIGPATH);
835
new FXMenuSeparator(rpanelmenu);
836
new FXMenuCheck(rpanelmenu,_("I&gnore case"),rpanel->getList(),FileList::ID_SORT_CASE);
837
new FXMenuCheck(rpanelmenu,_("&Directories first"),rpanel->getList(),FileList::ID_DIRS_FIRST);
838
new FXMenuCheck(rpanelmenu,_("Re&verse order"),rpanel->getList(),FileList::ID_SORT_REVERSE);
839
rpanelmenutitle=new FXMenuTitle(menubar,_("&Right panel"),NULL,rpanelmenu);
842
toolsmenu=new FXMenuPane(this);
844
mc=new FXMenuCommand(toolsmenu,_("New &window"),minixfeicon,this,XFileExplorer::ID_NEW_WIN);
845
key=getApp()->reg().readStringEntry("KEYBINDINGS","new_window","F3");
846
mc->setAccelText(key);
847
hotkey=_parseAccel(key);
848
getAccelTable()->addAccel(hotkey,mc,FXSEL(SEL_COMMAND,FXMenuCommand::ID_ACCEL));
850
mc=new FXMenuCommand(toolsmenu,_("New &root window"),minixferooticon,this,XFileExplorer::ID_SU);
851
key=getApp()->reg().readStringEntry("KEYBINDINGS","new_root_window","Shift-F3");
852
mc->setAccelText(key);
853
hotkey=_parseAccel(key);
854
getAccelTable()->addAccel(hotkey,mc,FXSEL(SEL_COMMAND,FXMenuCommand::ID_ACCEL));
856
new FXMenuSeparator(toolsmenu);
858
mc=new FXMenuCommand(toolsmenu,_("E&xecute command..."),runicon,this,ID_RUN);
859
key=getApp()->reg().readStringEntry("KEYBINDINGS","execute_command","Ctrl-E");
860
mc->setAccelText(key);
861
hotkey=_parseAccel(key);
862
getAccelTable()->addAccel(hotkey,mc,FXSEL(SEL_COMMAND,FXMenuCommand::ID_ACCEL));
864
mc=new FXMenuCommand(toolsmenu,_("&Terminal"),minishellicon,this,XFileExplorer::ID_XTERM);
865
key=getApp()->reg().readStringEntry("KEYBINDINGS","terminal","Ctrl-T");
866
mc->setAccelText(key);
867
hotkey=_parseAccel(key);
868
getAccelTable()->addAccel(hotkey,mc,FXSEL(SEL_COMMAND,FXMenuCommand::ID_ACCEL));
870
mc=new FXMenuCommand(toolsmenu,_("&Synchronize panels"),syncpanelsicon,this,XFileExplorer::ID_SYNCHRONIZE_PANELS);
871
key=getApp()->reg().readStringEntry("KEYBINDINGS","synchronize_panels","Ctrl-Y");
872
mc->setAccelText(key);
873
hotkey=_parseAccel(key);
874
getAccelTable()->addAccel(hotkey,mc,FXSEL(SEL_COMMAND,FXMenuCommand::ID_ACCEL));
876
mc=new FXMenuCommand(toolsmenu,_("Sw&itch panels"),switchpanelsicon,this,XFileExplorer::ID_SWITCH_PANELS);
877
key=getApp()->reg().readStringEntry("KEYBINDINGS","switch_panels","Ctrl-K");
878
mc->setAccelText(key);
879
hotkey=_parseAccel(key);
880
getAccelTable()->addAccel(hotkey,mc,FXSEL(SEL_COMMAND,FXMenuCommand::ID_ACCEL));
883
new FXMenuSeparator(toolsmenu);
885
mc=new FXMenuCommand(toolsmenu,_("&Mount"),maphosticon,lpanel,FilePanel::ID_MOUNT);
886
key=getApp()->reg().readStringEntry("KEYBINDINGS","mount","Ctrl-M");
887
mc->setAccelText(key);
889
mc=new FXMenuCommand(toolsmenu,_("&Unmount"),unmaphosticon,lpanel,FilePanel::ID_UMOUNT);
890
key=getApp()->reg().readStringEntry("KEYBINDINGS","unmount","Ctrl-U");
891
mc->setAccelText(key);
894
toolsmenutitle=new FXMenuTitle(menubar,_("&Tools"),NULL,toolsmenu);
897
trashmenu=new FXMenuPane(this);
899
mc=new FXMenuCommand(trashmenu,_("&Go to trash"),totrashicon,lpanel,FilePanel::ID_GO_TRASH);
900
key=getApp()->reg().readStringEntry("KEYBINDINGS","go_to_trash","Ctrl-F8");
901
mc->setAccelText(key);
902
hotkey=_parseAccel(key);
903
getAccelTable()->addAccel(hotkey,mc,FXSEL(SEL_COMMAND,FXMenuCommand::ID_ACCEL));
905
mc=new FXMenuCommand(trashmenu,_("&Trash size"),filedeleteicon,this,XFileExplorer::ID_TRASH_SIZE);
907
mc=new FXMenuCommand(trashmenu,_("&Empty trash can"),trash_fullicon,this,XFileExplorer::ID_EMPTY_TRASH);
908
key=getApp()->reg().readStringEntry("KEYBINDINGS","empty_trash_can","Ctrl-Del");
909
mc->setAccelText(key);
910
hotkey=_parseAccel(key);
911
getAccelTable()->addAccel(hotkey,mc,FXSEL(SEL_COMMAND,FXMenuCommand::ID_ACCEL));
914
trashmenutitle=new FXMenuTitle(menubar,_("T&rash"),NULL,trashmenu);
917
helpmenu=new FXMenuPane(this);
919
mc=new FXMenuCommand(helpmenu,_("&Help"),helpicon,this,ID_HELP);
920
key=getApp()->reg().readStringEntry("KEYBINDINGS","help","F1");
921
mc->setAccelText(key);
922
hotkey=_parseAccel(key);
923
getAccelTable()->addAccel(hotkey,mc,FXSEL(SEL_COMMAND,FXMenuCommand::ID_ACCEL));
925
new FXMenuCommand(helpmenu,_("&About X File Explorer"),NULL,this,ID_ABOUT);
926
helpmenutitle=new FXMenuTitle(menubar,_("&Help"),NULL,helpmenu);
928
// Other accelerators
930
key=getApp()->reg().readStringEntry("KEYBINDINGS","edit","F4");
931
hotkey=_parseAccel(key);
932
getAccelTable()->addAccel(hotkey,lpanel,FXSEL(SEL_COMMAND,FilePanel::ID_EDIT));
934
key=getApp()->reg().readStringEntry("KEYBINDINGS","view","Shift-F4");
935
hotkey=_parseAccel(key);
936
getAccelTable()->addAccel(hotkey,lpanel,FXSEL(SEL_COMMAND,FilePanel::ID_VIEW));
938
key=getApp()->reg().readStringEntry("KEYBINDINGS","hidden_dirs","Ctrl-F5");
939
hotkey=_parseAccel(key);
940
getAccelTable()->addAccel(hotkey,dirpanel,FXSEL(SEL_COMMAND,DirPanel::ID_TOGGLE_HIDDEN));
942
key=getApp()->reg().readStringEntry("KEYBINDINGS","filter","Ctrl-D");
943
hotkey=_parseAccel(key);
944
getAccelTable()->addAccel(hotkey,lpanel,FXSEL(SEL_COMMAND,FilePanel::ID_FILTER_CURRENT));
946
key=getApp()->reg().readStringEntry("KEYBINDINGS","hidden_files","Ctrl-F6");
947
hotkey=_parseAccel(key);
948
getAccelTable()->addAccel(hotkey,lpanel,FXSEL(SEL_COMMAND,FilePanel::ID_TOGGLE_HIDDEN));
950
key=getApp()->reg().readStringEntry("KEYBINDINGS","thumbnails","Ctrl-F7");
951
hotkey=_parseAccel(key);
952
getAccelTable()->addAccel(hotkey,lpanel,FXSEL(SEL_COMMAND,FilePanel::ID_TOGGLE_THUMBNAILS));
954
key=getApp()->reg().readStringEntry("KEYBINDINGS","close","Ctrl-W");
955
hotkey=_parseAccel(key);
956
getAccelTable()->addAccel(hotkey,this,FXSEL(SEL_COMMAND,XFileExplorer::ID_QUIT));
959
getAccelTable()->addAccel(KEY_Escape,lpanel,FXSEL(SEL_COMMAND,FilePanel::ID_DESELECT_ALL));
962
new FXToolTip(app,0);
964
// File operations dialog
969
// Initial focus is on (left) file panel
970
panelfocus=FILEPANEL_FOCUS;
972
// Trahscan locations
973
trashfileslocation=xdgdatahome + PATHSEPSTRING TRASHFILESPATH;
974
trashinfolocation=xdgdatahome + PATHSEPSTRING TRASHINFOPATH;
976
// Start location (we return to the start location after each chdir)
977
startlocation=FXSystem::getCurrentDirectory();
979
// Other initializations
980
startdirectory=startdir;
982
startmaximized=maximized;
983
prevdir=FXString::null;
984
prev_width=getWidth();
988
// Save configuration when quitting
989
void XFileExplorer::saveConfig()
992
FXbool auto_save_layout=getApp()->reg().readUnsignedEntry("OPTIONS","auto_save_layout",TRUE);
994
if(auto_save_layout==TRUE)
999
if (dirpanel->getSortFunc()==DirList::ascendingCase)
1000
sort_func="ascendingCase";
1001
else if (dirpanel->getSortFunc()==DirList::descendingCase)
1002
sort_func="descendingCase";
1003
else if (dirpanel->getSortFunc()==DirList::ascending)
1004
sort_func="ascending";
1005
else if (dirpanel->getSortFunc()==DirList::descending)
1006
sort_func="descending";
1008
sort_func="ascendingCase";
1009
getApp()->reg().writeStringEntry("DIR PANEL","sort_func",sort_func.text());
1010
getApp()->reg().writeUnsignedEntry("DIR PANEL","hidden_dir",dirpanel->shownHiddenFiles());
1012
// Left panel options
1013
getApp()->reg().writeUnsignedEntry("LEFT PANEL","name_size",lpanel->getHeaderSize(0));
1014
getApp()->reg().writeUnsignedEntry("LEFT PANEL","size_size",lpanel->getHeaderSize(1));
1015
getApp()->reg().writeUnsignedEntry("LEFT PANEL","type_size",lpanel->getHeaderSize(2));
1016
getApp()->reg().writeUnsignedEntry("LEFT PANEL","ext_size",lpanel->getHeaderSize(3));
1017
getApp()->reg().writeUnsignedEntry("LEFT PANEL","modd_size",lpanel->getHeaderSize(4));
1018
getApp()->reg().writeUnsignedEntry("LEFT PANEL","user_size",lpanel->getHeaderSize(5));
1019
getApp()->reg().writeUnsignedEntry("LEFT PANEL","grou_size",lpanel->getHeaderSize(6));
1020
getApp()->reg().writeUnsignedEntry("LEFT PANEL","attr_size",lpanel->getHeaderSize(7));
1021
getApp()->reg().writeUnsignedEntry("LEFT PANEL","deldate_size",lpanel->getHeaderSize(8));
1022
getApp()->reg().writeUnsignedEntry("LEFT PANEL","origpath_size",lpanel->getHeaderSize(9));
1023
getApp()->reg().writeUnsignedEntry("LEFT PANEL","liststyle",lpanel->getListStyle());
1024
getApp()->reg().writeUnsignedEntry("LEFT PANEL","hiddenfiles",lpanel->shownHiddenFiles());
1025
getApp()->reg().writeUnsignedEntry("LEFT PANEL","showthumbnails",lpanel->shownThumbnails());
1027
// Get and write sort function for left panel
1028
if (lpanel->getSortFunc()==FileList::ascendingCase)
1029
sort_func="ascendingCase";
1030
else if (lpanel->getSortFunc()==FileList::ascendingCaseMix)
1031
sort_func="ascendingCaseMix";
1032
else if (lpanel->getSortFunc()==FileList::descendingCase)
1033
sort_func="descendingCase";
1034
else if (lpanel->getSortFunc()==FileList::descendingCaseMix)
1035
sort_func="descendingCaseMix";
1036
else if (lpanel->getSortFunc()==FileList::ascending)
1037
sort_func="ascending";
1038
else if (lpanel->getSortFunc()==FileList::ascendingMix)
1039
sort_func="ascendingMix";
1040
else if (lpanel->getSortFunc()==FileList::descending)
1041
sort_func="descending";
1042
else if (lpanel->getSortFunc()==FileList::descendingMix)
1043
sort_func="descendingMix";
1044
else if (lpanel->getSortFunc()==FileList::ascendingSize)
1045
sort_func="ascendingSize";
1046
else if (lpanel->getSortFunc()==FileList::ascendingSizeMix)
1047
sort_func="ascendingSizeMix";
1048
else if (lpanel->getSortFunc()==FileList::descendingSize)
1049
sort_func="descendingSize";
1050
else if (lpanel->getSortFunc()==FileList::descendingSizeMix)
1051
sort_func="descendingSizeMix";
1052
else if (lpanel->getSortFunc()==FileList::ascendingType)
1053
sort_func="ascendingType";
1054
else if (lpanel->getSortFunc()==FileList::ascendingTypeMix)
1055
sort_func="ascendingTypeMix";
1056
else if (lpanel->getSortFunc()==FileList::descendingType)
1057
sort_func="descendingType";
1058
else if (lpanel->getSortFunc()==FileList::descendingTypeMix)
1059
sort_func="descendingTypeMix";
1060
else if (lpanel->getSortFunc()==FileList::ascendingExt)
1061
sort_func="ascendingExt";
1062
else if (lpanel->getSortFunc()==FileList::ascendingExtMix)
1063
sort_func="ascendingExtMix";
1064
else if (lpanel->getSortFunc()==FileList::descendingExt)
1065
sort_func="descendingExt";
1066
else if (lpanel->getSortFunc()==FileList::descendingExtMix)
1067
sort_func="descendingExtMix";
1068
else if (lpanel->getSortFunc()==FileList::ascendingTime)
1069
sort_func="ascendingTime";
1070
else if (lpanel->getSortFunc()==FileList::ascendingTimeMix)
1071
sort_func="ascendingTimeMix";
1072
else if (lpanel->getSortFunc()==FileList::descendingTime)
1073
sort_func="descendingTime";
1074
else if (lpanel->getSortFunc()==FileList::descendingTimeMix)
1075
sort_func="descendingTimeMix";
1076
else if (lpanel->getSortFunc()==FileList::ascendingUser)
1077
sort_func="ascendingUser";
1078
else if (lpanel->getSortFunc()==FileList::ascendingUserMix)
1079
sort_func="ascendingUserMix";
1080
else if (lpanel->getSortFunc()==FileList::descendingUser)
1081
sort_func="descendingUser";
1082
else if (lpanel->getSortFunc()==FileList::descendingUserMix)
1083
sort_func="descendingUserMix";
1084
else if (lpanel->getSortFunc()==FileList::ascendingGroup)
1085
sort_func="ascendingGroup";
1086
else if (lpanel->getSortFunc()==FileList::ascendingGroupMix)
1087
sort_func="ascendingGroupMix";
1088
else if (lpanel->getSortFunc()==FileList::descendingGroup)
1089
sort_func="descendingGroup";
1090
else if (lpanel->getSortFunc()==FileList::descendingGroupMix)
1091
sort_func="descendingGroupMix";
1092
else if (lpanel->getSortFunc()==FileList::ascendingPerm)
1093
sort_func="ascendingPerm";
1094
else if (lpanel->getSortFunc()==FileList::ascendingPermMix)
1095
sort_func="ascendingPermMix";
1096
else if (lpanel->getSortFunc()==FileList::descendingPerm)
1097
sort_func="descendingPerm";
1098
else if (lpanel->getSortFunc()==FileList::descendingPermMix)
1099
sort_func="descendingPermMix";
1101
sort_func="ascendingCase";
1102
getApp()->reg().writeStringEntry("LEFT PANEL","sort_func",sort_func.text());
1103
getApp()->reg().writeUnsignedEntry("LEFT PANEL","ignore_case",lpanel->getIgnoreCase());
1104
getApp()->reg().writeUnsignedEntry("LEFT PANEL","dirs_first",lpanel->getDirsFirst());
1106
// Right panel options
1107
getApp()->reg().writeUnsignedEntry("RIGHT PANEL","name_size",rpanel->getHeaderSize(0));
1108
getApp()->reg().writeUnsignedEntry("RIGHT PANEL","size_size",rpanel->getHeaderSize(1));
1109
getApp()->reg().writeUnsignedEntry("RIGHT PANEL","type_size",rpanel->getHeaderSize(2));
1110
getApp()->reg().writeUnsignedEntry("RIGHT PANEL","ext_size",rpanel->getHeaderSize(3));
1111
getApp()->reg().writeUnsignedEntry("RIGHT PANEL","modd_size",rpanel->getHeaderSize(4));
1112
getApp()->reg().writeUnsignedEntry("RIGHT PANEL","user_size",rpanel->getHeaderSize(5));
1113
getApp()->reg().writeUnsignedEntry("RIGHT PANEL","grou_size",rpanel->getHeaderSize(6));
1114
getApp()->reg().writeUnsignedEntry("RIGHT PANEL","attr_size",rpanel->getHeaderSize(7));
1115
getApp()->reg().writeUnsignedEntry("RIGHT PANEL","deldate_size",rpanel->getHeaderSize(8));
1116
getApp()->reg().writeUnsignedEntry("RIGHT PANEL","origpath_size",rpanel->getHeaderSize(9));
1117
getApp()->reg().writeUnsignedEntry("RIGHT PANEL","liststyle",rpanel->getListStyle());
1118
getApp()->reg().writeUnsignedEntry("RIGHT PANEL","hiddenfiles",rpanel->shownHiddenFiles());
1119
getApp()->reg().writeUnsignedEntry("RIGHT PANEL","showthumbnails",rpanel->shownThumbnails());
1121
// Get and write sort function for right panel
1122
if (rpanel->getSortFunc()==FileList::ascendingCase)
1123
sort_func="ascendingCase";
1124
else if (rpanel->getSortFunc()==FileList::ascendingCaseMix)
1125
sort_func="ascendingCaseMix";
1126
else if (rpanel->getSortFunc()==FileList::descendingCase)
1127
sort_func="descendingCase";
1128
else if (rpanel->getSortFunc()==FileList::descendingCaseMix)
1129
sort_func="descendingCaseMix";
1130
else if (rpanel->getSortFunc()==FileList::ascending)
1131
sort_func="ascending";
1132
else if (rpanel->getSortFunc()==FileList::ascendingMix)
1133
sort_func="ascendingMix";
1134
else if (rpanel->getSortFunc()==FileList::descending)
1135
sort_func="descending";
1136
else if (rpanel->getSortFunc()==FileList::descendingMix)
1137
sort_func="descendingMix";
1138
else if (rpanel->getSortFunc()==FileList::ascendingSize)
1139
sort_func="ascendingSize";
1140
else if (rpanel->getSortFunc()==FileList::ascendingSizeMix)
1141
sort_func="ascendingSizeMix";
1142
else if (rpanel->getSortFunc()==FileList::descendingSize)
1143
sort_func="descendingSize";
1144
else if (rpanel->getSortFunc()==FileList::descendingSizeMix)
1145
sort_func="descendingSizeMix";
1146
else if (rpanel->getSortFunc()==FileList::ascendingType)
1147
sort_func="ascendingType";
1148
else if (rpanel->getSortFunc()==FileList::ascendingTypeMix)
1149
sort_func="ascendingTypeMix";
1150
else if (rpanel->getSortFunc()==FileList::descendingType)
1151
sort_func="descendingType";
1152
else if (rpanel->getSortFunc()==FileList::descendingTypeMix)
1153
sort_func="descendingTypeMix";
1154
else if (rpanel->getSortFunc()==FileList::ascendingExt)
1155
sort_func="ascendingExt";
1156
else if (rpanel->getSortFunc()==FileList::ascendingExtMix)
1157
sort_func="ascendingExtMix";
1158
else if (rpanel->getSortFunc()==FileList::descendingExt)
1159
sort_func="descendingExt";
1160
else if (rpanel->getSortFunc()==FileList::descendingExtMix)
1161
sort_func="descendingExtMix";
1162
else if (rpanel->getSortFunc()==FileList::ascendingTime)
1163
sort_func="ascendingTime";
1164
else if (rpanel->getSortFunc()==FileList::ascendingTimeMix)
1165
sort_func="ascendingTimeMix";
1166
else if (rpanel->getSortFunc()==FileList::descendingTime)
1167
sort_func="descendingTime";
1168
else if (rpanel->getSortFunc()==FileList::descendingTimeMix)
1169
sort_func="descendingTimeMix";
1170
else if (rpanel->getSortFunc()==FileList::ascendingUser)
1171
sort_func="ascendingUser";
1172
else if (rpanel->getSortFunc()==FileList::ascendingUserMix)
1173
sort_func="ascendingUserMix";
1174
else if (rpanel->getSortFunc()==FileList::descendingUser)
1175
sort_func="descendingUser";
1176
else if (rpanel->getSortFunc()==FileList::descendingUserMix)
1177
sort_func="descendingUserMix";
1178
else if (rpanel->getSortFunc()==FileList::ascendingGroup)
1179
sort_func="ascendingGroup";
1180
else if (rpanel->getSortFunc()==FileList::ascendingGroupMix)
1181
sort_func="ascendingGroupMix";
1182
else if (rpanel->getSortFunc()==FileList::descendingGroup)
1183
sort_func="descendingGroup";
1184
else if (rpanel->getSortFunc()==FileList::descendingGroupMix)
1185
sort_func="descendingGroupMix";
1186
else if (rpanel->getSortFunc()==FileList::ascendingPerm)
1187
sort_func="ascendingPerm";
1188
else if (rpanel->getSortFunc()==FileList::ascendingPermMix)
1189
sort_func="ascendingPermMix";
1190
else if (rpanel->getSortFunc()==FileList::descendingPerm)
1191
sort_func="descendingPerm";
1192
else if (rpanel->getSortFunc()==FileList::descendingPermMix)
1193
sort_func="descendingPermMix";
1195
sort_func="ascendingCase";
1196
getApp()->reg().writeStringEntry("RIGHT PANEL","sort_func",sort_func.text());
1197
getApp()->reg().writeUnsignedEntry("RIGHT PANEL","ignore_case",rpanel->getIgnoreCase());
1198
getApp()->reg().writeUnsignedEntry("RIGHT PANEL","dirs_first",rpanel->getDirsFirst());
1201
getApp()->reg().writeUnsignedEntry("OPTIONS","width",(FXuint)getWidth());
1202
getApp()->reg().writeUnsignedEntry("OPTIONS","height",(FXuint)getHeight());
1204
// Get value of window position flag and position the window
1205
FXbool save_win_pos=getApp()->reg().readUnsignedEntry("SETTINGS","save_win_pos",FALSE);
1208
// Account for the Window Manager border size
1209
XWindowAttributes xwattr;
1210
if (XGetWindowAttributes((Display*)getApp()->getDisplay(),this->id(),&xwattr))
1212
getApp()->reg().writeIntEntry("OPTIONS","xpos",getX()-xwattr.x);
1213
getApp()->reg().writeIntEntry("OPTIONS","ypos",getY()-xwattr.y);
1217
getApp()->reg().writeIntEntry("OPTIONS","xpos",getX());
1218
getApp()->reg().writeIntEntry("OPTIONS","ypos",getY());
1221
getApp()->reg().writeUnsignedEntry("OPTIONS","generaltoolbar",(FXuint)generaltoolbar->shown());
1222
getApp()->reg().writeUnsignedEntry("OPTIONS","toolstoolbar",(FXuint)toolstoolbar->shown());
1223
getApp()->reg().writeUnsignedEntry("OPTIONS","paneltoolbar",(FXuint)paneltoolbar->shown());
1224
getApp()->reg().writeUnsignedEntry("OPTIONS","locationbar",(FXuint)locationbar->shown());
1225
getApp()->reg().writeUnsignedEntry("OPTIONS","status",(FXuint)lpanel->statusbarShown());
1226
getApp()->reg().writeUnsignedEntry("SETTINGS","file_tooltips",(FXuint)file_tooltips);
1227
getApp()->reg().writeUnsignedEntry("SETTINGS","relative_resize",(FXuint)relative_resize);
1228
getApp()->reg().writeRealEntry("OPTIONS","treepanel_tree_pct",treepanel_tree_pct);
1229
getApp()->reg().writeRealEntry("OPTIONS","twopanels_lpanel_pct",twopanels_lpanel_pct);
1230
getApp()->reg().writeRealEntry("OPTIONS","treetwopanels_tree_pct",treetwopanels_tree_pct);
1231
getApp()->reg().writeRealEntry("OPTIONS","treetwopanels_lpanel_pct",treetwopanels_lpanel_pct);
1233
// Save panel view only if not given from command line
1234
if (panel_mode == -1)
1235
getApp()->reg().writeUnsignedEntry("OPTIONS","panel_view",(FXuint)panel_view);
1237
getApp()->reg().writeUnsignedEntry("SETTINGS","single_click",single_click);
1239
FXString history="";
1240
for(FXint i=0;i<RunHistSize;i++)
1242
history+=RunHistory[i];
1246
getApp()->reg().writeStringEntry("HISTORY","run",history.text());
1249
for(FXint i=0;i<OpenNum;i++)
1251
history+=OpenHistory[i];
1255
getApp()->reg().writeStringEntry("HISTORY","open",history.text());
1258
for(FXint i=0;i<FilterNum;i++)
1260
history+=FilterHistory[i];
1264
getApp()->reg().writeStringEntry("HISTORY","filter",history.text());
1266
getApp()->reg().write();
1270
void XFileExplorer::create()
1272
// Eventually select panel mode from the command line option
1273
// or revert to last saved panel view
1277
panel_view=TREE_PANEL;
1280
panel_view=ONE_PANEL;
1283
panel_view=TWO_PANELS;
1286
panel_view=TREE_TWO_PANELS;
1289
panel_view=getApp()->reg().readUnsignedEntry("OPTIONS","panel_view",TREE_PANEL);
1292
FXint width=getApp()->reg().readUnsignedEntry("OPTIONS","width",DEFAULT_WINDOW_WIDTH);
1293
FXint height=getApp()->reg().readUnsignedEntry("OPTIONS","height",DEFAULT_WINDOW_HEIGHT);
1294
FXint save_win_pos=getApp()->reg().readUnsignedEntry("SETTINGS","save_win_pos",FALSE);
1297
FXint xpos=getApp()->reg().readIntEntry("OPTIONS","xpos",DEFAULT_WINDOW_XPOS);
1298
FXint ypos=getApp()->reg().readIntEntry("OPTIONS","ypos",DEFAULT_WINDOW_YPOS);
1299
position(xpos,ypos,width,height);
1302
position(getX(),getY(),width,height);
1304
FXMainWindow::create();
1305
FXint window_width=getWidth();
1306
twopanels_lpanel_pct=getApp()->reg().readRealEntry("OPTIONS","twopanels_lpanel_pct",0.50);
1307
treepanel_tree_pct=getApp()->reg().readRealEntry("OPTIONS","treepanel_tree_pct",0.20);
1308
treetwopanels_tree_pct=getApp()->reg().readRealEntry("OPTIONS","treetwopanels_tree_pct",0.20);
1309
treetwopanels_lpanel_pct=getApp()->reg().readRealEntry("OPTIONS","treetwopanels_lpanel_pct",0.40);
1316
// Handle drag corner
1317
rpanel->showCorner(FALSE);
1318
lpanel->showCorner(TRUE);
1319
// Handle active icon
1320
lpanel->showActiveIcon(FALSE);
1321
lpanel->setWidth((FXint)round(1.0*window_width));
1325
lpanel->setWidth((FXint)round(twopanels_lpanel_pct*window_width));
1326
// Handle drag corner
1327
rpanel->showCorner(TRUE);
1328
lpanel->showCorner(FALSE);
1329
// Handle active icon
1330
lpanel->showActiveIcon(TRUE);
1334
dirpanel->setWidth((FXint)round(treepanel_tree_pct*window_width));
1335
lpanel->setWidth((FXint)round((1.0-treepanel_tree_pct)*window_width));
1336
// Handle drag corner
1337
rpanel->showCorner(FALSE);
1338
lpanel->showCorner(TRUE);
1339
// Handle active icon
1340
lpanel->showActiveIcon(TRUE);
1342
case TREE_TWO_PANELS:
1343
dirpanel->setWidth((FXint)round(treetwopanels_tree_pct*window_width));
1344
lpanel->setWidth((FXint)round(treetwopanels_lpanel_pct*window_width));
1345
// Handle drag corner
1346
rpanel->showCorner(TRUE);
1347
lpanel->showCorner(FALSE);
1348
// Handle active icon
1349
lpanel->showActiveIcon(TRUE);
1353
if(!getApp()->reg().readUnsignedEntry("OPTIONS","generaltoolbar",TRUE))
1354
generaltoolbar->handle(this,FXSEL(SEL_COMMAND,FXWindow::ID_TOGGLESHOWN),NULL);
1355
if(!getApp()->reg().readUnsignedEntry("OPTIONS","toolstoolbar",TRUE))
1356
toolstoolbar->handle(this,FXSEL(SEL_COMMAND,FXWindow::ID_TOGGLESHOWN),NULL);
1357
if(!getApp()->reg().readUnsignedEntry("OPTIONS","paneltoolbar",TRUE))
1358
paneltoolbar->handle(this,FXSEL(SEL_COMMAND,FXWindow::ID_TOGGLESHOWN),NULL);
1359
if(!getApp()->reg().readUnsignedEntry("OPTIONS","locationbar",TRUE))
1360
locationbar->handle(this,FXSEL(SEL_COMMAND,FXWindow::ID_TOGGLESHOWN),NULL);
1361
if(!getApp()->reg().readUnsignedEntry("OPTIONS","status",TRUE))
1362
handle(this,FXSEL(SEL_COMMAND,XFileExplorer::ID_TOGGLE_STATUS),NULL);
1363
file_tooltips=getApp()->reg().readUnsignedEntry("SETTINGS","file_tooltips",1);
1364
relative_resize=getApp()->reg().readUnsignedEntry("SETTINGS","relative_resize",1);
1367
FXint wheellines=getApp()->reg().readUnsignedEntry("SETTINGS","wheellines",5);
1368
getApp()->setWheelLines(wheellines);
1370
// Open left or right panel in starting directory (if specified) or in current directory
1371
if (startdirectory=="")
1372
startdirectory=FXSystem::getCurrentDirectory();
1373
lpanel->setDirectory(startdirectory);
1374
lpanel->setPathLink(startdirectory);
1375
lpanel->setPathText(startdirectory);
1376
rpanel->setDirectory(startdirectory);
1377
rpanel->setPathLink(startdirectory);
1378
rpanel->setPathText(startdirectory);
1379
dirpanel->setDirectory(startdirectory,TRUE);
1381
// Set file panels list style
1382
liststyle=getApp()->reg().readUnsignedEntry("LEFT PANEL","liststyle",(FXuint)IconList::ID_SHOW_DETAILS);
1383
lpanel->setListStyle(liststyle);
1384
liststyle=getApp()->reg().readUnsignedEntry("RIGHT PANEL","liststyle",(FXuint)IconList::ID_SHOW_DETAILS);
1385
rpanel->setListStyle(liststyle);
1387
// Show or hide hidden files listed in panels
1388
FXbool hiddenfiles=getApp()->reg().readUnsignedEntry("LEFT PANEL","hiddenfiles",0);
1389
lpanel->showHiddenFiles(hiddenfiles);
1390
hiddenfiles=getApp()->reg().readUnsignedEntry("RIGHT PANEL","hiddenfiles",0);
1391
rpanel->showHiddenFiles(hiddenfiles);
1393
// Show or hide hidden directories listed in dirpanel
1394
FXbool hidden_dir=getApp()->reg().readUnsignedEntry("DIR PANEL","hidden_dir",0);
1395
dirpanel->showHiddenFiles(hidden_dir);
1398
FXString history=getApp()->reg().readStringEntry("HISTORY","run","");
1405
histent=history.section(':',i);
1406
if(streq(histent.text(),""))
1408
strlcpy(RunHistory[i],histent.text(),histent.length()+1);
1416
history=getApp()->reg().readStringEntry("HISTORY","open","");
1422
histent=history.section(':',i);
1423
if(streq(histent.text(),""))
1425
strlcpy(OpenHistory[i],histent.text(),histent.length()+1);
1432
history=getApp()->reg().readStringEntry("HISTORY","filter","");
1438
histent=history.section(':',i);
1439
if(streq(histent.text(),""))
1441
strlcpy(FilterHistory[i],histent.text(),histent.length()+1);
1448
getApp()->forceRefresh();
1451
FXbool root_warn=getApp()->reg().readUnsignedEntry("OPTIONS","root_warn",TRUE);
1452
if(getuid()==0 && root_warn)
1453
MessageBox::information(this,BOX_OK,_("Warning"),_("Running Xfe as root!"));
1455
// Initial focus is always on the left panel
1456
lpanel->setFocusOnList();
1462
// Warning message if a mount point is down
1463
FXbool mount_warn=getApp()->reg().readUnsignedEntry("OPTIONS","mount_warn",TRUE);
1467
for (d=updevices->first(); d<updevices->size(); d=updevices->next(d))
1469
if(streq(updevices->data(d),"down"))
1470
MessageBox::warning(this,BOX_OK,_("Warning"),_("Mount point %s is not responding..."),updevices->key(d));
1475
// If no Xfe local configuration exists (i.e. at first call or after a purge of the configuration files),
1476
// copy the global xferc file to the local configuration directory, and read / write the registry
1478
FXString configlocation=xdgconfighome + PATHSEPSTRING XFECONFIGPATH;
1479
FXString configpath=configlocation + PATHSEPSTRING XFECONFIGNAME;
1480
if (!::exists(configpath))
1482
// If old configuration path (i.e. ~/.xfe) exists then warn the user about the new configuration scheme
1483
FXString oldconfigpath=homedir + PATHSEPSTRING ".xfe";
1484
if (::exists(oldconfigpath))
1486
// Display warning message
1488
message.format(_("Starting from Xfe 1.32, the location of the configuration files has changed to '%s'.\nNote you can manually edit the new configuration files to import your old customizations..."),configlocation.text());
1489
MessageBox::warning(this,BOX_OK,_("Warning"),message.text());
1492
// Create ~/.config/xfe directory if it doesn't exist
1493
if (!::exists(configlocation))
1495
// Create the ~/.config/xfe directory according to the umask
1499
FXint ret=mkpath(configlocation.text(),511 & ~mask);
1500
FXint errcode=errno;
1504
MessageBox::error(this,BOX_OK,_("Error"),_("Can't create Xfe config folder %s : %s"),configlocation.text(),strerror(errcode));
1506
MessageBox::error(this,BOX_OK,_("Error"),_("Can't create Xfe config folder %s"),configlocation.text());
1510
// Copy the global xfrec file (three possible locations) to the local configuration file
1511
if (::exists("/usr/share/xfe/xferc"))
1512
FXFile::copy("/usr/share/xfe/xferc",configpath,FALSE);
1513
else if (::exists("/usr/local/share/xfe/xferc"))
1514
FXFile::copy("/usr/local/share/xfe/xferc",configpath,FALSE);
1515
else if (::exists("/opt/local/share/xfe/xferc"))
1516
FXFile::copy("/opt/local/share/xfe/xferc",configpath,FALSE);
1518
// If nothing is found, display a file dialog to let the user choose the right place
1521
FileDialog browse(this,_("No global xferc file found! Please select a configuration file..."));
1523
const FXchar *patterns[]=
1525
_("XFE configuration file"), "*xferc*",NULL
1527
browse.setFilename(ROOTDIR);
1528
browse.setPatternList(patterns);
1529
if(browse.execute())
1531
FXString path=browse.getFilename();
1532
FXFile::copy(path,configpath,FALSE);
1536
// Read and write the registry
1537
getApp()->reg().read();
1538
getApp()->reg().write();
1541
// Create trash can files directory if it doesn't exist
1542
if (!::exists(trashfileslocation))
1544
// Create the trash can files directory according to the umask
1548
FXint ret=mkpath(trashfileslocation.text(),511 & ~mask);
1549
FXint errcode=errno;
1553
MessageBox::error(this,BOX_OK,_("Error"),_("Can't create trash can 'files' folder %s : %s"),trashfileslocation.text(),strerror(errcode));
1555
MessageBox::error(this,BOX_OK,_("Error"),_("Can't create trash can 'files' folder %s"),trashfileslocation.text());
1559
// Create trash can info directory if it doesn't exist
1560
if (!::exists(trashinfolocation))
1562
// Create the trash can info directory according to the umask
1566
FXint ret=mkpath(trashinfolocation.text(),511 & ~mask);
1567
FXint errcode=errno;
1571
MessageBox::error(this,BOX_OK,_("Error"),_("Can't create trash can 'info' folder %s: %s"),trashinfolocation.text(),strerror(errcode));
1573
MessageBox::error(this,BOX_OK,_("Error"),_("Can't create trash can 'info' folder %s"),trashinfolocation.text());
1577
// Eventually start iconic or maximized
1583
#ifdef STARTUP_NOTIFICATION
1584
startup_completed();
1590
XFileExplorer::~XFileExplorer()
1599
delete bookmarksmenu;
1604
delete filemenutitle;
1605
delete trashmenutitle;
1606
delete editmenutitle;
1607
delete bookmarksmenutitle;
1608
delete viewmenutitle;
1609
delete lpanelmenutitle;
1610
delete rpanelmenutitle;
1611
delete helpmenutitle;
1612
delete generaltoolbar;
1613
delete paneltoolbar;
1614
delete toolstoolbar;
1620
delete btnforwardhist;
1627
// If Tab pressed, cycle through the panels
1628
long XFileExplorer::onKeyPress(FXObject* sender,FXSelector sel,void* ptr)
1630
FXEvent* event=(FXEvent*)ptr;
1633
// Tab was pressed : cycle through the panels from left to right
1634
if(event->code==KEY_Tab)
1636
if (dirpanel->shown())
1638
if (dirpanel->isActive())
1640
lpanel->setFocusOnList();
1641
current=lpanel->getCurrentItem();
1644
lpanel->setCurrentItem(current);
1645
lpanel->selectItem(current);
1647
else if ( (rpanel->shown()) && (lpanel->isActive()) )
1649
rpanel->setFocusOnList();
1650
current=rpanel->getCurrentItem();
1653
rpanel->setCurrentItem(current);
1654
rpanel->selectItem(current);
1658
dirpanel->setFocusOnList();
1659
current=lpanel->getCurrentItem();
1662
lpanel->deselectItem(current);
1665
else if (rpanel->shown())
1667
if (lpanel->getCurrent()==rpanel)
1669
lpanel->setActive();
1670
current=lpanel->getCurrentItem();
1673
lpanel->setCurrentItem(current);
1674
lpanel->selectItem(current);
1678
rpanel->setActive();
1679
current=rpanel->getCurrentItem();
1682
rpanel->setCurrentItem(current);
1683
rpanel->selectItem(current);
1689
// Shift-Tab was pressed : cycle through the panels from right to left
1690
else if( ((event->state&SHIFTMASK) && (event->code==KEY_Tab))
1691
|| ((event->state&SHIFTMASK) && (event->code==KEY_ISO_Left_Tab)) )
1693
if (rpanel->shown())
1695
if (rpanel->isActive())
1697
lpanel->setFocusOnList();
1698
current=lpanel->getCurrentItem();
1701
lpanel->setCurrentItem(current);
1702
lpanel->selectItem(current);
1704
else if (dirpanel->shown() && dirpanel->isActive())
1706
rpanel->setFocusOnList();
1707
current=rpanel->getCurrentItem();
1710
rpanel->setCurrentItem(current);
1711
rpanel->selectItem(current);
1713
else if (lpanel->isActive())
1715
if (dirpanel->shown())
1717
dirpanel->setFocusOnList();
1718
current=lpanel->getCurrentItem();
1721
lpanel->deselectItem(current);
1725
rpanel->setFocusOnList();
1726
current=rpanel->getCurrentItem();
1729
rpanel->setCurrentItem(current);
1730
rpanel->selectItem(current);
1736
if (dirpanel->isActive() && dirpanel->shown())
1738
lpanel->setFocusOnList();
1739
current=lpanel->getCurrentItem();
1742
lpanel->setCurrentItem(current);
1743
lpanel->selectItem(current);
1745
else if (dirpanel->shown())
1747
dirpanel->setFocusOnList();
1748
current=lpanel->getCurrentItem();
1751
lpanel->deselectItem(current);
1758
// Shift-F10 was pressed : open popup menu
1759
else if(event->state&SHIFTMASK && event->code==KEY_F10)
1761
lpanel->getCurrent()->handle(sender,FXSEL(SEL_COMMAND,FilePanel::ID_POPUP_MENU),ptr);
1765
// Any other key was pressed : handle the pressed key in the usual way
1768
if(FXTopWindow::onKeyPress(sender,sel,ptr))
1777
// Harvest the zombies
1778
long XFileExplorer::onSigHarvest(FXObject*,FXSelector,void*)
1780
while(waitpid(-1,NULL,WNOHANG)>0);
1786
long XFileExplorer::onQuit(FXObject*,FXSelector,void*)
1788
FXbool confirm_quit=getApp()->reg().readUnsignedEntry("OPTIONS","confirm_quit",TRUE);
1790
if(BOX_CLICKED_CANCEL==MessageBox::question(this,BOX_QUIT_CANCEL,_("Quitting Xfe"),_("Do you really want to quit Xfe?")))
1800
long XFileExplorer::onCmdDirUp(FXObject* sender,FXSelector,void*)
1802
lpanel->getCurrent()->handle(sender,FXSEL(SEL_COMMAND,FilePanel::ID_DIRECTORY_UP),NULL);
1804
// Set focus on dirpanel or filepanel
1805
if (panelfocus==DIRPANEL_FOCUS)
1806
dirpanel->setFocusOnList();
1808
lpanel->getCurrent()->setFocusOnList();
1815
long XFileExplorer::onCmdDirBack(FXObject*,FXSelector,void*)
1819
FilePanel* filepanel=lpanel->getCurrent();
1821
// Get the previous directory
1822
item=filepanel->backhistGetFirst();
1824
pathname=filepanel->backhistGetString(item);
1826
// Update the history
1827
filepanel->backhistRemoveFirstItem();
1828
filepanel->forwardhistInsertFirstItem(filepanel->getDirectory());
1830
// Go to the previous directory
1831
filepanel->setDirectory(pathname,FALSE);
1832
filepanel->updatePath();
1833
dirpanel->setDirectory(pathname,TRUE);
1835
// Set focus on dirpanel or filepanel
1836
if (panelfocus==DIRPANEL_FOCUS)
1837
dirpanel->setFocusOnList();
1839
filepanel->setFocusOnList();
1845
// Update directory back
1846
long XFileExplorer::onUpdDirBack(FXObject* sender, FXSelector, void* ptr)
1849
FilePanel* filepanel=lpanel->getCurrent();
1851
// Gray out the button if no item in history
1852
if (filepanel->backhistGetNumItems()==0)
1853
sender->handle(this,FXSEL(SEL_COMMAND,ID_DISABLE),ptr);
1855
sender->handle(this,FXSEL(SEL_COMMAND,ID_ENABLE),ptr);
1861
// Directory forward
1862
long XFileExplorer::onCmdDirForward(FXObject*,FXSelector,void*)
1866
FilePanel* filepanel=lpanel->getCurrent();
1868
// Get the next directory
1869
item=filepanel->forwardhistGetFirst();
1871
pathname=filepanel->forwardhistGetString(item);
1873
// Update the history
1874
filepanel->forwardhistRemoveFirstItem();
1875
filepanel->backhistInsertFirstItem(lpanel->getCurrent()->getDirectory());
1877
// Go to the next directory
1878
filepanel->setDirectory(pathname,FALSE);
1879
filepanel->updatePath();
1880
dirpanel->setDirectory(pathname,TRUE);
1882
// Set focus on dirpanel or filepanel
1883
if (panelfocus==DIRPANEL_FOCUS)
1884
dirpanel->setFocusOnList();
1886
filepanel->setFocusOnList();
1892
// Update directory forward
1893
long XFileExplorer::onUpdDirForward(FXObject* sender, FXSelector sel, void* ptr)
1896
FilePanel* filepanel=lpanel->getCurrent();
1898
// Gray out the button if no item in history
1899
if (filepanel->forwardhistGetNumItems()==0)
1900
sender->handle(this,FXSEL(SEL_COMMAND,ID_DISABLE),ptr);
1902
sender->handle(this,FXSEL(SEL_COMMAND,ID_ENABLE),ptr);
1908
// Directory back history
1909
long XFileExplorer::onCmdDirBackHist(FXObject *sender,FXSelector sel,void* ptr)
1913
FilePanel* filepanel=lpanel->getCurrent();
1915
// Get all string items and display them in a list box
1916
FXint num=filepanel->backhistGetNumItems();
1919
FXString *dirs= new FXString[num];
1920
FXString strlist="";
1923
item=filepanel->backhistGetFirst();
1925
for(FXint i=0; i<=num-1; i++)
1929
FXString str=filepanel->backhistGetString(item);
1931
for (FXint j=0; j<=nb-1; j++)
1942
strlist=strlist+str+"\n";
1945
item=filepanel->backhistGetNext(item);
1950
FXint pos=DirHistBox::box(btnbackhist,DECOR_NONE,strlist,this->getX()+40,this->getY()+60);
1952
// If an item was selected
1955
// Update back history
1957
filepanel->backhistRemoveAllItems();
1960
item=filepanel->backhistGetItemAtPos(pos+1);
1961
filepanel->backhistRemoveAllItemsBefore(item);
1964
// Update forward history
1965
filepanel->forwardhistInsertFirstItem(filepanel->getDirectory());
1968
for (FXint i=0; i<=pos-1; i++)
1969
filepanel->forwardhistInsertFirstItem(dirs[i]);
1972
// Go to to the selected directory
1974
filepanel->setDirectory(pathname,FALSE);
1975
filepanel->updatePath();
1976
dirpanel->setDirectory(pathname,TRUE);
1985
// Update directory back
1986
long XFileExplorer::onUpdDirBackHist(FXObject* sender, FXSelector sel, void* ptr)
1989
FilePanel* filepanel=lpanel->getCurrent();
1991
// Gray out the button if no item in history
1992
if (filepanel->backhistGetNumItems()==0)
1993
sender->handle(this,FXSEL(SEL_COMMAND,ID_DISABLE),ptr);
1995
sender->handle(this,FXSEL(SEL_COMMAND,ID_ENABLE),ptr);
2001
// Directory forward history
2002
long XFileExplorer::onCmdDirForwardHist(FXObject *sender,FXSelector sel,void* ptr)
2006
FilePanel* filepanel=lpanel->getCurrent();
2008
// Get all string items and display them in a list box
2009
FXint num=filepanel->forwardhistGetNumItems();
2012
FXString *dirs= new FXString[num];
2013
FXString strlist="";
2016
item=filepanel->forwardhistGetFirst();
2018
for(FXint i=0; i<=num-1; i++)
2022
FXString str=filepanel->forwardhistGetString(item);
2024
for (FXint j=0; j<=nb-1; j++)
2035
strlist=strlist+str+"\n";
2038
item=filepanel->forwardhistGetNext(item);
2043
FXint pos=DirHistBox::box(btnforwardhist,DECOR_NONE,strlist,this->getX()+85,this->getY()+60);
2045
// If an item was selected
2048
// Update forward history
2050
filepanel->forwardhistRemoveAllItems();
2053
item=filepanel->forwardhistGetItemAtPos(pos+1);
2054
filepanel->forwardhistRemoveAllItemsBefore(item);
2057
// Update back history
2058
filepanel->backhistInsertFirstItem(filepanel->getDirectory());
2061
for (FXint i=0; i<=pos-1; i++)
2062
filepanel->backhistInsertFirstItem(dirs[i]);
2065
// Go to to the selected directory
2067
filepanel->setDirectory(pathname,FALSE);
2068
filepanel->updatePath();
2069
dirpanel->setDirectory(pathname,TRUE);
2078
// Update directory forward
2079
long XFileExplorer::onUpdDirForwardHist(FXObject* sender, FXSelector sel, void* ptr)
2082
FilePanel* filepanel=lpanel->getCurrent();
2084
// Gray out the button if no item in history
2085
if (filepanel->forwardhistGetNumItems()==0)
2086
sender->handle(this,FXSEL(SEL_COMMAND,ID_DISABLE),ptr);
2088
sender->handle(this,FXSEL(SEL_COMMAND,ID_ENABLE),ptr);
2095
long XFileExplorer::onCmdBookmark(FXObject*, FXSelector s, void* p)
2097
if(FXSELID(s) == ID_ADD_BOOKMARK)
2099
bookmarks->appendBookmark(lpanel->getCurrent()->getDirectory());
2103
// Handle location address fields
2104
else if(FXSELID(s) == ID_BOOKMARK)
2106
lpanel->getCurrent()->setDirectory((FXchar*)p);
2107
lpanel->getCurrent()->updatePath();
2108
dirpanel->setDirectory((FXchar*)p,TRUE);
2111
FXint count=address->getNumItems();
2115
address->insertItem(0,address->getText());
2119
item=address->getItem(i++);
2120
if(streq((char*)p,(const char*)&item[0]))
2127
address->insertItem(0,(FXchar*)p);
2133
// Goto location entered into the text field;
2134
long XFileExplorer::onCmdGotoLocation(FXObject*,FXSelector,void*)
2136
// Location where we want to go
2137
FXString location=address->getText();
2139
// In case location is given in URI form, convert it
2140
location=::fileFromURI(location);
2142
// Get complete path
2143
FXString path=FXPath::absolute(lpanel->getCurrent()->getDirectory(),location);
2146
// Go up to the lowest directory which still exists
2147
while(!FXPath::isTopDirectory(dir) && !::isDirectory(dir))
2148
dir=FXPath::upLevel(dir);
2150
// Move to this existing directory
2151
lpanel->getCurrent()->setDirectory(dir);
2152
lpanel->getCurrent()->updatePath();
2153
dirpanel->setDirectory(dir,TRUE);
2154
address->setText(dir);
2160
// Clear location bar
2161
long XFileExplorer::onCmdClearLocation(FXObject*,FXSelector,void*)
2163
address->setText(FXString::null);
2164
address->CursorEnd();
2168
// Restart the application when required
2169
long XFileExplorer::onCmdRestart(FXObject*,FXSelector,void*)
2180
// Start a new Xfe session
2181
long XFileExplorer::onCmdNewWindow(FXObject*,FXSelector,void*)
2183
FXString cmd="xfe " + homedir + " &";
2189
long XFileExplorer::onCmdXTerm(FXObject*,FXSelector,void*)
2191
getApp()->beginWaitCursor();
2192
FXString xterm=getApp()->reg().readStringEntry("PROGS","xterm","xterm -sb");
2193
chdir(lpanel->getCurrent()->getDirectory().text());
2197
lpanel->getCurrent()->setFocusOnList();
2198
chdir(startlocation.text());
2199
getApp()->endWaitCursor();
2205
long XFileExplorer::onCmdHelp(FXObject*,FXSelector,void*)
2207
// Display help window
2208
if (helpwindow==NULL)
2209
helpwindow=new TextWindow(getApp(),_("Help"),40,120);
2210
helpwindow->setIcon(helpicon);
2214
fontspec=getApp()->reg().readStringEntry("SETTINGS","textfont","Helvetica,100,normal,regular");
2215
if(!fontspec.empty())
2217
FXFont* font=new FXFont(getApp(),fontspec);
2219
helpwindow->setFont(font);
2222
// NB: The HELP_TEXT macro is defined in help.h
2223
FXString str=(FXString)" "+COPYRIGHT+HELP_TEXT;
2224
helpwindow->setText(str.text());
2226
helpwindow->create();
2227
helpwindow->show(PLACEMENT_OWNER);
2228
lpanel->getCurrent()->setFocusOnList();
2234
long XFileExplorer::onCmdAbout(FXObject*,FXSelector,void*)
2237
msg.format(_("X File Explorer Version %s"),VERSION);
2238
FXString copyright=(FXString)"\n\n" + COPYRIGHT + "\n\n" + _("Based on X WinCommander by Maxim Baranov\n");
2239
FXString translators=
2242
Argentinian Spanish: Bruno Gilberto Luciani\n\
2243
Brazilian Portuguese: Eduardo R.B.S., Jose Carlos Medeiros,\n\
2244
Phantom X, Tomas Acauan Schertel\n\
2245
Bosnian: Samir Ribi, Bajrami Emran, Balagija Jasmina,\n\
2246
Bilalovi, Omar Cogo Emir\n\
2249
Chinese (Taïwan): Wei-Lun Chao\n\
2250
Czech: David Vachulka\n\
2251
Danish: Jonas Bardino, Vidar Jon Bauge\n\
2252
French: Claude Leo Mercier, Roland Baudin\n\
2253
German: Bastian Kleineidam, Joachim Wiedorn, Tim Benke, Jens Körner\n\
2254
Greek: Nikos Papadopoulos\n\
2255
Hungarian: Attila Szervac, Sandor Sipos\n\
2256
Italian: Claudio Fontana, Giorgio Moscardi\n\
2257
Japanese: Karl Skewes\n\
2258
Norwegian: Vidar Jon Bauge\n\
2259
Polish: Jacek Dziura, Franciszek Janowski\n\
2260
Portuguese: Miguel Santinho\n\
2261
Russian: Dimitri Sertolov, Vad Vad\n\
2262
Spanish: Felix Medrano Sanz, Lucas 'Basurero' Vieites,\n\
2264
Swedish: Anders F. Bjorklund\n\
2268
msg = msg + copyright + translators;
2269
MessageBox about(this,_("About X File Explorer"),msg.text(),xfeicon,BOX_OK|DECOR_TITLE|DECOR_BORDER,
2270
JUSTIFY_CENTER_X|ICON_BEFORE_TEXT|LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FILL_X|LAYOUT_FILL_Y);
2271
about.execute(PLACEMENT_OWNER);
2272
lpanel->getCurrent()->setFocusOnList();
2277
// Handle file association (called by Properties.cc and FilePanel.cc)
2278
long XFileExplorer::onCmdFileAssoc(FXObject*,FXSelector s,void *p)
2280
char **str=(char**)p;
2284
// ext=extension, cmd=associated command
2285
// replace : to allow immediate association in Xfe
2286
FileDict *associations=lpanel->getAssociations();
2287
associations->replace(ext,cmd);
2288
associations=rpanel->getAssociations();
2289
associations->replace(ext,cmd);
2297
// FilePanel and DirPanel refresh
2298
long XFileExplorer::onCmdRefresh(FXObject*,FXSelector,void*)
2300
getApp()->beginWaitCursor();
2303
dirpanel->forceDevicesRefresh();
2305
lpanel->getCurrent()->onCmdRefresh(0,0,0);
2306
dirpanel->forceRefresh();
2307
getApp()->endWaitCursor();
2312
// Update file location
2313
long XFileExplorer::onUpdFileLocation(FXObject* sender,FXSelector,void*)
2315
FXString currentdir=lpanel->getCurrent()->getDirectory();
2316
if (currentdir != prevdir)
2318
address->setText(::cleanPath(currentdir));
2325
// Switch between the four possible panel views
2326
long XFileExplorer::onCmdShowPanels(FXObject* sender,FXSelector sel,void* ptr)
2329
FXint window_width=getWidth();
2331
switch(FXSELID(sel))
2333
case ID_SHOW_ONE_PANEL:
2334
panel_view=ONE_PANEL;
2335
if (dirpanel->shown())
2336
dirpanel->handle(sender,FXSEL(SEL_COMMAND,DirPanel::ID_TOGGLE_TREE),ptr);
2337
if (rpanel->shown())
2338
rpanel->handle(sender,FXSEL(SEL_COMMAND,FXWindow::ID_TOGGLESHOWN),ptr);
2339
// Handle drag corner
2340
rpanel->showCorner(FALSE);
2341
lpanel->showCorner(TRUE);
2342
// Handle active icon
2343
lpanel->showActiveIcon(FALSE);
2347
case ID_SHOW_TWO_PANELS:
2348
panel_view=TWO_PANELS;
2349
lpanel->setWidth((FXint)round(twopanels_lpanel_pct*window_width));
2350
if (dirpanel->shown())
2351
dirpanel->handle(sender,FXSEL(SEL_COMMAND,DirPanel::ID_TOGGLE_TREE),ptr);
2352
if (!rpanel->shown())
2353
rpanel->handle(sender,FXSEL(SEL_COMMAND,FXWindow::ID_TOGGLESHOWN),ptr);
2354
// Handle drag corner
2355
rpanel->showCorner(TRUE);
2356
lpanel->showCorner(FALSE);
2357
// Handle active icon
2358
lpanel->showActiveIcon(TRUE);
2361
case ID_SHOW_TREE_PANEL:
2362
panel_view=TREE_PANEL;
2363
dirpanel->setWidth((FXint)round(treepanel_tree_pct*window_width) );
2364
if (!dirpanel->shown())
2365
dirpanel->handle(sender,FXSEL(SEL_COMMAND,DirPanel::ID_TOGGLE_TREE),ptr);
2366
if (rpanel->shown())
2367
rpanel->handle(sender,FXSEL(SEL_COMMAND,FXWindow::ID_TOGGLESHOWN),ptr);
2368
// Handle drag corner
2369
rpanel->showCorner(FALSE);
2370
lpanel->showCorner(TRUE);
2371
// Handle active icon
2372
lpanel->showActiveIcon(TRUE);
2375
case ID_SHOW_TREE_TWO_PANELS:
2376
panel_view=TREE_TWO_PANELS;
2377
dirpanel->setWidth((FXint)round(treetwopanels_tree_pct*window_width) );
2378
lpanel->setWidth((FXint)round(treetwopanels_lpanel_pct*window_width) );
2379
if (!dirpanel->shown())
2380
dirpanel->handle(sender,FXSEL(SEL_COMMAND,DirPanel::ID_TOGGLE_TREE),ptr);
2381
if (!rpanel->shown())
2382
rpanel->handle(sender,FXSEL(SEL_COMMAND,FXWindow::ID_TOGGLESHOWN),ptr);
2383
// Handle drag corner
2384
lpanel->showCorner(FALSE);
2385
rpanel->showCorner(TRUE);
2386
// Handle active icon
2387
lpanel->showActiveIcon(TRUE);
2391
// Set focus on current panel
2392
lpanel->getCurrent()->setFocusOnList();
2398
// Update the panels
2399
long XFileExplorer::onUpdShowPanels(FXObject* sender,FXSelector sel,void* ptr)
2401
// Keep the panel sizes relative to the window width (if option enabled)
2403
register FXint width;
2405
// Get the current window width
2408
// If width has changed and relative resizing option is enabled
2409
if (relative_resize && prev_width!=width)
2411
// One panel mode not relevant
2414
if (!dirpanel->shown() && rpanel->shown())
2416
// Set left panel width to the new value
2417
lpanel->setWidth((FXint)round(twopanels_lpanel_pct*width));
2421
else if (dirpanel->shown() && !rpanel->shown())
2423
// Set dirpanel width to the new value
2424
dirpanel->setWidth((FXint)round(treepanel_tree_pct * width) );
2427
// Tree and two panels mode
2428
else if (dirpanel->shown() && rpanel->shown())
2430
// Set dirpanel width to the new value
2431
dirpanel->setWidth((FXint)round(treetwopanels_tree_pct * width) );
2433
// Set left panel width to the new value
2434
lpanel->setWidth((FXint)round(treetwopanels_lpanel_pct * width) );
2438
// Update previous window width
2442
// Update the panel menus and the panel display
2443
FXuint msg=FXWindow::ID_UNCHECK;
2444
switch(FXSELID(sel))
2446
case ID_SHOW_ONE_PANEL:
2447
if (!dirpanel->shown() && !rpanel->shown())
2449
msg = FXWindow::ID_CHECK;
2450
if(rpanelmenutitle->shown())
2452
rpanelmenutitle->hide();
2453
rpanelmenutitle->disable();
2454
lpanelmenutitle->setText(_("&Panel"));
2457
lpanel->setActive();
2462
case ID_SHOW_TWO_PANELS:
2463
if (!dirpanel->shown() && rpanel->shown())
2465
// Update the left panel relative size (only if the window size is sufficient)
2467
twopanels_lpanel_pct=(FXdouble)(lpanel->getWidth())/(FXdouble)(getWidth());
2469
msg=FXWindow::ID_CHECK;
2470
if(!rpanelmenutitle->shown())
2472
rpanelmenutitle->enable();
2473
rpanelmenutitle->show();
2474
rpanelmenutitle->setText(_("&Right panel"));
2475
lpanelmenutitle->setText(_("&Left panel"));
2477
lpanel->setActive();
2482
case ID_SHOW_TREE_PANEL:
2483
if (dirpanel->shown() && !rpanel->shown())
2485
// Update the tree panel relative size (only if the window size is sufficient)
2487
treepanel_tree_pct=(FXdouble)(dirpanel->getWidth())/(FXdouble)(getWidth());
2489
msg=FXWindow::ID_CHECK;
2490
if(rpanelmenutitle->shown())
2492
rpanelmenutitle->hide();
2493
rpanelmenutitle->disable();
2494
lpanelmenutitle->setText(_("&Panel"));
2496
lpanel->setActive();
2501
case ID_SHOW_TREE_TWO_PANELS:
2502
if (dirpanel->shown() && rpanel->shown())
2504
// Update the tree panel relative size (only if the window size is sufficient)
2506
treetwopanels_tree_pct=(FXdouble)(dirpanel->getWidth())/(FXdouble)(getWidth());
2508
// Update the left panel relative size (only if the window size is sufficient)
2510
treetwopanels_lpanel_pct=(FXdouble)(lpanel->getWidth())/(FXdouble)(getWidth());
2512
msg = FXWindow::ID_CHECK;
2513
if(!rpanelmenutitle->shown())
2515
rpanelmenutitle->enable();
2516
rpanelmenutitle->show();
2517
rpanelmenutitle->setText(_("&Right panel"));
2518
lpanelmenutitle->setText(_("&Left panel"));
2520
lpanel->setActive();
2525
sender->handle(this,FXSEL(SEL_COMMAND,msg),ptr);
2531
// Synchronize the panels to the same directory
2532
long XFileExplorer::onCmdSynchronizePanels(FXObject* sender,FXSelector sel,void*)
2536
// Left panel is active
2537
if (lpanel->getCurrent() == lpanel)
2539
dir=lpanel->getDirectory();
2540
rpanel->setDirectory(dir);
2541
rpanel->updatePath();
2544
// Right panel is active
2547
dir=rpanel->getDirectory();
2548
lpanel->setDirectory(dir);
2549
lpanel->updatePath();
2556
// Update the synchronize panels menu item
2557
long XFileExplorer::onUpdSynchronizePanels(FXObject* o,FXSelector,void*)
2559
if (rpanel->shown())
2560
o->handle(this,FXSEL(SEL_COMMAND,FXWindow::ID_ENABLE),NULL);
2562
o->handle(this,FXSEL(SEL_COMMAND,FXWindow::ID_DISABLE),NULL);
2568
// Switch the panels
2569
long XFileExplorer::onCmdSwitchPanels(FXObject* sender,FXSelector sel,void*)
2571
FXString leftdir, rightdir;
2573
leftdir=lpanel->getDirectory();
2574
rightdir=rpanel->getDirectory();
2575
lpanel->setDirectory(rightdir);
2576
lpanel->updatePath();
2577
rpanel->setDirectory(leftdir);
2578
rpanel->updatePath();
2584
// Update the switch panels menu item
2585
long XFileExplorer::onUpdSwitchPanels(FXObject* o,FXSelector,void*)
2587
if (rpanel->shown())
2588
o->handle(this,FXSEL(SEL_COMMAND,FXWindow::ID_ENABLE),NULL);
2590
o->handle(this,FXSEL(SEL_COMMAND,FXWindow::ID_DISABLE),NULL);
2597
long XFileExplorer::onCmdPrefs(FXObject*,FXSelector s,void *p)
2599
if (prefsdialog==NULL)
2600
prefsdialog=new PreferencesBox(this,listbackcolor,listforecolor,highlightcolor,pbarcolor,attentioncolor);
2601
prefsdialog->execute(PLACEMENT_SCREEN);
2602
lpanel->getCurrent()->setFocusOnList();
2607
// Toggle status bar
2608
long XFileExplorer::onCmdToggleStatus(FXObject*,FXSelector s,void *p)
2610
dirpanel->toggleStatusbar();
2611
lpanel->toggleStatusbar();
2612
rpanel->toggleStatusbar();
2617
long XFileExplorer::onUpdToggleStatus(FXObject *o,FXSelector s,void *p)
2619
FXMenuCheck *cmd =(FXMenuCheck*)o;
2620
if(lpanel->statusbarShown())
2621
cmd->setCheck(TRUE);
2623
cmd->setCheck(FALSE);
2628
// Run shell command or X program
2629
long XFileExplorer::onCmdRun(FXObject*,FXSelector,void*)
2631
chdir(lpanel->getCurrent()->getDirectory().text());
2632
FXString command="";
2633
if (rundialog==NULL)
2634
rundialog=new HistInputDialog(this,"",_("Execute the command:"),_("Execute command"),"", NULL,HIST_INPUT_EXECUTABLE_FILE,TRUE, _("Console mode"));
2635
rundialog->create();
2636
rundialog->setText(command);
2637
rundialog->CursorEnd();
2638
rundialog->SelectAll();
2639
rundialog->clearItems();
2641
for(int i=0;i<RunHistSize;i++)
2642
rundialog->appendItem(RunHistory[i]);
2644
rundialog->setDirectory(ROOTDIR);
2645
if(rundialog->execute())
2647
command=rundialog->getText();
2650
// Execute command in command window
2651
if (rundialog->getOption())
2653
// Make and show command window
2654
CommandWindow *cmdwin=new CommandWindow(getApp(),_("Command log"),command,30,80);
2656
cmdwin->setIcon(runicon);
2658
// The CommandWindow object will delete itself when closed!
2661
// Execute silently in background
2665
system(command.text());
2668
// Update history list
2669
RunHistSize=rundialog->getHistorySize();
2670
command=rundialog->getText();
2672
// Check if cmd is a new string, i.e. is not already in history
2674
for (FXint i=0;i<RunHistSize-1;i++)
2676
if (streq(RunHistory[i],command.text()))
2683
// No new string or history limit reached
2684
if (!newstr || RunHistSize>RUN_HIST_SIZE)
2691
strlcpy(RunHistory[0],command.text(),command.length()+1);
2692
for(FXint i=1;i<RunHistSize;i++)
2693
strlcpy(RunHistory[i],rundialog->getHistoryItem(i-1).text(),rundialog->getHistoryItem(i-1).length()+1);
2696
chdir(startlocation.text());
2697
lpanel->getCurrent()->setFocusOnList();
2702
// Run an Xfe as root
2703
long XFileExplorer::onCmdSu(FXObject*,FXSelector,void*)
2706
getApp()->beginWaitCursor();
2708
// Obtain preferred root mode
2709
FXbool use_sudo=getApp()->reg().readUnsignedEntry("OPTIONS","use_sudo",FALSE);
2711
// Select sudo or su to launch xfe as root
2712
chdir(lpanel->getCurrent()->getDirectory().text());
2713
FXString title, sucmd;
2716
title = _("Enter the user password:");
2721
title = _("Enter the root password:");
2725
// Use appropriate background and foreground colors for Xvt
2727
fxnamefromcolor(color,getApp()->getBackColor());
2728
FXString bg=" -bg ";
2730
fxnamefromcolor(color,getApp()->getForeColor());
2731
FXString fg=" -fg ";
2732
fg = fg + color + " ";
2735
FXString command = "xvt -title " + ::quote(title) + bg + fg + sucmd;
2737
// Execute su or sudo command in an internal Xvt terminal
2738
FXint status=runinxvt(command);
2741
chdir(startlocation.text());
2744
MessageBox::error(getApp(),BOX_OK,_("Error"),_("An error has occurred!"));
2745
getApp()->endWaitCursor();
2750
getApp()->endWaitCursor();
2756
long XFileExplorer::onCmdEmptyTrash(FXObject*,FXSelector sel,void* ptr)
2758
// Confirmation message
2759
FXString message=_("Do you really want to empty the trash can?\n\nAll items will be definitively lost!");
2760
MessageBox box(this,_("Empty trash can"),message,trash_full_bigicon,BOX_OK_CANCEL|DECOR_TITLE|DECOR_BORDER);
2761
if(box.execute(PLACEMENT_CURSOR) != BOX_CLICKED_OK)
2765
getApp()->beginWaitCursor();
2767
// Delete trash can files folder
2769
f=new File(this,_("File delete"),DELETE);
2771
f->remove(trashfileslocation);
2774
// Delete trash can info folder
2775
f=new File(this,_("File delete"),DELETE);
2777
f->remove(trashinfolocation);
2780
// Re-create the trash can files directory
2781
if (!::exists(trashfileslocation))
2784
FXint ret=mkpath(trashfileslocation.text(),0755);
2785
FXint errcode=errno;
2789
MessageBox::error(this,BOX_OK,_("Error"),_("Can't create trash can 'files' folder %s: %s"),trashfileslocation.text(),strerror(errcode));
2791
MessageBox::error(this,BOX_OK,_("Error"),_("Can't create trash can 'files' folder %s"),trashfileslocation.text());
2795
// Re-create the trash can info directory
2796
if (!::exists(trashinfolocation))
2799
FXint ret=mkpath(trashinfolocation.text(),0755);
2800
FXint errcode=errno;
2804
MessageBox::error(this,BOX_OK,_("Error"),_("Can't create trash can 'info' folder %s: %s"),trashinfolocation.text(),strerror(errcode));
2806
MessageBox::error(this,BOX_OK,_("Error"),_("Can't create trash can 'info' folder %s"),trashinfolocation.text());
2811
getApp()->endWaitCursor();
2813
onCmdRefresh(0,0,0);
2819
// Display trash size
2820
long XFileExplorer::onCmdTrashSize(FXObject*,FXSelector sel,void*)
2823
FXString trashsize, trashmtime, trashnbfiles, trashnbfolders;
2824
if (lstatrep(trashfileslocation.text(),&linfo)==0)
2827
trashmtime=FXSystem::time("%c",linfo.st_mtime);
2828
FXchar buf[MAXPATHLEN];
2829
unsigned long long dirsize=0;
2830
FXuint nbfiles=0, nbsubfolders=0;
2831
strlcpy(buf,trashfileslocation.text(),trashfileslocation.length()+1);
2832
dirsize=pathsize(buf,&nbfiles,&nbsubfolders);
2833
snprintf(buf,sizeof(buf),"%llu",dirsize);
2834
trashsize=::hSize(buf);
2835
trashnbfiles=FXStringVal(nbfiles-nbsubfolders);
2836
trashnbfolders=FXStringVal(nbsubfolders-1);
2840
msg.format(_("Trash size: %s (%s files, %s subfolders)\n\nModified date: %s"),
2841
trashsize.text(),trashnbfiles.text(),trashnbfolders.text(),trashmtime.text());
2842
MessageBox dialog(this,_("Trash size"),msg.text(),delete_bigicon,BOX_OK|DECOR_TITLE|DECOR_BORDER,
2843
JUSTIFY_LEFT|ICON_BEFORE_TEXT|LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FILL_X|LAYOUT_FILL_Y);
2844
dialog.execute(PLACEMENT_CURSOR);
2849
MessageBox::error(this,BOX_OK,_("Error"),_("Trash can 'files' folder %s is not readable!"),trashfileslocation.text());
2857
// File copy to clipboard
2858
long XFileExplorer::onCmdFileCopyClp(FXObject* o, FXSelector sel, void*)
2860
if (dirpanel->isActive())
2861
dirpanel->handle(o,FXSEL(SEL_COMMAND,DirPanel::ID_COPY_CLIPBOARD),NULL);
2864
lpanel->getCurrent()->handle(o,FXSEL(SEL_COMMAND,FilePanel::ID_COPY_CLIPBOARD),NULL);
2870
// File cut to clipboard
2871
long XFileExplorer::onCmdFileCutClp(FXObject* o, FXSelector sel, void*)
2873
if (dirpanel->isActive())
2874
dirpanel->handle(o,FXSEL(SEL_COMMAND,DirPanel::ID_CUT_CLIPBOARD),NULL);
2877
lpanel->getCurrent()->handle(o,FXSEL(SEL_COMMAND,FilePanel::ID_CUT_CLIPBOARD),NULL);
2883
// File paste from clipboard
2884
long XFileExplorer::onCmdFilePasteClp(FXObject* o, FXSelector sel, void*)
2886
if (dirpanel->isActive())
2887
dirpanel->handle(o,FXSEL(SEL_COMMAND,DirPanel::ID_PASTE_CLIPBOARD),NULL);
2890
lpanel->getCurrent()->handle(o,FXSEL(SEL_COMMAND,FilePanel::ID_PASTE_CLIPBOARD),NULL);
2896
long XFileExplorer::onCmdFileRename(FXObject* o, FXSelector sel, void*)
2898
lpanel->getCurrent()->handle(o,FXSEL(SEL_COMMAND,FilePanel::ID_FILE_RENAME),NULL);
2904
long XFileExplorer::onCmdFileMoveto(FXObject* o, FXSelector sel, void* ptr)
2906
if (dirpanel->isActive())
2907
dirpanel->handle(o,FXSEL(SEL_COMMAND,DirPanel::ID_DIR_MOVETO),ptr);
2910
lpanel->getCurrent()->handle(o,FXSEL(SEL_COMMAND,FilePanel::ID_FILE_MOVETO),NULL);
2916
long XFileExplorer::onCmdFileCopyto(FXObject* o, FXSelector sel, void* ptr)
2918
if (dirpanel->isActive())
2919
dirpanel->handle(o,FXSEL(SEL_COMMAND,DirPanel::ID_DIR_COPYTO),ptr);
2922
lpanel->getCurrent()->handle(o,FXSEL(SEL_COMMAND,FilePanel::ID_FILE_COPYTO),NULL);
2929
long XFileExplorer::onCmdFileSymlink(FXObject* o, FXSelector sel, void* ptr)
2931
if (dirpanel->isActive())
2932
dirpanel->handle(o,FXSEL(SEL_COMMAND,DirPanel::ID_DIR_SYMLINK),ptr);
2935
lpanel->getCurrent()->handle(o,FXSEL(SEL_COMMAND,FilePanel::ID_FILE_SYMLINK),NULL);
2942
long XFileExplorer::onCmdFileTrash(FXObject* o, FXSelector sel, void* ptr)
2944
if (dirpanel->isActive())
2945
dirpanel->handle(o,FXSEL(SEL_COMMAND,DirPanel::ID_DIR_TRASH),ptr);
2948
lpanel->getCurrent()->handle(o,FXSEL(SEL_COMMAND,FilePanel::ID_FILE_TRASH),ptr);
2955
long XFileExplorer::onCmdFileRestore(FXObject* o,FXSelector sel,void* ptr)
2957
if (dirpanel->isActive())
2958
dirpanel->handle(o,FXSEL(SEL_COMMAND,DirPanel::ID_DIR_RESTORE),ptr);
2961
lpanel->getCurrent()->handle(o,FXSEL(SEL_COMMAND,FilePanel::ID_FILE_RESTORE),ptr);
2968
long XFileExplorer::onCmdFileDelete(FXObject* o,FXSelector sel,void* ptr)
2970
if (dirpanel->isActive())
2971
dirpanel->handle(o,FXSEL(SEL_COMMAND,DirPanel::ID_DIR_DELETE),ptr);
2974
lpanel->getCurrent()->handle(o,FXSEL(SEL_COMMAND,FilePanel::ID_FILE_DELETE),ptr);
2981
long XFileExplorer::onCmdFileProperties(FXObject* o,FXSelector sel,void*)
2983
if (dirpanel->isActive())
2984
dirpanel->handle(o,FXSEL(SEL_COMMAND,DirPanel::ID_PROPERTIES),NULL);
2987
lpanel->getCurrent()->handle(o,FXSEL(SEL_COMMAND,FilePanel::ID_PROPERTIES),NULL);
2993
// Update the empty trash can and trash menus
2994
long XFileExplorer::onUpdEmptyTrash(FXObject* o,FXSelector,void* ptr)
2997
FXbool use_trash_can=getApp()->reg().readUnsignedEntry("OPTIONS","use_trash_can",TRUE);
3000
// Update the empty trash can menu
3001
o->handle(this,FXSEL(SEL_COMMAND,FXWindow::ID_ENABLE),NULL);
3003
// Update the trash menu title
3004
helpmenutitle->setText("");
3005
trashmenutitle->setText(_("T&rash"));
3006
trashmenutitle->enable();
3007
trashmenutitle->show();
3008
helpmenutitle->setText(_("&Help"));
3012
// Update the empty trash can menu
3013
o->handle(this,FXSEL(SEL_COMMAND,FXWindow::ID_DISABLE),NULL);
3015
// Update the trash menu title
3016
trashmenutitle->hide();
3017
trashmenutitle->disable();
3018
helpmenutitle->setText("");
3019
helpmenutitle->setText(_("&Help"));
3026
// Update the trash size menu
3027
long XFileExplorer::onUpdTrashSize(FXObject* o,FXSelector,void*)
3029
FXbool use_trash_can=getApp()->reg().readUnsignedEntry("OPTIONS","use_trash_can",TRUE);
3031
o->handle(this,FXSEL(SEL_COMMAND,FXWindow::ID_ENABLE),NULL);
3033
o->handle(this,FXSEL(SEL_COMMAND,FXWindow::ID_DISABLE),NULL);
3039
// Update the file delete menu item
3040
long XFileExplorer::onUpdFileDelete(FXObject* o,FXSelector,void* ptr)
3042
if (dirpanel->isActive())
3043
dirpanel->handle(o,FXSEL(SEL_UPDATE,DirPanel::ID_DIR_DELETE),ptr);
3046
lpanel->getCurrent()->handle(o,FXSEL(SEL_UPDATE,FilePanel::ID_FILE_DELETE),ptr);
3052
// Update the move to trash menu item
3053
long XFileExplorer::onUpdFileTrash(FXObject* o,FXSelector,void* ptr)
3055
if (dirpanel->isActive())
3056
dirpanel->handle(o,FXSEL(SEL_UPDATE,DirPanel::ID_DIR_TRASH),ptr);
3059
lpanel->getCurrent()->handle(o,FXSEL(SEL_UPDATE,FilePanel::ID_FILE_TRASH),ptr);
3065
// Update the restore from trash menu item
3066
long XFileExplorer::onUpdFileRestore(FXObject* o,FXSelector,void* ptr)
3068
if (dirpanel->isActive())
3069
dirpanel->handle(o,FXSEL(SEL_UPDATE,DirPanel::ID_DIR_RESTORE),ptr);
3072
lpanel->getCurrent()->handle(o,FXSEL(SEL_UPDATE,FilePanel::ID_FILE_RESTORE),ptr);
3078
// Update the file operation menu items
3079
long XFileExplorer::onUpdFileMan(FXObject* o,FXSelector,void*)
3081
// Update the panelfocus variable
3082
if (lpanel->getCurrent()->isActive())
3083
panelfocus=FILEPANEL_FOCUS;
3084
if (dirpanel->isActive())
3085
panelfocus=DIRPANEL_FOCUS;
3087
// Update the file operation menu items
3088
if (dirpanel->isActive())
3090
o->handle(this,FXSEL(SEL_COMMAND,FXWindow::ID_ENABLE),NULL);
3094
FXint num=lpanel->getCurrent()->getNumSelectedItems();
3096
o->handle(this,FXSEL(SEL_COMMAND,FXWindow::ID_DISABLE),NULL);
3097
else if (num==1 && lpanel->getCurrent()->isItemSelected(0))
3098
o->handle(this,FXSEL(SEL_COMMAND,FXWindow::ID_DISABLE),NULL);
3100
o->handle(this,FXSEL(SEL_COMMAND,FXWindow::ID_ENABLE),NULL);
3107
// Update the file rename menu items
3108
long XFileExplorer::onUpdFileRename(FXObject* o,FXSelector,void*)
3110
FXint num=lpanel->getCurrent()->getNumSelectedItems();
3113
if (lpanel->getCurrent()->isItemSelected(0))
3114
o->handle(this,FXSEL(SEL_COMMAND,FXWindow::ID_DISABLE),NULL);
3116
o->handle(this,FXSEL(SEL_COMMAND,FXWindow::ID_ENABLE),NULL);
3119
o->handle(this,FXSEL(SEL_COMMAND,FXWindow::ID_DISABLE),NULL);
3124
// Update the paste menu and button
3125
long XFileExplorer::onUpdFilePaste(FXObject* o,FXSelector sel,void*)
3127
lpanel->getCurrent()->handle(o,FXSEL(SEL_UPDATE,FilePanel::ID_PASTE_CLIPBOARD),NULL);
3132
// Update the root menu items
3133
long XFileExplorer::onUpdSu(FXObject* o,FXSelector,void*)
3135
FXbool root_mode=getApp()->reg().readUnsignedEntry("OPTIONS","root_mode",TRUE);
3137
if (!root_mode || getuid()==0)
3138
o->handle(this,FXSEL(SEL_COMMAND,FXWindow::ID_DISABLE),NULL);
3140
o->handle(this,FXSEL(SEL_COMMAND,FXWindow::ID_ENABLE),NULL);