File indexing completed on 2024-05-05 05:51:24

0001 /* This file is part of the KDE project
0002    SPDX-FileCopyrightText: 2001 Christoph Cullmann <cullmann@kde.org>
0003    SPDX-FileCopyrightText: 2001 Joseph Wenninger <jowenn@kde.org>
0004    SPDX-FileCopyrightText: 2001 Anders Lund <anders.lund@lund.tdcadsl.dk>
0005    SPDX-FileCopyrightText: 2007 Mirko Stocker <me@misto.ch>
0006    SPDX-FileCopyrightText: 2009 Dominik Haumann <dhaumann kde org>
0007 
0008    SPDX-License-Identifier: LGPL-2.0-only
0009 */
0010 
0011 // BEGIN Includes
0012 #include "katefilebrowserplugin.h"
0013 #include "katefilebrowser.h"
0014 #include "katefilebrowserconfig.h"
0015 
0016 #include <KLocalizedString>
0017 #include <KPluginFactory>
0018 
0019 #include <QIcon>
0020 #include <QKeyEvent>
0021 // END Includes
0022 
0023 K_PLUGIN_FACTORY_WITH_JSON(KateFileBrowserPluginFactory, "katefilebrowserplugin.json", registerPlugin<KateFileBrowserPlugin>();)
0024 
0025 // BEGIN KateFileBrowserPlugin
0026 KateFileBrowserPlugin::KateFileBrowserPlugin(QObject *parent, const QVariantList &)
0027     : KTextEditor::Plugin(parent)
0028 {
0029 }
0030 
0031 QObject *KateFileBrowserPlugin::createView(KTextEditor::MainWindow *mainWindow)
0032 {
0033     KateFileBrowserPluginView *view = new KateFileBrowserPluginView(this, mainWindow);
0034     connect(view, &KateFileBrowserPluginView::destroyed, this, &KateFileBrowserPlugin::viewDestroyed);
0035     m_views.append(view);
0036     return view;
0037 }
0038 
0039 void KateFileBrowserPlugin::viewDestroyed(QObject *view)
0040 {
0041     // do not access the view pointer, since it is partially destroyed already
0042     m_views.removeAll(view);
0043 }
0044 
0045 int KateFileBrowserPlugin::configPages() const
0046 {
0047     return 1;
0048 }
0049 
0050 KTextEditor::ConfigPage *KateFileBrowserPlugin::configPage(int number, QWidget *parent)
0051 {
0052     if (number != 0) {
0053         return nullptr;
0054     }
0055     return new KateFileBrowserConfigPage(parent, m_views[0]->m_fileBrowser);
0056 }
0057 // END KateFileBrowserPlugin
0058 
0059 // BEGIN KateFileBrowserPluginView
0060 KateFileBrowserPluginView::KateFileBrowserPluginView(KTextEditor::Plugin *plugin, KTextEditor::MainWindow *mainWindow)
0061     : QObject(mainWindow)
0062     , m_toolView(mainWindow->createToolView(plugin,
0063                                             QStringLiteral("kate_private_plugin_katefileselectorplugin"),
0064                                             KTextEditor::MainWindow::Left,
0065                                             QIcon::fromTheme(QStringLiteral("document-open-folder")),
0066                                             i18n("Filesystem")))
0067     , m_fileBrowser(new KateFileBrowser(mainWindow, m_toolView))
0068     , m_mainWindow(mainWindow)
0069 {
0070     m_toolView->installEventFilter(this);
0071 }
0072 
0073 KateFileBrowserPluginView::~KateFileBrowserPluginView()
0074 {
0075     // cleanup, kill toolview + console
0076     delete m_fileBrowser->parent();
0077 }
0078 
0079 void KateFileBrowserPluginView::readSessionConfig(const KConfigGroup &config)
0080 {
0081     m_fileBrowser->readSessionConfig(config);
0082 }
0083 
0084 void KateFileBrowserPluginView::writeSessionConfig(KConfigGroup &config)
0085 {
0086     m_fileBrowser->writeSessionConfig(config);
0087 }
0088 
0089 bool KateFileBrowserPluginView::eventFilter(QObject *obj, QEvent *event)
0090 {
0091     if (event->type() == QEvent::KeyPress) {
0092         QKeyEvent *ke = static_cast<QKeyEvent *>(event);
0093         if ((obj == m_toolView) && (ke->key() == Qt::Key_Escape)) {
0094             m_mainWindow->hideToolView(m_toolView);
0095             event->accept();
0096             return true;
0097         }
0098     }
0099     return QObject::eventFilter(obj, event);
0100 }
0101 // ENDKateFileBrowserPluginView
0102 
0103 #include "katefilebrowserplugin.moc"
0104 #include "moc_katefilebrowserplugin.cpp"