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