File indexing completed on 2024-06-23 04:26:47
0001 /* 0002 * SPDX-FileCopyrightText: 2017 Boudewijn Rempt <boud@valdyas.org> 0003 * SPDX-FileCopyrightText: 2020 L. E. Segovia <amy@amyspark.me> 0004 * 0005 * SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 #include "QMic.h" 0009 0010 #include <QApplication> 0011 #include <QMessageBox> 0012 #include <memory> 0013 0014 #include <KisViewManager.h> 0015 #include <KoJsonTrader.h> 0016 #include <kis_action.h> 0017 #include <kis_debug.h> 0018 #include <klocalizedstring.h> 0019 #include <kpluginfactory.h> 0020 #include <kis_image.h> 0021 0022 #include "kis_qmic_plugin_interface.h" 0023 0024 K_PLUGIN_FACTORY_WITH_JSON(QMicFactory, "kritaqmic.json", registerPlugin<QMic>();) 0025 0026 QMic::QMic(QObject *parent, const QVariantList &) 0027 : KisActionPlugin(parent) 0028 , m_qmicAction(createAction("QMic")) 0029 , m_againAction(createAction("QMicAgain")) 0030 { 0031 m_qmicAction->setActivationFlags(KisAction::ACTIVE_DEVICE); 0032 connect(m_qmicAction, SIGNAL(triggered()), this, SLOT(slotQMic())); 0033 0034 m_againAction->setActivationFlags(KisAction::ACTIVE_DEVICE); 0035 m_againAction->setEnabled(false); 0036 connect(m_againAction, SIGNAL(triggered()), this, SLOT(slotQMicAgain())); 0037 } 0038 0039 void QMic::slotQMicAgain() 0040 { 0041 slotQMic(true); 0042 } 0043 0044 void QMic::slotQMic(bool again) 0045 { 0046 m_qmicAction->setEnabled(false); 0047 m_againAction->setEnabled(false); 0048 0049 std::unique_ptr<KisQmicPluginInterface> plugin; 0050 0051 // find the krita-gmic-qt plugin 0052 const QList<KoJsonTrader::Plugin> offers = KoJsonTrader::instance()->query("Krita/GMic", QString()); 0053 if (offers.isEmpty()) { 0054 QMessageBox::warning(qApp->activeWindow(), i18nc("@title:window", "Krita"), i18n("The GMic plugin is not installed or could not be loaded.")); 0055 return; 0056 } 0057 0058 for (const auto &loader : offers) { 0059 auto *factory = qobject_cast<KPluginFactory *>(loader.instance()); 0060 if (!factory) { 0061 warnPlugins << "(GMic) This is not a Krita plugin: " << loader.fileName() << loader.errorString(); 0062 0063 continue; 0064 } 0065 0066 auto *pluginBase = factory->create<QObject>(); 0067 0068 plugin.reset(qobject_cast<KisQmicPluginInterface *>(pluginBase)); 0069 0070 if (!plugin) { 0071 warnPlugins << "(GMic) This is not a valid GMic-Qt plugin: " << loader.fileName(); 0072 continue; 0073 } 0074 0075 break; 0076 } 0077 0078 if (!plugin) { 0079 QMessageBox::warning(qApp->activeWindow(), i18nc("@title:window", "Krita"), i18n("Krita cannot launch the gmic-qt plugin. No bundled library found.")); 0080 return; 0081 } 0082 0083 if (this->viewManager()->blockUntilOperationsFinished(this->viewManager()->image())) { 0084 auto image = std::make_shared<KisImageInterface>(this->viewManager().data()); 0085 int status = plugin->launch(image, again); 0086 0087 dbgPlugins << "pluginFinished" << status; 0088 } 0089 0090 plugin.reset(); 0091 0092 m_qmicAction->setEnabled(true); 0093 m_againAction->setEnabled(true); 0094 } 0095 0096 #include "QMic.moc"