1 | /* |
2 | This file is part of the KDE project |
3 | SPDX-FileCopyrightText: 2003 Daniel Molkentin <molkentin@kde.org> |
4 | SPDX-FileCopyrightText: 2003 David Faure <faure@kde.org> |
5 | |
6 | SPDX-License-Identifier: LGPL-2.0-or-later |
7 | */ |
8 | |
9 | #ifndef KPARTS_STATUSBAREXTENSION_H |
10 | #define KPARTS_STATUSBAREXTENSION_H |
11 | |
12 | #include <kparts/kparts_export.h> |
13 | |
14 | #include <QWidget> |
15 | #include <memory> |
16 | |
17 | class QStatusBar; |
18 | class KMainWindow; |
19 | class QEvent; |
20 | |
21 | namespace KParts |
22 | { |
23 | class Part; |
24 | class ReadOnlyPart; |
25 | |
26 | // Defined in impl |
27 | class StatusBarItem; |
28 | class StatusBarExtensionPrivate; |
29 | |
30 | /*! |
31 | * \class KParts::StatusBarExtension |
32 | * \inheaderfile KParts/StatusBarExtension |
33 | * \inmodule KParts |
34 | * |
35 | * \brief An extension for KParts that allows more sophisticated statusbar handling. |
36 | * |
37 | * Every part can use this class to customize the statusbar as long as it is active. |
38 | * Add items via addStatusBarItem and remove an item with removeStatusBarItem. |
39 | * |
40 | * IMPORTANT: do NOT add any items immediately after constructing the extension. |
41 | * Give the application time to set the statusbar in the extension if necessary. |
42 | */ |
43 | class KPARTS_EXPORT StatusBarExtension : public QObject |
44 | { |
45 | Q_OBJECT |
46 | |
47 | public: |
48 | /*! |
49 | * |
50 | */ |
51 | explicit StatusBarExtension(KParts::Part *parent); |
52 | |
53 | /*! |
54 | * |
55 | */ |
56 | explicit StatusBarExtension(KParts::ReadOnlyPart *parent); // KF6: REMOVE |
57 | ~StatusBarExtension() override; |
58 | |
59 | /*! |
60 | * This adds a widget to the statusbar for this part. |
61 | * If you use this method instead of using statusBar() directly, |
62 | * this extension will take care of removing the items when the parts GUI |
63 | * is deactivated and will re-add them when it is reactivated. |
64 | * The parameters are the same as QStatusBar::addWidget(). |
65 | * |
66 | * Note that you can't use KStatusBar methods (inserting text items by id) |
67 | * but you can create a KStatusBarLabel with a dummy id instead, and use |
68 | * it directly in order to get the same look and feel. |
69 | * |
70 | * \a widget the widget to add |
71 | * |
72 | * \a stretch the stretch factor. 0 for a minimum size. |
73 | * |
74 | * \a permanent passed to QStatusBar::addWidget as the "permanent" bool. |
75 | * |
76 | * Note that the item isn't really permanent though, it goes away when |
77 | * the part is unactivated. This simply controls whether temporary messages |
78 | * hide the \a widget, and whether it's added to the left or to the right side. |
79 | * |
80 | * \note that the widget does not technically become a child of the |
81 | * StatusBarExtension in a QObject sense. However, it will be deleted |
82 | * when the StatusBarExtension is deleted. |
83 | * |
84 | * IMPORTANT: do NOT add any items immediately after constructing the extension. |
85 | * Give the application time to set the statusbar in the extension if necessary. |
86 | */ |
87 | void addStatusBarItem(QWidget *widget, int stretch, bool permanent); |
88 | |
89 | /*! |
90 | * Remove a widget from the statusbar for this part. |
91 | */ |
92 | void removeStatusBarItem(QWidget *widget); |
93 | |
94 | /*! |
95 | * Returns the statusbar of the KMainWindow in which this part is currently embedded. |
96 | * This can return \c nullptr |
97 | */ |
98 | QStatusBar *statusBar() const; |
99 | |
100 | /*! |
101 | * This allows the hosting application to set a particular QStatusBar |
102 | * for this part. If it doesn't do this, the statusbar used will be |
103 | * the one of the KMainWindow in which the part is embedded. |
104 | * Konqueror uses this to assign a view-statusbar to the part. |
105 | * The part should never call this method! |
106 | */ |
107 | void setStatusBar(QStatusBar *status); |
108 | |
109 | /*! |
110 | * Queries \a obj for a child object which inherits from this |
111 | * StatusBarExtension class. Convenience method. |
112 | */ |
113 | static StatusBarExtension *childObject(QObject *obj); |
114 | |
115 | bool eventFilter(QObject *watched, QEvent *ev) override; |
116 | |
117 | private: |
118 | // for future extensions |
119 | friend class StatusBarExtensionPrivate; |
120 | std::unique_ptr<StatusBarExtensionPrivate> const d; |
121 | }; |
122 | |
123 | } |
124 | #endif // KPARTS_STATUSBAREXTENSION_H |
125 | |