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