PCManFM-Qt
mainwindow.h
1 /*
2 
3  Copyright (C) 2013 Hong Jen Yee (PCMan) <pcman.tw@gmail.com>
4 
5  This program is free software; you can redistribute it and/or modify
6  it under the terms of the GNU General Public License as published by
7  the Free Software Foundation; either version 2 of the License, or
8  (at your option) any later version.
9 
10  This program is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU General Public License for more details.
14 
15  You should have received a copy of the GNU General Public License along
16  with this program; if not, write to the Free Software Foundation, Inc.,
17  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 */
19 
20 #ifndef FM_MAIN_WINDOW_H
21 #define FM_MAIN_WINDOW_H
22 
23 #include "ui_main-win.h"
24 #include <QPointer>
25 #include <QMainWindow>
26 #include <QListView>
27 #include <QSortFilterProxyModel>
28 #include <QLineEdit>
29 #include <QTabWidget>
30 #include <QMessageBox>
31 #include <QTabBar>
32 #include <QStackedWidget>
33 #include <QSplitter>
34 #include "launcher.h"
35 #include "tabbar.h"
36 #include <libfm-qt/core/filepath.h>
37 #include <libfm-qt/core/bookmarks.h>
38 
39 namespace Fm {
40 class PathEdit;
41 class PathBar;
42 }
43 
44 namespace PCManFM {
45 
46 class ViewFrame : public QFrame {
47  Q_OBJECT
48 public:
49  ViewFrame(QWidget* parent = nullptr);
50  ~ViewFrame() {};
51 
52  void createTopBar(bool usePathButtons);
53  void removeTopBar();
54 
55  QWidget* getTopBar() const {
56  return topBar_;
57  }
58  TabBar* getTabBar() const {
59  return tabBar_;
60  }
61  QStackedWidget* getStackedWidget() const {
62  return stackedWidget_;
63  }
64 
65 private:
66  QWidget* topBar_;
67  TabBar* tabBar_;
68  QStackedWidget* stackedWidget_;
69 };
70 
71 //======================================================================
72 
73 class TabPage;
74 class Settings;
75 
76 class MainWindow : public QMainWindow {
77  Q_OBJECT
78 public:
79  MainWindow(Fm::FilePath path = Fm::FilePath());
80  virtual ~MainWindow();
81 
82  void chdir(Fm::FilePath path, ViewFrame* viewFrame);
83  void chdir(Fm::FilePath path) {
84  chdir(path, activeViewFrame_);
85  }
86 
87  int addTab(Fm::FilePath path, ViewFrame* viewFrame);
88  int addTab(Fm::FilePath path) {
89  return addTab(path, activeViewFrame_);
90  }
91 
92  TabPage* currentPage(ViewFrame* viewFrame) {
93  return reinterpret_cast<TabPage*>(viewFrame->getStackedWidget()->currentWidget());
94  }
95  TabPage* currentPage() {
96  return currentPage(activeViewFrame_);
97  }
98 
99  void updateFromSettings(Settings& settings);
100 
101  static MainWindow* lastActive() {
102  return lastActive_;
103  }
104 
105 protected Q_SLOTS:
106 
107  void onPathEntryReturnPressed();
108  void onPathBarChdir(const Fm::FilePath& dirPath);
109  void onPathBarMiddleClickChdir(const Fm::FilePath &dirPath);
110 
111  void on_actionNewTab_triggered();
112  void on_actionNewWin_triggered();
113  void on_actionNewFolder_triggered();
114  void on_actionNewBlankFile_triggered();
115  void on_actionCloseTab_triggered();
116  void on_actionCloseWindow_triggered();
117  void on_actionFileProperties_triggered();
118  void on_actionFolderProperties_triggered();
119 
120  void on_actionCut_triggered();
121  void on_actionCopy_triggered();
122  void on_actionPaste_triggered();
123  void on_actionDelete_triggered();
124  void on_actionRename_triggered();
125  void on_actionBulkRename_triggered();
126  void on_actionSelectAll_triggered();
127  void on_actionInvertSelection_triggered();
128  void on_actionPreferences_triggered();
129 
130  void on_actionGoBack_triggered();
131  void on_actionGoForward_triggered();
132  void on_actionGoUp_triggered();
133  void on_actionHome_triggered();
134  void on_actionReload_triggered();
135  void on_actionConnectToServer_triggered();
136 
137  void on_actionIconView_triggered();
138  void on_actionCompactView_triggered();
139  void on_actionDetailedList_triggered();
140  void on_actionThumbnailView_triggered();
141 
142  void on_actionGo_triggered();
143  void on_actionShowHidden_triggered(bool check);
144  void on_actionShowThumbnails_triggered(bool check);
145  void on_actionSplitView_triggered(bool check);
146  void on_actionPreserveView_triggered(bool checked);
147 
148  void on_actionByFileName_triggered(bool checked);
149  void on_actionByMTime_triggered(bool checked);
150  void on_actionByDTime_triggered(bool checked);
151  void on_actionByOwner_triggered(bool checked);
152  void on_actionByGroup_triggered(bool checked);
153  void on_actionByFileType_triggered(bool checked);
154  void on_actionByFileSize_triggered(bool checked);
155  void on_actionAscending_triggered(bool checked);
156  void on_actionDescending_triggered(bool checked);
157  void on_actionFolderFirst_triggered(bool checked);
158  void on_actionHiddenLast_triggered(bool checked);
159  void on_actionCaseSensitive_triggered(bool checked);
160  void on_actionFilter_triggered(bool checked);
161  void on_actionUnfilter_triggered();
162  void on_actionShowFilter_triggered();
163 
164  void on_actionLocationBar_triggered(bool checked);
165  void on_actionPathButtons_triggered(bool checked);
166 
167  void on_actionApplications_triggered();
168  void on_actionComputer_triggered();
169  void on_actionTrash_triggered();
170  void on_actionNetwork_triggered();
171  void on_actionDesktop_triggered();
172  void on_actionAddToBookmarks_triggered();
173  void on_actionEditBookmarks_triggered();
174 
175  void on_actionOpenTerminal_triggered();
176  void on_actionOpenAsRoot_triggered();
177  void on_actionCopyFullPath_triggered();
178  void on_actionFindFiles_triggered();
179 
180  void on_actionAbout_triggered();
181  void on_actionHiddenShortcuts_triggered();
182 
183  void onBookmarkActionTriggered();
184 
185  void onTabBarCloseRequested(int index);
186  void onTabBarCurrentChanged(int index);
187  void onTabBarTabMoved(int from, int to);
188 
189  void onShortcutPrevTab();
190  void onShortcutNextTab();
191  void onShortcutJumpToTab();
192 
193  void onStackedWidgetWidgetRemoved(int index);
194 
195  void onTabPageTitleChanged(QString title);
196  void onTabPageStatusChanged(int type, QString statusText);
197  void onTabPageSortFilterChanged();
198 
199  void onSidePaneChdirRequested(int type, const Fm::FilePath &path);
200  void onSidePaneOpenFolderInNewWindowRequested(const Fm::FilePath &path);
201  void onSidePaneOpenFolderInNewTabRequested(const Fm::FilePath &path);
202  void onSidePaneOpenFolderInTerminalRequested(const Fm::FilePath &path);
203  void onSidePaneCreateNewFolderRequested(const Fm::FilePath &path);
204  void onSidePaneModeChanged(Fm::SidePane::Mode mode);
205  void on_actionSidePane_triggered(bool check);
206  void onSplitterMoved(int pos, int index);
207  void onResetFocus();
208 
209  void onBackForwardContextMenu(QPoint pos);
210 
211  void onFolderUnmounted();
212 
213  void tabContextMenu(const QPoint& pos);
214  void onTabBarClicked(int index);
215  void closeLeftTabs();
216  void closeRightTabs();
217  void closeOtherTabs() {
218  closeLeftTabs();
219  closeRightTabs();
220  }
221  void focusPathEntry();
222  void toggleMenuBar(bool checked);
223  void detachTab();
224 
225  void onBookmarksChanged();
226 
227  void onSettingHiddenPlace(const QString& str, bool hide);
228 
229 protected:
230  bool event(QEvent* event) override;
231  void changeEvent(QEvent* event) override;
232  void closeTab(int index, ViewFrame* viewFrame);
233  void closeTab(int index) {
234  closeTab(index, activeViewFrame_);
235  }
236  virtual void resizeEvent(QResizeEvent* event) override;
237  virtual void closeEvent(QCloseEvent* event) override;
238  virtual void dragEnterEvent(QDragEnterEvent* event) override;
239  virtual void dropEvent(QDropEvent* event) override;
240  virtual bool eventFilter(QObject* watched, QEvent* event);
241 
242 private:
243  void loadBookmarksMenu();
244  void updateUIForCurrentPage(bool setFocus = true);
245  void updateViewMenuForCurrentPage();
246  void updateEditSelectedActions();
247  void updateStatusBarForCurrentPage();
248  void setRTLIcons(bool isRTL);
249  void createPathBar(bool usePathButtons);
250  void addViewFrame(const Fm::FilePath& path);
251  ViewFrame* viewFrameForTabPage(TabPage* page);
252  int addTabWithPage(TabPage* page, ViewFrame* viewFrame, Fm::FilePath path = Fm::FilePath());
253  void dropTab();
254 
255 private:
256  Ui::MainWindow ui;
257  Fm::PathEdit* pathEntry_;
258  Fm::PathBar* pathBar_;
259  QLabel* fsInfoLabel_;
260  std::shared_ptr<Fm::Bookmarks> bookmarks_;
261  Launcher fileLauncher_;
262  int rightClickIndex_;
263  bool updatingViewMenu_;
264  QAction* menuSep_;
265  QAction* menuSpacer_;
266 
267  ViewFrame* activeViewFrame_;
268  // The split mode of this window is changed only from its settings,
269  // not from another window. So, we get the mode at the start and keep it.
270  bool splitView_;
271 
272  static QPointer<MainWindow> lastActive_;
273 };
274 
275 }
276 
277 #endif // FM_MAIN_WINDOW_H
PCManFM::TabPage
Definition: tabpage.h:107
PCManFM::ViewFrame
Definition: mainwindow.h:46
PCManFM::MainWindow
Definition: mainwindow.h:76
PCManFM::Settings
Definition: settings.h:134
PCManFM::Launcher
Definition: launcher.h:30
PCManFM::TabBar
Definition: tabbar.h:30