Krita Source Code Documentation
Loading...
Searching...
No Matches
QMic.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2017 Boudewijn Rempt <boud@valdyas.org>
3 * SPDX-FileCopyrightText: 2020 L. E. Segovia <amy@amyspark.me>
4 *
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 */
7
8#include "QMic.h"
9
10#include <QApplication>
11#include <QMessageBox>
12#include <memory>
13
14#include <KisViewManager.h>
15#include <KoJsonTrader.h>
16#include <kis_action.h>
17#include <kis_debug.h>
18#include <klocalizedstring.h>
19#include <kpluginfactory.h>
20#include <kis_image.h>
21
23
24K_PLUGIN_FACTORY_WITH_JSON(QMicFactory, "kritaqmic.json", registerPlugin<QMic>();)
25
26QMic::QMic(QObject *parent, const QVariantList &)
27 : KisActionPlugin(parent)
28 , m_qmicAction(createAction("QMic"))
29 , m_againAction(createAction("QMicAgain"))
30{
31 m_qmicAction->setActivationFlags(KisAction::ACTIVE_DEVICE);
32 connect(m_qmicAction, SIGNAL(triggered()), this, SLOT(slotQMic()));
33
34 m_againAction->setActivationFlags(KisAction::ACTIVE_DEVICE);
35 m_againAction->setEnabled(false);
36 connect(m_againAction, SIGNAL(triggered()), this, SLOT(slotQMicAgain()));
37}
38
40{
41 slotQMic(true);
42}
43
44void QMic::slotQMic(bool again)
45{
46 m_qmicAction->setEnabled(false);
47 m_againAction->setEnabled(false);
48
49 std::unique_ptr<KisQmicPluginInterface> plugin;
50
51 // find the krita-gmic-qt plugin
52 const QList<KoJsonTrader::Plugin> offers = KoJsonTrader::instance()->query("Krita/GMic", QString());
53 if (offers.isEmpty()) {
54 QMessageBox::warning(qApp->activeWindow(), i18nc("@title:window", "Krita"), i18n("The GMic plugin is not installed or could not be loaded."));
55 return;
56 }
57
58 for (const auto &loader : offers) {
59 auto *factory = qobject_cast<KPluginFactory *>(loader.instance());
60 if (!factory) {
61 warnPlugins << "(GMic) This is not a Krita plugin: " << loader.fileName() << loader.errorString();
62
63 continue;
64 }
65
66 auto *pluginBase = factory->create<QObject>();
67
68 plugin.reset(qobject_cast<KisQmicPluginInterface *>(pluginBase));
69
70 if (!plugin) {
71 warnPlugins << "(GMic) This is not a valid GMic-Qt plugin: " << loader.fileName();
72 continue;
73 }
74
75 break;
76 }
77
78 if (!plugin) {
79 QMessageBox::warning(qApp->activeWindow(), i18nc("@title:window", "Krita"), i18n("Krita cannot launch the gmic-qt plugin. No bundled library found."));
80 return;
81 }
82
83 if (this->viewManager()->blockUntilOperationsFinished(this->viewManager()->image())) {
84 auto image = std::make_shared<KisImageInterface>(this->viewManager().data());
85 int status = plugin->launch(image, again);
86
87 dbgPlugins << "pluginFinished" << status;
88 }
89
90 plugin.reset();
91
92 m_qmicAction->setEnabled(true);
93 m_againAction->setEnabled(true);
94}
95
96#include "QMic.moc"
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
QPointer< KisViewManager > viewManager() const
@ ACTIVE_DEVICE
Activate if the active node has a paint device, i.e. there are pixels to be modified.
Definition kis_action.h:47
static KoJsonTrader * instance()
QList< Plugin > query(const QString &servicetype, const QString &mimetype)
void slotQMic(bool again=false)
Definition QMic.cpp:44
void slotQMicAgain()
Definition QMic.cpp:39
KisAction * m_againAction
Definition QMic.h:28
QMic(QObject *parent, const QVariantList &)
Definition QMic.cpp:26
KisAction * m_qmicAction
Definition QMic.h:27
K_PLUGIN_FACTORY_WITH_JSON(KritaASCCDLFactory, "kritaasccdl.json", registerPlugin< KritaASCCDL >();) KritaASCCDL
#define warnPlugins
Definition kis_debug.h:93
#define dbgPlugins
Definition kis_debug.h:51