PCManFM-Qt
folderview.h
1 /*
2  <one line to give the library's name and an idea of what it does.>
3  Copyright (C) 2012 Hong Jen Yee (PCMan) <pcman.tw@gmail.com>
4 
5  This library is free software; you can redistribute it and/or
6  modify it under the terms of the GNU Lesser General Public
7  License as published by the Free Software Foundation; either
8  version 2.1 of the License, or (at your option) any later version.
9 
10  This library 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 GNU
13  Lesser General Public License for more details.
14 
15  You should have received a copy of the GNU Lesser General Public
16  License along with this library; if not, write to the Free Software
17  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18 */
19 
20 
21 #ifndef FM_FOLDERVIEW_H
22 #define FM_FOLDERVIEW_H
23 
24 #include "libfmqtglobals.h"
25 #include <QWidget>
26 #include <QListView>
27 #include <QTreeView>
28 #include <QMouseEvent>
29 #include <libfm/fm.h>
30 #include "foldermodel.h"
31 #include "proxyfoldermodel.h"
32 
33 class QTimer;
34 
35 namespace Fm {
36 
37 class FileMenu;
38 class FolderMenu;
39 class FileLauncher;
40 class FolderViewStyle;
41 
42 class LIBFM_QT_API FolderView : public QWidget {
43  Q_OBJECT
44 
45 public:
46  enum ViewMode {
47  FirstViewMode = 1,
48  IconMode = FirstViewMode,
49  CompactMode,
50  DetailedListMode,
51  ThumbnailMode,
52  LastViewMode = ThumbnailMode,
53  NumViewModes = (LastViewMode - FirstViewMode + 1)
54  };
55 
56  enum ClickType {
57  ActivatedClick,
58  MiddleClick,
59  ContextMenuClick
60  };
61 
62 public:
63 
64  friend class FolderViewTreeView;
65  friend class FolderViewListView;
66 
67  explicit FolderView(ViewMode _mode = IconMode, QWidget* parent = 0);
68  virtual ~FolderView();
69 
70  void setViewMode(ViewMode _mode);
71  ViewMode viewMode() const;
72 
73  void setIconSize(ViewMode mode, QSize size);
74  QSize iconSize(ViewMode mode) const;
75 
76  QAbstractItemView* childView() const;
77 
78  ProxyFolderModel* model() const;
79  void setModel(ProxyFolderModel* _model);
80 
81  FmFolder* folder() {
82  return model_ ? static_cast<FolderModel*>(model_->sourceModel())->folder() : NULL;
83  }
84 
85  FmFileInfo* folderInfo() {
86  FmFolder* _folder = folder();
87  return _folder ? fm_folder_get_info(_folder) : NULL;
88  }
89 
90  FmPath* path() {
91  FmFolder* _folder = folder();
92  return _folder ? fm_folder_get_path(_folder) : NULL;
93  }
94 
95  QItemSelectionModel* selectionModel() const;
96  FmFileInfoList* selectedFiles() const;
97  FmPathList* selectedFilePaths() const;
98 
99  void selectAll();
100 
101  void invertSelection();
102 
103  void setFileLauncher(FileLauncher* launcher) {
104  fileLauncher_ = launcher;
105  }
106 
107  FileLauncher* fileLauncher() {
108  return fileLauncher_;
109  }
110 
111  int autoSelectionDelay() const {
112  return autoSelectionDelay_;
113  }
114 
115  void setAutoSelectionDelay(int delay);
116 
117 protected:
118  virtual bool event(QEvent* event);
119  virtual void contextMenuEvent(QContextMenuEvent* event);
120  virtual void childMousePressEvent(QMouseEvent* event);
121  virtual void childDragEnterEvent(QDragEnterEvent* event);
122  virtual void childDragMoveEvent(QDragMoveEvent* e);
123  virtual void childDragLeaveEvent(QDragLeaveEvent* e);
124  virtual void childDropEvent(QDropEvent* e);
125 
126  void emitClickedAt(ClickType type, const QPoint& pos);
127 
128  QModelIndexList selectedRows ( int column = 0 ) const;
129  QModelIndexList selectedIndexes() const;
130 
131  virtual void prepareFileMenu(Fm::FileMenu* menu);
132  virtual void prepareFolderMenu(Fm::FolderMenu* menu);
133 
134  virtual bool eventFilter(QObject* watched, QEvent* event);
135 
136  void updateGridSize(); // called when view mode, icon size, or font size is changed
137 
138 public Q_SLOTS:
139  void onItemActivated(QModelIndex index);
140  void onSelectionChanged(const QItemSelection & selected, const QItemSelection & deselected);
141  virtual void onFileClicked(int type, FmFileInfo* fileInfo);
142 
143 private Q_SLOTS:
144  void onAutoSelectionTimeout();
145  void onSelChangedTimeout();
146 
147 Q_SIGNALS:
148  void clicked(int type, FmFileInfo* file);
149  void clickedBack();
150  void clickedForward();
151  void selChanged(int n_sel);
152  void sortChanged();
153 
154 private:
155 
156  QAbstractItemView* view;
157  ProxyFolderModel* model_;
158  ViewMode mode;
159  QSize iconSize_[NumViewModes];
160  FileLauncher* fileLauncher_;
161  int autoSelectionDelay_;
162  QTimer* autoSelectionTimer_;
163  QModelIndex lastAutoSelectionIndex_;
164  QTimer* selChangedTimer_;
165 };
166 
167 }
168 
169 #endif // FM_FOLDERVIEW_H
Definition: appchoosercombobox.cpp:26
Definition: foldermenu.h:35
Definition: foldermodel.h:37
Definition: filemenu.h:37
Definition: proxyfoldermodel.h:43
Definition: folderview.h:42
Definition: filelauncher.h:30