]> cloud.milkyroute.net Git - dolphin.git/blob - src/selectionmode/actionwithwidget.cpp
Add margins to the zoom menu entry
[dolphin.git] / src / selectionmode / actionwithwidget.cpp
1 /*
2 This file is part of the KDE project
3 SPDX-FileCopyrightText: 2022 Felix Ernst <felixernst@kde.org>
4
5 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
6 */
7
8 #include "actionwithwidget.h"
9
10 #include <QAbstractButton>
11 #include <QFrame>
12 #include <QPushButton>
13 #include <QToolButton>
14
15 using namespace SelectionMode;
16
17 ActionWithWidget::ActionWithWidget(QAction *action)
18 : m_action{action}
19 {
20 }
21
22 ActionWithWidget::ActionWithWidget(QAction *action, QAbstractButton *button)
23 : m_action{action}
24 , m_widget{button}
25 {
26 copyActionDataToButton(button, action);
27 }
28
29 QWidget *ActionWithWidget::newWidget(QWidget *parent)
30 {
31 Q_CHECK_PTR(m_action);
32 Q_ASSERT(!m_widget);
33
34 if (m_action->isSeparator()) {
35 auto line = new QFrame(parent);
36 line->setFrameShape(QFrame::VLine);
37 line->setFrameShadow(QFrame::Sunken);
38
39 m_widget = line;
40 } else {
41 m_widget = newButtonForAction(m_action, parent);
42 }
43 return m_widget;
44 }
45
46 QAbstractButton *SelectionMode::newButtonForAction(QAction *action, QWidget *parent)
47 {
48 Q_CHECK_PTR(action);
49 Q_ASSERT(!action->isSeparator());
50
51 if (action->priority() == QAction::LowPriority) {
52 // We don't want the low priority actions to be displayed icon-only so we need trickery.
53 auto button = new QPushButton(parent);
54 copyActionDataToButton(static_cast<QAbstractButton *>(button), action);
55 button->setMinimumWidth(0);
56 return button;
57 }
58
59 auto *toolButton = new QToolButton(parent);
60 toolButton->setToolButtonStyle(Qt::ToolButtonStyle::ToolButtonTextBesideIcon);
61 toolButton->setDefaultAction(action);
62 toolButton->setPopupMode(QToolButton::ToolButtonPopupMode::InstantPopup);
63 toolButton->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
64 toolButton->setMinimumWidth(0);
65 return toolButton;
66 }
67
68 void SelectionMode::copyActionDataToButton(QAbstractButton *button, QAction *action)
69 {
70 button->setText(action->text());
71 button->setIcon(action->icon());
72 button->setToolTip(action->toolTip());
73 button->setWhatsThis(action->whatsThis());
74
75 button->setVisible(action->isVisible());
76 button->setEnabled(action->isEnabled());
77
78 QObject::connect(button, &QAbstractButton::clicked, action, &QAction::trigger);
79 }