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