File indexing completed on 2024-05-12 16:01:42
0001 /* 0002 * SPDX-FileCopyrightText: 2004 Boudewijn Rempt <boud@valdyas.org> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 #ifndef KIS_SELECTION_MANAGER_ 0007 #define KIS_SELECTION_MANAGER_ 0008 0009 #include <QObject> 0010 #include <QList> 0011 #include <QPointer> 0012 0013 #include <kis_image.h> 0014 #include "KisView.h" 0015 #include <KisSelectionTags.h> 0016 0017 #include <kritaui_export.h> 0018 0019 class KisActionManager; 0020 class KisAction; 0021 class QAction; 0022 class KisDocument; 0023 0024 class KisViewManager; 0025 class KisClipboard; 0026 class KisNodeCommandsAdapter; 0027 class KisView; 0028 0029 class KisSelectionFilter; 0030 class KisSelectionDecoration; 0031 0032 /** 0033 * The selection manager is responsible selections 0034 * and the clipboard. 0035 */ 0036 class KRITAUI_EXPORT KisSelectionManager : public QObject 0037 { 0038 0039 Q_OBJECT 0040 Q_PROPERTY(bool displaySelection READ displaySelection NOTIFY displaySelectionChanged); 0041 Q_PROPERTY(bool havePixelsSelected READ havePixelsSelected NOTIFY currentSelectionChanged); 0042 public: 0043 0044 KisSelectionManager(KisViewManager * view); 0045 ~KisSelectionManager() override; 0046 0047 void setup(KisActionManager* actionManager); 0048 0049 void setView(QPointer<KisView>imageView); 0050 0051 public: 0052 /** 0053 * This function return if the selection should be displayed 0054 */ 0055 bool displaySelection(); 0056 0057 bool showSelectionAsMask() const; 0058 0059 public Q_SLOTS: 0060 0061 void updateGUI(); 0062 void selectionChanged(); 0063 void clipboardDataChanged(); 0064 0065 void cut(); 0066 void copy(); 0067 0068 void cutSharp(); 0069 void copySharp(); 0070 0071 void copyMerged(); 0072 void paste(); 0073 void pasteNew(); 0074 void pasteAt(); 0075 void pasteInto(); 0076 void pasteAsReference(); 0077 void pasteShapeStyle(); 0078 void cutToNewLayer(); 0079 void selectAll(); 0080 void deselect(); 0081 void invert(); 0082 void clear(); 0083 void fillForegroundColor(); 0084 void fillBackgroundColor(); 0085 void fillPattern(); 0086 void fillForegroundColorOpacity(); 0087 void fillBackgroundColorOpacity(); 0088 void fillPatternOpacity(); 0089 void reselect(); 0090 void editSelection(); 0091 void convertToVectorSelection(); 0092 void convertToRasterSelection(); 0093 void convertShapesToVectorSelection(); 0094 void convertToShape(); 0095 0096 void copySelectionToNewLayer(); 0097 void toggleDisplaySelection(); 0098 0099 void shapeSelectionChanged(); 0100 void imageResizeToSelection(); 0101 void paintSelectedShapes(); 0102 0103 void slotToggleSelectionDecoration(); 0104 0105 void slotStrokeSelection(); 0106 0107 void selectOpaqueOnNode(KisNodeSP node, SelectionAction action); 0108 0109 Q_SIGNALS: 0110 void currentSelectionChanged(); 0111 void signalUpdateGUI(); 0112 void displaySelectionChanged(); 0113 void strokeSelected(); 0114 0115 public: 0116 bool havePixelsSelected(); 0117 bool havePixelsInClipboard(); 0118 bool haveShapesSelected(); 0119 bool haveShapesInClipboard(); 0120 0121 /// Checks if the current selection is editable and has some pixels selected in the pixel selection 0122 bool haveAnySelectionWithPixels(); 0123 bool haveShapeSelectionWithShapes(); 0124 bool haveRasterSelectionWithPixels(); 0125 0126 private: 0127 void fill(const KoColor& color, bool fillWithPattern, const QString& transactionText); 0128 void updateStatusBar(); 0129 0130 KisViewManager * m_view {0}; 0131 KisDocument * m_doc {0}; 0132 QPointer<KisView>m_imageView {0}; 0133 KisClipboard * m_clipboard {0}; 0134 0135 KisNodeCommandsAdapter* m_adapter {0}; 0136 0137 KisAction *m_copy {0}; 0138 KisAction *m_copyMerged {0}; 0139 KisAction *m_cut {0}; 0140 KisAction *m_paste {0}; 0141 KisAction *m_pasteAt {0}; 0142 KisAction *m_pasteInto {0}; 0143 KisAction *m_pasteAsReference {0}; 0144 KisAction *m_pasteNew {0}; 0145 KisAction *m_pasteShapeStyle {0}; 0146 KisAction *m_cutToNewLayer {0}; 0147 KisAction *m_selectAll {0}; 0148 KisAction *m_deselect {0}; 0149 KisAction *m_clear {0}; 0150 KisAction *m_reselect {0}; 0151 KisAction *m_invert {0}; 0152 KisAction *m_copyToNewLayer {0}; 0153 KisAction *m_fillForegroundColor {0}; 0154 KisAction *m_fillBackgroundColor {0}; 0155 KisAction *m_fillPattern {0}; 0156 KisAction *m_fillForegroundColorOpacity {0}; 0157 KisAction *m_fillBackgroundColorOpacity {0}; 0158 KisAction *m_fillPatternOpacity {0}; 0159 KisAction *m_imageResizeToSelection {0}; 0160 KisAction *m_strokeShapes {0}; 0161 KisAction *m_toggleDisplaySelection {0}; 0162 KisAction *m_toggleSelectionOverlayMode {0}; 0163 KisAction *m_strokeSelected {0}; 0164 0165 0166 QList<QAction*> m_pluginActions; 0167 QPointer<KisSelectionDecoration> m_selectionDecoration; 0168 0169 }; 0170 0171 #endif // KIS_SELECTION_MANAGER_