File indexing completed on 2024-05-12 05:46:50

0001 /*
0002  * Copyright (c) 2017 Boudewijn Rempt <boud@valdyas.org>
0003  *
0004  *  This library is free software; you can redistribute it and/or modify
0005  *  it under the terms of the GNU Lesser General Public License as published by
0006  *  the Free Software Foundation; version 2 of the License, or
0007  *  (at your option) any later version.
0008  *
0009  *  This library is distributed in the hope that it will be useful,
0010  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
0011  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0012  *  GNU Lesser General Public License for more details.
0013  *
0014  *  You should have received a copy of the GNU Lesser General Public License
0015  *  along with this program; if not, write to the Free Software
0016  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
0017  */
0018 
0019 #ifndef TOOL_REFERENCE_IMAGES_H
0020 #define TOOL_REFERENCE_IMAGES_H
0021 
0022 #include <QPointer>
0023 
0024 #include <KoToolFactoryBase.h>
0025 #include <KoIcon.h>
0026 
0027 #include <kis_tool.h>
0028 #include "kis_painting_assistant.h"
0029 #include <kis_icon.h>
0030 #include <kis_canvas2.h>
0031 
0032 #include <defaulttool/DefaultTool.h>
0033 #include <defaulttool/DefaultToolFactory.h>
0034 
0035 class ToolReferenceImagesWidget;
0036 class KisReferenceImagesLayer;
0037 
0038 class ToolReferenceImages : public DefaultTool
0039 {
0040     Q_OBJECT
0041 
0042 public:
0043     ToolReferenceImages(KoCanvasBase * canvas);
0044     ~ToolReferenceImages() override;
0045 
0046     virtual quint32 priority() {
0047         return 3;
0048     }
0049 
0050     void mouseDoubleClickEvent(KoPointerEvent */*event*/) override {}
0051 
0052     void deleteSelection() override;
0053 
0054 protected:
0055     QList<QPointer<QWidget>> createOptionWidgets() override;
0056     QWidget *createOptionWidget() override;
0057 
0058     bool isValidForCurrentLayer() const override;
0059     KoShapeManager *shapeManager() const override;
0060     KoSelection *koSelection() const override;
0061 
0062     void updateDistinctiveActions(const QList<KoShape*> &editableShapes) override;
0063 
0064 public Q_SLOTS:
0065     void activate(ToolActivation toolActivation, const QSet<KoShape*> &shapes) override;
0066     void deactivate() override;
0067 
0068     void addReferenceImage();
0069     void pasteReferenceImage();
0070     void removeAllReferenceImages();
0071     void saveReferenceImages();
0072     void loadReferenceImages();
0073 
0074     void slotNodeAdded(KisNodeSP node);
0075     void slotSelectionChanged();
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(TOOL_TYPE_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