File indexing completed on 2024-04-28 05:48:20

0001 /*
0002     SPDX-FileCopyrightText: 2021 Waqar Ahmed <waqar.17a@gmail.com>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 #include "ce_plugin.h"
0007 #include "ce_widget.h"
0008 #include "ktexteditor_utils.h"
0009 
0010 #include <QAction>
0011 
0012 #include <KActionCollection>
0013 #include <KLocalizedString>
0014 #include <KPluginFactory>
0015 #include <KXMLGUIFactory>
0016 
0017 K_PLUGIN_FACTORY_WITH_JSON(CEPluginFactory, "ce_plugin.json", registerPlugin<CEPlugin>();)
0018 
0019 CEPlugin::CEPlugin(QObject *parent, const QVariantList &)
0020     : KTextEditor::Plugin(parent)
0021 {
0022 }
0023 
0024 CEPlugin::~CEPlugin() = default;
0025 
0026 QObject *CEPlugin::createView(KTextEditor::MainWindow *mainWindow)
0027 {
0028     return new CEPluginView(this, mainWindow);
0029 }
0030 
0031 CEPluginView::CEPluginView(CEPlugin *, KTextEditor::MainWindow *mainwindow)
0032     : QObject(mainwindow)
0033     , m_mainWindow(mainwindow)
0034 {
0035     setComponentName(QStringLiteral("compilerexplorer"), i18n("Compiler Explorer"));
0036     // create our one and only action
0037     QAction *a = actionCollection()->addAction(QStringLiteral("kate_open_ce_tab"));
0038     a->setText(i18n("&Open Current File in Compiler Explorer"));
0039     connect(a, &QAction::triggered, this, &CEPluginView::openANewTab);
0040 
0041     // register us at the UI
0042     mainwindow->guiFactory()->addClient(this);
0043 }
0044 
0045 CEPluginView::~CEPluginView()
0046 {
0047     // remove us from the UI again
0048     m_mainWindow->guiFactory()->removeClient(this);
0049 }
0050 
0051 void CEPluginView::openANewTab()
0052 {
0053     if (!m_mainWindow->activeView() || !m_mainWindow->activeView()->document()) {
0054         Utils::showMessage(i18n("No file open"), {}, i18nc("error category title", "CompilerExplorer"), MessageType::Error);
0055         return;
0056     }
0057 
0058     m_mainWidget = new CEWidget(this, m_mainWindow);
0059 
0060     QWidget *mw = m_mainWindow->window();
0061     // clang-format off
0062     QMetaObject::invokeMethod(mw, "addWidget", Q_ARG(QWidget*, m_mainWidget));
0063     // clang-format on
0064 }
0065 
0066 // required for TextFilterPluginFactory vtable
0067 #include "ce_plugin.moc"
0068 
0069 #include "moc_ce_plugin.cpp"