File indexing completed on 2025-02-02 04:21:14

0001 /*
0002  *  SPDX-FileCopyrightText: 2020 Anna Medonosová <anna.medonosova@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #include "SPenSettings.h"
0008 #include <KisSPenSettings.h>
0009 
0010 #include <KisMainWindow.h>
0011 #include <kpluginfactory.h>
0012 #include <kis_action.h>
0013 #include <KisViewManager.h>
0014 #include <kis_action_manager.h>
0015 #include <KisPart.h>
0016 #include <kactioncollection.h>
0017 #include <kconfiggroup.h>
0018 #include <ksharedconfig.h>
0019 #include <kis_preference_set_registry.h>
0020 #include <kis_canvas2.h>
0021 #include <input/kis_input_manager.h>
0022 #include <kis_canvas_controller.h>
0023 #include <kis_popup_palette.h>
0024 
0025 
0026 K_PLUGIN_FACTORY_WITH_JSON(SPenSettingsFactory, "kritaspensettings.json", registerPlugin<SPenSettings>();)
0027 
0028 
0029 SPenSettings::SPenSettings(QObject* parent, const QVariantList&)
0030     : KisActionPlugin(parent)
0031 {
0032     // hack: create action for popup palette
0033     m_actionShowPopupPalette.reset(viewManager()->actionManager()->createAction("spen_show_popup_palette"));
0034     connect(m_actionShowPopupPalette.data(), SIGNAL(triggered()), this, SLOT(slotTriggerPopupPalette()));
0035 
0036     KisPreferenceSetRegistry* preferenceSetRegistry = KisPreferenceSetRegistry::instance();
0037     KisSPenSettingsFactory* settingsFactory = new KisSPenSettingsFactory();
0038     preferenceSetRegistry->add("KisSPenSettingsFactory", settingsFactory);
0039 
0040     //emit settingsChanged() if the settings are changed in krita preferences
0041     connect(&(settingsFactory->repeater), SIGNAL(settingsUpdated()), this, SLOT(slotLoadSettings()), Qt::UniqueConnection);
0042 
0043     slotLoadSettings();
0044 
0045     KisAction* actionSPenClick = viewManager()->actionManager()->createAction("spen_click");
0046     connect(actionSPenClick, &KisAction::triggered, this, [this](){ slotActivateAction(Action::Click); });
0047 
0048     KisAction* actionSPenDoubleClick = viewManager()->actionManager()->createAction("spen_double_click");
0049     connect(actionSPenDoubleClick, &KisAction::triggered, this, [this]() { slotActivateAction(Action::DoubleClick); });
0050 
0051     KisAction* actionSPenSwipeUp = viewManager()->actionManager()->createAction("spen_swipe_up");
0052     connect(actionSPenSwipeUp, &KisAction::triggered, this, [this]() { slotActivateAction(Action::SwipeUp); });
0053 
0054     KisAction* actionSPenSwipeDown = viewManager()->actionManager()->createAction("spen_swipe_down");
0055     connect(actionSPenSwipeDown, &KisAction::triggered, this, [this]() { slotActivateAction(Action::SwipeDown); });
0056 
0057     KisAction* actionSPenSwipeLeft = viewManager()->actionManager()->createAction("spen_swipe_left");
0058     connect(actionSPenSwipeLeft, &KisAction::triggered, this, [this]() { slotActivateAction(Action::SwipeLeft); });
0059 
0060     KisAction* actionSPenSwipeRight = viewManager()->actionManager()->createAction("spen_swipe_right");
0061     connect(actionSPenSwipeRight, &KisAction::triggered, this, [this]() { slotActivateAction(Action::SwipeRight); });
0062 
0063     KisAction* actionSPenCircleCW = viewManager()->actionManager()->createAction("spen_circle_cw");
0064     connect(actionSPenCircleCW, &KisAction::triggered, this, [this]() { slotActivateAction(Action::CircleCW); });
0065 
0066     KisAction* actionSPenCircleCCW = viewManager()->actionManager()->createAction("spen_circle_ccw");
0067     connect(actionSPenCircleCCW, &KisAction::triggered, this, [this]() { slotActivateAction(Action::CircleCCW); });
0068 }
0069 
0070 SPenSettings::~SPenSettings()
0071 {
0072 }
0073 
0074 void SPenSettings::slotActivateAction(SPenSettings::Action gestureType)
0075 {
0076     QString actionName = m_actionMap.value(gestureType);
0077 //    qDebug() << "Gesture " << gestureType << " action " << actionName;
0078 
0079     if (!actionName.isEmpty()) {
0080         KisKActionCollection* actionCollection = KisPart::instance()->currentMainwindow()->actionCollection();
0081         QAction* action = actionCollection->action(actionName);
0082         if (action) {
0083 //            qDebug() << "triggering action " << actionName;
0084             action->trigger();
0085         }
0086     }
0087 }
0088 
0089 void SPenSettings::slotLoadSettings()
0090 {
0091     m_actionMap.clear();
0092 
0093     KConfigGroup cfg = KSharedConfig::openConfig()->group("SPenSettings");
0094 
0095     m_actionMap.insert(Action::Click, cfg.readEntry("actionButtonClick", QString()));
0096     m_actionMap.insert(Action::DoubleClick,cfg.readEntry("actionButtonDoubleClick", QString()));
0097     m_actionMap.insert(Action::SwipeUp,cfg.readEntry("actionGestureSwipeUp", QString()));
0098     m_actionMap.insert(Action::SwipeDown, cfg.readEntry("actionGestureSwipeDown", QString()));
0099     m_actionMap.insert(Action::SwipeLeft, cfg.readEntry("actionGestureSwipeLeft", QString()));
0100     m_actionMap.insert(Action::SwipeRight, cfg.readEntry("actionGestureSwipeRight", QString()));
0101     m_actionMap.insert(Action::CircleCW, cfg.readEntry("actionGestureCircleCW", QString()));
0102     m_actionMap.insert(Action::CircleCCW, cfg.readEntry("actionGestureCircleCCW", QString()));
0103 }
0104 
0105 void SPenSettings::slotTriggerPopupPalette()
0106 {
0107     if (KisPart::instance()->currentInputManager()->canvas()) {
0108         // determine the current location of cursor on the screen, for popup palette placement
0109         QPoint cursorPosition = KisPart::instance()->currentInputManager()->canvas()->canvasWidget()->mapFromGlobal(QCursor::pos());
0110         KisPopupPalette *popupPalette = KisPart::instance()->currentInputManager()->canvas()->popupPalette();
0111         if (popupPalette) {
0112             if (popupPalette->isVisible()) {
0113                 popupPalette->dismiss();
0114             } else {
0115                 popupPalette->popup(cursorPosition);
0116             }
0117         }
0118     }
0119 }
0120 
0121 #include "SPenSettings.moc"
0122