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->setPixmapCache(formBase->pixmapCache());
94 m_ui->iconSelector->setIconCache(formBase->iconCache());
95 }
96}
97
99{
100 delete m_ui;
101}
102
103void NewActionDialog::focusName()
104{
105 m_ui->editObjectName->setFocus();
106}
107
109{
110 m_ui->editActionText->setFocus();
111}
112
114{
115 m_ui->tooltipEditor->setFocus();
116}
117
119{
120 m_ui->keySequenceEdit->setFocus();
121}
122
124{
125 m_ui->checkableCheckBox->setFocus();
126}
127
129{
130 m_ui->menuRole->setFocus();
131}
132
134{
135 return m_ui->editActionText->text();
136}
137
139{
140 return m_ui->editObjectName->text();
141}
142
144{
145 ActionData rc;
146 rc.text = actionText();
147 rc.name = actionName();
148 rc.toolTip = m_ui->tooltipEditor->text();
149 rc.icon = m_ui->iconSelector->icon();
150 const int themeEnum = m_ui->iconThemeEnumEditor->themeEnum();
151 rc.icon.setThemeEnum(themeEnum);
152 rc.icon.setTheme(themeEnum == -1 ? m_ui->iconThemeEditor->theme() : QString{});
153 rc.checkable = m_ui->checkableCheckBox->checkState() == Qt::Checked;
154 rc.keysequence = PropertySheetKeySequenceValue(m_ui->keySequenceEdit->keySequence());
155 rc.menuRole.value = m_ui->menuRole->currentData().toInt();
156 return rc;
157}
158
160{
161 m_ui->editActionText->setText(d.text);
162 m_ui->editObjectName->setText(d.name);
163 m_ui->iconSelector->setIcon(d.icon.unthemed());
164 m_ui->iconThemeEnumEditor->setThemeEnum(d.icon.themeEnum());
165 m_ui->iconThemeEditor->setTheme(d.icon.theme());
166 m_ui->tooltipEditor->setText(d.toolTip);
167 m_ui->keySequenceEdit->setKeySequence(d.keysequence.value());
168 m_ui->checkableCheckBox->setCheckState(d.checkable ? Qt::Checked : Qt::Unchecked);
169 m_ui->menuRole->setCurrentIndex(m_ui->menuRole->findData(d.menuRole.value));
170
171 // Suppress updating of the object name from the text for existing actions.
172 m_autoUpdateObjectName = d.name.isEmpty();
173 updateButtons();
174}
175
176void NewActionDialog::onEditActionTextTextEdited(const QString &text)
177{
178 if (m_autoUpdateObjectName)
179 m_ui->editObjectName->setText(ActionEditor::actionTextToName(text));
180
181 updateButtons();
182}
183
184void NewActionDialog::onEditObjectNameTextEdited(const QString&)
185{
186 updateButtons();
187 m_autoUpdateObjectName = false;
188}
189
190void NewActionDialog::slotEditToolTip()
191{
192 const QString oldToolTip = m_ui->tooltipEditor->text();
193 RichTextEditorDialog richTextDialog(m_actionEditor->core(), this);
194 richTextDialog.setText(oldToolTip);
195 if (richTextDialog.showDialog() == QDialog::Rejected)
196 return;
197 const QString newToolTip = richTextDialog.text();
198 if (newToolTip != oldToolTip)
199 m_ui->tooltipEditor->setText(newToolTip);
200}
201
202void NewActionDialog::slotResetKeySequence()
203{
204 m_ui->keySequenceEdit->setKeySequence(QKeySequence());
205 m_ui->keySequenceEdit->setFocus(Qt::MouseFocusReason);
206}
207
208void NewActionDialog::updateButtons()
209{
210 QPushButton *okButton = m_ui->buttonBox->button(QDialogButtonBox::Ok);
211 okButton->setEnabled(!actionText().isEmpty() && !actionName().isEmpty());
212}
213
214} // namespace qdesigner_internal
215
216QT_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