1 //=========================================== 2 // Lumina-DE source code 3 // Copyright (c) 2014-2015, Ken Moore 4 // Available under the 3-clause BSD license 5 // See the LICENSE file for full details 6 //=========================================== 7 // This is the main interface for the Lumina File Manager (Insight) 8 //=========================================== 9 #ifndef _LUMINA_FILE_MANAGER_UI_H 10 #define _LUMINA_FILE_MANAGER_UI_H 11 // Qt includes 12 #include <QMainWindow> 13 #include <QTabBar> 14 #include <QLineEdit> 15 #include <QFileSystemModel> 16 #include <QStringList> 17 #include <QDebug> 18 #include <QAction> 19 #include <QProcess> 20 #include <QSettings> 21 #include <QInputDialog> 22 #include <QMessageBox> 23 #include <QDir> 24 #include <QTimer> 25 #include <QDateTime> 26 #include <QShortcut> 27 #include <QCompleter> 28 #include <QClipboard> 29 #include <QMimeData> 30 #include <QTreeWidgetItem> 31 #include <QListWidgetItem> 32 #include <QRadioButton> 33 #include <QWidgetAction> 34 #include <QImageReader> 35 #include <QScrollBar> 36 #include <QFileDialog> 37 #include <QResizeEvent> 38 #include <QDesktopWidget> 39 #include <QThread> 40 #include <QUrl> 41 #include <QThread> 42 43 //Multimedia Widgets 44 #include <QVideoWidget> 45 #include <QMediaPlayer> 46 47 // libLumina includes 48 #include <LuminaXDG.h> 49 #include <LuminaOS.h> 50 #include <LFileInfo.h> 51 52 // Local includes 53 //#include "FODialog.h" //file operation dialog 54 #include "TrayUI.h" 55 #include "BMMDialog.h" //bookmark manager dialog 56 57 #include "DirData.h" 58 #include "widgets/MultimediaWidget.h" 59 #include "widgets/SlideshowWidget.h" 60 #include "widgets/DirWidget2.h" 61 62 namespace Ui{ 63 class MainUI; 64 }; 65 66 class MainUI : public QMainWindow{ 67 Q_OBJECT 68 public: 69 MainUI(); 70 ~MainUI(); 71 //bool rootmode; 72 73 public slots: 74 void OpenDirs(QStringList); //also called from the main.cpp after initialization 75 void setupIcons(); //used during initialization 76 77 private: 78 Ui::MainUI *ui; 79 QThread *workThread; 80 DirData *worker; 81 //Internal non-ui widgets 82 QTabBar *tabBar; 83 //QFileSystemModel *fsmod; 84 QMenu *contextMenu, * menuSort_Mode; 85 QRadioButton *radio_view_details, *radio_view_list, *radio_sort_name, *radio_sort_size, *radio_sort_type, *radio_sort_datemod, *radio_sort_datecre;//, *radio_view_tabs, *radio_view_cols; 86 QWidgetAction *detWA, *listWA, *sortnameA, *sortsizeA, *sorttypeA, *sortdateMA, *sortdateCA; //, *tabsWA, *colsWA; 87 88 //UI Widgets 89 QList<DirWidget*> DWLIST; 90 MultimediaWidget *MW; 91 SlideshowWidget *SW; 92 TrayUI *TRAY; 93 bool waitingToClose; 94 95 QSettings *settings; 96 QShortcut *nextTabLShort, *nextTabRShort, *togglehiddenfilesShort, *focusDirWidgetShort; 97 //QShortcut *toggledirtreepaneShort; 98 //QCompleter *dirCompleter; 99 100 //Simplification Functions 101 void setupConnections(); //used during initialization 102 void loadSettings(); //used during initialization 103 104 void RebuildBookmarksMenu(); 105 void RebuildDeviceMenu(); 106 107 DirWidget* FindActiveBrowser(); 108 109 private slots: slotSingleInstance(QStringList in)110 void slotSingleInstance(QStringList in){ 111 this->show(); 112 this->raise(); 113 this->activateWindow(); 114 this->OpenDirs(in); 115 } 116 117 //void slotStartSyncTimer(); 118 119 //Menu Actions 120 void on_actionNew_Window_triggered(); 121 void on_actionNew_Tab_triggered(); 122 void on_actionSearch_triggered(); 123 void on_actionClose_Browser_triggered(); 124 void on_actionClose_triggered(); 125 void on_actionNew_Dir_triggered(); 126 /*void on_actionRename_triggered(); 127 void on_actionCut_Selection_triggered(); 128 void on_actionCopy_Selection_triggered(); 129 void on_actionPaste_triggered(); 130 void on_actionDelete_Selection_triggered();*/ 131 void on_actionRefresh_triggered(); 132 void on_actionView_Hidden_Files_triggered(); 133 void on_actionVerify_File_Delete_triggered(); 134 //void on_actionView_showDirTreePane_triggered(); 135 //void on_actionShow_Action_Buttons_triggered(); 136 void treeWidgetWidthChanged(float percent); 137 void on_actionShow_Thumbnails_triggered(); 138 void goToBookmark(QAction*); 139 void goToDevice(QAction*); 140 void viewModeChanged(bool); 141 void sortModeName(bool); 142 void sortModeSize(bool); 143 void sortModeType(bool); 144 void sortModeDateM(bool); 145 void sortModeDateC(bool); 146 147 //void groupModeChanged(bool); 148 void on_actionLarger_Icons_triggered(); 149 void on_actionSmaller_Icons_triggered(); 150 void CreateBookMark(); 151 //Git Menu options 152 void on_menuGit_aboutToShow(); 153 void on_actionRepo_Status_triggered(); 154 void on_actionClone_Repository_triggered(); 155 156 //Tab interactions 157 void tabChanged(int tab = -1); 158 void tabClosed(int tab = -1); 159 void nextTab(); //For keyboard shortcuts 160 void prevTab(); //For keyboard shortcuts 161 162 //Other Shortcuts 163 void togglehiddenfiles(); 164 //void toggleDirTreePane(); 165 void focusDirWidget(); 166 167 //Backend Info passing 168 //void DirDataAvailable(QString, QString, LFileInfoList); 169 void SnapshotDataAvailable(QString, QString, QStringList); 170 171 //Dir Browser Interactions 172 void OpenPlayer(LFileInfoList); 173 void OpenImages(LFileInfoList); 174 void OpenTerminal(QString dirpath); 175 void CutFiles(QStringList); //file selection 176 void CopyFiles(QStringList); //file selection 177 void PasteFiles(QString, QStringList raw = QStringList() ); //current dir, optional list of commands 178 void FavoriteFiles(QStringList); //file selection 179 void RenameFiles(QStringList); //file selection 180 void RemoveFiles(QStringList); //file selection 181 void CloseBrowser(QString); //ID 182 void TabNameChanged(QString, QString); // ID/name 183 184 //file info in status bar 185 void DisplayStatusBar(QString); 186 187 void TrayJobsFinished(); 188 189 void on_actionOpen_as_Root_triggered(); 190 191 signals: 192 void Si_AdaptStatusBar(QFileInfoList fileList, QString path, QString messageFolders, QString messageFiles); 193 194 protected: resizeEvent(QResizeEvent * ev)195 void resizeEvent(QResizeEvent *ev){ 196 //Save the new size to the settings file for later 197 settings->setValue("preferences/MainWindowSize", ev->size()); 198 QMainWindow::resizeEvent(ev); //just in case the window needs to see the event too 199 } 200 201 void closeEvent(QCloseEvent *ev); 202 203 }; 204 205 #endif 206