Krita Source Code Documentation
Loading...
Searching...
No Matches
SPenSettings.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2020 Anna Medonosová <anna.medonosova@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7#include "SPenSettings.h"
8#include <KisSPenSettings.h>
9
10#include <KisMainWindow.h>
11#include <kpluginfactory.h>
12#include <kis_action.h>
13#include <KisViewManager.h>
14#include <kis_action_manager.h>
15#include <KisPart.h>
16#include <kactioncollection.h>
17#include <kconfiggroup.h>
18#include <ksharedconfig.h>
20#include <kis_canvas2.h>
23#include <kis_popup_palette.h>
24
25
26K_PLUGIN_FACTORY_WITH_JSON(SPenSettingsFactory, "kritaspensettings.json", registerPlugin<SPenSettings>();)
27
28
29SPenSettings::SPenSettings(QObject* parent, const QVariantList&)
30 : KisActionPlugin(parent)
31{
32 // hack: create action for popup palette
33 m_actionShowPopupPalette.reset(viewManager()->actionManager()->createAction("spen_show_popup_palette"));
34 connect(m_actionShowPopupPalette.data(), SIGNAL(triggered()), this, SLOT(slotTriggerPopupPalette()));
35
37 KisSPenSettingsFactory* settingsFactory = new KisSPenSettingsFactory();
38 preferenceSetRegistry->add("KisSPenSettingsFactory", settingsFactory);
39
40 //emit settingsChanged() if the settings are changed in krita preferences
41 connect(&(settingsFactory->repeater), SIGNAL(settingsUpdated()), this, SLOT(slotLoadSettings()), Qt::UniqueConnection);
42
43 slotLoadSettings();
44
45 KisAction* actionSPenClick = viewManager()->actionManager()->createAction("spen_click");
46 connect(actionSPenClick, &KisAction::triggered, this, [this](){ slotActivateAction(Action::Click); });
47
48 KisAction* actionSPenDoubleClick = viewManager()->actionManager()->createAction("spen_double_click");
49 connect(actionSPenDoubleClick, &KisAction::triggered, this, [this]() { slotActivateAction(Action::DoubleClick); });
50
51 KisAction* actionSPenSwipeUp = viewManager()->actionManager()->createAction("spen_swipe_up");
52 connect(actionSPenSwipeUp, &KisAction::triggered, this, [this]() { slotActivateAction(Action::SwipeUp); });
53
54 KisAction* actionSPenSwipeDown = viewManager()->actionManager()->createAction("spen_swipe_down");
55 connect(actionSPenSwipeDown, &KisAction::triggered, this, [this]() { slotActivateAction(Action::SwipeDown); });
56
57 KisAction* actionSPenSwipeLeft = viewManager()->actionManager()->createAction("spen_swipe_left");
58 connect(actionSPenSwipeLeft, &KisAction::triggered, this, [this]() { slotActivateAction(Action::SwipeLeft); });
59
60 KisAction* actionSPenSwipeRight = viewManager()->actionManager()->createAction("spen_swipe_right");
61 connect(actionSPenSwipeRight, &KisAction::triggered, this, [this]() { slotActivateAction(Action::SwipeRight); });
62
63 KisAction* actionSPenCircleCW = viewManager()->actionManager()->createAction("spen_circle_cw");
64 connect(actionSPenCircleCW, &KisAction::triggered, this, [this]() { slotActivateAction(Action::CircleCW); });
65
66 KisAction* actionSPenCircleCCW = viewManager()->actionManager()->createAction("spen_circle_ccw");
67 connect(actionSPenCircleCCW, &KisAction::triggered, this, [this]() { slotActivateAction(Action::CircleCCW); });
68}
69
73
75{
76 QString actionName = m_actionMap.value(gestureType);
77// qDebug() << "Gesture " << gestureType << " action " << actionName;
78
79 if (!actionName.isEmpty()) {
81 QAction* action = actionCollection->action(actionName);
82 if (action) {
83// qDebug() << "triggering action " << actionName;
84 action->trigger();
85 }
86 }
87}
88
90{
91 m_actionMap.clear();
92
93 KConfigGroup cfg = KSharedConfig::openConfig()->group("SPenSettings");
94
95 m_actionMap.insert(Action::Click, cfg.readEntry("actionButtonClick", QString()));
96 m_actionMap.insert(Action::DoubleClick,cfg.readEntry("actionButtonDoubleClick", QString()));
97 m_actionMap.insert(Action::SwipeUp,cfg.readEntry("actionGestureSwipeUp", QString()));
98 m_actionMap.insert(Action::SwipeDown, cfg.readEntry("actionGestureSwipeDown", QString()));
99 m_actionMap.insert(Action::SwipeLeft, cfg.readEntry("actionGestureSwipeLeft", QString()));
100 m_actionMap.insert(Action::SwipeRight, cfg.readEntry("actionGestureSwipeRight", QString()));
101 m_actionMap.insert(Action::CircleCW, cfg.readEntry("actionGestureCircleCW", QString()));
102 m_actionMap.insert(Action::CircleCCW, cfg.readEntry("actionGestureCircleCCW", QString()));
103}
104
106{
107 if (KisPart::instance()->currentInputManager()->canvas()) {
108 // determine the current location of cursor on the screen, for popup palette placement
109 QPoint cursorPosition = KisPart::instance()->currentInputManager()->canvas()->canvasWidget()->mapFromGlobal(QCursor::pos());
111 if (popupPalette) {
112 if (popupPalette->isVisible()) {
113 popupPalette->dismiss();
114 } else {
115 popupPalette->popup(cursorPosition);
116 }
117 }
118 }
119}
120
121#include "SPenSettings.moc"
122
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
KisAction * createAction(const QString &name)
KisActionManager * actionManager
KisPopupPalette * popupPalette
KisAbstractCanvasWidget * canvasWidget
KisCanvas2 * canvas() const
A container for a set of QAction objects.
QAction * action(int index) const
virtual KisKActionCollection * actionCollection() const
KisInputManager * currentInputManager()
Definition KisPart.cpp:643
static KisPart * instance()
Definition KisPart.cpp:131
KisMainWindow * currentMainwindow() const
Definition KisPart.cpp:483
void dismiss() override
Called when you want to dismiss a popup widget.
void popup(const QPoint &position) override
Called when and where you want a widget to popup.
static KisPreferenceSetRegistry * instance()
KisSPenSettingsUpdateRepeater repeater
void slotActivateAction(SPenSettings::Action gestureType)
void slotTriggerPopupPalette()
void slotLoadSettings()
SPenSettings(QObject *parent, const QVariantList &)
QMap< SPenSettings::Action, QString > m_actionMap
K_PLUGIN_FACTORY_WITH_JSON(KritaASCCDLFactory, "kritaasccdl.json", registerPlugin< KritaASCCDL >();) KritaASCCDL