File indexing completed on 2024-05-05 05:52:18
0001 /* This file is part of the Kate project. 0002 * 0003 * SPDX-FileCopyrightText: 2010 Christoph Cullmann <cullmann@kde.org> 0004 * 0005 * SPDX-License-Identifier: LGPL-2.0-or-later 0006 */ 0007 0008 #include "katesnippets.h" 0009 #include "snippetcompletionmodel.h" 0010 #include "snippetview.h" 0011 0012 #include <QAction> 0013 0014 #include <KActionCollection> 0015 #include <KLocalizedString> 0016 #include <KPluginFactory> 0017 #include <KXMLGUIFactory> 0018 0019 K_PLUGIN_FACTORY_WITH_JSON(KateSnippetsPluginFactory, "katesnippetsplugin.json", registerPlugin<KateSnippetsPlugin>();) 0020 0021 KateSnippetsPlugin::KateSnippetsPlugin(QObject *parent, const QVariantList &) 0022 : KTextEditor::Plugin(parent) 0023 , m_snippetGlobal(new KateSnippetGlobal(this)) 0024 { 0025 } 0026 0027 KateSnippetsPlugin::~KateSnippetsPlugin() 0028 { 0029 } 0030 0031 QObject *KateSnippetsPlugin::createView(KTextEditor::MainWindow *mainWindow) 0032 { 0033 KateSnippetsPluginView *view = new KateSnippetsPluginView(this, mainWindow); 0034 return view; 0035 } 0036 0037 KateSnippetsPluginView::KateSnippetsPluginView(KateSnippetsPlugin *plugin, KTextEditor::MainWindow *mainWindow) 0038 : QObject(mainWindow) 0039 , m_plugin(plugin) 0040 , m_mainWindow(mainWindow) 0041 , m_toolView(nullptr) 0042 , m_snippets(nullptr) 0043 { 0044 KXMLGUIClient::setComponentName(QStringLiteral("katesnippets"), i18n("Snippets")); 0045 setXMLFile(QStringLiteral("ui.rc")); 0046 0047 // Toolview for snippets 0048 m_toolView = mainWindow->createToolView(plugin, 0049 QStringLiteral("kate_private_plugin_katesnippetsplugin"), 0050 KTextEditor::MainWindow::Right, 0051 QIcon::fromTheme(QStringLiteral("document-new")), 0052 i18n("Snippets")); 0053 0054 // add snippets widget 0055 m_snippets = new SnippetView(KateSnippetGlobal::self(), mainWindow, m_toolView.data()); 0056 m_toolView->layout()->addWidget(m_snippets); 0057 m_snippets->setupActionsForWindow(mainWindow->window()); 0058 m_toolView->addActions(m_snippets->actions()); 0059 0060 // create actions 0061 QAction *a = actionCollection()->addAction(QStringLiteral("tools_create_snippet")); 0062 a->setIcon(QIcon::fromTheme(QStringLiteral("document-new"))); 0063 a->setText(i18n("Create Snippet")); 0064 connect(a, &QAction::triggered, this, &KateSnippetsPluginView::createSnippet); 0065 0066 connect(mainWindow, &KTextEditor::MainWindow::viewCreated, this, &KateSnippetsPluginView::slotViewCreated); 0067 0068 /** 0069 * connect for all already existing views 0070 */ 0071 const auto views = mainWindow->views(); 0072 for (KTextEditor::View *view : views) { 0073 slotViewCreated(view); 0074 } 0075 0076 // register if factory around 0077 if (auto factory = m_mainWindow->guiFactory()) { 0078 factory->addClient(this); 0079 } 0080 } 0081 0082 KateSnippetsPluginView::~KateSnippetsPluginView() 0083 { 0084 // cleanup for all views 0085 for (auto view : qAsConst(m_textViews)) { 0086 if (!view) { 0087 continue; 0088 } 0089 view->unregisterCompletionModel(KateSnippetGlobal::self()->completionModel()); 0090 } 0091 0092 // unregister if factory around 0093 if (auto factory = m_mainWindow->guiFactory()) { 0094 factory->removeClient(this); 0095 } 0096 0097 if (m_toolView) { 0098 delete m_toolView; 0099 } 0100 } 0101 0102 void KateSnippetsPluginView::slotViewCreated(KTextEditor::View *view) 0103 { 0104 m_textViews.append(QPointer<KTextEditor::View>(view)); 0105 0106 // add snippet completion 0107 auto model = KateSnippetGlobal::self()->completionModel(); 0108 view->unregisterCompletionModel(model); 0109 view->registerCompletionModel(model); 0110 } 0111 0112 void KateSnippetsPluginView::createSnippet() 0113 { 0114 KateSnippetGlobal::self()->createSnippet(m_mainWindow->activeView()); 0115 } 0116 0117 #include "katesnippets.moc" 0118 #include "moc_katesnippets.cpp"