diff --git a/libs/ui/CMakeLists.txt b/libs/ui/CMakeLists.txt --- a/libs/ui/CMakeLists.txt +++ b/libs/ui/CMakeLists.txt @@ -320,7 +320,7 @@ canvas/kis_mirror_axis.cpp kis_abstract_perspective_grid.cpp - + KisApplication.cpp KisAutoSaveRecoveryDialog.cpp KisDetailsPane.cpp diff --git a/libs/ui/tool/kis_selection_tool_helper.h b/libs/ui/tool/kis_selection_tool_helper.h --- a/libs/ui/tool/kis_selection_tool_helper.h +++ b/libs/ui/tool/kis_selection_tool_helper.h @@ -19,7 +19,7 @@ #define KIS_SELECTION_TOOL_HELPER_H #include - +#include #include #include "kundo2magicstring.h" @@ -49,12 +49,15 @@ void cropPathIfNeeded(QPainterPath *path); bool tryDeselectCurrentSelection(const QRectF selectionViewRect, SelectionAction action); + QMenu* getSelectionContextMenu(); + private: QPointer m_canvas; KisImageSP m_image; KisLayerSP m_layer; KUndo2MagicString m_name; + QMenu* m_contextMenu; }; diff --git a/libs/ui/tool/kis_selection_tool_helper.cpp b/libs/ui/tool/kis_selection_tool_helper.cpp --- a/libs/ui/tool/kis_selection_tool_helper.cpp +++ b/libs/ui/tool/kis_selection_tool_helper.cpp @@ -43,6 +43,9 @@ #include "kis_algebra_2d.h" #include "kis_config.h" +#include "kis_action_manager.h" +#include "kis_action.h" +#include KisSelectionToolHelper::KisSelectionToolHelper(KisCanvas2* canvas, const KUndo2MagicString& name) @@ -261,3 +264,43 @@ return result; } + + +QMenu* KisSelectionToolHelper::getSelectionContextMenu() +{ + m_contextMenu = new QMenu(); + + KisActionManager *actionMan = m_canvas->viewManager()->actionManager(); + + + m_contextMenu->addAction(actionMan->actionByName("deselect")); + m_contextMenu->addAction(actionMan->actionByName("invert")); + m_contextMenu->addAction(actionMan->actionByName("select_all")); + + m_contextMenu->addSeparator(); + + m_contextMenu->addAction(actionMan->actionByName("cut_selection_to_new_layer")); + m_contextMenu->addAction(actionMan->actionByName("copy_selection_to_new_layer")); + + m_contextMenu->addSeparator(); + + QMenu *transformMenu = m_contextMenu->addMenu(i18n("Transform")); + transformMenu->addAction(actionMan->actionByName("selectionscale")); + transformMenu->addAction(actionMan->actionByName("growselection")); + transformMenu->addAction(actionMan->actionByName("shrinkselection")); + transformMenu->addAction(actionMan->actionByName("borderselection")); + transformMenu->addAction(actionMan->actionByName("smoothselection")); + transformMenu->addAction(actionMan->actionByName("featherselection")); + transformMenu->addAction(actionMan->actionByName("stroke_selection")); + + m_contextMenu->addSeparator(); + + m_contextMenu->addAction(actionMan->actionByName("resizeimagetoselection")); + + m_contextMenu->addSeparator(); + + m_contextMenu->addAction(actionMan->actionByName("toggle_display_selection")); + m_contextMenu->addAction(actionMan->actionByName("show-global-selection-mask")); + + return m_contextMenu; +} diff --git a/plugins/dockers/defaultdockers/kis_layer_box.cpp b/plugins/dockers/defaultdockers/kis_layer_box.cpp --- a/plugins/dockers/defaultdockers/kis_layer_box.cpp +++ b/plugins/dockers/defaultdockers/kis_layer_box.cpp @@ -107,7 +107,7 @@ { if (m_canvas) { menu->addAction(m_canvas->viewManager()->actionManager()->actionByName(id)); - } + } } KisLayerBox::KisLayerBox() diff --git a/plugins/tools/selectiontools/kis_tool_select_contiguous.h b/plugins/tools/selectiontools/kis_tool_select_contiguous.h --- a/plugins/tools/selectiontools/kis_tool_select_contiguous.h +++ b/plugins/tools/selectiontools/kis_tool_select_contiguous.h @@ -29,7 +29,6 @@ #include #include - /** * The 'magic wand' selection tool -- in fact just * a floodfill that only creates a selection. @@ -48,6 +47,8 @@ void beginPrimaryAction(KoPointerEvent *event) override; + QMenu* popupActionsMenu() override; + protected: bool wantsAutoScroll() const override { return false; } diff --git a/plugins/tools/selectiontools/kis_tool_select_contiguous.cc b/plugins/tools/selectiontools/kis_tool_select_contiguous.cc --- a/plugins/tools/selectiontools/kis_tool_select_contiguous.cc +++ b/plugins/tools/selectiontools/kis_tool_select_contiguous.cc @@ -52,6 +52,7 @@ #include "kis_pixel_selection.h" #include "tiles3/kis_hline_iterator.h" + KisToolSelectContiguous::KisToolSelectContiguous(KoCanvasBase *canvas) : KisToolSelectBase(canvas, KisCursor::load("tool_contiguous_selection_cursor.png", 6, 6), @@ -243,3 +244,14 @@ { changeSelectionAction(action); } + + +QMenu* KisToolSelectContiguous::popupActionsMenu() +{ + KisCanvas2 * kisCanvas = dynamic_cast(canvas()); + Q_ASSERT(kisCanvas); + + KisSelectionToolHelper helper(kisCanvas, kundo2_i18n("Selection Context Menu")); + + return helper.getSelectionContextMenu(); +} diff --git a/plugins/tools/selectiontools/kis_tool_select_elliptical.h b/plugins/tools/selectiontools/kis_tool_select_elliptical.h --- a/plugins/tools/selectiontools/kis_tool_select_elliptical.h +++ b/plugins/tools/selectiontools/kis_tool_select_elliptical.h @@ -31,6 +31,9 @@ #include #include #include +#include + + class __KisToolSelectEllipticalLocal : public KisToolEllipseBase { @@ -38,13 +41,15 @@ public: __KisToolSelectEllipticalLocal(KoCanvasBase *canvas); - protected: virtual SelectionMode selectionMode() const = 0; virtual SelectionAction selectionAction() const = 0; virtual bool antiAliasSelection() const = 0; private: void finishRect(const QRectF &rect) override; + + + }; @@ -56,6 +61,8 @@ Q_OBJECT public: KisToolSelectElliptical(KoCanvasBase* canvas); + QMenu* popupActionsMenu() override; + public Q_SLOTS: void setSelectionAction(int); }; diff --git a/plugins/tools/selectiontools/kis_tool_select_elliptical.cc b/plugins/tools/selectiontools/kis_tool_select_elliptical.cc --- a/plugins/tools/selectiontools/kis_tool_select_elliptical.cc +++ b/plugins/tools/selectiontools/kis_tool_select_elliptical.cc @@ -34,7 +34,6 @@ #include "KisViewManager.h" #include "kis_selection_manager.h" - __KisToolSelectEllipticalLocal::__KisToolSelectEllipticalLocal(KoCanvasBase *canvas) : KisToolEllipseBase(canvas, KisToolEllipseBase::SELECT, KisCursor::load("tool_elliptical_selection_cursor.png", 6, 6)) @@ -91,3 +90,13 @@ { changeSelectionAction(action); } + +QMenu* KisToolSelectElliptical::popupActionsMenu() +{ + KisCanvas2 * kisCanvas = dynamic_cast(canvas()); + Q_ASSERT(kisCanvas); + + KisSelectionToolHelper helper(kisCanvas, kundo2_i18n("Selection Context Menu")); + + return helper.getSelectionContextMenu(); +} diff --git a/plugins/tools/selectiontools/kis_tool_select_outline.h b/plugins/tools/selectiontools/kis_tool_select_outline.h --- a/plugins/tools/selectiontools/kis_tool_select_outline.h +++ b/plugins/tools/selectiontools/kis_tool_select_outline.h @@ -48,6 +48,8 @@ void mouseMoveEvent(KoPointerEvent *event) override; + QMenu* popupActionsMenu() override; + public Q_SLOTS: void deactivate() override; void setSelectionAction(int); diff --git a/plugins/tools/selectiontools/kis_tool_select_outline.cc b/plugins/tools/selectiontools/kis_tool_select_outline.cc --- a/plugins/tools/selectiontools/kis_tool_select_outline.cc +++ b/plugins/tools/selectiontools/kis_tool_select_outline.cc @@ -262,3 +262,13 @@ { changeSelectionAction(action); } + +QMenu* KisToolSelectOutline::popupActionsMenu() +{ + KisCanvas2 * kisCanvas = dynamic_cast(canvas()); + Q_ASSERT(kisCanvas); + + KisSelectionToolHelper helper(kisCanvas, kundo2_i18n("Selection Context Menu")); + + return helper.getSelectionContextMenu(); +} diff --git a/plugins/tools/selectiontools/kis_tool_select_path.h b/plugins/tools/selectiontools/kis_tool_select_path.h --- a/plugins/tools/selectiontools/kis_tool_select_path.h +++ b/plugins/tools/selectiontools/kis_tool_select_path.h @@ -100,6 +100,8 @@ KoToolBase * createTool(KoCanvasBase *canvas) override { return new KisToolSelectPath(canvas); } + + }; diff --git a/plugins/tools/selectiontools/kis_tool_select_path.cc b/plugins/tools/selectiontools/kis_tool_select_path.cc --- a/plugins/tools/selectiontools/kis_tool_select_path.cc +++ b/plugins/tools/selectiontools/kis_tool_select_path.cc @@ -98,7 +98,6 @@ } } - bool KisDelegatedSelectPathWrapper::listeningToModifiers() { return m_localTool->listeningToModifiers(); } @@ -115,6 +114,7 @@ mouseReleaseEvent(event); } + __KisToolSelectPathLocalTool::__KisToolSelectPathLocalTool(KoCanvasBase * canvas, KisToolSelectPath* parentTool) : KoCreatePathTool(canvas), m_selectionTool(parentTool) { @@ -171,3 +171,5 @@ helper.addSelectionShape(pathShape); } } + + diff --git a/plugins/tools/selectiontools/kis_tool_select_polygonal.h b/plugins/tools/selectiontools/kis_tool_select_polygonal.h --- a/plugins/tools/selectiontools/kis_tool_select_polygonal.h +++ b/plugins/tools/selectiontools/kis_tool_select_polygonal.h @@ -30,7 +30,6 @@ #include "kis_selection_tool_config_widget_helper.h" #include - class __KisToolSelectPolygonalLocal : public KisToolPolylineBase { Q_OBJECT @@ -50,6 +49,8 @@ Q_OBJECT public: KisToolSelectPolygonal(KoCanvasBase* canvas); + QMenu* popupActionsMenu() override; + public Q_SLOTS: void setSelectionAction(int); }; diff --git a/plugins/tools/selectiontools/kis_tool_select_polygonal.cc b/plugins/tools/selectiontools/kis_tool_select_polygonal.cc --- a/plugins/tools/selectiontools/kis_tool_select_polygonal.cc +++ b/plugins/tools/selectiontools/kis_tool_select_polygonal.cc @@ -37,7 +37,6 @@ #include "KisViewManager.h" #include "kis_selection_manager.h" - __KisToolSelectPolygonalLocal::__KisToolSelectPolygonalLocal(KoCanvasBase *canvas) : KisToolPolylineBase(canvas, KisToolPolylineBase::SELECT, KisCursor::load("tool_polygonal_selection_cursor.png", 6, 6)) @@ -101,3 +100,15 @@ { changeSelectionAction(action); } + + +QMenu* KisToolSelectPolygonal::popupActionsMenu() +{ + KisCanvas2 * kisCanvas = dynamic_cast(canvas()); + Q_ASSERT(kisCanvas); + + KisSelectionToolHelper helper(kisCanvas, kundo2_i18n("Selection Context Menu")); + + return helper.getSelectionContextMenu(); +} + diff --git a/plugins/tools/selectiontools/kis_tool_select_rectangular.h b/plugins/tools/selectiontools/kis_tool_select_rectangular.h --- a/plugins/tools/selectiontools/kis_tool_select_rectangular.h +++ b/plugins/tools/selectiontools/kis_tool_select_rectangular.h @@ -52,6 +52,8 @@ Q_OBJECT public: KisToolSelectRectangular(KoCanvasBase* canvas); + QMenu* popupActionsMenu() override; + public Q_SLOTS: void setSelectionAction(int); }; diff --git a/plugins/tools/selectiontools/kis_tool_select_rectangular.cc b/plugins/tools/selectiontools/kis_tool_select_rectangular.cc --- a/plugins/tools/selectiontools/kis_tool_select_rectangular.cc +++ b/plugins/tools/selectiontools/kis_tool_select_rectangular.cc @@ -35,7 +35,6 @@ #include "KisViewManager.h" #include "kis_selection_manager.h" - __KisToolSelectRectangularLocal::__KisToolSelectRectangularLocal(KoCanvasBase * canvas) : KisToolRectangleBase(canvas, KisToolRectangleBase::SELECT, KisCursor::load("tool_rectangular_selection_cursor.png", 6, 6)) @@ -90,3 +89,14 @@ { changeSelectionAction(action); } + +QMenu* KisToolSelectRectangular::popupActionsMenu() +{ + KisCanvas2 * kisCanvas = dynamic_cast(canvas()); + Q_ASSERT(kisCanvas); + + KisSelectionToolHelper helper(kisCanvas, kundo2_i18n("Selection Context Menu")); + + return helper.getSelectionContextMenu(); +} + diff --git a/plugins/tools/selectiontools/kis_tool_select_similar.h b/plugins/tools/selectiontools/kis_tool_select_similar.h --- a/plugins/tools/selectiontools/kis_tool_select_similar.h +++ b/plugins/tools/selectiontools/kis_tool_select_similar.h @@ -25,8 +25,6 @@ #include "kis_tool_select_base.h" #include - - /* * Tool to select colors by pointing at a color on the image. */ @@ -39,7 +37,7 @@ void beginPrimaryAction(KoPointerEvent *event) override; void paint(QPainter&, const KoViewConverter &) override {} QWidget* createOptionWidget() override; - + QMenu* popupActionsMenu() override; public Q_SLOTS: void activate(ToolActivation toolActivation, const QSet &shapes) override; diff --git a/plugins/tools/selectiontools/kis_tool_select_similar.cc b/plugins/tools/selectiontools/kis_tool_select_similar.cc --- a/plugins/tools/selectiontools/kis_tool_select_similar.cc +++ b/plugins/tools/selectiontools/kis_tool_select_similar.cc @@ -171,3 +171,13 @@ { changeSelectionAction(action); } + +QMenu* KisToolSelectSimilar::popupActionsMenu() +{ + KisCanvas2 * kisCanvas = dynamic_cast(canvas()); + Q_ASSERT(kisCanvas); + + KisSelectionToolHelper helper(kisCanvas, kundo2_i18n("Selection Context Menu")); + + return helper.getSelectionContextMenu(); +}