Skip to content

Commit 84c112c

Browse files
WIP: brush preset shortcuts
1 parent 790b8da commit 84c112c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+2351
-545
lines changed

src/desktop/CMakeLists.txt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,8 +135,6 @@ target_sources(drawpile PRIVATE
135135
dialogs/settingsdialog/general.cpp
136136
dialogs/settingsdialog/general.h
137137
dialogs/settingsdialog/helpers.h
138-
dialogs/settingsdialog/input.cpp
139-
dialogs/settingsdialog/input.h
140138
dialogs/settingsdialog/network.cpp
141139
dialogs/settingsdialog/network.h
142140
dialogs/settingsdialog/notifications.cpp
@@ -151,8 +149,14 @@ target_sources(drawpile PRIVATE
151149
dialogs/settingsdialog/userinterface.h
152150
dialogs/settingsdialog/servers.cpp
153151
dialogs/settingsdialog/servers.h
152+
dialogs/settingsdialog/shortcutfilterinput.cpp
153+
dialogs/settingsdialog/shortcutfilterinput.h
154154
dialogs/settingsdialog/shortcuts.cpp
155155
dialogs/settingsdialog/shortcuts.h
156+
dialogs/settingsdialog/tablet.cpp
157+
dialogs/settingsdialog/tablet.h
158+
dialogs/settingsdialog/touch.cpp
159+
dialogs/settingsdialog/touch.h
156160
dialogs/settingsdialog/tools.cpp
157161
dialogs/settingsdialog/tools.h
158162
dialogs/startdialog.cpp

src/desktop/assets/theme/dark/dialog-input-devices.svg

Lines changed: 0 additions & 12 deletions
This file was deleted.
Lines changed: 14 additions & 0 deletions
Loading
Lines changed: 12 additions & 0 deletions
Loading

src/desktop/assets/theme/light/dialog-input-devices.svg

Lines changed: 0 additions & 12 deletions
This file was deleted.
Lines changed: 14 additions & 0 deletions
Loading
Lines changed: 12 additions & 0 deletions
Loading

src/desktop/dialogs/brushsettingsdialog.cpp

Lines changed: 76 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include "desktop/filewrangler.h"
44
#include "desktop/utils/widgetutils.h"
55
#include "desktop/widgets/curvewidget.h"
6+
#include "desktop/widgets/keysequenceedit.h"
67
#include "desktop/widgets/kis_slider_spin_box.h"
78
#include "desktop/widgets/toolmessage.h"
89
#include "libclient/canvas/blendmodes.h"
@@ -30,6 +31,33 @@
3031

3132
namespace dialogs {
3233

34+
namespace {
35+
36+
class ShortcutLineEdit : public QLineEdit {
37+
public:
38+
ShortcutLineEdit(QPushButton *button)
39+
: QLineEdit()
40+
, m_button(button)
41+
{
42+
setReadOnly(true);
43+
setEnabled(false);
44+
}
45+
46+
protected:
47+
void mousePressEvent(QMouseEvent *event) override
48+
{
49+
QLineEdit::mousePressEvent(event);
50+
if(event->button() == Qt::LeftButton) {
51+
m_button->click();
52+
}
53+
}
54+
55+
private:
56+
QPushButton *m_button;
57+
};
58+
59+
}
60+
3361
struct BrushSettingsDialog::Private {
3462
struct MyPaintPage {
3563
KisDoubleSliderSpinBox *baseValueSpinner;
@@ -51,6 +79,8 @@ struct BrushSettingsDialog::Private {
5179
QLineEdit *presetLabelEdit;
5280
QLineEdit *presetNameEdit;
5381
QPlainTextEdit *presetDescriptionEdit;
82+
ShortcutLineEdit *presetShortcutEdit;
83+
QPushButton *presetShortcutButton;
5484
QComboBox *brushTypeCombo;
5585
QLabel *brushModeLabel;
5686
QComboBox *brushModeCombo;
@@ -94,6 +124,7 @@ struct BrushSettingsDialog::Private {
94124
DP_BrushShape lastShape;
95125
brushes::ActiveBrush brush;
96126
int globalSmoothing;
127+
int presetId = 0;
97128
bool useBrushSampleCount;
98129
bool presetAttached = true;
99130
bool updating = false;
@@ -129,7 +160,18 @@ void BrushSettingsDialog::showGeneralPage()
129160
}
130161

131162

132-
void BrushSettingsDialog::setPresetAttached(bool presetAttached)
163+
bool BrushSettingsDialog::isPresetAttached() const
164+
{
165+
return d->presetAttached;
166+
}
167+
168+
int BrushSettingsDialog::presetId() const
169+
{
170+
return d->presetId;
171+
}
172+
173+
174+
void BrushSettingsDialog::setPresetAttached(bool presetAttached, int presetId)
133175
{
134176
utils::ScopedUpdateDisabler disabler(this);
135177
if(presetAttached && !d->presetAttached) {
@@ -139,6 +181,7 @@ void BrushSettingsDialog::setPresetAttached(bool presetAttached)
139181
d->presetAttachedWidget->hide();
140182
d->presetDetachedWidget->show();
141183
}
184+
d->presetId = presetId;
142185
d->presetAttached = presetAttached;
143186
d->presetAttachedWidget->setEnabled(presetAttached);
144187
d->overwriteBrushButton->setEnabled(presetAttached);
@@ -171,6 +214,13 @@ void BrushSettingsDialog::setPresetThumbnail(const QPixmap &presetThumbnail)
171214
}
172215
}
173216

217+
void BrushSettingsDialog::setPresetShortcut(const QKeySequence &presetShortcut)
218+
{
219+
QString text = presetShortcut.toString(QKeySequence::NativeText);
220+
d->presetShortcutEdit->setText(
221+
text.isEmpty() ? tr("No shortcut assigned") : text);
222+
}
223+
174224
void BrushSettingsDialog::setForceEraseMode(bool forceEraseMode)
175225
{
176226
d->eraseModeBox->setEnabled(!forceEraseMode);
@@ -343,6 +393,24 @@ QWidget *BrushSettingsDialog::buildPresetPageUi()
343393
attachedLayout->setContentsMargins(0, 0, 0, 0);
344394
d->presetAttachedWidget->setLayout(attachedLayout);
345395

396+
d->presetShortcutButton = new QPushButton(tr("Change…"));
397+
connect(
398+
d->presetShortcutButton, &QPushButton::clicked, this,
399+
&BrushSettingsDialog::requestShortcutChange);
400+
401+
d->presetShortcutEdit = new ShortcutLineEdit(d->presetShortcutButton);
402+
d->presetShortcutEdit->setAlignment(Qt::AlignCenter);
403+
d->presetShortcutEdit->setReadOnly(true);
404+
d->presetShortcutEdit->setEnabled(false);
405+
406+
QHBoxLayout *shortcutLayout = new QHBoxLayout;
407+
shortcutLayout->setContentsMargins(0, 0, 0, 0);
408+
shortcutLayout->addWidget(d->presetShortcutEdit);
409+
shortcutLayout->addWidget(d->presetShortcutButton);
410+
attachedLayout->addRow(tr("Shortcut:"), shortcutLayout);
411+
412+
utils::addFormSpacer(attachedLayout);
413+
346414
QGridLayout *thumbnailLayout = new QGridLayout;
347415

348416
d->presetThumbnailView = new QGraphicsView;
@@ -1339,6 +1407,13 @@ bool BrushSettingsDialog::disableIndirectMyPaintInputs(int setting)
13391407
}
13401408
}
13411409

1410+
void BrushSettingsDialog::requestShortcutChange()
1411+
{
1412+
if(d->presetAttached) {
1413+
emit shortcutChangeRequested(d->presetId);
1414+
}
1415+
}
1416+
13421417
void BrushSettingsDialog::choosePresetThumbnailFile()
13431418
{
13441419
FileWrangler::ImageOpenFn imageOpenCompleted = [this](QImage &img) {

src/desktop/dialogs/brushsettingsdialog.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
class KisSliderSpinBox;
1010
class QComboBox;
11+
class QKeySequence;
1112
class QListWidgetItem;
1213
class QPushButton;
1314
class QVBoxLayout;
@@ -23,19 +24,24 @@ class BrushSettingsDialog final : public QDialog {
2324
void showPresetPage();
2425
void showGeneralPage();
2526

27+
bool isPresetAttached() const;
28+
int presetId() const;
29+
2630
signals:
2731
void presetNameChanged(const QString &presetName);
2832
void presetDescriptionChanged(const QString &presetDescription);
2933
void presetThumbnailChanged(const QPixmap &presetThumbnail);
3034
void brushSettingsChanged(const brushes::ActiveBrush &brush);
3135
void newBrushRequested();
3236
void overwriteBrushRequested();
37+
void shortcutChangeRequested(int presetId);
3338

3439
public slots:
35-
void setPresetAttached(bool presetAttached);
40+
void setPresetAttached(bool presetAttached, int presetId);
3641
void setPresetName(const QString &presetName);
3742
void setPresetDescription(const QString &presetDescription);
3843
void setPresetThumbnail(const QPixmap &presetThumbnail);
44+
void setPresetShortcut(const QKeySequence &presetShortcut);
3945
void setForceEraseMode(bool forceEraseMode);
4046
void setStabilizerUseBrushSampleCount(bool useBrushSampleCount);
4147
void setGlobalSmoothing(int smoothing);
@@ -121,6 +127,7 @@ private slots:
121127
static QString getMyPaintSettingTitle(int setting);
122128
static QString getMyPaintSettingDescription(int setting);
123129

130+
void requestShortcutChange();
124131
void choosePresetThumbnailFile();
125132
void showPresetThumbnail(const QPixmap &thumbnail);
126133
void renderPresetThumbnail();

0 commit comments

Comments
 (0)