File: ideallayout.cpp

package info (click to toggle)
kdevelop 4%3A22.12.2-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 70,096 kB
  • sloc: cpp: 284,635; javascript: 3,558; python: 3,422; sh: 1,319; ansic: 685; xml: 331; php: 95; lisp: 66; makefile: 39; sed: 12
file content (69 lines) | stat: -rw-r--r-- 1,685 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/*
    SPDX-FileCopyrightText: 2007 Roberto Raggi <roberto@kdevelop.org>
    SPDX-FileCopyrightText: 2007 Hamish Rodda <rodda@kde.org>
    SPDX-FileCopyrightText: 2008 Vladimir Prus <ghost@cs.msu.su>

    SPDX-License-Identifier: LicenseRef-MIT-KDevelop-Ideal
*/

#include "ideallayout.h"

#include <QStyle>
#include <QWidget>
#include <QEvent>

#include <numeric>

using namespace Sublime;

namespace
{

    QBoxLayout::Direction toDirection(Qt::Orientation orientation)
    {
        return orientation == Qt::Horizontal ? QBoxLayout::LeftToRight : QBoxLayout::TopToBottom;
    }

}

IdealButtonBarLayout::IdealButtonBarLayout(Qt::Orientation orientation, QWidget* styleParent)
    : QBoxLayout(toDirection(orientation)) // creating a child layout, styleParent is only saved for style
    , m_styleParentWidget(styleParent)
    , m_orientation(orientation)
{
    if (m_styleParentWidget) {
        m_styleParentWidget->installEventFilter(this);
    }

    setContentsMargins(0, 0, 0, 0);
    setSpacing(buttonSpacing());
}

IdealButtonBarLayout::~IdealButtonBarLayout() = default;

Qt::Orientation IdealButtonBarLayout::orientation() const
{
    return m_orientation;
}

Qt::Orientations IdealButtonBarLayout::expandingDirections() const
{
    return orientation();
}

int IdealButtonBarLayout::buttonSpacing() const
{
    if (!m_styleParentWidget) {
        return 0;
    }
    return m_styleParentWidget->style()->pixelMetric(QStyle::PM_ToolBarItemSpacing);
}

bool IdealButtonBarLayout::eventFilter(QObject* watched, QEvent* event)
{
    if (event->type() == QEvent::StyleChange) {
        setSpacing(buttonSpacing());
    }

    return QBoxLayout::eventFilter(watched, event);
}