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