PCManFM-Qt
Loading...
Searching...
No Matches
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
39namespace Fm {
40class PathEdit;
41class PathBar;
42}
43
44namespace PCManFM {
45
46class ViewFrame : public QFrame {
47 Q_OBJECT
48public:
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
65private:
66 QWidget* topBar_;
67 TabBar* tabBar_;
68 QStackedWidget* stackedWidget_;
69};
70
71//======================================================================
72
73class TabPage;
74class Settings;
75
76class MainWindow : public QMainWindow {
77 Q_OBJECT
78public:
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 void addTab(Fm::FilePath path, ViewFrame* viewFrame);
88 void addTab(Fm::FilePath path) {
89 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 void openFolderAndSelectFles(const Fm::FilePathList& files);
106
107protected Q_SLOTS:
108
109 void onPathEntryReturnPressed();
110 void onPathBarChdir(const Fm::FilePath& dirPath);
111 void onPathBarMiddleClickChdir(const Fm::FilePath &dirPath);
112
113 void on_actionNewTab_triggered();
114 void on_actionNewWin_triggered();
115 void on_actionNewFolder_triggered();
116 void on_actionNewBlankFile_triggered();
117 void on_actionCloseTab_triggered();
118 void on_actionCloseWindow_triggered();
119 void on_actionFileProperties_triggered();
120 void on_actionFolderProperties_triggered();
121
122 void on_actionCut_triggered();
123 void on_actionCopy_triggered();
124 void on_actionPaste_triggered();
125 void on_actionDelete_triggered();
126 void on_actionRename_triggered();
127 void on_actionBulkRename_triggered();
128 void on_actionSelectAll_triggered();
129 void on_actionDeselectAll_triggered();
130 void on_actionInvertSelection_triggered();
131 void on_actionPreferences_triggered();
132
133 void on_actionGoBack_triggered();
134 void on_actionGoForward_triggered();
135 void on_actionGoUp_triggered();
136 void on_actionHome_triggered();
137 void on_actionReload_triggered();
138 void on_actionConnectToServer_triggered();
139
140 void on_actionIconView_triggered();
141 void on_actionCompactView_triggered();
142 void on_actionDetailedList_triggered();
143 void on_actionThumbnailView_triggered();
144
145 void on_actionGo_triggered();
146 void on_actionShowHidden_triggered(bool check);
147 void on_actionShowThumbnails_triggered(bool check);
148 void on_actionSplitView_triggered(bool check);
149 void on_actionPreserveView_triggered(bool checked);
150 void on_actionPreserveViewRecursive_triggered(bool checked);
151 void on_actionGoToCustomizedViewSource_triggered();
152
153 void on_actionByFileName_triggered(bool checked);
154 void on_actionByMTime_triggered(bool checked);
155 void on_actionByCrTime_triggered(bool checked);
156 void on_actionByDTime_triggered(bool checked);
157 void on_actionByOwner_triggered(bool checked);
158 void on_actionByGroup_triggered(bool checked);
159 void on_actionByFileType_triggered(bool checked);
160 void on_actionByFileSize_triggered(bool checked);
161 void on_actionAscending_triggered(bool checked);
162 void on_actionDescending_triggered(bool checked);
163 void on_actionFolderFirst_triggered(bool checked);
164 void on_actionHiddenLast_triggered(bool checked);
165 void on_actionCaseSensitive_triggered(bool checked);
166 void on_actionFilter_triggered(bool checked);
167 void on_actionUnfilter_triggered();
168 void on_actionShowFilter_triggered();
169
170 void on_actionLocationBar_triggered(bool checked);
171 void on_actionPathButtons_triggered(bool checked);
172
173 void on_actionApplications_triggered();
174 void on_actionComputer_triggered();
175 void on_actionTrash_triggered();
176 void on_actionNetwork_triggered();
177 void on_actionDesktop_triggered();
178 void on_actionAddToBookmarks_triggered();
179 void on_actionEditBookmarks_triggered();
180
181 void on_actionOpenTerminal_triggered();
182 void on_actionCreateLauncher_triggered();
183 void on_actionOpenAsAdmin_triggered();
184 void on_actionOpenAsRoot_triggered();
185 void on_actionCopyFullPath_triggered();
186 void on_actionFindFiles_triggered();
187
188 void on_actionAbout_triggered();
189 void on_actionHiddenShortcuts_triggered();
190
191 void onBookmarkActionTriggered();
192
193 void onTabBarCloseRequested(int index);
194 void onTabBarCurrentChanged(int index);
195 void onTabBarTabMoved(int from, int to);
196
197 void onShortcutPrevTab();
198 void onShortcutNextTab();
199 void onShortcutJumpToTab();
200
201 void onStackedWidgetWidgetRemoved(int index);
202
203 void onTabPageTitleChanged();
204 void onTabPageStatusChanged(int type, QString statusText);
205 void onTabPageSortFilterChanged();
206
207 void onSidePaneChdirRequested(int type, const Fm::FilePath &path);
208 void onSidePaneOpenFolderInNewWindowRequested(const Fm::FilePath &path);
209 void onSidePaneOpenFolderInNewTabRequested(const Fm::FilePath &path);
210 void onSidePaneOpenFolderInTerminalRequested(const Fm::FilePath &path);
211 void onSidePaneCreateNewFolderRequested(const Fm::FilePath &path);
212 void onSidePaneModeChanged(Fm::SidePane::Mode mode);
213 void on_actionSidePane_triggered(bool check);
214 void onSplitterMoved(int pos, int index);
215 void onResetFocus();
216
217 void onBackForwardContextMenu(QPoint pos);
218
219 void onFolderUnmounted();
220
221 void tabContextMenu(const QPoint& pos);
222 void onTabBarClicked(int index);
223 void closeLeftTabs();
224 void closeRightTabs();
225 void closeOtherTabs() {
226 closeLeftTabs();
227 closeRightTabs();
228 }
229 void focusPathEntry();
230 void toggleMenuBar(bool checked);
231 void updateRecenMenu();
232 void clearRecentMenu();
233 void lanunchRecentFile();
234 void detachTab();
235
236 void onBookmarksChanged();
237
238 void onSettingHiddenPlace(const QString& str, bool hide);
239
240 void on_actionCleanPerFolderConfig_triggered();
241
242protected:
243 bool event(QEvent* event) override;
244 void changeEvent(QEvent* event) override;
245 void closeTab(int index, ViewFrame* viewFrame);
246 void closeTab(int index) {
247 closeTab(index, activeViewFrame_);
248 }
249 virtual void resizeEvent(QResizeEvent* event) override;
250 virtual void closeEvent(QCloseEvent* event) override;
251 virtual void dragEnterEvent(QDragEnterEvent* event) override;
252 virtual void dropEvent(QDropEvent* event) override;
253 virtual bool eventFilter(QObject* watched, QEvent* event) override;
254
255private:
256 void loadBookmarksMenu();
257 void updateUIForCurrentPage(bool setFocus = true);
258 void updateViewMenuForCurrentPage();
259 void updateEditSelectedActions();
260 void updateStatusBarForCurrentPage();
261 void setRTLIcons(bool isRTL);
262 void createPathBar(bool usePathButtons);
263 void addViewFrame(const Fm::FilePath& path);
264 ViewFrame* viewFrameForTabPage(TabPage* page);
265 int addTabWithPage(TabPage* page, ViewFrame* viewFrame, Fm::FilePath path = Fm::FilePath());
266 void dropTab(QObject* source);
267 void setTabIcon(TabPage* tabPage);
268
269private:
270 Ui::MainWindow ui;
271 Fm::PathEdit* pathEntry_;
272 Fm::PathBar* pathBar_;
273 QLabel* fsInfoLabel_;
274 std::shared_ptr<Fm::Bookmarks> bookmarks_;
275 Launcher fileLauncher_;
276 int rightClickIndex_;
277 bool updatingViewMenu_;
278 QAction* menuSep_;
279 QAction* menuSpacer_;
280
281 ViewFrame* activeViewFrame_;
282 // The split mode of this window is changed only from its settings,
283 // not from another window. So, we get the mode at the start and keep it.
284 bool splitView_;
285
286 static QPointer<MainWindow> lastActive_;
287};
288
289}
290
291#endif // FM_MAIN_WINDOW_H
Definition launcher.h:30
Definition mainwindow.h:76
Definition settings.h:154
Definition tabbar.h:30
Definition tabpage.h:112
Definition mainwindow.h:46