File indexing completed on 2024-04-28 05:49:32

0001 /*
0002     SPDX-FileCopyrightText: 2021 Christoph Cullmann <cullmann@kde.org>
0003     SPDX-FileCopyrightText: 2021 Michal Humpula <kde@hudrydum.cz>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007 
0008 #include "katesplitter.h"
0009 #include <QEvent>
0010 
0011 class SplitterHandle : public QSplitterHandle
0012 {
0013 public:
0014     SplitterHandle(Qt::Orientation orientation, QSplitter *parent)
0015         : QSplitterHandle(orientation, parent)
0016         , m_mouseReleaseWasReceived(false)
0017     {
0018     }
0019 
0020 protected:
0021     bool event(QEvent *event) override
0022     {
0023         switch (event->type()) {
0024         case QEvent::MouseButtonPress:
0025             m_mouseReleaseWasReceived = false;
0026             break;
0027         case QEvent::MouseButtonRelease:
0028             if (m_mouseReleaseWasReceived) {
0029                 resetSplitterSizes();
0030             }
0031             m_mouseReleaseWasReceived = !m_mouseReleaseWasReceived;
0032             break;
0033         case QEvent::MouseButtonDblClick:
0034             m_mouseReleaseWasReceived = false;
0035             resetSplitterSizes();
0036             break;
0037         default:
0038             break;
0039         }
0040 
0041         return QSplitterHandle::event(event);
0042     }
0043 
0044 private:
0045     void resetSplitterSizes()
0046     {
0047         QList<int> splitterSizes = splitter()->sizes();
0048         std::fill(splitterSizes.begin(), splitterSizes.end(), 0);
0049         splitter()->setSizes(splitterSizes);
0050     }
0051 
0052     // Sometimes QSplitterHandle doesn't receive MouseButtonDblClick event.
0053     // We can detect that MouseButtonDblClick event should have been
0054     // received if we receive two MouseButtonRelease events in a row.
0055     bool m_mouseReleaseWasReceived;
0056 };
0057 
0058 KateSplitter::KateSplitter(Qt::Orientation orientation, QWidget *parent)
0059     : QSplitter(orientation, parent)
0060 {
0061 }
0062 
0063 KateSplitter::KateSplitter(QWidget *parent)
0064     : QSplitter(parent)
0065 {
0066 }
0067 
0068 QSplitterHandle *KateSplitter::createHandle()
0069 {
0070     return new SplitterHandle(orientation(), this);
0071 }
0072 
0073 #include "moc_katesplitter.cpp"