[krita] /: Make selection mode shortcuts configurable

Dmitry Kazakov null at kde.org
Wed Sep 5 15:24:06 BST 2018


Git commit d7bc0ebf1daeb72837f4584e3ca234ce463dc495 by Dmitry Kazakov.
Committed on 05/09/2018 at 13:38.
Pushed by dkazakov into branch 'master'.

Make selection mode shortcuts configurable

Now there are four new shortcuts that are available in
selection tools only:

* Selection Mode: Add
* Selection Mode: Subtract
* Selection Mode: Intersect
* Selection Mode: Replace

Ref T9486
CC:kimageshop at kde.org

M  +40   -0    krita/krita.action
M  +24   -29   libs/ui/tool/kis_selection_tool_config_widget_helper.cpp
M  +5    -0    libs/ui/tool/kis_selection_tool_config_widget_helper.h
M  +59   -7    libs/ui/tool/kis_tool_select_base.h

https://commits.kde.org/krita/d7bc0ebf1daeb72837f4584e3ca234ce463dc495

diff --git a/krita/krita.action b/krita/krita.action
index 87c6cb96d48..2a524c374f3 100644
--- a/krita/krita.action
+++ b/krita/krita.action
@@ -566,6 +566,46 @@
       <isCheckable>false</isCheckable>
       <statusTip></statusTip>
     </Action>
+    <Action name="selection_tool_mode_add">
+      <icon></icon>
+      <text>Selection Mode: Add</text>
+      <whatsThis></whatsThis>
+      <toolTip>Selection Mode: Add</toolTip>
+      <iconText>Selection Mode: Add</iconText>
+      <shortcut>A</shortcut>
+      <isCheckable>false</isCheckable>
+      <statusTip></statusTip>
+    </Action>
+    <Action name="selection_tool_mode_subtract">
+      <icon></icon>
+      <text>Selection Mode: Subtract</text>
+      <whatsThis></whatsThis>
+      <toolTip>Selection Mode: Subtract</toolTip>
+      <iconText>Selection Mode: Subtract</iconText>
+      <shortcut>S</shortcut>
+      <isCheckable>false</isCheckable>
+      <statusTip></statusTip>
+    </Action>
+    <Action name="selection_tool_mode_intersect">
+      <icon></icon>
+      <text>Selection Mode: Intersect</text>
+      <whatsThis></whatsThis>
+      <toolTip>Selection Mode: Intersect</toolTip>
+      <iconText>Selection Mode: Intersect</iconText>
+      <shortcut></shortcut>
+      <isCheckable>false</isCheckable>
+      <statusTip></statusTip>
+    </Action>
+    <Action name="selection_tool_mode_replace">
+      <icon></icon>
+      <text>Selection Mode: Replace</text>
+      <whatsThis></whatsThis>
+      <toolTip>Selection Mode: Replace</toolTip>
+      <iconText>Selection Mode: Replace</iconText>
+      <shortcut>R</shortcut>
+      <isCheckable>false</isCheckable>
+      <statusTip></statusTip>
+    </Action>
     <Action name="set_weighted_brush_smoothing">
       <icon>smoothing-weighted</icon>
       <text>Brush Smoothing: Weighted</text>
diff --git a/libs/ui/tool/kis_selection_tool_config_widget_helper.cpp b/libs/ui/tool/kis_selection_tool_config_widget_helper.cpp
index cad29cbc4ca..94a3b95a2b5 100644
--- a/libs/ui/tool/kis_selection_tool_config_widget_helper.cpp
+++ b/libs/ui/tool/kis_selection_tool_config_widget_helper.cpp
@@ -92,6 +92,30 @@ void KisSelectionToolConfigWidgetHelper::slotWidgetModeChanged(int mode)
     cfg.writeEntry("selectionMode", mode);
 }
 
+void KisSelectionToolConfigWidgetHelper::slotReplaceModeRequested()
+{
+    m_optionsWidget->setAction(SELECTION_REPLACE);
+    slotWidgetActionChanged(m_optionsWidget->action());
+}
+
+void KisSelectionToolConfigWidgetHelper::slotAddModeRequested()
+{
+    m_optionsWidget->setAction(SELECTION_ADD);
+    slotWidgetActionChanged(m_optionsWidget->action());
+}
+
+void KisSelectionToolConfigWidgetHelper::slotSubtractModeRequested()
+{
+    m_optionsWidget->setAction(SELECTION_SUBTRACT);
+    slotWidgetActionChanged(m_optionsWidget->action());
+}
+
+void KisSelectionToolConfigWidgetHelper::slotIntersectModeRequested()
+{
+    m_optionsWidget->setAction(SELECTION_INTERSECT);
+    slotWidgetActionChanged(m_optionsWidget->action());
+}
+
 void KisSelectionToolConfigWidgetHelper::slotToolActivatedChanged(bool isActivated)
 {
     if (!isActivated) return;
@@ -105,32 +129,3 @@ void KisSelectionToolConfigWidgetHelper::slotToolActivatedChanged(bool isActivat
     m_optionsWidget->setAction(m_selectionAction);
     m_optionsWidget->setMode(m_selectionMode);
 }
-
-
-bool KisSelectionToolConfigWidgetHelper::processKeyPressEvent(QKeyEvent *event)
-{
-    event->accept();
-
-    switch(event->key()) {
-    case Qt::Key_A:
-        slotWidgetActionChanged(SELECTION_ADD);
-        break;
-    case Qt::Key_S:
-        slotWidgetActionChanged(SELECTION_SUBTRACT);
-        break;
-    case Qt::Key_R:
-        slotWidgetActionChanged(SELECTION_REPLACE);
-        break;
-    case Qt::Key_T:
-        slotWidgetActionChanged(SELECTION_INTERSECT);
-        break;
-    default:
-        event->ignore();
-    }
-
-    if (event->isAccepted()) {
-        slotToolActivatedChanged(true);
-    }
-
-    return event->isAccepted();
-}
diff --git a/libs/ui/tool/kis_selection_tool_config_widget_helper.h b/libs/ui/tool/kis_selection_tool_config_widget_helper.h
index b42d078d058..0e58075994c 100644
--- a/libs/ui/tool/kis_selection_tool_config_widget_helper.h
+++ b/libs/ui/tool/kis_selection_tool_config_widget_helper.h
@@ -56,6 +56,11 @@ public Q_SLOTS:
     void slotWidgetActionChanged(int action);
     void slotWidgetModeChanged(int mode);
 
+    void slotReplaceModeRequested();
+    void slotAddModeRequested();
+    void slotSubtractModeRequested();
+    void slotIntersectModeRequested();
+
 private:
     KisSelectionOptions* m_optionsWidget;
 
diff --git a/libs/ui/tool/kis_tool_select_base.h b/libs/ui/tool/kis_tool_select_base.h
index 56181368e1a..ebfe759ae49 100644
--- a/libs/ui/tool/kis_tool_select_base.h
+++ b/libs/ui/tool/kis_tool_select_base.h
@@ -33,6 +33,9 @@
 #include "strokes/move_stroke_strategy.h"
 #include "kis_image.h"
 #include "kis_cursor.h"
+#include "kis_action_manager.h"
+#include "kis_action.h"
+#include "kis_signal_auto_connection.h"
 
 /**
  * This is a basic template to create selection tools from basic path based drawing tools.
@@ -77,6 +80,7 @@ public:
          m_selectionActionAlternate(SELECTION_DEFAULT)
     {
         KisSelectionModifierMapper::instance();
+        initShortcuts();
     }
 
     KisToolSelectBase(KoCanvasBase* canvas, const QCursor cursor, const QString toolName)
@@ -85,6 +89,8 @@ public:
          m_selectionAction(SELECTION_DEFAULT),
          m_selectionActionAlternate(SELECTION_DEFAULT)
     {
+        KisSelectionModifierMapper::instance();
+        initShortcuts();
     }
 
     KisToolSelectBase(KoCanvasBase* canvas, QCursor cursor, QString toolName, KisTool *delegateTool)
@@ -93,6 +99,57 @@ public:
          m_selectionAction(SELECTION_DEFAULT),
          m_selectionActionAlternate(SELECTION_DEFAULT)
     {
+        KisSelectionModifierMapper::instance();
+        initShortcuts();
+    }
+
+    void initShortcuts()
+    {
+        KisCanvas2 * kiscanvas = static_cast<KisCanvas2*>(canvas());
+        KisViewManager* viewManager = kiscanvas->viewManager();
+        KisActionManager *manager = viewManager->actionManager();
+
+        KisAction *action = 0;
+
+        action = manager->createAction("selection_tool_mode_add");
+        this->addAction(action->objectName(), action);
+
+        action = manager->createAction("selection_tool_mode_replace");
+        this->addAction(action->objectName(), action);
+
+        action = manager->createAction("selection_tool_mode_subtract");
+        this->addAction(action->objectName(), action);
+
+        action = manager->createAction("selection_tool_mode_intersect");
+        this->addAction(action->objectName(), action);
+    }
+
+    void activate(KoToolBase::ToolActivation activation, const QSet<KoShape*> &shapes)
+    {
+        BaseClass::activate(activation, shapes);
+
+        m_modeConnections.addUniqueConnection(
+            this->action("selection_tool_mode_replace"), SIGNAL(triggered()),
+            &m_widgetHelper, SLOT(slotReplaceModeRequested()));
+
+        m_modeConnections.addUniqueConnection(
+            this->action("selection_tool_mode_add"), SIGNAL(triggered()),
+            &m_widgetHelper, SLOT(slotAddModeRequested()));
+
+        m_modeConnections.addUniqueConnection(
+            this->action("selection_tool_mode_subtract"), SIGNAL(triggered()),
+            &m_widgetHelper, SLOT(slotSubtractModeRequested()));
+
+        m_modeConnections.addUniqueConnection(
+            this->action("selection_tool_mode_intersect"), SIGNAL(triggered()),
+            &m_widgetHelper, SLOT(slotIntersectModeRequested()));
+
+    }
+
+    void deactivate()
+    {
+        BaseClass::deactivate();
+        m_modeConnections.clear();
     }
 
     QWidget* createOptionWidget()
@@ -105,13 +162,6 @@ public:
         return m_widgetHelper.optionWidget();
     }
 
-    void keyPressEvent(QKeyEvent *event)
-    {
-        if (!m_widgetHelper.processKeyPressEvent(event)) {
-            BaseClass::keyPressEvent(event);
-        }
-    }
-
     SelectionMode selectionMode() const
     {
         return m_widgetHelper.selectionMode();
@@ -298,6 +348,8 @@ private:
 
     QPointF m_dragStartPos;
     KisStrokeId m_moveStrokeId;
+
+    KisSignalAutoConnectionsStore m_modeConnections;
 };
 
 struct FakeBaseTool : KisTool



More information about the kimageshop mailing list