[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