diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoremoteprocessesdialog.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemoremoteprocessesdialog.cpp new file mode 100644 index 0000000000000000000000000000000000000000..a2b45dd0b4cb6ba749299ada4e0cae6613182e95 --- /dev/null +++ b/src/plugins/qt4projectmanager/qt-maemo/maemoremoteprocessesdialog.cpp @@ -0,0 +1,130 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of Qt Creator. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "maemoremoteprocessesdialog.h" +#include "ui_maemoremoteprocessesdialog.h" + +#include "maemoremoteprocesslist.h" + +#include <QtGui/QMessageBox> +#include <QtGui/QSortFilterProxyModel> + +namespace Qt4ProjectManager { +namespace Internal { + +MaemoRemoteProcessesDialog::MaemoRemoteProcessesDialog(const Core::SshConnectionParameters ¶ms, + QWidget *parent) : + QDialog(parent), + m_ui(new Ui::MaemoRemoteProcessesDialog), + m_processList(new MaemoRemoteProcessList(params, this)), + m_proxyModel(new QSortFilterProxyModel(this)) +{ + m_ui->setupUi(this); + m_ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows); + m_proxyModel->setSourceModel(m_processList); + m_proxyModel->setDynamicSortFilter(true); + m_ui->tableView->setModel(m_proxyModel); + connect(m_ui->tableView->selectionModel(), + SIGNAL(selectionChanged(QItemSelection,QItemSelection)), + SLOT(handleSelectionChanged())); + connect(m_ui->updateListButton, SIGNAL(clicked()), + SLOT(updateProcessList())); + connect(m_ui->killProcessButton, SIGNAL(clicked()), SLOT(killProcess())); + connect(m_processList, SIGNAL(error(QString)), + SLOT(handleRemoteError(QString))); + connect(m_processList, SIGNAL(modelReset()), + SLOT(handleProcessListUpdated())); + connect(m_processList, SIGNAL(processKilled()), + SLOT(handleProcessKilled()), Qt::QueuedConnection); + connect(m_proxyModel, SIGNAL(layoutChanged()), + SLOT(handleProcessListUpdated())); + handleSelectionChanged(); + updateProcessList(); +} + +MaemoRemoteProcessesDialog::~MaemoRemoteProcessesDialog() +{ + delete m_ui; +} + +void MaemoRemoteProcessesDialog::handleRemoteError(const QString &errorMsg) +{ + QMessageBox::critical(this, tr("Remote error"), errorMsg); + m_ui->updateListButton->setEnabled(true); + handleSelectionChanged(); +} + +void MaemoRemoteProcessesDialog::handleProcessListUpdated() +{ + m_ui->updateListButton->setEnabled(true); + m_ui->tableView->resizeRowsToContents(); + handleSelectionChanged(); +} + +void MaemoRemoteProcessesDialog::updateProcessList() +{ + m_ui->updateListButton->setEnabled(false); + m_ui->killProcessButton->setEnabled(false); + m_processList->update(); +} + +void MaemoRemoteProcessesDialog::killProcess() +{ + const QModelIndexList &indexes + = m_ui->tableView->selectionModel()->selectedIndexes(); + if (indexes.empty()) + return; + m_ui->updateListButton->setEnabled(false); + m_ui->killProcessButton->setEnabled(false); + m_processList->killProcess(m_proxyModel->mapToSource(indexes.first()).row()); +} + +void MaemoRemoteProcessesDialog::handleProcessKilled() +{ + updateProcessList(); +} + +void MaemoRemoteProcessesDialog::handleSelectionChanged() +{ + m_ui->killProcessButton->setEnabled(m_ui->tableView->selectionModel()->hasSelection()); +} + +} // namespace Internal +} // namespace Qt4ProjectManager diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoremoteprocessesdialog.h b/src/plugins/qt4projectmanager/qt-maemo/maemoremoteprocessesdialog.h new file mode 100644 index 0000000000000000000000000000000000000000..b0ad6c01d58cb0a8f298b115e769fac8e308c979 --- /dev/null +++ b/src/plugins/qt4projectmanager/qt-maemo/maemoremoteprocessesdialog.h @@ -0,0 +1,85 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of Qt Creator. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef MAEMOREMOTEPROCESSDIALOG_H +#define MAEMOREMOTEPROCESSDIALOG_H + +#include <QtGui/QDialog> + +QT_BEGIN_NAMESPACE +namespace Ui { + class MaemoRemoteProcessesDialog; +} +class QSortFilterProxyModel; +QT_END_NAMESPACE + +namespace Core { class SshConnectionParameters; } + +namespace Qt4ProjectManager { +namespace Internal { +class MaemoRemoteProcessList; + +class MaemoRemoteProcessesDialog : public QDialog +{ + Q_OBJECT + +public: + explicit MaemoRemoteProcessesDialog(const Core::SshConnectionParameters ¶ms, + QWidget *parent = 0); + ~MaemoRemoteProcessesDialog(); + +private slots: + void updateProcessList(); + void killProcess(); + void handleRemoteError(const QString &errorMsg); + void handleProcessListUpdated(); + void handleProcessKilled(); + void handleSelectionChanged(); + +private: + Ui::MaemoRemoteProcessesDialog *m_ui; + MaemoRemoteProcessList *const m_processList; + QSortFilterProxyModel *const m_proxyModel; +}; + +} // namespace Internal +} // namespace Qt4ProjectManager + +#endif // MAEMOREMOTEPROCESSDIALOG_H diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoremoteprocessesdialog.ui b/src/plugins/qt4projectmanager/qt-maemo/maemoremoteprocessesdialog.ui new file mode 100644 index 0000000000000000000000000000000000000000..6b02f228e7a7d92d1dd3f4eb0d849f446a8165aa --- /dev/null +++ b/src/plugins/qt4projectmanager/qt-maemo/maemoremoteprocessesdialog.ui @@ -0,0 +1,125 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>MaemoRemoteProcessesDialog</class> + <widget class="QDialog" name="MaemoRemoteProcessesDialog"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>766</width> + <height>684</height> + </rect> + </property> + <property name="windowTitle"> + <string>Dialog</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <item> + <widget class="QLabel" name="label"> + <property name="text"> + <string>Processes running on remote host:</string> + </property> + </widget> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QTableView" name="tableView"> + <property name="showGrid"> + <bool>false</bool> + </property> + <property name="sortingEnabled"> + <bool>true</bool> + </property> + <attribute name="horizontalHeaderDefaultSectionSize"> + <number>100</number> + </attribute> + <attribute name="horizontalHeaderStretchLastSection"> + <bool>true</bool> + </attribute> + <attribute name="verticalHeaderVisible"> + <bool>false</bool> + </attribute> + </widget> + </item> + <item> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QPushButton" name="updateListButton"> + <property name="text"> + <string>Update List</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="killProcessButton"> + <property name="text"> + <string>Kill Selected Process</string> + </property> + </widget> + </item> + <item> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + </layout> + </item> + <item> + <widget class="QDialogButtonBox" name="buttonBox"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="standardButtons"> + <set>QDialogButtonBox::Close</set> + </property> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections> + <connection> + <sender>buttonBox</sender> + <signal>accepted()</signal> + <receiver>MaemoRemoteProcessesDialog</receiver> + <slot>accept()</slot> + <hints> + <hint type="sourcelabel"> + <x>257</x> + <y>290</y> + </hint> + <hint type="destinationlabel"> + <x>157</x> + <y>274</y> + </hint> + </hints> + </connection> + <connection> + <sender>buttonBox</sender> + <signal>rejected()</signal> + <receiver>MaemoRemoteProcessesDialog</receiver> + <slot>reject()</slot> + <hints> + <hint type="sourcelabel"> + <x>316</x> + <y>260</y> + </hint> + <hint type="destinationlabel"> + <x>286</x> + <y>274</y> + </hint> + </hints> + </connection> + </connections> +</ui> diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoremoteprocesslist.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemoremoteprocesslist.cpp new file mode 100644 index 0000000000000000000000000000000000000000..212b6ae5f63bf17e11cc4c394d2d9f1328bedb74 --- /dev/null +++ b/src/plugins/qt4projectmanager/qt-maemo/maemoremoteprocesslist.cpp @@ -0,0 +1,248 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of Qt Creator. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "maemoremoteprocesslist.h" + +#include <coreplugin/ssh/sshremoteprocessrunner.h> + +#include <QtCore/QStringList> + +using namespace Core; + +namespace Qt4ProjectManager { +namespace Internal { +namespace { +const QByteArray LineSeparator1("---"); +const QByteArray LineSeparator2("QTCENDOFLINE---"); +const QByteArray LineSeparator = LineSeparator1 + LineSeparator2; +} // anonymous namespace + +MaemoRemoteProcessList::MaemoRemoteProcessList(const Core::SshConnectionParameters ¶ms, + QObject *parent) + : QAbstractTableModel(parent), + m_process(SshRemoteProcessRunner::create(params)), + m_state(Inactive) +{ +} + +MaemoRemoteProcessList::~MaemoRemoteProcessList() {} + +void MaemoRemoteProcessList::update() +{ + if (m_state != Inactive) { + qDebug("%s: Did not expect state to be %d.", Q_FUNC_INFO, m_state); + stop(); + } + beginResetModel(); + m_remoteProcs.clear(); + const QByteArray command = QByteArray() + + "sep1=" + LineSeparator1 + '\n' + + "sep2=" + LineSeparator2 + '\n' + + "pidlist=`ls /proc |grep -E '^[[:digit:]]+$' |sort -n`; " + + "for pid in $pidlist\n" + + "do\n" + + " echo -n \"$pid \"\n" + + " tr '\\0' ' ' < /proc/$pid/cmdline\n" + + " echo -n \"$sep1$sep2\"\n" + + "done\n" + + "echo ''"; + startProcess(command, Listing); +} + +void MaemoRemoteProcessList::killProcess(int row) +{ + Q_ASSERT(row >= 0 && row < m_remoteProcs.count()); + const QByteArray command + = "kill -9 " + QByteArray::number(m_remoteProcs.at(row).pid); + startProcess(command, Killing); +} + +void MaemoRemoteProcessList::startProcess(const QByteArray &cmdLine, + State newState) +{ + if (m_state != Inactive) { + qDebug("%s: Did not expect state to be %d.", Q_FUNC_INFO, m_state); + stop(); + } + m_state = newState; + connect(m_process.data(), SIGNAL(connectionError(Core::SshError)), + SLOT(handleConnectionError())); + connect(m_process.data(), SIGNAL(processOutputAvailable(QByteArray)), + SLOT(handleRemoteStdOut(QByteArray))); + connect(m_process.data(), + SIGNAL(processErrorOutputAvailable(QByteArray)), + SLOT(handleRemoteStdErr(QByteArray))); + connect(m_process.data(), SIGNAL(processClosed(int)), + SLOT(handleRemoteProcessFinished(int))); + m_remoteStdout.clear(); + m_remoteStderr.clear(); + m_errorMsg.clear(); + m_process->run(cmdLine); +} + +void MaemoRemoteProcessList::handleConnectionError() +{ + if (m_state == Inactive) + return; + + emit error(tr("Connection failure: %1") + .arg(m_process->connection()->errorString())); + stop(); +} + +void MaemoRemoteProcessList::handleRemoteStdOut(const QByteArray &output) +{ + if (m_state == Listing) + m_remoteStdout += output; +} + +void MaemoRemoteProcessList::handleRemoteStdErr(const QByteArray &output) +{ + if (m_state != Inactive) + m_remoteStderr += output; +} + +void MaemoRemoteProcessList::handleRemoteProcessFinished(int exitStatus) +{ + if (m_state == Inactive) + return; + + switch (exitStatus) { + case SshRemoteProcess::FailedToStart: + m_errorMsg = tr("Error: Remote process failed to start: %1") + .arg(m_process->process()->errorString()); + break; + case SshRemoteProcess::KilledBySignal: + m_errorMsg = tr("Error: Remote process crashed: %1") + .arg(m_process->process()->errorString()); + break; + case SshRemoteProcess::ExitedNormally: + if (m_process->process()->exitCode() == 0) { + if (m_state == Listing) + buildProcessList(); + } else { + m_errorMsg = tr("Remote process failed."); + } + break; + default: + Q_ASSERT_X(false, Q_FUNC_INFO, "Invalid exit status"); + } + + if (!m_errorMsg.isEmpty()) { + if (!m_remoteStderr.isEmpty()) { + m_errorMsg += tr("\nRemote stderr was: %1") + .arg(QString::fromUtf8(m_remoteStderr)); + } + emit error(m_errorMsg); + } + stop(); +} + +void MaemoRemoteProcessList::stop() +{ + if (m_state == Inactive) + return; + + disconnect(m_process.data(), 0, this, 0); + if (m_state == Listing) + endResetModel(); + else if (m_errorMsg.isEmpty()) + emit processKilled(); + m_state = Inactive; +} + +void MaemoRemoteProcessList::buildProcessList() +{ + const QString remoteOutput = QString::fromUtf8(m_remoteStdout); + const QStringList &lines + = remoteOutput.split(QString::fromUtf8(LineSeparator)); + foreach (const QString &line, lines) { + const int pidEndPos = line.indexOf(' '); + if (pidEndPos == -1) + continue; + bool isNumber; + const int pid = line.left(pidEndPos).toInt(&isNumber); + if (!isNumber) { + qDebug("%s: Non-integer value where pid was expected. Line was: '%s'", + Q_FUNC_INFO, qPrintable(line)); + continue; + } + m_remoteProcs << RemoteProc(pid, line.mid(pidEndPos)); + } +} + +int MaemoRemoteProcessList::rowCount(const QModelIndex &parent) const +{ + return parent.isValid() ? 0 : m_remoteProcs.count(); +} + +int MaemoRemoteProcessList::columnCount(const QModelIndex &parent) const +{ + Q_UNUSED(parent); + return 2; +} + +QVariant MaemoRemoteProcessList::headerData(int section, + Qt::Orientation orientation, int role) const +{ + if (orientation != Qt::Horizontal || role != Qt::DisplayRole + || section < 0 || section >= columnCount()) + return QVariant(); + if (section == 0) + return tr("PID"); + else + return tr("Command Line"); +} + +QVariant MaemoRemoteProcessList::data(const QModelIndex &index, int role) const +{ + if (!index.isValid() || index.row() >= rowCount(index.parent()) + || index.column() >= columnCount() || role != Qt::DisplayRole) + return QVariant(); + const RemoteProc &proc = m_remoteProcs.at(index.row()); + if (index.column() == 0) + return proc.pid; + else + return proc.cmdLine; +} + +} // namespace Internal +} // namespace Qt4ProjectManager diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoremoteprocesslist.h b/src/plugins/qt4projectmanager/qt-maemo/maemoremoteprocesslist.h new file mode 100644 index 0000000000000000000000000000000000000000..c524e4d5af7e868f9754ca200a1ff5e7b3f96150 --- /dev/null +++ b/src/plugins/qt4projectmanager/qt-maemo/maemoremoteprocesslist.h @@ -0,0 +1,111 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of Qt Creator. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MAEMOREMOTEPROCESSLIST_H +#define MAEMOREMOTEPROCESSLIST_H + +#include <QtCore/QAbstractTableModel> +#include <QtCore/QByteArray> +#include <QtCore/QList> +#include <QtCore/QSharedPointer> +#include <QtCore/QString> + +namespace Core { +class SshConnectionParameters; +class SshRemoteProcessRunner; +} + +namespace Qt4ProjectManager { +namespace Internal { + +class MaemoRemoteProcessList : public QAbstractTableModel +{ + Q_OBJECT +public: + explicit MaemoRemoteProcessList(const Core::SshConnectionParameters ¶ms, + QObject *parent = 0); + ~MaemoRemoteProcessList(); + void update(); + void killProcess(int row); + +signals: + void error(const QString &errorMsg); + void processKilled(); + +private slots: + void handleRemoteStdOut(const QByteArray &output); + void handleRemoteStdErr(const QByteArray &output); + void handleConnectionError(); + void handleRemoteProcessFinished(int exitStatus); + +private: + enum State { Inactive, Listing, Killing }; + + virtual int rowCount(const QModelIndex &parent = QModelIndex()) const; + virtual int columnCount(const QModelIndex &parent = QModelIndex()) const; + virtual QVariant data(const QModelIndex &index, + int role = Qt::DisplayRole) const; + virtual QVariant headerData(int section, Qt::Orientation orientation, + int role = Qt::DisplayRole) const; + + void buildProcessList(); + void stop(); + void startProcess(const QByteArray &cmdLine, State newState); + + const QSharedPointer<Core::SshRemoteProcessRunner> m_process; + QByteArray m_remoteStdout; + QByteArray m_remoteStderr; + QString m_errorMsg; + State m_state; + + struct RemoteProc { + RemoteProc(int pid, const QString &cmdLine) + : pid(pid), cmdLine(cmdLine) {} + int pid; + QString cmdLine; + }; + QList<RemoteProc> m_remoteProcs; +}; + +} // namespace Internal +} // namespace Qt4ProjectManager + +#endif // MAEMOREMOTEPROCESSLIST_H diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemosettingswidget.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemosettingswidget.cpp index bef307b311aa51f6b2022e7af9fa6500b407ae42..ed3c933abb397c402e8d2fe6655c4b2f13054229 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemosettingswidget.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemosettingswidget.cpp @@ -38,6 +38,7 @@ #include "maemoconfigtestdialog.h" #include "maemodeviceconfigurations.h" +#include "maemoremoteprocessesdialog.h" #include "maemosshconfigdialog.h" #include <coreplugin/ssh/sshremoteprocessrunner.h> @@ -342,6 +343,12 @@ void MaemoSettingsWidget::showGenerateSshKeyDialog() dialog.exec(); } +void MaemoSettingsWidget::showRemoteProcesses() +{ + MaemoRemoteProcessesDialog dlg(currentConfig().server, this); + dlg.exec(); +} + void MaemoSettingsWidget::setPrivateKey(const QString &path) { m_ui->keyFileLineEdit->setPath(path); diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemosettingswidget.h b/src/plugins/qt4projectmanager/qt-maemo/maemosettingswidget.h index 344cbbc196fe915e6221a5bd3bd20ad9eb25a9d6..09b49d541962aea6952efc8870cd9bf542bc2e57 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemosettingswidget.h +++ b/src/plugins/qt4projectmanager/qt-maemo/maemosettingswidget.h @@ -82,6 +82,7 @@ private slots: void keyFileEditingFinished(); void showPassword(bool showClearText); void handleFreePortsChanged(); + void showRemoteProcesses(); // For configuration testing. void testConfig(); diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemosettingswidget.ui b/src/plugins/qt4projectmanager/qt-maemo/maemosettingswidget.ui index b2f03d3e7632a65a450e1a0674f71fd73a042794..c5f3ba88fd4b97b8322ae65e512fda4031a2cf4a 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemosettingswidget.ui +++ b/src/plugins/qt4projectmanager/qt-maemo/maemosettingswidget.ui @@ -368,6 +368,13 @@ </property> </widget> </item> + <item> + <widget class="QPushButton" name="remoteProcessesButton"> + <property name="text"> + <string>Remote Processes ...</string> + </property> + </widget> + </item> <item> <spacer name="verticalSpacer"> <property name="orientation"> @@ -438,7 +445,7 @@ <slot>userNameEditingFinished()</slot> <hints> <hint type="sourcelabel"> - <x>425</x> + <x>384</x> <y>302</y> </hint> <hint type="destinationlabel"> @@ -454,7 +461,7 @@ <slot>passwordEditingFinished()</slot> <hints> <hint type="sourcelabel"> - <x>297</x> + <x>256</x> <y>334</y> </hint> <hint type="destinationlabel"> @@ -534,7 +541,7 @@ <slot>keyFileEditingFinished()</slot> <hints> <hint type="sourcelabel"> - <x>425</x> + <x>384</x> <y>356</y> </hint> <hint type="destinationlabel"> @@ -550,7 +557,7 @@ <slot>keyFileEditingFinished()</slot> <hints> <hint type="sourcelabel"> - <x>425</x> + <x>384</x> <y>356</y> </hint> <hint type="destinationlabel"> @@ -710,7 +717,7 @@ <slot>showPassword(bool)</slot> <hints> <hint type="sourcelabel"> - <x>424</x> + <x>383</x> <y>332</y> </hint> <hint type="destinationlabel"> @@ -735,6 +742,22 @@ </hint> </hints> </connection> + <connection> + <sender>remoteProcessesButton</sender> + <signal>clicked()</signal> + <receiver>MaemoSettingsWidget</receiver> + <slot>showRemoteProcesses()</slot> + <hints> + <hint type="sourcelabel"> + <x>443</x> + <y>183</y> + </hint> + <hint type="destinationlabel"> + <x>598</x> + <y>378</y> + </hint> + </hints> + </connection> </connections> <slots> <slot>configNameEditingFinished()</slot> @@ -756,5 +779,6 @@ <slot>showGenerateSshKeyDialog()</slot> <slot>showPassword(bool)</slot> <slot>handleFreePortsChanged()</slot> + <slot>showRemoteProcesses()</slot> </slots> </ui> diff --git a/src/plugins/qt4projectmanager/qt-maemo/qt-maemo.pri b/src/plugins/qt4projectmanager/qt-maemo/qt-maemo.pri index d6869e1b08dfac83f7effefc803684ee741900a7..ddf9f5723c730ab33a6195a5ef17e88b0a8bac9b 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/qt-maemo.pri +++ b/src/plugins/qt4projectmanager/qt-maemo/qt-maemo.pri @@ -32,7 +32,9 @@ HEADERS += \ $$PWD/maemomountspecification.h \ $$PWD/maemoremotemounter.h \ $$PWD/maemoprofilesupdatedialog.h \ - $$PWD/maemousedportsgatherer.h + $$PWD/maemousedportsgatherer.h \ + $$PWD/maemoremoteprocesslist.h \ + $$PWD/maemoremoteprocessesdialog.h SOURCES += \ $$PWD/maemoconfigtestdialog.cpp \ @@ -66,7 +68,9 @@ SOURCES += \ $$PWD/maemomountspecification.cpp \ $$PWD/maemoremotemounter.cpp \ $$PWD/maemoprofilesupdatedialog.cpp \ - $$PWD/maemousedportsgatherer.cpp + $$PWD/maemousedportsgatherer.cpp \ + $$PWD/maemoremoteprocesslist.cpp \ + $$PWD/maemoremoteprocessesdialog.cpp FORMS += \ $$PWD/maemoconfigtestdialog.ui \ @@ -74,6 +78,7 @@ FORMS += \ $$PWD/maemosshconfigdialog.ui \ $$PWD/maemopackagecreationwidget.ui \ $$PWD/maemodeploystepwidget.ui \ - $$PWD/maemoprofilesupdatedialog.ui + $$PWD/maemoprofilesupdatedialog.ui \ + $$PWD/maemoremoteprocessesdialog.ui RESOURCES += $$PWD/qt-maemo.qrc