Pencil2D Animation
Download Community News Docs Contribute
  • Overview
  • Articles
  • Code
  •  
  • Class List
  • Class Index
  • Class Hierarchy
  • Class Members
  • File List
Loading...
Searching...
No Matches
  • app
  • src
shortcutspage.cpp
1/*
2
3Pencil2D - Traditional Animation Software
4Copyright (C) 2005-2007 Patrick Corrieri & Pascal Naidon
5Copyright (C) 2012-2020 Matthew Chiawen Chang
6
7This program is free software; you can redistribute it and/or
8modify it under the terms of the GNU General Public License
9as published by the Free Software Foundation; version 2 of the License.
10
11This program is distributed in the hope that it will be useful,
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16*/
17#include "shortcutspage.h"
18#include "ui_shortcutspage.h"
19
20#include <QDebug>
21#include <QSettings>
22#include <QStandardItemModel>
23#include <QKeyEvent>
24#include <QKeySequence>
25#include <QMessageBox>
26#include "pencilsettings.h"
27#include <QFile>
28#include <QFileDialog>
29
30
31static const int ACT_NAME_COLUMN = 0;
32static const int KEY_SEQ_COLUMN = 1;
33
34static QString getHumanReadableShortcutName(const QString&);
35
36ShortcutsPage::ShortcutsPage( QWidget* parent )
37 : QWidget(parent),
38 ui( new Ui::ShortcutsPage )
39{
40 ui->setupUi(this);
41 m_treeModel = new QStandardItemModel(this);
42 m_treeModel->setColumnCount(2);
43 m_treeModel->setHorizontalHeaderLabels({ tr("Action", "Shortcut table header"), tr("Shortcut", "Shortcut table header") });
44 treeModelLoadShortcutsSetting();
45
46 ui->treeView->setModel(m_treeModel);
47 ui->treeView->resizeColumnToContents(0);
48
49 connect( ui->treeView, &QTreeView::clicked, this, &ShortcutsPage::tableItemClicked );
50 connect( ui->keySequenceEdit, &QKeySequenceEdit::editingFinished, this, &ShortcutsPage::keyCapLineEditTextChanged );
51 connect( ui->restoreShortcutsButton, &QPushButton::clicked, this, &ShortcutsPage::restoreShortcutsButtonClicked );
52 connect(ui->btnSaveShortcuts, &QPushButton::clicked, this, &ShortcutsPage::saveShortcutsButtonClicked);
53 connect(ui->btnLoadShortcuts, &QPushButton::clicked, this, &ShortcutsPage::loadShortcutsButtonClicked);
54 connect( ui->clearButton, &QPushButton::clicked, this, &ShortcutsPage::clearButtonClicked );
55
56 ui->treeView->selectionModel()->select(QItemSelection(m_treeModel->index(0, 0), m_treeModel->index(0, m_treeModel->columnCount() - 1)), QItemSelectionModel::Select);
57 tableItemClicked(m_treeModel->index(0, 0));
58}
59
60ShortcutsPage::~ShortcutsPage() {
61 delete ui;
62}
63
64void ShortcutsPage::tableItemClicked( const QModelIndex& modelIndex )
65{
66 int row = modelIndex.row();
67
68 // extract action name
69 QStandardItem* actionItem = m_treeModel->item(row, ACT_NAME_COLUMN);
70 ui->actionNameLabel->setText(actionItem->text());
71
72 // extract key sequence
73 QStandardItem* keySeqItem = m_treeModel->item(row, KEY_SEQ_COLUMN);
74 ui->keySequenceEdit->setKeySequence(keySeqItem->text());
75
76 qDebug() << "Command Selected:" << actionItem->text();
77
78 m_currentItemIndex = modelIndex;
79
80 ui->keySequenceEdit->setFocus();
81}
82
83void ShortcutsPage::keyCapLineEditTextChanged()
84{
85 QKeySequence keySequence = ui->keySequenceEdit->keySequence();
86 if (!m_currentItemIndex.isValid())
87 {
88 return;
89 }
90
91 int row = m_currentItemIndex.row();
92 QStandardItem* actionItem = m_treeModel->item(row, ACT_NAME_COLUMN);
93 QStandardItem* keySeqItem = m_treeModel->item(row, KEY_SEQ_COLUMN);
94
95 QString strCmdName = actionItem->data().toString();
96 QString strKeySeq = keySequence.toString( QKeySequence::PortableText );
97
98 QSettings setting( PENCIL2D, PENCIL2D );
99 setting.beginGroup("shortcuts");
100
101 if (isKeySequenceExist(setting, strCmdName, keySequence))
102 {
103 QMessageBox msgBox(this);
104 msgBox.setText( tr("Shortcut Conflict!"));
105 msgBox.setInformativeText( tr("%1 is already used, overwrite?").arg(keySequence.toString(QKeySequence::NativeText)) );
106 msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
107 msgBox.setDefaultButton(QMessageBox::No);
108 msgBox.setIcon( QMessageBox::Warning );
109
110 int result = msgBox.exec();
111
112 if ( result != QMessageBox::Yes )
113 {
114 ui->keySequenceEdit->setKeySequence( keySeqItem->text() );
115 return;
116 }
117 removeDuplicateKeySequence(&setting, keySequence);
118 }
119
120 setting.setValue(strCmdName, strKeySeq);
121 setting.endGroup();
122 setting.sync();
123
124 treeModelLoadShortcutsSetting();
125
126 qDebug() << "Shortcut " << strCmdName << " = " << strKeySeq;
127}
128
129void ShortcutsPage::saveShortcutsButtonClicked()
130{
131 QSettings settings( PENCIL2D, PENCIL2D );
132 settings.beginGroup( "LastSavePath" );
133
134 QString fDir = settings.value("Shortcuts").toString();
135 if (fDir.isEmpty())
136 fDir = QDir::homePath();
137
138 QString fileName = QFileDialog::getSaveFileName(this,
139 tr("Save Pencil2D Shortcut file"),
140 fDir + "/" + tr("untitled.pcls"),
141 tr("Pencil2D Shortcut File(*.pcls)"));
142 settings.setValue("Shortcuts", fileName);
143 settings.endGroup();
144
145 QSettings out(fileName, QSettings::IniFormat);
146 settings.beginGroup( "shortcuts" );
147 out.beginGroup("shortcuts");
148
149 foreach (QString key, settings.allKeys())
150 {
151 out.setValue(key, settings.value(key));
152 }
153}
154
155void ShortcutsPage::loadShortcutsButtonClicked()
156{
157 QSettings settings( PENCIL2D, PENCIL2D );
158 settings.beginGroup("LastSavePath");
159 QString fDir = settings.value("Shortcuts").toString();
160 settings.endGroup();
161 if (fDir.isEmpty())
162 fDir = QDir::homePath();
163
164 QString fileName = QFileDialog::getOpenFileName(this,
165 tr("Open Pencil2D Shortcut file"),
166 fDir,
167 tr("Pencil2D Shortcut File(*.pcls)"));
168
169 if (!QFileInfo(fileName).isReadable())
170 {
171 qDebug() << "Shortcut file not readable";
172 return;
173 }
174
175 QSettings input(fileName, QSettings::IniFormat);
176 if (input.status() != QSettings::NoError || !input.childGroups().contains("shortcuts"))
177 {
178 qDebug() << "Error accessing or parsing shortcut file" << input.status();
179 return;
180 }
181
182 input.beginGroup("shortcuts");
183 settings.beginGroup("shortcuts");
184 foreach (QString pShortcutsKey, input.allKeys())
185 {
186 settings.setValue(pShortcutsKey, input.value(pShortcutsKey));
187 }
188
189 treeModelLoadShortcutsSetting();
190}
191
192void ShortcutsPage::restoreShortcutsButtonClicked()
193{
194 restoreShortcutsToDefault();
195 treeModelLoadShortcutsSetting();
196}
197
198bool ShortcutsPage::isKeySequenceExist(const QSettings& settings, QString strTargetCmdName, QKeySequence targetkeySeq)
199{
200 foreach (QString strCmdName, settings.allKeys())
201 {
202 if (strTargetCmdName == strCmdName)
203 {
204 continue;
205 }
206
207 QString strCmdKeySeq = settings.value(strCmdName).toString();
208 if (QKeySequence(strCmdKeySeq) == targetkeySeq)
209 {
210 return true;
211 }
212 }
213 return false;
214}
215
216void ShortcutsPage::removeDuplicateKeySequence(QSettings* settings, QKeySequence keySeq)
217{
218 foreach(QString strCmdName, settings->allKeys())
219 {
220 QString strCmdKeySeq = settings->value(strCmdName).toString();
221
222 if ( strCmdKeySeq == keySeq.toString(QKeySequence::PortableText))
223 {
224 settings->setValue(strCmdName, "");
225 }
226 }
227}
228
229void ShortcutsPage::treeModelLoadShortcutsSetting()
230{
231 // Load shortcuts from settings
232 QSettings settings( PENCIL2D, PENCIL2D );
233 settings.beginGroup("shortcuts");
234
235 m_treeModel->setRowCount(settings.allKeys().size());
236 Q_ASSERT(m_treeModel->columnCount() == 2);
237
238 int row = 0;
239 foreach (QString strCmdName, settings.allKeys())
240 {
241 const QString &strShortcutName = getHumanReadableShortcutName(strCmdName);
242 if (strShortcutName.isEmpty()) {
243 // Shortcut not supported by this version of Pencil2D
244 continue;
245 }
246
247 QString strKeySequence = settings.value(strCmdName).toString();
248
249 //convert to native format
250 strKeySequence = QKeySequence(strKeySequence).toString(QKeySequence::NativeText);
251
252 if (m_treeModel->item(row , ACT_NAME_COLUMN) == nullptr)
253 m_treeModel->setItem(row, ACT_NAME_COLUMN, new QStandardItem());
254 if (m_treeModel->item(row, KEY_SEQ_COLUMN) == nullptr)
255 m_treeModel->setItem(row, KEY_SEQ_COLUMN, new QStandardItem());
256
257 m_treeModel->item(row, ACT_NAME_COLUMN)->setData(strCmdName);
258 m_treeModel->item(row, ACT_NAME_COLUMN)->setText(strShortcutName);
259 m_treeModel->item(row, ACT_NAME_COLUMN)->setEditable(false);
260 m_treeModel->item(row, KEY_SEQ_COLUMN)->setText(strKeySequence);
261 m_treeModel->item(row, KEY_SEQ_COLUMN)->setEditable(false);
262
263 row++;
264 }
265 m_treeModel->setRowCount(row);
266 settings.endGroup();
267
268 ui->treeView->resizeColumnToContents( 0 );
269}
270
271void ShortcutsPage::clearButtonClicked()
272{
273 if ( !m_currentItemIndex.isValid() )
274 {
275 return;
276 }
277
278 int row = m_currentItemIndex.row();
279 QStandardItem* actionItem = m_treeModel->item(row, ACT_NAME_COLUMN);
280
281 QString strCmdName = QString("shortcuts/%1").arg( actionItem->data().toString() );
282
283 QSettings setting( PENCIL2D, PENCIL2D );
284 setting.setValue( strCmdName, "" );
285 setting.sync();
286
287 ui->keySequenceEdit->clear();
288
289 treeModelLoadShortcutsSetting();
290}
291
298static QString getHumanReadableShortcutName(const QString& cmdName)
299{
300 static QHash<QString, QString> humanReadableShortcutNames = QHash<QString, QString>{
301 {CMD_ADD_FRAME, ShortcutsPage::tr("Add Frame", "Shortcut")},
302 {CMD_CLEAR_FRAME, ShortcutsPage::tr("Clear Frame", "Shortcut")},
303 {CMD_COPY, ShortcutsPage::tr("Copy", "Shortcut")},
304 {CMD_PASTE_FROM_PREVIOUS, ShortcutsPage::tr("Paste from Previous Keyframe", "Shortcut")},
305 {CMD_CUT, ShortcutsPage::tr("Cut", "Shortcut")},
306 {CMD_DELETE_CUR_LAYER, ShortcutsPage::tr("Delete Current Layer", "Shortcut")},
307 {CMD_DESELECT_ALL, ShortcutsPage::tr("Deselect All", "Shortcut")},
308 {CMD_DUPLICATE_FRAME, ShortcutsPage::tr("Duplicate Frame", "Shortcut")},
309 {CMD_EXIT, ShortcutsPage::tr("Exit", "Shortcut")},
310 {CMD_EXPORT_IMAGE, ShortcutsPage::tr("Export Image", "Shortcut")},
311 {CMD_EXPORT_IMAGE_SEQ, ShortcutsPage::tr("Export Image Sequence", "Shortcut")},
312 {CMD_EXPORT_MOVIE, ShortcutsPage::tr("Export Movie", "Shortcut")},
313 {CMD_EXPORT_GIF, ShortcutsPage::tr("Export Animated GIF", "Shortcut")},
314 {CMD_EXPORT_PALETTE, ShortcutsPage::tr("Export Palette", "Shortcut")},
315 {CMD_FLIP_HORIZONTAL, ShortcutsPage::tr("View: Horizontal Flip", "Shortcut")},
316 {CMD_FLIP_VERTICAL, ShortcutsPage::tr("View: Vertical Flip", "Shortcut")},
317 {CMD_FLIP_INBETWEEN, ShortcutsPage::tr("Flip In-Between", "Shortcut")},
318 {CMD_FLIP_ROLLING, ShortcutsPage::tr("Flip Rolling", "Shortcut")},
319 {CMD_GOTO_NEXT_FRAME, ShortcutsPage::tr("Next Frame", "Shortcut")},
320 {CMD_GOTO_NEXT_KEY_FRAME, ShortcutsPage::tr("Next Keyframe", "Shortcut")},
321 {CMD_GOTO_PREV_FRAME, ShortcutsPage::tr("Previous Frame", "Shortcut")},
322 {CMD_SELECTION_FLIP_HORIZONTAL, ShortcutsPage::tr("Selection: Horizontal Flip", "Shortcut")},
323 {CMD_SELECTION_FLIP_VERTICAL, ShortcutsPage::tr("Selection: Vertical Flip", "Shortcut")},
324 {CMD_GOTO_PREV_KEY_FRAME, ShortcutsPage::tr("Previous Keyframe", "Shortcut")},
325 {CMD_SELECTION_REPOSITION_FRAMES, ShortcutsPage::tr("Selection: Reposition Frames", "Shortcut")},
326 {CMD_SELECTION_ADD_FRAME_EXPOSURE, ShortcutsPage::tr("Selection: Add Frame Exposure", "Shortcut")},
327 {CMD_SELECTION_SUBTRACT_FRAME_EXPOSURE, ShortcutsPage::tr("Selection: Subtract Frame Exposure", "Shortcut")},
328 {CMD_REVERSE_SELECTED_FRAMES, ShortcutsPage::tr("Selection: Reverse Keyframes", "Shortcut")},
329 {CMD_REMOVE_SELECTED_FRAMES, ShortcutsPage::tr("Selection: Remove Keyframes", "Shortcut")},
330 {CMD_GRID, ShortcutsPage::tr("Toggle Grid", "Shortcut")},
331 {CMD_OVERLAY_CENTER, ShortcutsPage::tr("Toggle Center Overlay", "Shortcut")},
332 {CMD_OVERLAY_THIRDS, ShortcutsPage::tr("Toggle Thirds Overlay", "Shortcut")},
333 {CMD_OVERLAY_GOLDEN_RATIO, ShortcutsPage::tr("Toggle Golden Ratio Overlay", "Shortcut")},
334 {CMD_OVERLAY_SAFE_AREAS, ShortcutsPage::tr("Toggle Safe Areas Overlay", "Shortcut")},
335 {CMD_OVERLAY_ONE_POINT_PERSPECTIVE, ShortcutsPage::tr("Toggle One Point Perspective Overlay", "Shortcut")},
336 {CMD_OVERLAY_TWO_POINT_PERSPECTIVE, ShortcutsPage::tr("Toggle Two Point Perspective Overlay", "Shortcut")},
337 {CMD_OVERLAY_THREE_POINT_PERSPECTIVE, ShortcutsPage::tr("Toggle Three Point Perspective Overlay", "Shortcut")},
338 {CMD_IMPORT_IMAGE, ShortcutsPage::tr("Import Image", "Shortcut")},
339 {CMD_IMPORT_IMAGE_SEQ, ShortcutsPage::tr("Import Image Sequence", "Shortcut")},
340 {CMD_IMPORT_IMAGE_PREDEFINED_SET, ShortcutsPage::tr("Import Image Predefined Set", "Shortcut")},
341 {CMD_IMPORT_MOVIE_VIDEO, ShortcutsPage::tr("Import Movie Video", "Shortcut")},
342 {CMD_IMPORT_MOVIE_AUDIO, ShortcutsPage::tr("Import Movie Audio", "Shortcut")},
343 {CMD_IMPORT_ANIMATED_IMAGE, ShortcutsPage::tr("Import Animated Image", "Shortcut")},
344 {CMD_IMPORT_LAYERS, ShortcutsPage::tr("Import Layers from project file", "Shortcut")},
345 {CMD_IMPORT_PALETTE, ShortcutsPage::tr("Import Palette (Append)", "Shortcut")},
346 {CMD_IMPORT_PALETTE_REPLACE, ShortcutsPage::tr("Import Palette (Replace)", "Shortcut")},
347 {CMD_IMPORT_SOUND, ShortcutsPage::tr("Import Sound", "Shortcut")},
348 {CMD_ALL_LAYER_VISIBILITY, ShortcutsPage::tr("Show All Layers", "Shortcut")},
349 {CMD_CURRENT_LAYER_VISIBILITY, ShortcutsPage::tr("Show Current Layer Only", "Shortcut")},
350 {CMD_RELATIVE_LAYER_VISIBILITY, ShortcutsPage::tr("Show Layers Relative to Current Layer", "Shortcut")},
351 {CMD_LOOP, ShortcutsPage::tr("Toggle Loop", "Shortcut")},
352 {CMD_LOOP_CONTROL, ShortcutsPage::tr("Toggle Range Playback", "Shortcut")},
353 {CMD_MOVE_FRAME_BACKWARD, ShortcutsPage::tr("Move Frame Backward", "Shortcut")},
354 {CMD_MOVE_FRAME_FORWARD, ShortcutsPage::tr("Move Frame Forward", "Shortcut")},
355 {CMD_NEW_BITMAP_LAYER, ShortcutsPage::tr("New Bitmap Layer", "Shortcut")},
356 {CMD_NEW_CAMERA_LAYER, ShortcutsPage::tr("New Camera Layer", "Shortcut")},
357 {CMD_NEW_FILE, ShortcutsPage::tr("New File", "Shortcut")},
358 {CMD_NEW_SOUND_LAYER, ShortcutsPage::tr("New Sound Layer", "Shortcut")},
359 {CMD_NEW_VECTOR_LAYER, ShortcutsPage::tr("New Vector Layer", "Shortcut")},
360 {CMD_ONIONSKIN_NEXT, ShortcutsPage::tr("Toggle Next Onion Skin", "Shortcut")},
361 {CMD_ONIONSKIN_PREV, ShortcutsPage::tr("Toggle Previous Onion Skin", "Shortcut")},
362 {CMD_OPEN_FILE, ShortcutsPage::tr("Open File", "Shortcut")},
363 {CMD_PASTE, ShortcutsPage::tr("Paste", "Shortcut")},
364 {CMD_PLAY, ShortcutsPage::tr("Play/Stop", "Shortcut")},
365 {CMD_PEGBAR_ALIGNMENT, ShortcutsPage::tr("Peg bar Alignment", "Shortcut")},
366 {CMD_PREFERENCE, ShortcutsPage::tr("Preferences", "Shortcut")},
367 {CMD_REDO, ShortcutsPage::tr("Redo", "Shortcut")},
368 {CMD_REMOVE_FRAME, ShortcutsPage::tr("Remove Frame", "Shortcut")},
369 {CMD_RESET_WINDOWS, ShortcutsPage::tr("Reset Windows", "Shortcut")},
370 {CMD_LOCK_WINDOWS, ShortcutsPage::tr("Lock Windows", "Shortcut")},
371 {CMD_RESET_ZOOM_ROTATE, ShortcutsPage::tr("Reset View", "Shortcut")},
372 {CMD_CENTER_VIEW, ShortcutsPage::tr("Center View", "Shortcut")},
373 {CMD_ROTATE_ANTI_CLOCK, ShortcutsPage::tr("Rotate Anticlockwise", "Shortcut")},
374 {CMD_ROTATE_CLOCK, ShortcutsPage::tr("Rotate Clockwise", "Shortcut")},
375 {CMD_RESET_ROTATION, ShortcutsPage::tr("Reset Rotation", "Shortcut")},
376 {CMD_SAVE_AS, ShortcutsPage::tr("Save File As", "Shortcut")},
377 {CMD_SAVE_FILE, ShortcutsPage::tr("Save File", "Shortcut")},
378 {CMD_SELECT_ALL, ShortcutsPage::tr("Select All", "Shortcut")},
379 {CMD_TOGGLE_STATUS_BAR, ShortcutsPage::tr("Toggle Status Bar Visibility", "Shortcut")},
380 {CMD_TOGGLE_COLOR_INSPECTOR, ShortcutsPage::tr("Toggle Color Inspector Window Visibility", "Shortcut")},
381 {CMD_TOGGLE_COLOR_LIBRARY, ShortcutsPage::tr("Toggle Color Palette Window Visibility", "Shortcut")},
382 {CMD_TOGGLE_COLOR_WHEEL, ShortcutsPage::tr("Toggle Color Box Window Visibility", "Shortcut")},
383 {CMD_TOGGLE_ONION_SKIN, ShortcutsPage::tr("Toggle Onion Skins Window Visibility", "Shortcut")},
384 {CMD_TOGGLE_TIMELINE, ShortcutsPage::tr("Toggle Timeline Window Visibility", "Shortcut")},
385 {CMD_TOGGLE_TOOLBOX, ShortcutsPage::tr("Toggle Tools Window Visibility", "Shortcut")},
386 {CMD_TOGGLE_TOOL_OPTIONS, ShortcutsPage::tr("Toggle Options Window Visibility", "Shortcut")},
387 {CMD_TOOL_BRUSH, ShortcutsPage::tr("Brush Tool", "Shortcut")},
388 {CMD_TOOL_BUCKET, ShortcutsPage::tr("Bucket Tool", "Shortcut")},
389 {CMD_TOOL_ERASER, ShortcutsPage::tr("Eraser Tool", "Shortcut")},
390 {CMD_TOOL_EYEDROPPER, ShortcutsPage::tr("Eyedropper Tool", "Shortcut")},
391 {CMD_TOOL_HAND, ShortcutsPage::tr("Hand Tool", "Shortcut")},
392 {CMD_TOOL_MOVE, ShortcutsPage::tr("Move Tool", "Shortcut")},
393 {CMD_TOOL_PEN, ShortcutsPage::tr("Pen Tool", "Shortcut")},
394 {CMD_TOOL_PENCIL, ShortcutsPage::tr("Pencil Tool", "Shortcut")},
395 {CMD_TOOL_POLYLINE, ShortcutsPage::tr("Polyline Tool", "Shortcut")},
396 {CMD_TOOL_SELECT, ShortcutsPage::tr("Select Tool", "Shortcut")},
397 {CMD_TOOL_SMUDGE, ShortcutsPage::tr("Smudge Tool", "Shortcut")},
398 {CMD_RESET_ALL_TOOLS, ShortcutsPage::tr("Reset all tools to default", "Shortcut")},
399 {CMD_CHANGE_LINE_COLOR_KEYFRAME, ShortcutsPage::tr("Change Line Color (Current keyframe)", "Shortcut")},
400 {CMD_CHANGE_LINE_COLOR_LAYER, ShortcutsPage::tr("Change Line Color (All keyframes on layer)", "Shortcut")},
401 {CMD_CHANGE_LAYER_OPACITY, ShortcutsPage::tr("Change Layer / Keyframe Opacity", "Shortcut")},
402 {CMD_UNDO, ShortcutsPage::tr("Undo", "Shortcut")},
403 {CMD_ZOOM_100, ShortcutsPage::tr("Set Zoom to 100%", "Shortcut")},
404 {CMD_ZOOM_200, ShortcutsPage::tr("Set Zoom to 200%", "Shortcut")},
405 {CMD_ZOOM_25, ShortcutsPage::tr("Set Zoom to 25%", "Shortcut")},
406 {CMD_ZOOM_300, ShortcutsPage::tr("Set Zoom to 300%", "Shortcut")},
407 {CMD_ZOOM_33, ShortcutsPage::tr("Set Zoom to 33%", "Shortcut")},
408 {CMD_ZOOM_400, ShortcutsPage::tr("Set Zoom to 400%", "Shortcut")},
409 {CMD_ZOOM_50, ShortcutsPage::tr("Set Zoom to 50%", "Shortcut")},
410 {CMD_ZOOM_IN, ShortcutsPage::tr("Zoom In", "Shortcut")},
411 {CMD_ZOOM_OUT, ShortcutsPage::tr("Zoom Out", "Shortcut")},
412 };
413
414 return humanReadableShortcutNames.value(cmdName, QString());
415}
ShortcutsPage
Definition: shortcutspage.h:38
QAbstractButton::clicked
void clicked(bool checked)
QAbstractItemView::clicked
void clicked(const QModelIndex &index)
QDir::homePath
QString homePath()
QFileDialog::getOpenFileName
QString getOpenFileName(QWidget *parent, const QString &caption, const QString &dir, const QString &filter, QString *selectedFilter, QFileDialog::Options options)
QFileDialog::getSaveFileName
QString getSaveFileName(QWidget *parent, const QString &caption, const QString &dir, const QString &filter, QString *selectedFilter, QFileDialog::Options options)
QFileInfo
QHash
QHash::value
const T value(const Key &key) const const
QItemSelection
QItemSelectionModel::Select
Select
QKeySequence
QKeySequence::PortableText
PortableText
QKeySequence::toString
QString toString(QKeySequence::SequenceFormat format) const const
QKeySequenceEdit::editingFinished
void editingFinished()
QList::size
int size() const const
QMessageBox
QMessageBox::Warning
Warning
QMessageBox::Yes
Yes
QModelIndex
QModelIndex::isValid
bool isValid() const const
QModelIndex::row
int row() const const
QObject::tr
QString tr(const char *sourceText, const char *disambiguation, int n)
QSettings
QSettings::IniFormat
IniFormat
QSettings::NoError
NoError
QSettings::allKeys
QStringList allKeys() const const
QSettings::beginGroup
void beginGroup(const QString &prefix)
QSettings::endGroup
void endGroup()
QSettings::setValue
void setValue(const QString &key, const QVariant &value)
QSettings::value
QVariant value(const QString &key, const QVariant &defaultValue) const const
QStandardItem
QStandardItem::data
virtual QVariant data(int role) const const
QStandardItem::setData
virtual void setData(const QVariant &value, int role)
QStandardItem::setEditable
void setEditable(bool editable)
QStandardItem::setText
void setText(const QString &text)
QStandardItem::text
QString text() const const
QStandardItemModel
QStandardItemModel::columnCount
virtual int columnCount(const QModelIndex &parent) const const override
QStandardItemModel::item
QStandardItem * item(int row, int column) const const
QStandardItemModel::setItem
void setItem(int row, int column, QStandardItem *item)
QStandardItemModel::setRowCount
void setRowCount(int rows)
QString
QString::arg
QString arg(qlonglong a, int fieldWidth, int base, QChar fillChar) const const
QString::isEmpty
bool isEmpty() const const
QTest::keySequence
void keySequence(QWindow *window, const QKeySequence &keySequence)
QVariant::toString
QString toString() const const
QWidget
QWidget::setupUi
void setupUi(QWidget *widget)
Generated on Thu May 8 2025 04:47:53 for Pencil2D by doxygen 1.9.6 based on revision 4513250b1d5b1a3676ec0e67b06b7a885ceaae39