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