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// Qt-Security score:significant reason:default
4
6#include "ui_newactiondialog.h"
11#include "iconloader_p.h"
12
13#include <QtDesigner/abstractformwindow.h>
14#include <QtDesigner/abstractformeditor.h>
15
16#include <QtCore/QMetaEnum>
17#include <QtWidgets/qpushbutton.h>
18
20
21using namespace Qt::StringLiterals;
22
23namespace qdesigner_internal {
24// Returns a combination of ChangeMask flags
25unsigned ActionData::compare(const ActionData &rhs) const
26{
27 unsigned rc = 0;
28 if (text != rhs.text)
29 rc |= TextChanged;
30 if (name != rhs.name)
31 rc |= NameChanged;
32 if (toolTip != rhs.toolTip)
33 rc |= ToolTipChanged ;
34 if (icon != rhs.icon)
35 rc |= IconChanged ;
36 if (checkable != rhs.checkable)
37 rc |= CheckableChanged;
38 if (keysequence != rhs.keysequence)
39 rc |= KeysequenceChanged ;
40 if (menuRole.value != rhs.menuRole.value)
41 rc |= MenuRoleChanged ;
42 return rc;
43}
44
45// -------------------- NewActionDialog
46NewActionDialog::NewActionDialog(ActionEditor *parent) :
47 QDialog(parent, Qt::Sheet),
48 m_ui(new QT_PREPEND_NAMESPACE(qdesigner_internal)::Ui::NewActionDialog),
49 m_actionEditor(parent),
50 m_autoUpdateObjectName(true)
51{
52 m_ui->setupUi(this);
53
54 m_ui->tooltipEditor->setTextPropertyValidationMode(ValidationRichText);
55 connect(m_ui->toolTipToolButton, &QAbstractButton::clicked, this, &NewActionDialog::slotEditToolTip);
56 connect(m_ui->editActionText, &QLineEdit::textEdited,
57 this, &NewActionDialog::onEditActionTextTextEdited);
58 connect(m_ui->editObjectName, &QLineEdit::textEdited,
59 this, &NewActionDialog::onEditObjectNameTextEdited);
60
61 m_ui->keysequenceResetToolButton->setIcon(createIconSet("resetproperty.png"_L1));
62 connect(m_ui->keysequenceResetToolButton, &QAbstractButton::clicked,
63 this, &NewActionDialog::slotResetKeySequence);
64
65 // Clear XDG icon once a theme enum is chosen and vv.
66 auto *iconThemeEnumEditor = m_ui->iconThemeEnumEditor;
67 auto *iconThemeEditor = m_ui->iconThemeEditor;
68 connect(iconThemeEnumEditor, &IconThemeEnumEditor::edited,
69 this, [iconThemeEditor](int i) {
70 if (i >= 0)
71 iconThemeEditor->reset();
72 });
73 connect(iconThemeEditor, &IconThemeEditor::edited,
74 this, [iconThemeEnumEditor](const QString &t) {
75 if (!t.isEmpty())
76 iconThemeEnumEditor->reset();
77 });
78
79 const auto menuRoles = QMetaEnum::fromType<QAction::MenuRole>();
80 for (int i = 0; i < menuRoles.keyCount(); i++) {
81 const auto key = menuRoles.key(i);
82 const auto value = menuRoles.value(i);
83 m_ui->menuRole->addItem(QLatin1StringView(key), value);
84 }
85
87 updateButtons();
88
89 QDesignerFormWindowInterface *form = parent->formWindow();
90 m_ui->iconSelector->setFormEditor(form->core());
91 FormWindowBase *formBase = qobject_cast<FormWindowBase *>(form);
92
93 if (formBase)
94 m_ui->iconSelector->setIconCache(formBase->iconCache());
95}
96
98{
99 delete m_ui;
100}
101
102void NewActionDialog::focusName()
103{
104 m_ui->editObjectName->setFocus();
105}
106
108{
109 m_ui->editActionText->setFocus();
110}
111
113{
114 m_ui->tooltipEditor->setFocus();
115}
116
118{
119 m_ui->keySequenceEdit->setFocus();
120}
121
123{
124 m_ui->checkableCheckBox->setFocus();
125}
126
128{
129 m_ui->menuRole->setFocus();
130}
131
133{
134 return m_ui->editActionText->text();
135}
136
138{
139 return m_ui->editObjectName->text();
140}
141
143{
144 ActionData rc;
145 rc.text = actionText();
146 rc.name = actionName();
147 rc.toolTip = m_ui->tooltipEditor->text();
148 rc.icon = m_ui->iconSelector->icon();
149 const int themeEnum = m_ui->iconThemeEnumEditor->themeEnum();
150 rc.icon.setThemeEnum(themeEnum);
151 rc.icon.setTheme(themeEnum == -1 ? m_ui->iconThemeEditor->theme() : QString{});
152 rc.checkable = m_ui->checkableCheckBox->checkState() == Qt::Checked;
153 rc.keysequence = PropertySheetKeySequenceValue(m_ui->keySequenceEdit->keySequence());
154 rc.menuRole.value = m_ui->menuRole->currentData().toInt();
155 return rc;
156}
157
159{
160 m_ui->editActionText->setText(d.text);
161 m_ui->editObjectName->setText(d.name);
162 m_ui->iconSelector->setIcon(d.icon.unthemed());
163 m_ui->iconThemeEnumEditor->setThemeEnum(d.icon.themeEnum());
164 m_ui->iconThemeEditor->setTheme(d.icon.theme());
165 m_ui->tooltipEditor->setText(d.toolTip);
166 m_ui->keySequenceEdit->setKeySequence(d.keysequence.value());
167 m_ui->checkableCheckBox->setCheckState(d.checkable ? Qt::Checked : Qt::Unchecked);
168 m_ui->menuRole->setCurrentIndex(m_ui->menuRole->findData(d.menuRole.value));
169
170 // Suppress updating of the object name from the text for existing actions.
171 m_autoUpdateObjectName = d.name.isEmpty();
172 updateButtons();
173}
174
175void NewActionDialog::onEditActionTextTextEdited(const QString &text)
176{
177 if (m_autoUpdateObjectName)
178 m_ui->editObjectName->setText(ActionEditor::actionTextToName(text));
179
180 updateButtons();
181}
182
183void NewActionDialog::onEditObjectNameTextEdited(const QString&)
184{
185 updateButtons();
186 m_autoUpdateObjectName = false;
187}
188
189void NewActionDialog::slotEditToolTip()
190{
191 const QString oldToolTip = m_ui->tooltipEditor->text();
192 RichTextEditorDialog richTextDialog(m_actionEditor->core(), this);
193 richTextDialog.setText(oldToolTip);
194 if (richTextDialog.showDialog() == QDialog::Rejected)
195 return;
196 const QString newToolTip = richTextDialog.text();
197 if (newToolTip != oldToolTip)
198 m_ui->tooltipEditor->setText(newToolTip);
199}
200
201void NewActionDialog::slotResetKeySequence()
202{
203 m_ui->keySequenceEdit->setKeySequence(QKeySequence());
204 m_ui->keySequenceEdit->setFocus(Qt::MouseFocusReason);
205}
206
207void NewActionDialog::updateButtons()
208{
209 QPushButton *okButton = m_ui->buttonBox->button(QDialogButtonBox::Ok);
210 okButton->setEnabled(!actionText().isEmpty() && !actionName().isEmpty());
211}
212
213} // namespace qdesigner_internal
214
215QT_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