File indexing completed on 2024-05-12 16:01:45
0001 /* 0002 * SPDX-FileCopyrightText: 2009 Cyrille Berger <cberger@cberger.net> 0003 * SPDX-FileCopyrightText: 2014 Sven Langkamp <sven.langkamp@gmail.com> 0004 * 0005 * SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 #include "KisDecorationsManager.h" 0009 0010 #include "KisViewManager.h" 0011 #include "kis_action_manager.h" 0012 #include "kis_action.h" 0013 0014 #include "kis_canvas2.h" 0015 #include <klocalizedstring.h> 0016 #include <kguiitem.h> 0017 #include <ktoggleaction.h> 0018 #include <kactioncollection.h> 0019 #include <KisDocument.h> 0020 0021 0022 KisDecorationsManager::KisDecorationsManager(KisViewManager* view) 0023 : QObject(view) 0024 , m_imageView(0) 0025 { 0026 } 0027 0028 KisDecorationsManager::~KisDecorationsManager() 0029 { 0030 } 0031 0032 void KisDecorationsManager::setup(KisActionManager * actionManager) 0033 { 0034 m_toggleAssistant = actionManager->createAction("view_toggle_painting_assistants"); 0035 m_togglePreview = actionManager->createAction("view_toggle_assistant_previews"); 0036 m_toggleReferenceImages = actionManager->createAction("view_toggle_reference_images"); 0037 0038 updateAction(); 0039 } 0040 0041 void KisDecorationsManager::setView(QPointer<KisView> imageView) 0042 { 0043 0044 // set view is called twice when a document is open, so we need to disconnect the original signals 0045 // if m_imageView has already been created. This prevents double signal events firing 0046 if (m_imageView) { 0047 m_toggleAssistant->disconnect(); 0048 m_togglePreview->disconnect(); 0049 0050 if (assistantsDecoration()) { 0051 assistantsDecoration()->disconnect(this); 0052 } 0053 if (referenceImagesDecoration()) { 0054 referenceImagesDecoration()->disconnect(this); 0055 } 0056 } 0057 0058 m_imageView = imageView; 0059 0060 if (m_imageView && !referenceImagesDecoration()) { 0061 KisReferenceImagesDecoration *deco = new KisReferenceImagesDecoration(m_imageView, imageView->document()); 0062 m_imageView->canvasBase()->addDecoration(deco); 0063 } 0064 0065 if (m_imageView && !assistantsDecoration()) { 0066 KisPaintingAssistantsDecoration *deco = new KisPaintingAssistantsDecoration(m_imageView); 0067 m_imageView->canvasBase()->addDecoration(deco); 0068 } 0069 0070 if (m_imageView && assistantsDecoration()) { 0071 connect(m_toggleAssistant, SIGNAL(triggered()), assistantsDecoration(), SLOT(toggleAssistantVisible())); 0072 connect(m_togglePreview, SIGNAL(triggered()), assistantsDecoration(), SLOT(toggleOutlineVisible())); 0073 connect(assistantsDecoration(), SIGNAL(assistantChanged()), SLOT(updateAction())); 0074 connect(m_imageView->document(), &KisDocument::sigAssistantsChanged, 0075 assistantsDecoration(), &KisPaintingAssistantsDecoration::slotUpdateDecorationVisibility); 0076 connect(m_imageView->document(), &KisDocument::sigAssistantsChanged, 0077 m_imageView->canvasBase(), QOverload<>::of(&KisCanvas2::updateCanvas)); 0078 } 0079 0080 if (m_imageView && referenceImagesDecoration()) { 0081 connect(m_toggleReferenceImages, SIGNAL(triggered(bool)), referenceImagesDecoration(), SLOT(setVisible(bool)), Qt::UniqueConnection); 0082 } 0083 0084 0085 updateAction(); 0086 } 0087 0088 void KisDecorationsManager::updateAction() 0089 { 0090 if (assistantsDecoration()) { 0091 bool enabled = !assistantsDecoration()->assistants().isEmpty(); 0092 m_toggleAssistant->setChecked(assistantsDecoration()->assistantVisibility()); 0093 m_toggleAssistant->setEnabled(enabled); 0094 m_togglePreview->setChecked(assistantsDecoration()->outlineVisibility()); 0095 m_togglePreview->setEnabled(enabled); 0096 } else { 0097 m_toggleAssistant->setEnabled(false); 0098 } 0099 0100 if (referenceImagesDecoration()) { 0101 m_toggleReferenceImages->setEnabled(referenceImagesDecoration()->documentHasReferenceImages()); 0102 m_toggleReferenceImages->setChecked(referenceImagesDecoration()->visible()); 0103 } 0104 } 0105 0106 KisPaintingAssistantsDecorationSP KisDecorationsManager::assistantsDecoration() const 0107 { 0108 if (m_imageView) { 0109 return m_imageView->canvasBase()->paintingAssistantsDecoration(); 0110 } 0111 return 0; 0112 } 0113 0114 KisReferenceImagesDecorationSP KisDecorationsManager::referenceImagesDecoration() const 0115 { 0116 if (m_imageView) { 0117 return m_imageView->canvasBase()->referenceImagesDecoration(); 0118 } 0119 return 0; 0120 } 0121