1 /*
2     SPDX-FileCopyrightText: 2007 Roberto Raggi <roberto@kdevelop.org>
3     SPDX-FileCopyrightText: 2007 Hamish Rodda <rodda@kde.org>
4     SPDX-FileCopyrightText: 2008 Vladimir Prus <ghost@cs.msu.su>
5 
6     SPDX-License-Identifier: LicenseRef-MIT-KDevelop-Ideal
7 */
8 
9 #include "ideallayout.h"
10 
11 #include <QStyle>
12 #include <QWidget>
13 #include <QEvent>
14 
15 #include <numeric>
16 
17 using namespace Sublime;
18 
19 namespace
20 {
21 
toDirection(Qt::Orientation orientation)22     QBoxLayout::Direction toDirection(Qt::Orientation orientation)
23     {
24         return orientation == Qt::Horizontal ? QBoxLayout::LeftToRight : QBoxLayout::TopToBottom;
25     }
26 
27 }
28 
IdealButtonBarLayout(Qt::Orientation orientation,QWidget * styleParent)29 IdealButtonBarLayout::IdealButtonBarLayout(Qt::Orientation orientation, QWidget* styleParent)
30     : QBoxLayout(toDirection(orientation)) // creating a child layout, styleParent is only saved for style
31     , m_styleParentWidget(styleParent)
32     , m_orientation(orientation)
33 {
34     if (m_styleParentWidget) {
35         m_styleParentWidget->installEventFilter(this);
36     }
37 
38     setContentsMargins(0, 0, 0, 0);
39     setSpacing(buttonSpacing());
40 }
41 
42 IdealButtonBarLayout::~IdealButtonBarLayout() = default;
43 
orientation() const44 Qt::Orientation IdealButtonBarLayout::orientation() const
45 {
46     return m_orientation;
47 }
48 
expandingDirections() const49 Qt::Orientations IdealButtonBarLayout::expandingDirections() const
50 {
51     return orientation();
52 }
53 
buttonSpacing() const54 int IdealButtonBarLayout::buttonSpacing() const
55 {
56     if (!m_styleParentWidget) {
57         return 0;
58     }
59     return m_styleParentWidget->style()->pixelMetric(QStyle::PM_ToolBarItemSpacing);
60 }
61 
eventFilter(QObject * watched,QEvent * event)62 bool IdealButtonBarLayout::eventFilter(QObject* watched, QEvent* event)
63 {
64     if (event->type() == QEvent::StyleChange) {
65         setSpacing(buttonSpacing());
66     }
67 
68     return QBoxLayout::eventFilter(watched, event);
69 }
70