File indexing completed on 2024-05-19 16:30:44

0001 #ifndef breezetoolsareamanager_h
0002 #define breezetoolsareamanager_h
0003 
0004 #include "breezehelper.h"
0005 #include "breezestyle.h"
0006 #include <KConfigWatcher>
0007 #include <KSharedConfig>
0008 #include <QApplication>
0009 #include <QObject>
0010 
0011 namespace Breeze
0012 {
0013 class ToolsAreaManager;
0014 
0015 // Trying to discriminate QApplication events from events from all QObjects
0016 // belonging to it is impractical with everything going through a single
0017 // eventFilter, so we have this class which provides a second one that allows
0018 // us to filter for the events we want.
0019 class AppListener : public QObject
0020 {
0021     Q_OBJECT
0022     using QObject::QObject;
0023 
0024     bool eventFilter(QObject *watched, QEvent *event) override;
0025 
0026     ToolsAreaManager *manager;
0027     friend class ToolsAreaManager;
0028 };
0029 
0030 class ToolsAreaManager : public QObject
0031 {
0032     Q_OBJECT
0033 
0034 private:
0035     Helper *_helper;
0036     QHash<const QMainWindow *, QVector<QPointer<QToolBar>>> _windows;
0037     KSharedConfigPtr _config;
0038     KConfigWatcher::Ptr _watcher;
0039     QPalette _palette = QPalette();
0040     AppListener *_listener;
0041     bool _colorSchemeHasHeaderColor;
0042 
0043     friend class AppListener;
0044 
0045 protected:
0046     bool tryRegisterToolBar(QPointer<QMainWindow> window, QPointer<QWidget> widget);
0047     void tryUnregisterToolBar(QPointer<QMainWindow> window, QPointer<QWidget> widget);
0048     void configUpdated();
0049 
0050 public:
0051     explicit ToolsAreaManager(Helper *helper, QObject *parent = nullptr);
0052     ~ToolsAreaManager();
0053 
0054     bool eventFilter(QObject *watched, QEvent *event) override;
0055 
0056     const QPalette &palette() const
0057     {
0058         return _palette;
0059     }
0060 
0061     void registerApplication(QApplication *application);
0062     void registerWidget(QWidget *widget);
0063     void unregisterWidget(QWidget *widget);
0064 
0065     QRect toolsAreaRect(const QMainWindow *window);
0066 
0067     bool hasHeaderColors();
0068 };
0069 }
0070 
0071 #endif