]> cloud.milkyroute.net Git - dolphin.git/blob - src/selectionmode/actionwithwidget.cpp
82ce045dbfce2d9a7501c73878d745649143cb93
[dolphin.git] / src / selectionmode / actionwithwidget.cpp
1 /*
2 This file is part of the KDE project
3 SPDX-FileCopyrightText: 2022 Felix Ernst <felixernst@zohomail.eu>
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 ActionWithWidget::ActionWithWidget(QAction *action, QAbstractButton *button) :
22 m_action{action},
23 m_widget{button}
24 {
25 copyActionDataToButton(button, action);
26 }
27
28 QWidget *ActionWithWidget::newWidget(QWidget *parent)
29 {
30 Q_CHECK_PTR(m_action);
31 Q_ASSERT(!m_widget);
32
33 if (m_action->isSeparator()) {
34 auto line = new QFrame(parent);
35 line->setFrameShape(QFrame::VLine);
36 line->setFrameShadow(QFrame::Sunken);
37
38 m_widget = line;
39 } else {
40 m_widget = newButtonForAction(m_action, parent);
41 }
42 return m_widget;
43 }
44
45 QAbstractButton *SelectionMode::newButtonForAction(QAction *action, QWidget *parent)
46 {
47 Q_CHECK_PTR(action);
48 Q_ASSERT(!action->isSeparator());
49
50 if (action->priority() == QAction::LowPriority) {
51 // We don't want the low priority actions to be displayed icon-only so we need trickery.
52 auto button = new QPushButton(parent);
53 copyActionDataToButton(static_cast<QAbstractButton *>(button), action);
54 button->setMinimumWidth(0);
55 return button;
56 }
57
58 auto *toolButton = new QToolButton(parent);
59 toolButton->setToolButtonStyle(Qt::ToolButtonStyle::ToolButtonTextBesideIcon);
60 toolButton->setDefaultAction(action);
61 toolButton->setPopupMode(QToolButton::ToolButtonPopupMode::InstantPopup);
62 toolButton->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
63 toolButton->setMinimumWidth(0);
64 return toolButton;
65 }
66
67 void SelectionMode::copyActionDataToButton(QAbstractButton *button, QAction *action)
68 {
69 button->setText(action->text());
70 button->setIcon(action->icon());
71 button->setToolTip(action->toolTip());
72 button->setWhatsThis(action->whatsThis());
73
74 button->setVisible(action->isVisible());
75 button->setEnabled(action->isEnabled());
76
77 QObject::connect(button, &QAbstractButton::clicked, action, &QAction::trigger);
78 }