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