File indexing completed on 2025-03-09 04:08:57

0001 /*
0002  *  SPDX-FileCopyrightText: 2009 Cyrille Berger <cberger@cberger.net>
0003  *
0004  *  SPDX-License-Identifier: LGPL-2.0-or-later
0005  */
0006 
0007 #include "presetdocker_dock.h"
0008 
0009 #include <QHBoxLayout>
0010 
0011 #include <klocalizedstring.h>
0012 
0013 #include <KoCanvasResourceProvider.h>
0014 #include <KoCanvasBase.h>
0015 
0016 #include "kis_canvas2.h"
0017 #include "KisViewManager.h"
0018 #include "kis_paintop_box.h"
0019 #include "kis_paintop_presets_chooser_popup.h"
0020 #include <brushengine/kis_paintop_preset.h>
0021 #include "KisMainWindow.h"
0022 
0023 
0024 PresetDockerDock::PresetDockerDock( )
0025     : QDockWidget(i18nc("@title:window Brush presets chooser docker", "Brush Presets"))
0026     , m_canvas(0)
0027 {
0028     m_presetChooser = new KisPaintOpPresetsChooserPopup(this);
0029     m_presetChooser->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
0030     m_presetChooser->setResponsiveness(true);
0031     setWidget(m_presetChooser);
0032 }
0033 
0034 void PresetDockerDock::setCanvas(KoCanvasBase *canvas)
0035 {
0036     setEnabled(canvas != 0);
0037 
0038     if (m_canvas) {
0039         m_canvas->disconnectCanvasObserver(this);
0040         m_presetChooser->disconnect(m_canvas->viewManager()->paintOpBox());
0041     }
0042 
0043     m_canvas = dynamic_cast<KisCanvas2*>(canvas);
0044 
0045     if (!m_canvas || !m_canvas->viewManager() || !m_canvas->resourceManager()) return;
0046 
0047     connect(m_presetChooser, SIGNAL(resourceSelected(KoResourceSP )),
0048             m_canvas->viewManager()->paintOpBox(), SLOT(resourceSelected(KoResourceSP )));
0049     connect(m_presetChooser, SIGNAL(resourceClicked(KoResourceSP )),
0050             m_canvas->viewManager()->paintOpBox(), SLOT(resourceSelected(KoResourceSP )));
0051     connect(canvas->resourceManager(), SIGNAL(canvasResourceChanged(int,QVariant)),
0052             this, SLOT(canvasResourceChanged(int,QVariant)));
0053 
0054 
0055     connect(m_canvas->viewManager()->mainWindow(), SIGNAL(themeChanged()), m_presetChooser, SLOT(slotThemeChanged()), Qt::UniqueConnection);
0056     m_presetChooser->slotThemeChanged();
0057 
0058     canvasResourceChanged(KoCanvasResource::CurrentPaintOpPreset);
0059 }
0060 
0061 void PresetDockerDock::canvasResourceChanged(int key, const QVariant& /*v*/)
0062 {
0063     if (key == KoCanvasResource::CurrentPaintOpPreset) {
0064         if (m_canvas && m_canvas->resourceManager()) {
0065             if (sender()) sender()->blockSignals(true);
0066             KisPaintOpPresetSP preset = m_canvas->resourceManager()->resource(KoCanvasResource::CurrentPaintOpPreset).value<KisPaintOpPresetSP>();
0067             if(preset)
0068                 m_presetChooser->canvasResourceChanged(preset);
0069             if (sender()) sender()->blockSignals(false);
0070         }
0071     }
0072 }
0073 
0074 
0075