You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
93 lines
2.8 KiB
93 lines
2.8 KiB
/* This file was part of the KDE libraries |
|
|
|
SPDX-FileCopyrightText: 2021 Tomaz Canabrava <tcanabrava@kde.org> |
|
|
|
SPDX-License-Identifier: GPL-2.0-or-later |
|
*/ |
|
|
|
#include "sshmanagerplugin.h" |
|
|
|
#include "sshmanagerpluginwidget.h" |
|
#include "sshmanagermodel.h" |
|
|
|
#include "session/SessionController.h" |
|
|
|
#include <QMainWindow> |
|
#include <QDockWidget> |
|
#include <QListView> |
|
#include <QTimer> |
|
#include <QMenuBar> |
|
|
|
#include <KLocalizedString> |
|
#include <KActionCollection> |
|
|
|
#include "MainWindow.h" |
|
|
|
K_PLUGIN_CLASS_WITH_JSON(SSHManagerPlugin, "konsole_sshmanager.json") |
|
|
|
struct SSHManagerPluginPrivate { |
|
SSHManagerModel model; |
|
|
|
QMap<Konsole::MainWindow*, SSHManagerTreeWidget *> widgetForWindow; |
|
QMap<Konsole::MainWindow*, QDockWidget *> dockForWindow; |
|
}; |
|
|
|
SSHManagerPlugin::SSHManagerPlugin(QObject *object, const QVariantList &args) |
|
: Konsole::IKonsolePlugin(object, args) |
|
, d(std::make_unique<SSHManagerPluginPrivate>()) |
|
{ |
|
setName(QStringLiteral("SshManager")); |
|
} |
|
|
|
SSHManagerPlugin::~SSHManagerPlugin() = default; |
|
|
|
void SSHManagerPlugin::createWidgetsForMainWindow(Konsole::MainWindow *mainWindow) |
|
{ |
|
auto *sshDockWidget = new QDockWidget(mainWindow); |
|
auto *managerWidget = new SSHManagerTreeWidget(); |
|
managerWidget->setModel(&d->model); |
|
sshDockWidget->setWidget(managerWidget); |
|
sshDockWidget->setWindowTitle(i18n("SSH Manager")); |
|
sshDockWidget->setObjectName(QStringLiteral("SSHManagerDock")); |
|
sshDockWidget->setVisible(false); |
|
|
|
mainWindow->addDockWidget(Qt::LeftDockWidgetArea, sshDockWidget); |
|
|
|
d->widgetForWindow[mainWindow] = managerWidget; |
|
d->dockForWindow[mainWindow] = sshDockWidget; |
|
|
|
connect(managerWidget, &SSHManagerTreeWidget::requestNewTab, this, [mainWindow]{ |
|
mainWindow->newTab(); |
|
}); |
|
} |
|
|
|
QList<QAction *> SSHManagerPlugin::menuBarActions(Konsole::MainWindow* mainWindow) const |
|
{ |
|
Q_UNUSED(mainWindow); |
|
|
|
QAction *toggleVisibilityAction = new QAction(i18n("Show SSH Manager"), mainWindow); |
|
toggleVisibilityAction->setCheckable(true); |
|
|
|
connect(toggleVisibilityAction, &QAction::triggered, |
|
d->dockForWindow[mainWindow], &QDockWidget::setVisible); |
|
connect(d->dockForWindow[mainWindow], &QDockWidget::visibilityChanged, |
|
toggleVisibilityAction, &QAction::setChecked); |
|
|
|
return {toggleVisibilityAction}; |
|
} |
|
|
|
void SSHManagerPlugin::activeViewChanged(Konsole::SessionController *controller) |
|
{ |
|
auto mainWindow = qobject_cast<Konsole::MainWindow*>(controller->view()->topLevelWidget()); |
|
|
|
// if we don't get a mainwindow here this *might* be just opening, call it again |
|
// later on. |
|
if (!mainWindow) { |
|
QTimer::singleShot(500, this, [this, controller]{ activeViewChanged(controller); }); |
|
return; |
|
} |
|
|
|
d->widgetForWindow[mainWindow]->setCurrentController(controller); |
|
} |
|
|
|
#include "sshmanagerplugin.moc"
|
|
|