1 | /*************************************************************************** |
2 | * Copyright (C) 2006-2009 by Peter Penz <peter.penz19@gmail.com> * |
3 | * * |
4 | * This program is free software; you can redistribute it and/or modify * |
5 | * it under the terms of the GNU General Public License as published by * |
6 | * the Free Software Foundation; either version 2 of the License, or * |
7 | * (at your option) any later version. * |
8 | * * |
9 | * This program is distributed in the hope that it will be useful, * |
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of * |
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * |
12 | * GNU General Public License for more details. * |
13 | * * |
14 | * You should have received a copy of the GNU General Public License * |
15 | * along with this program; if not, write to the * |
16 | * Free Software Foundation, Inc., * |
17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * |
18 | ***************************************************************************/ |
19 | |
20 | #ifndef INFORMATIONPANEL_H |
21 | #define INFORMATIONPANEL_H |
22 | |
23 | #include <panels/panel.h> |
24 | |
25 | class InformationPanelContent; |
26 | namespace KIO |
27 | { |
28 | class Job; |
29 | } |
30 | |
31 | /** |
32 | * @brief Panel for showing meta information of one ore more selected items. |
33 | */ |
34 | class InformationPanel : public Panel |
35 | { |
36 | Q_OBJECT |
37 | |
38 | public: |
39 | explicit InformationPanel(QWidget* parent = 0); |
40 | virtual ~InformationPanel(); |
41 | |
42 | signals: |
43 | void urlActivated(const KUrl& url); |
44 | |
45 | public slots: |
46 | /** |
47 | * This is invoked to inform the panel that the user has selected a new |
48 | * set of items. |
49 | */ |
50 | void setSelection(const KFileItemList& selection); |
51 | |
52 | /** |
53 | * Does a delayed request of information for the item \a item. |
54 | * If within this delay InformationPanel::setUrl() or InformationPanel::setSelection() |
55 | * are invoked, then the request will be skipped. Requesting a delayed item information |
56 | * makes sense when hovering items. |
57 | */ |
58 | void requestDelayedItemInfo(const KFileItem& item); |
59 | |
60 | protected: |
61 | /** @see Panel::urlChanged() */ |
62 | virtual bool urlChanged(); |
63 | |
64 | /** @see QWidget::showEvent() */ |
65 | virtual void showEvent(QShowEvent* event); |
66 | |
67 | /** @see QWidget::resizeEvent() */ |
68 | virtual void resizeEvent(QResizeEvent* event); |
69 | |
70 | /** @see QWidget::contextMenuEvent() */ |
71 | virtual void (QContextMenuEvent* event); |
72 | |
73 | private slots: |
74 | /** |
75 | * Shows the information for the item of the URL which has been provided by |
76 | * InformationPanel::requestItemInfo() and provides default actions. |
77 | */ |
78 | void showItemInfo(); |
79 | |
80 | /** |
81 | * Shows the information for the currently displayed folder as a result from |
82 | * a stat job issued in showItemInfo(). |
83 | */ |
84 | void slotFolderStatFinished(KJob* job); |
85 | |
86 | /** |
87 | * Triggered if the request for item information has timed out. |
88 | * @see InformationPanel::requestDelayedItemInfo() |
89 | */ |
90 | void slotInfoTimeout(); |
91 | |
92 | /** |
93 | * Resets the information panel to show the current |
94 | * URL (InformationPanel::url()). Is called by |
95 | * DolphinInformationPanel::markUrlAsInvalid(). |
96 | */ |
97 | void reset(); |
98 | |
99 | void slotFileRenamed(const QString& source, const QString& dest); |
100 | void slotFilesAdded(const QString& directory); |
101 | void slotFilesChanged(const QStringList& files); |
102 | void slotFilesRemoved(const QStringList& files); |
103 | void slotEnteredDirectory(const QString& directory); |
104 | void slotLeftDirectory(const QString& directory); |
105 | |
106 | private: |
107 | /** Assures that any pending item information request is cancelled. */ |
108 | void cancelRequest(); |
109 | |
110 | /** |
111 | * Shows the meta information for the current shown item inside |
112 | * a label. |
113 | */ |
114 | void showMetaInfo(); |
115 | |
116 | /** |
117 | * Returns true, if \a url is equal to the shown URL m_shownUrl. |
118 | */ |
119 | bool isEqualToShownUrl(const KUrl& url) const; |
120 | |
121 | /** |
122 | * Marks the URL as invalid and will reset the Information Panel |
123 | * after a short delay. The reset is not done synchronously to |
124 | * prevent expensive updates during temporary invalid URLs by |
125 | * e. g. changing the directory. |
126 | */ |
127 | void markUrlAsInvalid(); |
128 | |
129 | void init(); |
130 | |
131 | private: |
132 | bool m_initialized; |
133 | bool m_pendingPreview; |
134 | QTimer* m_infoTimer; |
135 | QTimer* m_urlChangedTimer; |
136 | QTimer* m_resetUrlTimer; |
137 | |
138 | // URL that is currently shown in the Information Panel. |
139 | KUrl m_shownUrl; |
140 | |
141 | // URL candidate that will replace m_shownURL after a delay. |
142 | // Used to remember URLs when hovering items. |
143 | KUrl m_urlCandidate; |
144 | |
145 | // URL candidate that is marked as invalid (e. g. because the directory |
146 | // has been deleted or the shown item has been renamed). The Information |
147 | // Panel will be reset asynchronously to prevent unnecessary resets when |
148 | // a directory has been changed. |
149 | KUrl m_invalidUrlCandidate; |
150 | |
151 | KFileItem m_fileItem; // file item for m_shownUrl if available (otherwise null) |
152 | KFileItemList m_selection; |
153 | |
154 | KIO::Job* m_folderStatJob; |
155 | |
156 | InformationPanelContent* m_content; |
157 | }; |
158 | |
159 | #endif // INFORMATIONPANEL_H |
160 | |