File indexing completed on 2024-05-12 16:58:29
0001 /* 0002 * SPDX-FileCopyrightText: 2014 Hugo Pereira Da Costa <hugo.pereira@free.fr> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #ifndef breezesplitterproxy_h 0008 #define breezesplitterproxy_h 0009 0010 #include "breeze.h" 0011 #include "breezeaddeventfilter.h" 0012 0013 #include <QEvent> 0014 #include <QHoverEvent> 0015 #include <QMainWindow> 0016 #include <QMap> 0017 #include <QMouseEvent> 0018 #include <QSplitterHandle> 0019 #include <QWidget> 0020 0021 namespace Breeze 0022 { 0023 class SplitterProxy; 0024 0025 //* factory 0026 class SplitterFactory : public QObject 0027 { 0028 Q_OBJECT 0029 0030 public: 0031 //* constructor 0032 explicit SplitterFactory(QObject *parent) 0033 : QObject(parent) 0034 , _enabled(false) 0035 { 0036 } 0037 0038 //* enabled state 0039 void setEnabled(bool); 0040 0041 //* register widget 0042 bool registerWidget(QWidget *); 0043 0044 //* unregister widget 0045 void unregisterWidget(QWidget *); 0046 0047 private: 0048 //* enabled state 0049 bool _enabled; 0050 0051 //* needed to block ChildAdded events when creating proxy 0052 AddEventFilter _addEventFilter; 0053 0054 //* pointer to SplitterProxy 0055 using SplitterProxyPointer = WeakPointer<SplitterProxy>; 0056 0057 //* registered widgets 0058 using WidgetMap = QMap<QWidget *, SplitterProxyPointer>; 0059 WidgetMap _widgets; 0060 }; 0061 0062 //* splitter 'proxy' widget, with extended hit area 0063 class SplitterProxy : public QWidget 0064 { 0065 Q_OBJECT 0066 0067 public: 0068 //* constructor 0069 explicit SplitterProxy(QWidget *, bool = false); 0070 0071 //* event filter 0072 bool eventFilter(QObject *, QEvent *) override; 0073 0074 //* enable state 0075 void setEnabled(bool); 0076 0077 //* enable state 0078 bool enabled() const 0079 { 0080 return _enabled; 0081 } 0082 0083 protected: 0084 //* event handler 0085 bool event(QEvent *) override; 0086 0087 protected: 0088 //* reset 'true' splitter widget 0089 void clearSplitter(); 0090 0091 //* keep track of 'true' splitter widget 0092 void setSplitter(QWidget *); 0093 0094 private: 0095 //* enabled state 0096 bool _enabled; 0097 0098 //* splitter object 0099 WeakPointer<QWidget> _splitter; 0100 0101 //* hook 0102 QPoint _hook; 0103 0104 //* timer id 0105 int _timerId; 0106 }; 0107 0108 } 0109 0110 #endif