Krita Source Code Documentation
Loading...
Searching...
No Matches
ToolReferenceImages Class Reference

#include <ToolReferenceImages.h>

+ Inheritance diagram for ToolReferenceImages:

Public Slots

void activate (const QSet< KoShape * > &shapes) override
 
void addReferenceImage ()
 
void addReferenceImageFromLayer ()
 
void addReferenceImageFromVisible ()
 
void copy () const override
 
void cut () override
 
void deactivate () override
 
void deselect () override
 
void loadReferenceImages ()
 
bool paste () override
 
void pasteReferenceImage ()
 
void removeAllReferenceImages ()
 
void removeSelectedReferenceImages ()
 
void saveReferenceImages ()
 
bool selectAll () override
 
void slotNodeAdded (KisNodeSP node)
 
void slotNodeAdded (KisNodeSP node, KisNodeAdditionFlags flags)
 
void slotSelectionChanged ()
 
- Public Slots inherited from DefaultTool
void activate (const QSet< KoShape * > &shapes) override
 
void deactivate () override
 
- Public Slots inherited from KoToolBase
virtual void activate (const QSet< KoShape * > &shapes)
 
virtual void deactivate ()
 
virtual void documentResourceChanged (int key, const QVariant &res)
 
virtual void repaintDecorations ()
 
virtual void requestRedoDuringStroke ()
 
virtual void requestStrokeCancellation ()
 
virtual void requestStrokeEnd ()
 
virtual void requestUndoDuringStroke ()
 
void setStatusText (const QString &statusText)
 
void updateOptionsWidgetIcons ()
 

Public Member Functions

void deleteSelection () override
 reimplemented
 
bool hasSelection () override
 
void mouseDoubleClickEvent (KoPointerEvent *) override
 
QMenu * popupActionsMenu () override
 
virtual quint32 priority ()
 
 ToolReferenceImages (KoCanvasBase *canvas)
 
 ~ToolReferenceImages () override
 
- Public Member Functions inherited from DefaultTool
void copy () const override
 reimplemented
 
QRectF decorationsRect () const override
 
 DefaultTool (KoCanvasBase *canvas, bool connectToSelectedShapesProxy=false)
 
void deselect () override
 reimplemented
 
void explicitUserStrokeEndRequest () override
 explicitUserStrokeEndRequest is called by the input manager when the user presses Enter key or any equivalent. This callback comes before requestStrokeEnd(), which comes from a different source.
 
KoFlake::SelectionHandle handleAt (const QPointF &point, bool *innerHandleMeaning=0)
 
void keyPressEvent (QKeyEvent *event) override
 
void mouseMoveEvent (KoPointerEvent *event) override
 
void mousePressEvent (KoPointerEvent *event) override
 
void mouseReleaseEvent (KoPointerEvent *event) override
 
void paint (QPainter &painter, const KoViewConverter &converter) override
 
bool paste () override
 reimplemented
 
bool selectAll () override
 reimplemented
 
KoToolSelectionselection () override
 reimplemented
 
bool wantsAutoScroll () const override
 
 ~DefaultTool () override
 
- Public Member Functions inherited from KoInteractionTool
void keyPressEvent (QKeyEvent *event) override
 
void keyReleaseEvent (QKeyEvent *event) override
 
 KoInteractionTool (KoCanvasBase *canvas)
 
void mouseMoveEvent (KoPointerEvent *event) override
 
void mousePressEvent (KoPointerEvent *event) override
 
void mouseReleaseEvent (KoPointerEvent *event) override
 
void paint (QPainter &painter, const KoViewConverter &converter) override
 
 ~KoInteractionTool () override
 
- Public Member Functions inherited from KoToolBase
QAction * action (const QString &name) const
 
KoCanvasBasecanvas () const
 Returns the canvas the tool is working on.
 
QCursor cursor () const
 return the last emitted cursor
 
virtual void customMoveEvent (KoPointerEvent *event)
 
virtual void customPressEvent (KoPointerEvent *event)
 
virtual void customReleaseEvent (KoPointerEvent *event)
 
virtual void cut ()
 
int decorationThickness () const
 decorationThickness The minimum thickness for tool decoration lines, this is derived from the screen magnification, thus the HiDPI settings. Note: to use this effectively, also set the pen to isCosmetic(true);
 
virtual void dragLeaveEvent (QDragLeaveEvent *event)
 
virtual void dragMoveEvent (QDragMoveEvent *event, const QPointF &point)
 
virtual void dropEvent (QDropEvent *event, const QPointF &point)
 
KoToolFactoryBasefactory () const
 
virtual void focusInEvent (QFocusEvent *event)
 
virtual void focusOutEvent (QFocusEvent *event)
 
virtual void inputMethodEvent (QInputMethodEvent *event)
 
virtual QVariant inputMethodQuery (Qt::InputMethodQuery query) const
 
bool isInTextMode () const
 
bool isOpacityPresetMode () const
 
 KoToolBase (KoCanvasBase *canvas)
 
bool maskSyntheticEvents () const
 
virtual void mouseTripleClickEvent (KoPointerEvent *event)
 
QList< QPointer< QWidget > > optionWidgets ()
 
virtual KisPopupWidgetInterfacepopupWidget ()
 
Q_INVOKABLE QString toolId () const
 
 ~KoToolBase () override
 

Protected Member Functions

QWidget * createOptionWidget () override
 
QList< QPointer< QWidget > > createOptionWidgets () override
 
bool isValidForCurrentLayer () const override
 
KoSelectionkoSelection () const override
 
KoShapeManagershapeManager () const override
 
void updateDistinctiveActions (const QList< KoShape * > &editableShapes) override
 
- Protected Member Functions inherited from DefaultTool
void addTransformActions (QMenu *menu) const
 
KoInteractionStrategycreateStrategy (KoPointerEvent *event) override
 
- Protected Member Functions inherited from KoInteractionTool
void addInteractionFactory (KoInteractionStrategyFactory *factory)
 
void cancelCurrentStrategy ()
 Cancels the current strategy and deletes it.
 
KoInteractionStrategycreateStrategyBase (KoPointerEvent *event)
 
KoInteractionStrategycurrentStrategy ()
 
bool hasInteractionFactory (const QString &id)
 
 KoInteractionTool (KoInteractionToolPrivate &dd)
 
void removeInteractionFactory (const QString &id)
 
bool tryUseCustomCursor ()
 
- Protected Member Functions inherited from KoToolBase
int grabSensitivity () const
 Convenience function to get the current grab sensitivity.
 
qreal handleDocRadius () const
 
QRectF handleGrabRect (const QPointF &position) const
 
QRectF handlePaintRect (const QPointF &position) const
 
int handleRadius () const
 Convenience function to get the current handle radius.
 
bool isActivated () const
 
 KoToolBase (KoToolBasePrivate &dd)
 
KoPointerEventlastDeliveredPointerEvent () const
 
void setAbstractResource (KoAbstractCanvasResourceInterfaceSP abstractResource)
 
void setConverter (KoDerivedResourceConverterSP converter)
 
void setIsOpacityPresetMode (bool value)
 
void setMaskSyntheticEvents (bool value)
 
void setTextMode (bool value)
 
QHash< int, KoAbstractCanvasResourceInterfaceSPtoolAbstractResources ()
 
QHash< int, KoDerivedResourceConverterSPtoolConverters ()
 
void useCursor (const QCursor &cursor)
 

Private Member Functions

KisDocumentdocument () const
 
void setReferenceImageLayer (KisSharedPtr< KisReferenceImagesLayer > layer)
 

Private Attributes

KisWeakSharedPtr< KisReferenceImagesLayerm_layer
 
ToolReferenceImagesWidgetm_optionsWidget = nullptr
 

Friends

class ToolReferenceImagesWidget
 

Additional Inherited Members

- Public Types inherited from DefaultTool
enum  CanvasResource { HotPosition = 1410100299 }
 
- Signals inherited from DefaultTool
void meshgradientHandleSelected (KoShapeMeshGradientHandles::Handle)
 
- Signals inherited from KoToolBase
void activateTool (const QString &id)
 
void cursorChanged (const QCursor &cursor)
 
void selectionChanged (bool hasSelection)
 
void statusTextChanged (const QString &statusText)
 
void textModeChanged (bool inTextMode)
 
- Protected Slots inherited from DefaultTool
void updateActions ()
 Update actions on selection change.
 
- Protected Attributes inherited from DefaultTool
QScopedPointer< QMenu > m_contextMenu
 
- Protected Attributes inherited from KoToolBase
KoToolBasePrivated_ptr
 

Detailed Description

Definition at line 26 of file ToolReferenceImages.h.

Constructor & Destructor Documentation

◆ ToolReferenceImages()

ToolReferenceImages::ToolReferenceImages ( KoCanvasBase * canvas)

Definition at line 39 of file ToolReferenceImages.cpp.

40 : DefaultTool(canvas, false)
41{
42 setObjectName("ToolReferenceImages");
43}
DefaultTool(KoCanvasBase *canvas, bool connectToSelectedShapesProxy=false)
KoCanvasBase * canvas() const
Returns the canvas the tool is working on.

◆ ~ToolReferenceImages()

ToolReferenceImages::~ToolReferenceImages ( )
override

Definition at line 45 of file ToolReferenceImages.cpp.

46{
47}

Member Function Documentation

◆ activate

void ToolReferenceImages::activate ( const QSet< KoShape * > & shapes)
overrideslot

Definition at line 49 of file ToolReferenceImages.cpp.

50{
52
53 auto kisCanvas = dynamic_cast<KisCanvas2*>(canvas());
54 KIS_ASSERT(kisCanvas);
55 connect(kisCanvas->image(), SIGNAL(sigNodeAddedAsync(KisNodeSP, KisNodeAdditionFlags)), this, SLOT(slotNodeAdded(KisNodeSP, KisNodeAdditionFlags)));
56 connect(kisCanvas->imageView()->document(), &KisDocument::sigReferenceImagesLayerChanged, this, qOverload<KisNodeSP>(&ToolReferenceImages::slotNodeAdded));
57
58 auto referenceImageLayer = document()->referenceImagesLayer();
59 if (referenceImageLayer) {
60 setReferenceImageLayer(referenceImageLayer);
61 }
62}
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
void activate(const QSet< KoShape * > &shapes) override
KisSharedPtr< KisReferenceImagesLayer > referenceImagesLayer() const
void sigReferenceImagesLayerChanged(KisSharedPtr< KisReferenceImagesLayer > layer)
void setReferenceImageLayer(KisSharedPtr< KisReferenceImagesLayer > layer)
KisDocument * document() const
void slotNodeAdded(KisNodeSP node)
#define KIS_ASSERT(cond)
Definition kis_assert.h:33

References DefaultTool::activate(), KoToolBase::canvas(), connect(), document(), KIS_ASSERT, KisDocument::referenceImagesLayer(), setReferenceImageLayer(), KisDocument::sigReferenceImagesLayerChanged(), and slotNodeAdded().

◆ addReferenceImage

void ToolReferenceImages::addReferenceImage ( )
slot

Definition at line 99 of file ToolReferenceImages.cpp.

100{
101 auto kisCanvas = dynamic_cast<KisCanvas2*>(canvas());
102 KIS_ASSERT_RECOVER_RETURN(kisCanvas);
103
104 KoFileDialog dialog(kisCanvas->viewManager()->mainWindowAsQWidget(), KoFileDialog::OpenFile, "OpenReferenceImage");
105 dialog.setCaption(i18n("Select a Reference Image"));
106
107 QStringList locations = QStandardPaths::standardLocations(QStandardPaths::PicturesLocation);
108 if (!locations.isEmpty()) {
109 dialog.setDefaultDir(locations.first());
110 }
111
112 QString filename = dialog.filename();
113 if (filename.isEmpty()) return;
114 if (!QFileInfo(filename).exists()) return;
115
116 auto *reference = KisReferenceImage::fromFile(filename, *kisCanvas->coordinatesConverter(), canvas()->canvasWidget());
117 if (reference) {
118 if (document()->referenceImagesLayer()) {
119 reference->setZIndex(document()->referenceImagesLayer()->shapes().size());
120 }
122 }
123}
static KisReferenceImage * fromFile(const QString &filename, const KisCoordinatesConverter &converter, QWidget *parent)
static KUndo2Command * addReferenceImages(KisDocument *document, QList< KoShape * > referenceImages)
virtual void addCommand(KUndo2Command *command)=0
#define KIS_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:75
int size(const Forest< T > &forest)
Definition KisForest.h:1232

References KoCanvasBase::addCommand(), KisReferenceImagesLayer::addReferenceImages(), KoToolBase::canvas(), document(), KisReferenceImage::fromFile(), KIS_ASSERT_RECOVER_RETURN, and KoFileDialog::OpenFile.

◆ addReferenceImageFromLayer

void ToolReferenceImages::addReferenceImageFromLayer ( )
slot

Definition at line 125 of file ToolReferenceImages.cpp.

126{
127 KisCanvas2* kisCanvas = dynamic_cast<KisCanvas2*>(canvas());
128 KIS_ASSERT_RECOVER_RETURN(kisCanvas);
130}
KisViewManager * viewManager() const
void createReferenceImageFromLayer()
KisNodeManager * nodeManager() const
The node manager handles everything about nodes.

References KoToolBase::canvas(), KisNodeManager::createReferenceImageFromLayer(), KIS_ASSERT_RECOVER_RETURN, KisViewManager::nodeManager(), and KisCanvas2::viewManager().

◆ addReferenceImageFromVisible

void ToolReferenceImages::addReferenceImageFromVisible ( )
slot

◆ copy

void ToolReferenceImages::copy ( ) const
overrideslot

Definition at line 372 of file ToolReferenceImages.cpp.

373{
375 if (!shapes.isEmpty()) {
376 KoShape* shape = shapes.at(0);
377 KisReferenceImage *reference = dynamic_cast<KisReferenceImage*>(shape);
379 QClipboard *cb = QApplication::clipboard();
380 cb->setImage(reference->getImage());
381 }
382}
The KisReferenceImage class represents a single reference image.
const QList< KoShape * > selectedShapes() const
KoSelection * koSelection() const override
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:128

References KisReferenceImage::getImage(), KIS_SAFE_ASSERT_RECOVER_RETURN, koSelection(), and KoSelection::selectedShapes().

◆ createOptionWidget()

QWidget * ToolReferenceImages::createOptionWidget ( )
overrideprotectedvirtual

Reimplement this if your tool actually has an option widget. Sets the option widget to 0 by default.

Reimplemented from KoToolBase.

Definition at line 279 of file ToolReferenceImages.cpp.

280{
281 if (!m_optionsWidget) {
283 // See https://bugs.kde.org/show_bug.cgi?id=316896
284 QWidget *specialSpacer = new QWidget(m_optionsWidget);
285 specialSpacer->setObjectName("SpecialSpacer");
286 specialSpacer->setFixedSize(0, 0);
287 m_optionsWidget->layout()->addWidget(specialSpacer);
288 }
289 return m_optionsWidget;
290}
friend class ToolReferenceImagesWidget
ToolReferenceImagesWidget * m_optionsWidget

References m_optionsWidget, and ToolReferenceImagesWidget.

◆ createOptionWidgets()

QList< QPointer< QWidget > > ToolReferenceImages::createOptionWidgets ( )
overrideprotectedvirtual

Reimplemented from DefaultTool.

Definition at line 273 of file ToolReferenceImages.cpp.

274{
275 // Instead of inheriting DefaultTool's multi-tab implementation, inherit straight from KoToolBase
277}
virtual QList< QPointer< QWidget > > createOptionWidgets()

References KoToolBase::createOptionWidgets().

◆ cut

void ToolReferenceImages::cut ( )
overrideslot

Definition at line 366 of file ToolReferenceImages.cpp.

367{
368 copy();
370}
void deleteSelection() override
reimplemented
void copy() const override

References copy(), and deleteSelection().

◆ deactivate

void ToolReferenceImages::deactivate ( )
overrideslot

Definition at line 64 of file ToolReferenceImages.cpp.

65{
67}
void deactivate() override

References DefaultTool::deactivate().

◆ deleteSelection()

void ToolReferenceImages::deleteSelection ( )
overridevirtual

reimplemented

Reimplemented from DefaultTool.

Definition at line 319 of file ToolReferenceImages.cpp.

320{
321 auto layer = m_layer.toStrongRef();
322 if (!layer) return;
323
325
326 if (!shapes.empty()) {
327 canvas()->addCommand(layer->removeReferenceImages(document(), shapes));
328 }
329}
KisSharedPtr< T > toStrongRef() const
toStrongRef returns a KisSharedPtr which may be dereferenced.
KisWeakSharedPtr< KisReferenceImagesLayer > m_layer

References KoCanvasBase::addCommand(), KoToolBase::canvas(), koSelection(), m_layer, KoSelection::selectedShapes(), and KisWeakSharedPtr< T >::toStrongRef().

◆ deselect

void ToolReferenceImages::deselect ( )
overrideslot

Definition at line 401 of file ToolReferenceImages.cpp.

402{
405}
void deselectAll()
clear the selections list
virtual void repaintDecorations()

References KoSelection::deselectAll(), koSelection(), and KoToolBase::repaintDecorations().

◆ document()

KisDocument * ToolReferenceImages::document ( ) const
private

Definition at line 407 of file ToolReferenceImages.cpp.

408{
409 auto kisCanvas = dynamic_cast<KisCanvas2*>(canvas());
410 KIS_ASSERT(kisCanvas);
411 return kisCanvas->imageView()->document();
412}

References KoToolBase::canvas(), and KIS_ASSERT.

◆ hasSelection()

bool ToolReferenceImages::hasSelection ( )
overridevirtual
Returns
true if the tool has selected data.

Reimplemented from KoToolBase.

Definition at line 93 of file ToolReferenceImages.cpp.

94{
95 const KoShapeManager *manager = shapeManager();
96 return manager && manager->selection()->count() != 0;
97}
int count() const
return the selection count, i.e. the number of all selected shapes
KoSelection * selection
KoShapeManager * shapeManager() const override

References KoSelection::count(), KoShapeManager::selection, and shapeManager().

◆ isValidForCurrentLayer()

bool ToolReferenceImages::isValidForCurrentLayer ( ) const
overrideprotectedvirtual

Reimplemented from DefaultTool.

Definition at line 292 of file ToolReferenceImages.cpp.

293{
294 return true;
295}

◆ koSelection()

KoSelection * ToolReferenceImages::koSelection ( ) const
overrideprotectedvirtual

Reimplemented from DefaultTool.

Definition at line 303 of file ToolReferenceImages.cpp.

304{
305 auto manager = shapeManager();
306 return manager ? manager->selection() : nullptr;
307}

References shapeManager().

◆ loadReferenceImages

void ToolReferenceImages::loadReferenceImages ( )
slot

Definition at line 175 of file ToolReferenceImages.cpp.

176{
177 auto kisCanvas = dynamic_cast<KisCanvas2*>(canvas());
178 KIS_ASSERT_RECOVER_RETURN(kisCanvas);
179
180 KoFileDialog dialog(kisCanvas->viewManager()->mainWindowAsQWidget(), KoFileDialog::OpenFile, "OpenReferenceImageCollection");
181 dialog.setMimeTypeFilters(QStringList() << "application/x-krita-reference-images");
182 dialog.setCaption(i18n("Load Reference Images"));
183
184 QStringList locations = QStandardPaths::standardLocations(QStandardPaths::PicturesLocation);
185 if (!locations.isEmpty()) {
186 dialog.setDefaultDir(locations.first());
187 }
188
189 QString filename = dialog.filename();
190 if (filename.isEmpty()) return;
191 if (!QFileInfo(filename).exists()) return;
192
193 QFile file(filename);
194 if (!file.open(QIODevice::ReadOnly)) {
195 QMessageBox::critical(qApp->activeWindow(), i18nc("@title:window", "Krita"), i18n("Could not open '%1'.", filename));
196 return;
197 }
198
200
201 int currentZIndex = 0;
202 if (document()->referenceImagesLayer()) {
203 currentZIndex = document()->referenceImagesLayer()->shapes().size();
204 }
205
206 if (collection.load(&file)) {
207 QList<KoShape*> shapes;
208 Q_FOREACH(auto *reference, collection.referenceImages()) {
209 reference->setZIndex(currentZIndex);
210 shapes.append(reference);
211 currentZIndex += 1;
212 }
213
215 } else {
216 QMessageBox::critical(qApp->activeWindow(), i18nc("@title:window", "Krita"), i18n("Could not load reference images from '%1'.", filename));
217 }
218 file.close();
219}
QList< QString > QStringList
const QVector< KisReferenceImage * > & referenceImages() const
QList< KoShape * > shapes() const

References KoCanvasBase::addCommand(), KisReferenceImagesLayer::addReferenceImages(), KoToolBase::canvas(), document(), KIS_ASSERT_RECOVER_RETURN, KisReferenceImageCollection::load(), KoFileDialog::OpenFile, KisReferenceImageCollection::referenceImages(), KisDocument::referenceImagesLayer(), and KoShapeContainer::shapes().

◆ mouseDoubleClickEvent()

void ToolReferenceImages::mouseDoubleClickEvent ( KoPointerEvent * event)
inlineoverridevirtual

Called when (one of) the mouse or stylus buttons is double clicked. Implementors should call event->ignore() if they do not actually use the event. Default implementation ignores this event.

Parameters
eventstate and reason of this mouse or stylus press

Reimplemented from DefaultTool.

Definition at line 38 of file ToolReferenceImages.h.

38{}

◆ paste

bool ToolReferenceImages::paste ( )
overrideslot

Definition at line 384 of file ToolReferenceImages.cpp.

385{
387 return true;
388}

References pasteReferenceImage().

◆ pasteReferenceImage

void ToolReferenceImages::pasteReferenceImage ( )
slot

Definition at line 139 of file ToolReferenceImages.cpp.

140{
141 KisCanvas2* kisCanvas = dynamic_cast<KisCanvas2*>(canvas());
142 KIS_ASSERT_RECOVER_RETURN(kisCanvas);
143
145 if (reference) {
146 if (document()->referenceImagesLayer()) {
147 reference->setZIndex(document()->referenceImagesLayer()->shapes().size());
148 }
150 } else {
151 if (canvas()->canvasWidget()) {
152 QMessageBox::critical(canvas()->canvasWidget(), i18nc("@title:window", "Krita"), i18n("Could not load reference image from clipboard"));
153 }
154 }
155}
KisCoordinatesConverter * coordinatesConverter
static KisReferenceImage * fromClipboard(const KisCoordinatesConverter &converter)
void setZIndex(qint16 zIndex)
Definition KoShape.cpp:954

References KoCanvasBase::addCommand(), KisReferenceImagesLayer::addReferenceImages(), KoToolBase::canvas(), KisCanvas2::coordinatesConverter, document(), KisReferenceImage::fromClipboard(), KIS_ASSERT_RECOVER_RETURN, and KoShape::setZIndex().

◆ popupActionsMenu()

QMenu * ToolReferenceImages::popupActionsMenu ( )
overridevirtual
Returns
a menu with context-aware actions for the current selection. If the returned value is null, no context menu is shown.

Reimplemented from DefaultTool.

Definition at line 331 of file ToolReferenceImages.cpp.

332{
333 if (m_contextMenu) {
334 m_contextMenu->clear();
335 m_contextMenu->addSection(i18n("Reference Image Actions"));
336 m_contextMenu->addSeparator();
337
338 QMenu *transform = m_contextMenu->addMenu(i18n("Transform"));
339
340 transform->addAction(action("object_transform_rotate_90_cw"));
341 transform->addAction(action("object_transform_rotate_90_ccw"));
342 transform->addAction(action("object_transform_rotate_180"));
343 transform->addSeparator();
344 transform->addAction(action("object_transform_mirror_horizontally"));
345 transform->addAction(action("object_transform_mirror_vertically"));
346 transform->addSeparator();
347 transform->addAction(action("object_transform_reset"));
348
349 m_contextMenu->addSeparator();
350
351 m_contextMenu->addAction(action("edit_cut"));
352 m_contextMenu->addAction(action("edit_copy"));
353 m_contextMenu->addAction(action("edit_paste"));
354
355 m_contextMenu->addSeparator();
356
357 m_contextMenu->addAction(action("object_order_front"));
358 m_contextMenu->addAction(action("object_order_raise"));
359 m_contextMenu->addAction(action("object_order_lower"));
360 m_contextMenu->addAction(action("object_order_back"));
361 }
362
363 return m_contextMenu.data();
364}
QScopedPointer< QMenu > m_contextMenu
QAction * action(const QString &name) const

References KoToolBase::action(), and DefaultTool::m_contextMenu.

◆ priority()

virtual quint32 ToolReferenceImages::priority ( )
inlinevirtual

Definition at line 34 of file ToolReferenceImages.h.

34 {
35 return 3;
36 }

◆ removeAllReferenceImages

void ToolReferenceImages::removeAllReferenceImages ( )
slot

Definition at line 167 of file ToolReferenceImages.cpp.

168{
169 auto layer = m_layer.toStrongRef();
170 if (!layer) return;
171
172 canvas()->addCommand(layer->removeReferenceImages(document(), layer->shapes()));
173}

References KoCanvasBase::addCommand(), KoToolBase::canvas(), m_layer, and KisWeakSharedPtr< T >::toStrongRef().

◆ removeSelectedReferenceImages

void ToolReferenceImages::removeSelectedReferenceImages ( )
slot

Definition at line 157 of file ToolReferenceImages.cpp.

158{
159 auto layer = m_layer.toStrongRef();
160 if (!layer) return;
161 if (!koSelection()) return;
162 if (koSelection()->selectedEditableShapes().isEmpty()) return;
163
164 canvas()->addCommand(layer->removeReferenceImages(document(), koSelection()->selectedEditableShapes()));
165}

References KoCanvasBase::addCommand(), KoToolBase::canvas(), koSelection(), m_layer, and KisWeakSharedPtr< T >::toStrongRef().

◆ saveReferenceImages

void ToolReferenceImages::saveReferenceImages ( )
slot

Definition at line 221 of file ToolReferenceImages.cpp.

222{
223 KisCursorOverrideLock cursorLock(Qt::BusyCursor);
224
225 auto layer = m_layer.toStrongRef();
226 if (!layer || layer->shapeCount() == 0) return;
227
228 auto kisCanvas = dynamic_cast<KisCanvas2*>(canvas());
229 KIS_ASSERT_RECOVER_RETURN(kisCanvas);
230
231 KoFileDialog dialog(kisCanvas->viewManager()->mainWindowAsQWidget(), KoFileDialog::SaveFile, "SaveReferenceImageCollection");
232 QString mimetype = "application/x-krita-reference-images";
233 dialog.setMimeTypeFilters(QStringList() << mimetype, mimetype);
234 dialog.setCaption(i18n("Save Reference Images"));
235
236 QStringList locations = QStandardPaths::standardLocations(QStandardPaths::PicturesLocation);
237 if (!locations.isEmpty()) {
238 dialog.setDefaultDir(locations.first());
239 }
240
241 QString filename = dialog.filename();
242 if (filename.isEmpty()) return;
243
244 QString fileMime = KisMimeDatabase::mimeTypeForFile(filename, false);
245 if (fileMime != "application/x-krita-reference-images") {
246 filename.append(filename.endsWith(".") ? "krf" : ".krf");
247 }
248
249 QFile file(filename);
250 if (!file.open(QIODevice::WriteOnly)) {
251 QMessageBox::critical(qApp->activeWindow(), i18nc("@title:window", "Krita"), i18n("Could not open '%1' for saving.", filename));
252 return;
253 }
254
255 KisReferenceImageCollection collection(layer->referenceImages());
256 bool ok = collection.save(&file);
257 file.close();
258
259 if (!ok) {
260 QMessageBox::critical(qApp->activeWindow(), i18nc("@title:window", "Krita"), i18n("Failed to save reference images."));
261 }
262}
static QString mimeTypeForFile(const QString &file, bool checkExistingFiles=true)
Find the mimetype for the given filename. The filename must include a suffix.

References KoToolBase::canvas(), KIS_ASSERT_RECOVER_RETURN, m_layer, KisMimeDatabase::mimeTypeForFile(), KisReferenceImageCollection::save(), KoFileDialog::SaveFile, and KisWeakSharedPtr< T >::toStrongRef().

◆ selectAll

bool ToolReferenceImages::selectAll ( )
overrideslot

Definition at line 390 of file ToolReferenceImages.cpp.

391{
392 Q_FOREACH(KoShape *shape, shapeManager()->shapes()) {
393 if (!shape->isSelectable()) continue;
394 koSelection()->select(shape);
395 }
397
398 return true;
399}
void select(KoShape *shape)
bool isSelectable() const
Definition KoShape.cpp:1014

References KoShape::isSelectable(), koSelection(), KoToolBase::repaintDecorations(), KoSelection::select(), and shapeManager().

◆ setReferenceImageLayer()

void ToolReferenceImages::setReferenceImageLayer ( KisSharedPtr< KisReferenceImagesLayer > layer)
private

Definition at line 85 of file ToolReferenceImages.cpp.

86{
87 m_layer = layer;
88 connect(layer.data(), SIGNAL(selectionChanged()), this, SLOT(slotSelectionChanged()));
89 connect(layer->shapeManager(), SIGNAL(selectionChanged()), this, SLOT(repaintDecorations()));
90 connect(layer->shapeManager(), SIGNAL(selectionContentChanged()), this, SLOT(repaintDecorations()));
91}
KoShapeManager * shapeManager() const
void selectionChanged(bool hasSelection)

References connect(), KisSharedPtr< T >::data(), m_layer, KoToolBase::repaintDecorations(), KoToolBase::selectionChanged(), and slotSelectionChanged().

◆ shapeManager()

KoShapeManager * ToolReferenceImages::shapeManager ( ) const
overrideprotectedvirtual

Reimplemented from DefaultTool.

Definition at line 297 of file ToolReferenceImages.cpp.

298{
299 auto layer = m_layer.toStrongRef();
300 return layer ? layer->shapeManager() : nullptr;
301}

References m_layer, KisShapeLayer::shapeManager(), and KisWeakSharedPtr< T >::toStrongRef().

◆ slotNodeAdded [1/2]

void ToolReferenceImages::slotNodeAdded ( KisNodeSP node)
slot

Definition at line 69 of file ToolReferenceImages.cpp.

References None, and slotNodeAdded().

◆ slotNodeAdded [2/2]

void ToolReferenceImages::slotNodeAdded ( KisNodeSP node,
KisNodeAdditionFlags flags )
slot

Definition at line 74 of file ToolReferenceImages.cpp.

75{
76 Q_UNUSED(flags)
77
78 auto *referenceImagesLayer = dynamic_cast<KisReferenceImagesLayer*>(node.data());
79
80 if (referenceImagesLayer) {
81 setReferenceImageLayer(referenceImagesLayer);
82 }
83}

References KisSharedPtr< T >::data(), and setReferenceImageLayer().

◆ slotSelectionChanged

void ToolReferenceImages::slotSelectionChanged ( )
slot

Definition at line 264 of file ToolReferenceImages.cpp.

265{
266 auto layer = m_layer.toStrongRef();
267 if (!layer) return;
268
269 m_optionsWidget->selectionChanged(layer->shapeManager()->selection());
271}
void updateActions()
Update actions on selection change.
void selectionChanged(KoSelection *selection)

References m_layer, m_optionsWidget, ToolReferenceImagesWidget::selectionChanged(), KisWeakSharedPtr< T >::toStrongRef(), and DefaultTool::updateActions().

◆ updateDistinctiveActions()

void ToolReferenceImages::updateDistinctiveActions ( const QList< KoShape * > & editableShapes)
overrideprotectedvirtual

Enable/disable actions specific to the tool (vector vs. reference images)

Reimplemented from DefaultTool.

Definition at line 309 of file ToolReferenceImages.cpp.

310{
311 action("object_group")->setEnabled(false);
312 action("object_unite")->setEnabled(false);
313 action("object_intersect")->setEnabled(false);
314 action("object_subtract")->setEnabled(false);
315 action("object_split")->setEnabled(false);
316 action("object_ungroup")->setEnabled(false);
317}

References KoToolBase::action().

Friends And Related Symbol Documentation

◆ ToolReferenceImagesWidget

friend class ToolReferenceImagesWidget
friend

Definition at line 82 of file ToolReferenceImages.h.

Member Data Documentation

◆ m_layer

KisWeakSharedPtr<KisReferenceImagesLayer> ToolReferenceImages::m_layer
private

Definition at line 84 of file ToolReferenceImages.h.

◆ m_optionsWidget

ToolReferenceImagesWidget* ToolReferenceImages::m_optionsWidget = nullptr
private

Definition at line 83 of file ToolReferenceImages.h.


The documentation for this class was generated from the following files: