//=========================================== // Lumina-DE source code // Copyright (c) 2015, Ken Moore // Available under the 3-clause BSD license // See the LICENSE file for full details //=========================================== #ifndef _LUMINA_FM_DIRECTORY_BROWSER_WIDGET_H #define _LUMINA_FM_DIRECTORY_BROWSER_WIDGET_H #include #include #include #include #include #include #include #include #include #include #include #include "../BrowserWidget.h" #define ZSNAPDIR QString("/.zfs/snapshot/") namespace Ui{ class DirWidget; }; class DirWidget : public QWidget{ Q_OBJECT public: enum DETAILTYPES{ NAME, SIZE, TYPE, DATEMOD, DATECREATE}; DirWidget(QString objID, QSettings *settings, QWidget *parent = 0); //needs a unique ID (to distinguish from other DirWidgets) ~DirWidget(); void cleanup(); //called before the browser is closed down //Directory Managment void ChangeDir(QString dirpath); void setDirCompleter(QCompleter *comp); //Information QString id(); QString currentDir(); QFileSystemModel *dirtreeModel; QStringList PREFAPPS; //View Settings void setShowDetails(bool show); void showHidden(bool show); void showThumbnails(bool show); void setThumbnailSize(int px); void setFocusLineDir(); void adjustTreeWidget(float percent); //percent between 0-100 void setTreeSortMode(int num); //0-4 BrowserWidget* currentBrowser(); static void createNewFolder(QWidget *parent, BrowserWidget *browser); public slots: //void LoadDir(QString dir, LFileInfoList list); void LoadSnaps(QString basedir, QStringList snaps); //Refresh options void refresh(); //Refresh current directory //Theme change functions void UpdateIcons(); void UpdateText(); private: Ui::DirWidget *ui; BrowserWidget *BW, *RCBW; //Main BrowserWidget and right-column browser widget QString ID, cBID; //unique ID assigned by the parent, and currently active browser widget QString normalbasedir, snapbasedir, snaprelpath, rootfmdir; //for maintaining directory context while moving between snapshots QStringList snapshots, needThumbs, tmpSel; QSettings *settings; bool canmodify; //The Toolbar and associated items QToolBar *toolbar; QLineEdit *line_dir; //The context menu and associated items QMenu *contextMenu, *cNewMenu, *cOpenMenu, *cFModMenu, *cFViewMenu, *cOpenWithMenu, *cArchiveMenu; //The keyboard shortcuts for context menu items QShortcut *kZoomIn, *kZoomOut, *kNewFile, *kNewDir, *kNewXDG, *kCut, *kCopy, *kPaste, *kRename, \ *kFav, *kDel, *kOpSS, *kOpMM, *kOpTerm, *kExtract, *kArchive; //Functions for internal use void createShortcuts(); //on init only void createMenus(); //on init only QStringList currentDirFiles(); //all the "files" available within the current dir/browser //QProcess *pExtract; //OpenWithMenu QString fileEXT, filePath; QStringList mimetypes, keys, files; //QStringList getPreferredApplications(); private slots: //UI BUTTONS/Actions void splitterMoved(); // -- Bottom Action Buttons void on_tool_zoom_in_clicked(); void on_tool_zoom_out_clicked(); // -- Top Snapshot Buttons void on_tool_snap_newer_clicked(); void on_tool_snap_older_clicked(); void on_slider_snap_valueChanged(int val = -1); void direct_snap_selected(QAction*); //Top Toolbar buttons void on_actionBack_triggered(); void on_actionUp_triggered(); void on_actionHome_triggered(); void dir_changed(); //user manually changed the directory void on_actionSingleColumn_triggered(bool); void on_actionDualColumn_triggered(bool); void on_actionMenu_triggered(); // - Other Actions without a specific button on the side void fileCheckSums(); void fileProperties(); void openTerminal(); void openRootFM(); //Browser Functions void OpenContextMenu(); void UpdateContextMenu(); void currentDirectoryChanged(QString dir, bool widgetonly = false); void currentDirectoryChanged(bool widgetonly = false); void dirStatusChanged(QString); void setCurrentBrowser(QString); void on_folderViewPane_clicked(const QModelIndex &index); //Context Menu Functions // - DIRECTORY operations void createNewFile(); void createNewDir(); void createNewXDGEntry(); //void createNewSymlink(); // - Selected FILE operations void cutFiles(); void copyFiles(); void pasteFiles(); void renameFiles(); void favoriteFiles(); void removeFiles(); void runFiles(); void runWithFiles(); //void attachToNewEmail(); void autoExtractFiles(); void autoArchiveFiles(); void setAsWallpaper(); // - Context-specific operations void openInSlideshow(); void openMultimedia(); void OpenWithApp(QAction*); signals: //Directory loading/finding signals void OpenDirectories(QStringList); //Directories to open in other tabs/columns void findSnaps(QString, QString); //ID, dirpath (Request snapshot information for a directory) void CloseBrowser(QString); //ID (Request that this browser be closed) void treeWidgetSizeChanged(float); //percent width //External App/Widget launching void PlayFiles(LFileInfoList); //open in multimedia player void ViewFiles(LFileInfoList); //open in slideshow void LaunchTerminal(QString); //dirpath //System Interactions void CutFiles(QStringList); //file selection void CopyFiles(QStringList); //file selection void PasteFiles(QString, QStringList); //current dir void FavoriteFiles(QStringList); //file selection void RenameFiles(QStringList); //file selection void RemoveFiles(QStringList); //file selection void TabNameChanged(QString, QString); //objID, new tab name protected: void mouseReleaseEvent(QMouseEvent *); }; #endif