From d3333f9a18b683f941fcdce367c18407cf7bc3ee Mon Sep 17 00:00:00 2001 From: Urs Wolfer Date: Tue, 13 May 2008 21:50:07 +0000 Subject: [PATCH] Improve dockwidget and enabled it by default (bookmark part). Network part disabled for now because it is not ready yet. svn path=/trunk/KDE/kdenetwork/krdc/; revision=807463 --- mainwindow.cpp | 10 +++---- remotedesktopsitem.cpp | 5 ++++ remotedesktopsitem.h | 1 + remotedesktopsmodel.cpp | 66 ++++++++++++++++++++++++++++++++++++----- remotedesktopsmodel.h | 17 +++++++++++ 5 files changed, 87 insertions(+), 12 deletions(-) diff --git a/mainwindow.cpp b/mainwindow.cpp index bddafda..9fc559f 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -99,12 +99,14 @@ MainWindow::MainWindow(QWidget *parent) setCentralWidget(m_tabWidget); QDockWidget *remoteDesktopsDockWidget = new QDockWidget(this); - remoteDesktopsDockWidget->setObjectName("remoteDesktopsDockWidget"); - remoteDesktopsDockWidget->setWindowTitle("Remote desktops"); + remoteDesktopsDockWidget->setObjectName("remoteDesktopsDockWidget"); // required for saving position / state + remoteDesktopsDockWidget->setWindowTitle(i18n("Remote desktops")); actionCollection()->addAction("remote_desktop_dockwidget", remoteDesktopsDockWidget->toggleViewAction()); QTreeView *remoteDesktopsTreeView = new QTreeView(remoteDesktopsDockWidget); - remoteDesktopsTreeView->setModel(new RemoteDesktopsModel(this)); + RemoteDesktopsModel *remoteDesktopsModel = new RemoteDesktopsModel(this); + connect(remoteDesktopsModel, SIGNAL(modelReset()), remoteDesktopsTreeView, SLOT(expandAll())); + remoteDesktopsTreeView->setModel(remoteDesktopsModel); remoteDesktopsTreeView->header()->hide(); remoteDesktopsTreeView->expandAll(); connect(remoteDesktopsTreeView, SIGNAL(doubleClicked(const QModelIndex &)), @@ -133,8 +135,6 @@ MainWindow::MainWindow(QWidget *parent) if (Settings::rememberSessions()) // give some time to create and show the window first QTimer::singleShot(100, this, SLOT(restoreOpenSessions())); - - remoteDesktopsDockWidget->setVisible(false); //TODO: remove when fully implemented } MainWindow::~MainWindow() diff --git a/remotedesktopsitem.cpp b/remotedesktopsitem.cpp index 72e3133..5a8a7cf 100644 --- a/remotedesktopsitem.cpp +++ b/remotedesktopsitem.cpp @@ -73,3 +73,8 @@ int RemoteDesktopsItem::row() const return 0; } + +void RemoteDesktopsItem::clearChildren() +{ + childItems.clear(); +} diff --git a/remotedesktopsitem.h b/remotedesktopsitem.h index 25e1321..a3e918d 100644 --- a/remotedesktopsitem.h +++ b/remotedesktopsitem.h @@ -41,6 +41,7 @@ public: QVariant data(int column) const; int row() const; RemoteDesktopsItem *parent(); + void clearChildren(); private: QList childItems; diff --git a/remotedesktopsmodel.cpp b/remotedesktopsmodel.cpp index bd5b3da..03a7679 100644 --- a/remotedesktopsmodel.cpp +++ b/remotedesktopsmodel.cpp @@ -29,32 +29,44 @@ #include #include #include +#include +#include RemoteDesktopsModel::RemoteDesktopsModel(QObject *parent) : QAbstractItemModel(parent) { - QList rootData; - rootData << "Remote desktops"; - rootItem = new RemoteDesktopsItem(rootData); + rootItem = new RemoteDesktopsItem(QList() << "Remote desktops"); QString file = KStandardDirs::locateLocal("data", "krdc/bookmarks.xml"); m_manager = KBookmarkManager::managerForFile(file, "krdc"); - m_manager->setUpdate(true); + connect(m_manager, SIGNAL(changed(const QString &, const QString &)), SLOT(changed())); buildModelFromBookmarkGroup(m_manager->root(), rootItem); - RemoteDesktopsItem *localNetwork = new RemoteDesktopsItem(QList() << "Local Network", rootItem); +#if 0 + localNetworkItem = new RemoteDesktopsItem(QList() << "Local Network", rootItem); + rootItem->appendChild(localNetworkItem); + + scanLocalNetwork(); - rootItem->appendChild(localNetwork); - localNetwork->appendChild(new RemoteDesktopsItem(QList() << "...", localNetwork)); + localNetworkItem->appendChild(new RemoteDesktopsItem(QList() << "...", localNetworkItem)); +#endif } RemoteDesktopsModel::~RemoteDesktopsModel() { } +void RemoteDesktopsModel::changed() +{ + kDebug(5010); + rootItem->clearChildren(); + buildModelFromBookmarkGroup(m_manager->root(), rootItem); + reset(); +} + int RemoteDesktopsModel::columnCount(const QModelIndex &parent) const { if (parent.isValid()) @@ -76,8 +88,10 @@ QVariant RemoteDesktopsModel::data(const QModelIndex &index, int role) const case Qt::DecorationRole: if (item->data(index.column()).toString().contains("://")) //TODO: clean impl return KIcon("krdc"); +#if 0 else if (item->data(index.column()).toString() == "Local Network") //TODO: clean impl return KIcon("network-workgroup"); +#endif else if (item->data(index.column()).toString() == "...") //TODO: clean impl return KIcon("view-history"); else @@ -165,4 +179,42 @@ void RemoteDesktopsModel::buildModelFromBookmarkGroup(const KBookmarkGroup &grou } } +#if 0 +void RemoteDesktopsModel::scanLocalNetwork() +{ + m_scanProcess = new KProcess(this); + m_scanProcess->setOutputChannelMode(KProcess::SeparateChannels); + QStringList args(QStringList() << "-vv" << "-PN" << "-p5901" << "192.168.1.0-255"); + connect(m_scanProcess, SIGNAL(readyReadStandardOutput()), + SLOT(readInput())); + m_scanProcess->setProgram("nmap", args); + m_scanProcess->start(); +} + +void RemoteDesktopsModel::readInput() +{ + // we do not know if the output array ends in the middle of an utf-8 sequence + m_output += m_scanProcess->readAllStandardOutput(); + + int pos; + while ((pos = m_output.indexOf('\n')) != -1) { + QString line = QString::fromLocal8Bit(m_output, pos + 1); + m_output.remove(0, pos + 1); + + if (line.contains("open port")) { + kDebug(5010) << line; + + QString ip(line.mid(line.lastIndexOf(' ') + 1)); + ip = ip.left(ip.length() - 1); + + QString port(line.left(line.indexOf('/'))); + port = port.mid(port.lastIndexOf(' ') + 1); + RemoteDesktopsItem *item = new RemoteDesktopsItem(QList() << "vnc://" + ip + ':' + port, localNetworkItem); + localNetworkItem->appendChild(item); + emit dataChanged(QModelIndex(), QModelIndex()); + } + } +} +#endif + #include "remotedesktopsmodel.moc" diff --git a/remotedesktopsmodel.h b/remotedesktopsmodel.h index 44d5bd3..2f8306f 100644 --- a/remotedesktopsmodel.h +++ b/remotedesktopsmodel.h @@ -30,6 +30,9 @@ class KBookmarkGroup; class KBookmarkManager; class RemoteDesktopsItem; +class KProcess; +class QByteArray; + class RemoteDesktopsModel : public QAbstractItemModel { Q_OBJECT @@ -50,9 +53,23 @@ public: private: void buildModelFromBookmarkGroup(const KBookmarkGroup &group, RemoteDesktopsItem *item); + void scanLocalNetwork(); KBookmarkManager *m_manager; RemoteDesktopsItem *rootItem; +#if 0 + RemoteDesktopsItem *localNetworkItem; + + KProcess *m_scanProcess; + QString m_strBt; + QByteArray m_output; +#endif + +private slots: + void changed(); +#if 0 + void readInput(); +#endif }; #endif -- GitLab