Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
newactiondialog.cpp
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
3
5#include "ui_newactiondialog.h"
10#include "iconloader_p.h"
11
12#include <QtDesigner/abstractformwindow.h>
13#include <QtDesigner/abstractformeditor.h>
14
15#include <QtCore/QMetaEnum>
16#include <QtWidgets/qpushbutton.h>
17
19
20using namespace Qt::StringLiterals;
21
22namespace qdesigner_internal {
23// Returns a combination of ChangeMask flags
24unsigned ActionData::compare(const ActionData &rhs) const
25{
26 unsigned rc = 0;
27 if (text != rhs.text)
28 rc |= TextChanged;
29 if (name != rhs.name)
30 rc |= NameChanged;
31 if (toolTip != rhs.toolTip)
32 rc |= ToolTipChanged ;
33 if (icon != rhs.icon)
34 rc |= IconChanged ;
35 if (checkable != rhs.checkable)
36 rc |= CheckableChanged;
37 if (keysequence != rhs.keysequence)
38 rc |= KeysequenceChanged ;
39 if (menuRole.value != rhs.menuRole.value)
40 rc |= MenuRoleChanged ;
41 return rc;
42}
43
44// -------------------- NewActionDialog
45NewActionDialog::NewActionDialog(ActionEditor *parent) :
46 QDialog(parent, Qt::Sheet),
47 m_ui(new QT_PREPEND_NAMESPACE(qdesigner_internal)::Ui::NewActionDialog),
48 m_actionEditor(parent),
49 m_autoUpdateObjectName(true)
50{
51 m_ui->setupUi(this);
52
53 m_ui->tooltipEditor->setTextPropertyValidationMode(ValidationRichText);
54 connect(m_ui->toolTipToolButton, &QAbstractButton::clicked, this, &NewActionDialog::slotEditToolTip);
55 connect(m_ui->editActionText, &QLineEdit::textEdited,
56 this, &NewActionDialog::onEditActionTextTextEdited);
57 connect(m_ui->editObjectName, &QLineEdit::textEdited,
58 this, &NewActionDialog::onEditObjectNameTextEdited);
59
60 m_ui->keysequenceResetToolButton->setIcon(createIconSet("resetproperty.png"_L1));
61 connect(m_ui->keysequenceResetToolButton, &QAbstractButton::clicked,
62 this, &NewActionDialog::slotResetKeySequence);
63
64 // Clear XDG icon once a theme enum is chosen and vv.
65 auto *iconThemeEnumEditor = m_ui->iconThemeEnumEditor;
66 auto *iconThemeEditor = m_ui->iconThemeEditor;
67 connect(iconThemeEnumEditor, &IconThemeEnumEditor::edited,
68 this, [iconThemeEditor](int i) {
69 if (i >= 0)
70 iconThemeEditor->reset();
71 });
72 connect(iconThemeEditor, &IconThemeEditor::edited,
73 this, [iconThemeEnumEditor](const QString &t) {
74 if (!t.isEmpty())
75 iconThemeEnumEditor->reset();
76 });
77
78 const auto menuRoles = QMetaEnum::fromType<QAction::MenuRole>();
79 for (int i = 0; i < menuRoles.keyCount(); i++) {
80 const auto key = menuRoles.key(i);
81 const auto value = menuRoles.value(i);
82 m_ui->menuRole->addItem(QLatin1StringView(key), value);
83 }
84
86 updateButtons();
87
88 QDesignerFormWindowInterface *form = parent->formWindow();
89 m_ui->iconSelector->setFormEditor(form->core());
90 FormWindowBase *formBase = qobject_cast<FormWindowBase *>(form);
91
92 if (formBase)
93 m_ui->iconSelector->setIconCache(formBase->iconCache());
94}
95
97{
98 delete m_ui;
99}
100
101void NewActionDialog::focusName()
102{
103 m_ui->editObjectName->setFocus();
104}
105
107{
108 m_ui->editActionText->setFocus();
109}
110
112{
113 m_ui->tooltipEditor->setFocus();
114}
115
117{
118 m_ui->keySequenceEdit->setFocus();
119}
120
122{
123 m_ui->checkableCheckBox->setFocus();
124}
125
127{
128 m_ui->menuRole->setFocus();
129}
130
132{
133 return m_ui->editActionText->text();
134}
135
137{
138 return m_ui->editObjectName->text();
139}
140
142{
143 ActionData rc;
144 rc.text = actionText();
145 rc.name = actionName();
146 rc.toolTip = m_ui->tooltipEditor->text();
147 rc.icon = m_ui->iconSelector->icon();
148 const int themeEnum = m_ui->iconThemeEnumEditor->themeEnum();
149 rc.icon.setThemeEnum(themeEnum);
150 rc.icon.setTheme(themeEnum == -1 ? m_ui->iconThemeEditor->theme() : QString{});
151 rc.checkable = m_ui->checkableCheckBox->checkState() == Qt::Checked;
152 rc.keysequence = PropertySheetKeySequenceValue(m_ui->keySequenceEdit->keySequence());
153 rc.menuRole.value = m_ui->menuRole->currentData().toInt();
154 return rc;
155}
156
158{
159 m_ui->editActionText->setText(d.text);
160 m_ui->editObjectName->setText(d.name);
161 m_ui->iconSelector->setIcon(d.icon.unthemed());
162 m_ui->iconThemeEnumEditor->setThemeEnum(d.icon.themeEnum());
163 m_ui->iconThemeEditor->setTheme(d.icon.theme());
164 m_ui->tooltipEditor->setText(d.toolTip);
165 m_ui->keySequenceEdit->setKeySequence(d.keysequence.value());
166 m_ui->checkableCheckBox->setCheckState(d.checkable ? Qt::Checked : Qt::Unchecked);
167 m_ui->menuRole->setCurrentIndex(m_ui->menuRole->findData(d.menuRole.value));
168
169 // Suppress updating of the object name from the text for existing actions.
170 m_autoUpdateObjectName = d.name.isEmpty();
171 updateButtons();
172}
173
174void NewActionDialog::onEditActionTextTextEdited(const QString &text)
175{
176 if (m_autoUpdateObjectName)
177 m_ui->editObjectName->setText(ActionEditor::actionTextToName(text));
178
179 updateButtons();
180}
181
182void NewActionDialog::onEditObjectNameTextEdited(const QString&)
183{
184 updateButtons();
185 m_autoUpdateObjectName = false;
186}
187
188void NewActionDialog::slotEditToolTip()
189{
190 const QString oldToolTip = m_ui->tooltipEditor->text();
191 RichTextEditorDialog richTextDialog(m_actionEditor->core(), this);
192 richTextDialog.setText(oldToolTip);
193 if (richTextDialog.showDialog() == QDialog::Rejected)
194 return;
195 const QString newToolTip = richTextDialog.text();
196 if (newToolTip != oldToolTip)
197 m_ui->tooltipEditor->setText(newToolTip);
198}
199
200void NewActionDialog::slotResetKeySequence()
201{
202 m_ui->keySequenceEdit->setKeySequence(QKeySequence());
203 m_ui->keySequenceEdit->setFocus(Qt::MouseFocusReason);
204}
205
206void NewActionDialog::updateButtons()
207{
208 QPushButton *okButton = m_ui->buttonBox->button(QDialogButtonBox::Ok);
209 okButton->setEnabled(!actionText().isEmpty() && !actionName().isEmpty());
210}
211
212} // namespace qdesigner_internal
213
214QT_END_NAMESPACE
void setActionData(const ActionData &d)
Combined button and popup list for selecting options.
Auxiliary methods to store/retrieve settings.
unsigned compare(const ActionData &rhs) const