File indexing completed on 2024-06-23 04:28:12

0001 /*
0002  * SPDX-FileCopyrightText: 2017 Boudewijn Rempt <boud@valdyas.org>
0003  *
0004  *  SPDX-License-Identifier: LGPL-2.0-or-later
0005  */
0006 
0007 #ifndef TOOL_REFERENCE_IMAGES_H
0008 #define TOOL_REFERENCE_IMAGES_H
0009 
0010 #include <QPointer>
0011 
0012 #include <KoToolFactoryBase.h>
0013 #include <KoIcon.h>
0014 
0015 #include <kis_tool.h>
0016 #include "kis_painting_assistant.h"
0017 #include <kis_icon.h>
0018 #include <kis_canvas2.h>
0019 
0020 #include <defaulttool/DefaultTool.h>
0021 #include <defaulttool/DefaultToolFactory.h>
0022 
0023 class ToolReferenceImagesWidget;
0024 class KisReferenceImagesLayer;
0025 
0026 class ToolReferenceImages : public DefaultTool
0027 {
0028     Q_OBJECT
0029 
0030 public:
0031     ToolReferenceImages(KoCanvasBase * canvas);
0032     ~ToolReferenceImages() override;
0033 
0034     virtual quint32 priority() {
0035         return 3;
0036     }
0037 
0038     void mouseDoubleClickEvent(KoPointerEvent */*event*/) override {}
0039 
0040     bool hasSelection() override;
0041 
0042     void deleteSelection() override;
0043 
0044     QMenu* popupActionsMenu() override;
0045 
0046 protected:
0047     QList<QPointer<QWidget>> createOptionWidgets() override;
0048     QWidget *createOptionWidget() override;
0049 
0050     bool isValidForCurrentLayer() const override;
0051     KoShapeManager *shapeManager() const override;
0052     KoSelection *koSelection() const override;
0053 
0054     void updateDistinctiveActions(const QList<KoShape*> &editableShapes) override;
0055 
0056 public Q_SLOTS:
0057     void activate(const QSet<KoShape*> &shapes) override;
0058     void deactivate() override;
0059 
0060     void addReferenceImage();
0061     void pasteReferenceImage();
0062     void removeAllReferenceImages();
0063     void saveReferenceImages();
0064     void loadReferenceImages();
0065 
0066     void slotNodeAdded(KisNodeSP node);
0067     void slotSelectionChanged();
0068 
0069     void cut() override;
0070     void copy() const override;
0071     bool paste() override;
0072 
0073     bool selectAll() override;
0074     void deselect() override;
0075 
0076 
0077 private:
0078     friend class ToolReferenceImagesWidget;
0079     ToolReferenceImagesWidget *m_optionsWidget = nullptr;
0080     KisWeakSharedPtr<KisReferenceImagesLayer> m_layer;
0081 
0082     KisDocument *document() const;
0083     void setReferenceImageLayer(KisSharedPtr<KisReferenceImagesLayer> layer);
0084 };
0085 
0086 
0087 class ToolReferenceImagesFactory : public DefaultToolFactory
0088 {
0089 public:
0090     ToolReferenceImagesFactory()
0091     : DefaultToolFactory("ToolReferenceImages") {
0092         setToolTip(i18n("Reference Images Tool"));
0093         setSection(ToolBoxSection::View);
0094         setIconName(koIconNameCStr("krita_tool_reference_images"));
0095         setPriority(2);
0096         setActivationShapeId(KRITA_TOOL_ACTIVATION_ID);
0097     };
0098 
0099 
0100     ~ToolReferenceImagesFactory() override {}
0101 
0102     KoToolBase * createTool(KoCanvasBase * canvas) override {
0103         return new ToolReferenceImages(canvas);
0104     }
0105 
0106     QList<QAction *> createActionsImpl() override;
0107 
0108 };
0109 
0110 
0111 #endif
0112