File indexing completed on 2024-04-28 04:38:55

0001 /*
0002     SPDX-FileCopyrightText: 2003, 2006 Adam Treat <treat@kde.org>
0003     SPDX-FileCopyrightText: 2007 Andreas Pakulat <apaku@gmx.de>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #include "kdevkonsoleviewplugin.h"
0009 
0010 #include <KLocalizedString>
0011 #include <KService>
0012 
0013 #include <interfaces/iuicontroller.h>
0014 #include <interfaces/icore.h>
0015 
0016 #include "kdevkonsoleview.h"
0017 #include "debug.h"
0018 
0019 K_PLUGIN_FACTORY_WITH_JSON(KonsoleViewFactory, "kdevkonsoleview.json", registerPlugin<KDevKonsoleViewPlugin>();)
0020 
0021 class KDevKonsoleViewFactory: public KDevelop::IToolViewFactory{
0022 public:
0023     explicit KDevKonsoleViewFactory(KDevKonsoleViewPlugin *plugin):
0024         mplugin(plugin) {}
0025     QWidget* create(QWidget *parent = nullptr) override
0026     {
0027         return new KDevKonsoleView(mplugin, parent);
0028     }
0029     Qt::DockWidgetArea defaultPosition() const override
0030     {
0031         return Qt::BottomDockWidgetArea;
0032     }
0033     QString id() const override
0034     {
0035         return QStringLiteral("org.kdevelop.KonsoleView");
0036     }
0037 private:
0038     KDevKonsoleViewPlugin *mplugin;
0039 };
0040 
0041 KDevKonsoleViewPlugin::KDevKonsoleViewPlugin(QObject* parent, const QVariantList&)
0042     : KDevelop::IPlugin(QStringLiteral("kdevkonsoleview"), parent)
0043 {
0044     // TODO KF6: check whether constructing a KPluginMetaData from this plugin ID still works
0045     // consider passing some path or prefix instead of the plugin ID to increase robustness.
0046     const auto factory = KPluginFactory::loadFactory(KPluginMetaData(QStringLiteral("konsolepart")));
0047     if (!factory) {
0048         qCWarning(PLUGIN_KONSOLE) << "Failed to load 'konsolepart' plugin:" << factory.errorText;
0049         setErrorDescription(i18n("Failed to load 'konsolepart' plugin: %1", factory.errorString));
0050         return;
0051     }
0052 
0053     m_konsoleFactory = factory.plugin;
0054     m_viewFactory = new KDevKonsoleViewFactory(this);
0055 
0056     core()->uiController()->addToolView(i18nc("@title:window", "Terminal"), m_viewFactory);
0057 }
0058 
0059 void KDevKonsoleViewPlugin::unload()
0060 {
0061     if (m_viewFactory) {
0062         core()->uiController()->removeToolView(m_viewFactory);
0063     }
0064 }
0065 
0066 KPluginFactory* KDevKonsoleViewPlugin::konsoleFactory() const
0067 {
0068     return m_konsoleFactory;
0069 }
0070 
0071 KDevKonsoleViewPlugin::~KDevKonsoleViewPlugin()
0072 {
0073 }
0074 
0075 #include "kdevkonsoleviewplugin.moc"
0076 #include "moc_kdevkonsoleviewplugin.cpp"