1 /*
2  * Copyright (c) 2017 Boudewijn Rempt <boud@valdyas.org>
3  *
4  *  This library is free software; you can redistribute it and/or modify
5  *  it under the terms of the GNU Lesser General Public License as published by
6  *  the Free Software Foundation; version 2 of the License, or
7  *  (at your option) any later version.
8  *
9  *  This library is distributed in the hope that it will be useful,
10  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  *  GNU Lesser General Public License for more details.
13  *
14  *  You should have received a copy of the GNU Lesser General Public License
15  *  along with this program; if not, write to the Free Software
16  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  */
18 
19 #ifndef TOOL_REFERENCE_IMAGES_H
20 #define TOOL_REFERENCE_IMAGES_H
21 
22 #include <QPointer>
23 
24 #include <KoToolFactoryBase.h>
25 #include <KoIcon.h>
26 
27 #include <kis_tool.h>
28 #include "kis_painting_assistant.h"
29 #include <kis_icon.h>
30 #include <kis_canvas2.h>
31 
32 #include <defaulttool/DefaultTool.h>
33 #include <defaulttool/DefaultToolFactory.h>
34 
35 class ToolReferenceImagesWidget;
36 class KisReferenceImagesLayer;
37 
38 class ToolReferenceImages : public DefaultTool
39 {
40     Q_OBJECT
41 
42 public:
43     ToolReferenceImages(KoCanvasBase * canvas);
44     ~ToolReferenceImages() override;
45 
priority()46     virtual quint32 priority() {
47         return 3;
48     }
49 
mouseDoubleClickEvent(KoPointerEvent *)50     void mouseDoubleClickEvent(KoPointerEvent */*event*/) override {}
51 
52     void deleteSelection() override;
53 
54 protected:
55     QList<QPointer<QWidget>> createOptionWidgets() override;
56     QWidget *createOptionWidget() override;
57 
58     bool isValidForCurrentLayer() const override;
59     KoShapeManager *shapeManager() const override;
60     KoSelection *koSelection() const override;
61 
62     void updateDistinctiveActions(const QList<KoShape*> &editableShapes) override;
63 
64 public Q_SLOTS:
65     void activate(ToolActivation toolActivation, const QSet<KoShape*> &shapes) override;
66     void deactivate() override;
67 
68     void addReferenceImage();
69     void pasteReferenceImage();
70     void removeAllReferenceImages();
71     void saveReferenceImages();
72     void loadReferenceImages();
73 
74     void slotNodeAdded(KisNodeSP node);
75     void slotSelectionChanged();
76 
77 private:
78     friend class ToolReferenceImagesWidget;
79     ToolReferenceImagesWidget *m_optionsWidget = nullptr;
80     KisWeakSharedPtr<KisReferenceImagesLayer> m_layer;
81 
82     KisDocument *document() const;
83     void setReferenceImageLayer(KisSharedPtr<KisReferenceImagesLayer> layer);
84 };
85 
86 
87 class ToolReferenceImagesFactory : public DefaultToolFactory
88 {
89 public:
ToolReferenceImagesFactory()90     ToolReferenceImagesFactory()
91     : DefaultToolFactory("ToolReferenceImages") {
92         setToolTip(i18n("Reference Images Tool"));
93         setSection(TOOL_TYPE_VIEW);
94         setIconName(koIconNameCStr("krita_tool_reference_images"));
95         setPriority(2);
96         setActivationShapeId(KRITA_TOOL_ACTIVATION_ID);
97     };
98 
99 
~ToolReferenceImagesFactory()100     ~ToolReferenceImagesFactory() override {}
101 
createTool(KoCanvasBase * canvas)102     KoToolBase * createTool(KoCanvasBase * canvas) override {
103         return new ToolReferenceImages(canvas);
104     }
105 
106     QList<QAction *> createActionsImpl() override;
107 
108 };
109 
110 
111 #endif
112 
113