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