diff --git a/src/plugins/madde/maddedeviceconfigurationfactory.cpp b/src/plugins/madde/maddedeviceconfigurationfactory.cpp index 5e9db12ff43bd547fb6271cba66b35c2d546c898..e7e3cdfafcce858745d7d045e896d2b57a5d5599 100644 --- a/src/plugins/madde/maddedeviceconfigurationfactory.cpp +++ b/src/plugins/madde/maddedeviceconfigurationfactory.cpp @@ -40,6 +40,7 @@ #include <remotelinux/remotelinuxprocessesdialog.h> #include <remotelinux/remotelinuxprocesslist.h> #include <remotelinux/remotelinux_constants.h> +#include <remotelinux/genericlinuxdeviceconfigurationwidget.h> #include <utils/qtcassert.h> using namespace RemoteLinux; @@ -66,6 +67,13 @@ ILinuxDeviceConfigurationWizard *MaddeDeviceConfigurationFactory::createWizard(Q return new MaemoDeviceConfigWizard(parent); } +ILinuxDeviceConfigurationWidget *MaddeDeviceConfigurationFactory::createWidget( + const LinuxDeviceConfiguration::Ptr &deviceConfig, + QWidget *parent) const +{ + return new GenericLinuxDeviceConfigurationWidget(deviceConfig, parent); +} + bool MaddeDeviceConfigurationFactory::supportsOsType(const QString &osType) const { return osType == QLatin1String(Maemo5OsType) || osType == QLatin1String(HarmattanOsType) diff --git a/src/plugins/madde/maddedeviceconfigurationfactory.h b/src/plugins/madde/maddedeviceconfigurationfactory.h index 0e988680a9683ff4070d19c0a69751c25b57663d..b07bbd74ea0eefd26c05dcd4149ab5ec6ae93914 100644 --- a/src/plugins/madde/maddedeviceconfigurationfactory.h +++ b/src/plugins/madde/maddedeviceconfigurationfactory.h @@ -45,6 +45,9 @@ public: QString displayName() const; RemoteLinux::ILinuxDeviceConfigurationWizard *createWizard(QWidget *parent) const; + RemoteLinux::ILinuxDeviceConfigurationWidget *createWidget( + const RemoteLinux::LinuxDeviceConfiguration::Ptr &deviceConfig, + QWidget *parent = 0) const; bool supportsOsType(const QString &osType) const; QString displayNameForOsType(const QString &osType) const; QStringList supportedDeviceActionIds() const; diff --git a/src/plugins/remotelinux/genericlinuxdeviceconfigurationfactory.cpp b/src/plugins/remotelinux/genericlinuxdeviceconfigurationfactory.cpp index b39de70be7d284e4346c0a9621ab095b9c8b619d..0c7865199ceb196bb460e7e855dc12f760fd38cf 100644 --- a/src/plugins/remotelinux/genericlinuxdeviceconfigurationfactory.cpp +++ b/src/plugins/remotelinux/genericlinuxdeviceconfigurationfactory.cpp @@ -32,6 +32,7 @@ #include "genericlinuxdeviceconfigurationfactory.h" #include "genericlinuxdeviceconfigurationwizard.h" +#include "genericlinuxdeviceconfigurationwidget.h" #include "linuxdevicetestdialog.h" #include "publickeydeploymentdialog.h" #include "remotelinuxprocessesdialog.h" @@ -57,6 +58,13 @@ ILinuxDeviceConfigurationWizard *GenericLinuxDeviceConfigurationFactory::createW return new GenericLinuxDeviceConfigurationWizard(parent); } +ILinuxDeviceConfigurationWidget *GenericLinuxDeviceConfigurationFactory::createWidget( + const LinuxDeviceConfiguration::Ptr &deviceConfig, + QWidget *parent) const +{ + return new GenericLinuxDeviceConfigurationWidget(deviceConfig, parent); +} + bool GenericLinuxDeviceConfigurationFactory::supportsOsType(const QString &osType) const { return osType == QLatin1String(Constants::GenericLinuxOsType); diff --git a/src/plugins/remotelinux/genericlinuxdeviceconfigurationfactory.h b/src/plugins/remotelinux/genericlinuxdeviceconfigurationfactory.h index 0a461891df823730c491a676cfe17501a98d2a95..24b4400b2f121094dc7074c408a772b3c5ef2f12 100644 --- a/src/plugins/remotelinux/genericlinuxdeviceconfigurationfactory.h +++ b/src/plugins/remotelinux/genericlinuxdeviceconfigurationfactory.h @@ -47,6 +47,9 @@ public: QString displayName() const; ILinuxDeviceConfigurationWizard *createWizard(QWidget *parent) const; + ILinuxDeviceConfigurationWidget *createWidget( + const LinuxDeviceConfiguration::Ptr &deviceConfig, + QWidget *parent = 0) const; bool supportsOsType(const QString &osType) const; QString displayNameForOsType(const QString &osType) const; QStringList supportedDeviceActionIds() const; diff --git a/src/plugins/remotelinux/genericlinuxdeviceconfigurationwidget.cpp b/src/plugins/remotelinux/genericlinuxdeviceconfigurationwidget.cpp new file mode 100644 index 0000000000000000000000000000000000000000..bbb32d03eac77b35bab5be0944c7569e1c1822a8 --- /dev/null +++ b/src/plugins/remotelinux/genericlinuxdeviceconfigurationwidget.cpp @@ -0,0 +1,189 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2012 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** GNU Lesser General Public License Usage +** +** 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. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +**************************************************************************/ + +#include "genericlinuxdeviceconfigurationwidget.h" +#include "ui_genericlinuxdeviceconfigurationwidget.h" + +#include <remotelinux/portlist.h> +#include <remotelinux/linuxdeviceconfigurations.h> + +#include <utils/ssh/sshconnection.h> + +#include <QTextStream> + +using namespace RemoteLinux; + +GenericLinuxDeviceConfigurationWidget::GenericLinuxDeviceConfigurationWidget( + const LinuxDeviceConfiguration::Ptr &deviceConfig, + QWidget *parent) : + ILinuxDeviceConfigurationWidget(deviceConfig, parent), + m_ui(new Ui::GenericLinuxDeviceConfigurationWidget) +{ + m_ui->setupUi(this); + connect(m_ui->hostLineEdit, SIGNAL(editingFinished()), this, SLOT(hostNameEditingFinished())); + connect(m_ui->userLineEdit, SIGNAL(editingFinished()), this, SLOT(userNameEditingFinished())); + connect(m_ui->pwdLineEdit, SIGNAL(editingFinished()), this, SLOT(passwordEditingFinished())); + connect(m_ui->passwordButton, SIGNAL(toggled(bool)), this, SLOT(authenticationTypeChanged())); + connect(m_ui->keyFileLineEdit, SIGNAL(editingFinished()), this, SLOT(keyFileEditingFinished())); + connect(m_ui->keyFileLineEdit, SIGNAL(browsingFinished()), this, SLOT(keyFileEditingFinished())); + connect(m_ui->keyButton, SIGNAL(toggled(bool)), this, SLOT(authenticationTypeChanged())); + connect(m_ui->timeoutSpinBox, SIGNAL(editingFinished()), this, SLOT(timeoutEditingFinished())); + connect(m_ui->timeoutSpinBox, SIGNAL(valueChanged(int)), this, SLOT(timeoutEditingFinished())); + connect(m_ui->sshPortSpinBox, SIGNAL(editingFinished()), this, SLOT(sshPortEditingFinished())); + connect(m_ui->sshPortSpinBox, SIGNAL(valueChanged(int)), this, SLOT(sshPortEditingFinished())); + connect(m_ui->showPasswordCheckBox, SIGNAL(toggled(bool)), this, SLOT(showPassword(bool))); + connect(m_ui->portsLineEdit, SIGNAL(editingFinished()), this, SLOT(handleFreePortsChanged())); + connect(m_ui->makeKeyFileDefaultButton, SIGNAL(clicked()), SLOT(setDefaultKeyFilePath())); + + initGui(); +} + +GenericLinuxDeviceConfigurationWidget::~GenericLinuxDeviceConfigurationWidget() +{ + delete m_ui; +} + +void GenericLinuxDeviceConfigurationWidget::authenticationTypeChanged() +{ + Utils::SshConnectionParameters sshParams = deviceConfiguration()->sshParameters(); + const bool usePassword = m_ui->passwordButton->isChecked(); + sshParams.authenticationType = usePassword + ? Utils::SshConnectionParameters::AuthenticationByPassword + : Utils::SshConnectionParameters::AuthenticationByKey; + deviceConfiguration()->setSshParameters(sshParams); + m_ui->pwdLineEdit->setEnabled(usePassword); + m_ui->passwordLabel->setEnabled(usePassword); + m_ui->keyFileLineEdit->setEnabled(!usePassword); + m_ui->keyLabel->setEnabled(!usePassword); + m_ui->makeKeyFileDefaultButton->setEnabled(!usePassword); +} + +void GenericLinuxDeviceConfigurationWidget::hostNameEditingFinished() +{ + Utils::SshConnectionParameters sshParams = deviceConfiguration()->sshParameters(); + sshParams.host = m_ui->hostLineEdit->text(); + deviceConfiguration()->setSshParameters(sshParams); +} + +void GenericLinuxDeviceConfigurationWidget::sshPortEditingFinished() +{ + Utils::SshConnectionParameters sshParams = deviceConfiguration()->sshParameters(); + sshParams.port = m_ui->sshPortSpinBox->value(); + deviceConfiguration()->setSshParameters(sshParams); +} + +void GenericLinuxDeviceConfigurationWidget::timeoutEditingFinished() +{ + Utils::SshConnectionParameters sshParams = deviceConfiguration()->sshParameters(); + sshParams.timeout = m_ui->timeoutSpinBox->value(); + deviceConfiguration()->setSshParameters(sshParams); +} + +void GenericLinuxDeviceConfigurationWidget::userNameEditingFinished() +{ + Utils::SshConnectionParameters sshParams = deviceConfiguration()->sshParameters(); + sshParams.userName = m_ui->userLineEdit->text(); + deviceConfiguration()->setSshParameters(sshParams); +} + +void GenericLinuxDeviceConfigurationWidget::passwordEditingFinished() +{ + Utils::SshConnectionParameters sshParams = deviceConfiguration()->sshParameters(); + sshParams.password = m_ui->pwdLineEdit->text(); + deviceConfiguration()->setSshParameters(sshParams); +} + +void GenericLinuxDeviceConfigurationWidget::keyFileEditingFinished() +{ + Utils::SshConnectionParameters sshParams = deviceConfiguration()->sshParameters(); + sshParams.privateKeyFile = m_ui->keyFileLineEdit->path(); + deviceConfiguration()->setSshParameters(sshParams); +} + +void GenericLinuxDeviceConfigurationWidget::handleFreePortsChanged() +{ + deviceConfiguration()->setFreePorts(PortList::fromString(m_ui->portsLineEdit->text())); + updatePortsWarningLabel(); +} + +void GenericLinuxDeviceConfigurationWidget::showPassword(bool showClearText) +{ + m_ui->pwdLineEdit->setEchoMode(showClearText + ? QLineEdit::Normal : QLineEdit::Password); +} + +void GenericLinuxDeviceConfigurationWidget::setDefaultKeyFilePath() +{ + emit defaultSshKeyFilePathChanged(m_ui->keyFileLineEdit->path()); +} + +void GenericLinuxDeviceConfigurationWidget::setPrivateKey(const QString &path) +{ + m_ui->keyFileLineEdit->setPath(path); + keyFileEditingFinished(); +} + +void GenericLinuxDeviceConfigurationWidget::updatePortsWarningLabel() +{ + m_ui->portsWarningLabel->setVisible(!deviceConfiguration()->freePorts().hasMore()); +} + +void GenericLinuxDeviceConfigurationWidget::initGui() +{ + m_ui->portsWarningLabel->setPixmap(QPixmap(":/projectexplorer/images/compile_error.png")); + m_ui->portsWarningLabel->setToolTip(QLatin1String("<font color=\"red\">") + + tr("You will need at least one port.") + QLatin1String("</font>")); + m_ui->keyFileLineEdit->setExpectedKind(Utils::PathChooser::File); + m_ui->keyFileLineEdit->lineEdit()->setMinimumWidth(0); + QRegExpValidator * const portsValidator + = new QRegExpValidator(QRegExp(PortList::regularExpression()), this); + m_ui->portsLineEdit->setValidator(portsValidator); + + const Utils::SshConnectionParameters &sshParams = deviceConfiguration()->sshParameters(); + + if (sshParams.authenticationType == Utils::SshConnectionParameters::AuthenticationByPassword) + m_ui->passwordButton->setChecked(true); + else + m_ui->keyButton->setChecked(true); + m_ui->timeoutSpinBox->setValue(sshParams.timeout); + m_ui->hostLineEdit->setEnabled(!deviceConfiguration()->isAutoDetected()); + m_ui->sshPortSpinBox->setEnabled(!deviceConfiguration()->isAutoDetected()); + + m_ui->hostLineEdit->setText(sshParams.host); + m_ui->sshPortSpinBox->setValue(sshParams.port); + m_ui->portsLineEdit->setText(deviceConfiguration()->freePorts().toString()); + m_ui->timeoutSpinBox->setValue(sshParams.timeout); + m_ui->userLineEdit->setText(sshParams.userName); + m_ui->pwdLineEdit->setText(sshParams.password); + m_ui->keyFileLineEdit->setPath(sshParams.privateKeyFile); + m_ui->showPasswordCheckBox->setChecked(false); + updatePortsWarningLabel(); +} diff --git a/src/plugins/remotelinux/genericlinuxdeviceconfigurationwidget.h b/src/plugins/remotelinux/genericlinuxdeviceconfigurationwidget.h new file mode 100644 index 0000000000000000000000000000000000000000..7e5a3ef30dbdb349d88863a669b749a0141ae88b --- /dev/null +++ b/src/plugins/remotelinux/genericlinuxdeviceconfigurationwidget.h @@ -0,0 +1,77 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2012 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** GNU Lesser General Public License Usage +** +** 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. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +**************************************************************************/ + +#ifndef REMOTELINUX_GENERICLINUXDEVICECONFIGURATIONWIDGET_H +#define REMOTELINUX_GENERICLINUXDEVICECONFIGURATIONWIDGET_H + +#include "remotelinux_export.h" + +#include "linuxdeviceconfiguration.h" + +namespace RemoteLinux { + +namespace Ui { +class GenericLinuxDeviceConfigurationWidget; +} + +class REMOTELINUX_EXPORT GenericLinuxDeviceConfigurationWidget : public ILinuxDeviceConfigurationWidget +{ + Q_OBJECT + +public: + explicit GenericLinuxDeviceConfigurationWidget( + const LinuxDeviceConfiguration::Ptr &deviceConfig, + QWidget *parent = 0); + ~GenericLinuxDeviceConfigurationWidget(); + +private slots: + void authenticationTypeChanged(); + void hostNameEditingFinished(); + void sshPortEditingFinished(); + void timeoutEditingFinished(); + void userNameEditingFinished(); + void passwordEditingFinished(); + void keyFileEditingFinished(); + void showPassword(bool showClearText); + void handleFreePortsChanged(); + void setDefaultKeyFilePath(); + void setPrivateKey(const QString &path); + +private: + void updatePortsWarningLabel(); + void initGui(); + + Ui::GenericLinuxDeviceConfigurationWidget *m_ui; +}; + +} // namespace RemoteLinux + +#endif // REMOTELINUX_GENERICLINUXDEVICECONFIGURATIONWIDGET_H diff --git a/src/plugins/remotelinux/genericlinuxdeviceconfigurationwidget.ui b/src/plugins/remotelinux/genericlinuxdeviceconfigurationwidget.ui new file mode 100644 index 0000000000000000000000000000000000000000..6a72bec0548353f1e57c72bf7df9be6917d7cbb7 --- /dev/null +++ b/src/plugins/remotelinux/genericlinuxdeviceconfigurationwidget.ui @@ -0,0 +1,250 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>RemoteLinux::GenericLinuxDeviceConfigurationWidget</class> + <widget class="QWidget" name="RemoteLinux::GenericLinuxDeviceConfigurationWidget"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>393</width> + <height>170</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QFormLayout" name="formLayout"> + <property name="fieldGrowthPolicy"> + <enum>QFormLayout::FieldsStayAtSizeHint</enum> + </property> + <property name="margin"> + <number>0</number> + </property> + <item row="0" column="0"> + <widget class="QLabel" name="authTypeLabel"> + <property name="text"> + <string>Authentication type:</string> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QWidget" name="authTypeButtonsWidget" native="true"> + <layout class="QHBoxLayout" name="horizontalLayout_3"> + <property name="margin"> + <number>0</number> + </property> + <item> + <widget class="QRadioButton" name="passwordButton"> + <property name="text"> + <string>Password</string> + </property> + </widget> + </item> + <item> + <widget class="QRadioButton" name="keyButton"> + <property name="text"> + <string>&Key</string> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_4"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="hostNameLabel"> + <property name="text"> + <string>&Host name:</string> + </property> + <property name="buddy"> + <cstring>hostLineEdit</cstring> + </property> + </widget> + </item> + <item row="1" column="1"> + <layout class="QHBoxLayout" name="horizontalLayout_4"> + <item> + <widget class="QLineEdit" name="hostLineEdit"> + <property name="placeholderText"> + <string>IP or host name of the device</string> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="sshPortLabel"> + <property name="text"> + <string>&SSH port:</string> + </property> + <property name="buddy"> + <cstring>sshPortSpinBox</cstring> + </property> + </widget> + </item> + <item> + <widget class="QSpinBox" name="sshPortSpinBox"> + <property name="minimum"> + <number>0</number> + </property> + <property name="maximum"> + <number>65535</number> + </property> + <property name="value"> + <number>22</number> + </property> + </widget> + </item> + </layout> + </item> + <item row="2" column="0"> + <widget class="QLabel" name="freePortsLabel"> + <property name="text"> + <string>Free ports:</string> + </property> + <property name="buddy"> + <cstring>portsLineEdit</cstring> + </property> + </widget> + </item> + <item row="2" column="1"> + <layout class="QHBoxLayout" name="horizontalLayout_7"> + <item> + <widget class="QLineEdit" name="portsLineEdit"> + <property name="toolTip"> + <string>You can enter lists and ranges like this: 1024,1026-1028,1030</string> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="portsWarningLabel"> + <property name="text"> + <string/> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="connectionTimeoutLabel"> + <property name="text"> + <string>Timeout:</string> + </property> + <property name="buddy"> + <cstring>timeoutSpinBox</cstring> + </property> + </widget> + </item> + <item> + <widget class="QSpinBox" name="timeoutSpinBox"> + <property name="suffix"> + <string>s</string> + </property> + <property name="maximum"> + <number>10000</number> + </property> + <property name="singleStep"> + <number>10</number> + </property> + <property name="value"> + <number>1000</number> + </property> + </widget> + </item> + </layout> + </item> + <item row="3" column="0"> + <widget class="QLabel" name="userNameLabel"> + <property name="text"> + <string>&Username:</string> + </property> + <property name="buddy"> + <cstring>userLineEdit</cstring> + </property> + </widget> + </item> + <item row="3" column="1"> + <widget class="QLineEdit" name="userLineEdit"/> + </item> + <item row="4" column="0"> + <widget class="QLabel" name="passwordLabel"> + <property name="text"> + <string>&Password:</string> + </property> + <property name="buddy"> + <cstring>pwdLineEdit</cstring> + </property> + </widget> + </item> + <item row="4" column="1"> + <layout class="QHBoxLayout" name="horizontalLayout_6"> + <item> + <widget class="QLineEdit" name="pwdLineEdit"> + <property name="echoMode"> + <enum>QLineEdit::Password</enum> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="showPasswordCheckBox"> + <property name="text"> + <string>Show password</string> + </property> + </widget> + </item> + </layout> + </item> + <item row="5" column="0"> + <widget class="QLabel" name="keyLabel"> + <property name="text"> + <string>Private key file:</string> + </property> + </widget> + </item> + <item row="5" column="1"> + <layout class="QHBoxLayout" name="horizontalLayout_8"> + <item> + <widget class="Utils::PathChooser" name="keyFileLineEdit" native="true"/> + </item> + <item> + <widget class="QPushButton" name="makeKeyFileDefaultButton"> + <property name="text"> + <string>Set as Default</string> + </property> + </widget> + </item> + </layout> + </item> + </layout> + <zorder>passwordLabel</zorder> + <zorder>authTypeButtonsWidget</zorder> + <zorder>hostNameLabel</zorder> + <zorder>userNameLabel</zorder> + <zorder>freePortsLabel</zorder> + <zorder>userLineEdit</zorder> + <zorder>authTypeLabel</zorder> + <zorder>keyLabel</zorder> + </widget> + <customwidgets> + <customwidget> + <class>Utils::PathChooser</class> + <extends>QWidget</extends> + <header location="global">utils/pathchooser.h</header> + <container>1</container> + <slots> + <signal>editingFinished()</signal> + <signal>browsingFinished()</signal> + </slots> + </customwidget> + </customwidgets> + <resources/> + <connections/> +</ui> diff --git a/src/plugins/remotelinux/linuxdeviceconfiguration.cpp b/src/plugins/remotelinux/linuxdeviceconfiguration.cpp index af8866dc52c6705e23234e14265d231eddaab39e..c35ca9b219bbd0a12e08e27f800b403f81850953 100644 --- a/src/plugins/remotelinux/linuxdeviceconfiguration.cpp +++ b/src/plugins/remotelinux/linuxdeviceconfiguration.cpp @@ -31,10 +31,12 @@ **************************************************************************/ #include "linuxdeviceconfiguration.h" +#include "linuxdeviceconfigurations.h" #include "portlist.h" #include "remotelinux_constants.h" #include <utils/ssh/sshconnection.h> +#include <utils/qtcassert.h> #include <QSettings> #include <QDesktopServices> @@ -264,4 +266,19 @@ void LinuxDeviceConfiguration::setDefault(bool isDefault) { d->isDefault = isDef const LinuxDeviceConfiguration::Id LinuxDeviceConfiguration::InvalidId = 0; + +ILinuxDeviceConfigurationWidget::ILinuxDeviceConfigurationWidget( + const LinuxDeviceConfiguration::Ptr &deviceConfig, + QWidget *parent) + : QWidget(parent), + m_deviceConfiguration(deviceConfig) +{ + QTC_CHECK(m_deviceConfiguration); +} + +LinuxDeviceConfiguration::Ptr ILinuxDeviceConfigurationWidget::deviceConfiguration() const +{ + return m_deviceConfiguration; +} + } // namespace RemoteLinux diff --git a/src/plugins/remotelinux/linuxdeviceconfiguration.h b/src/plugins/remotelinux/linuxdeviceconfiguration.h index 9e9b9a56a627667654a167b97cad721ce905049a..d3504c4782c68a245e46d2312361d3cb1ad7e8b0 100644 --- a/src/plugins/remotelinux/linuxdeviceconfiguration.h +++ b/src/plugins/remotelinux/linuxdeviceconfiguration.h @@ -82,6 +82,10 @@ public: QVariantHash attributes() const; QVariant attribute(const QString &name) const; + void setSshParameters(const Utils::SshConnectionParameters &sshParameters); + void setFreePorts(const PortList &freePorts); + void setAttribute(const QString &name, const QVariant &value); + static QString defaultPrivateKeyFilePath(); static QString defaultPublicKeyFilePath(); @@ -106,9 +110,6 @@ private: void setDisplayName(const QString &name); void setInternalId(Id id); void setDefault(bool isDefault); - void setSshParameters(const Utils::SshConnectionParameters &sshParameters); - void setFreePorts(const PortList &freePorts); - void setAttribute(const QString &name, const QVariant &value); void save(QSettings &settings) const; Internal::LinuxDeviceConfigurationPrivate *d; @@ -137,7 +138,35 @@ protected: /*! - \class ProjectExplorer::ILinuxDeviceConfiguration factory. + \class RemoteLinux::LinuxDeviceConfigurationWidget : public QWidget + + \brief Provides an interface for the widget configuring a LinuxDeviceConfiguration + + A class implementing this interface will display a widget in the configuration + options page "Linux Device", in the "Device configuration" tab. + It's used to configure a particular device, the default widget is empty. +*/ +class REMOTELINUX_EXPORT ILinuxDeviceConfigurationWidget : public QWidget +{ + Q_OBJECT + +public: + ILinuxDeviceConfigurationWidget(const LinuxDeviceConfiguration::Ptr &deviceConfig, + QWidget *parent = 0); + +signals: + void defaultSshKeyFilePathChanged(const QString &path); + +protected: + LinuxDeviceConfiguration::Ptr deviceConfiguration() const; + +private: + LinuxDeviceConfiguration::Ptr m_deviceConfiguration; +}; + + +/*! + \class RemoteLinux::ILinuxDeviceConfiguration factory. \brief Provides an interface for classes providing services related to certain type of Linux devices. @@ -162,6 +191,12 @@ public: */ virtual ILinuxDeviceConfigurationWizard *createWizard(QWidget *parent = 0) const = 0; + /*! + A widget that can configure the device this factory supports. + */ + virtual ILinuxDeviceConfigurationWidget *createWidget( + const LinuxDeviceConfiguration::Ptr &deviceConfig, + QWidget *parent = 0) const = 0; /*! Returns true iff this factory supports the given device type. diff --git a/src/plugins/remotelinux/linuxdeviceconfigurations.cpp b/src/plugins/remotelinux/linuxdeviceconfigurations.cpp index 58958662f641806726bff885ccc725c775298d2d..d1387ee6cfea8ab8ee0065676510fe56745fed28 100644 --- a/src/plugins/remotelinux/linuxdeviceconfigurations.cpp +++ b/src/plugins/remotelinux/linuxdeviceconfigurations.cpp @@ -268,6 +268,12 @@ LinuxDeviceConfigurations::LinuxDeviceConfigurations(QObject *parent) { } +LinuxDeviceConfiguration::Ptr LinuxDeviceConfigurations::mutableDeviceAt(int idx) const +{ + Q_ASSERT(idx >= 0 && idx < rowCount()); + return d->devConfigs.at(idx); +} + void LinuxDeviceConfigurations::blockCloning() { QTC_ASSERT(!cloningBlocked, return); diff --git a/src/plugins/remotelinux/linuxdeviceconfigurations.h b/src/plugins/remotelinux/linuxdeviceconfigurations.h index 3e4a1adcb35e986a7ec26c00bc0d0824b7c6b3ad..b79be8a165806545ea46c7c5772e122e8f96f30a 100644 --- a/src/plugins/remotelinux/linuxdeviceconfigurations.h +++ b/src/plugins/remotelinux/linuxdeviceconfigurations.h @@ -70,7 +70,6 @@ public: int indexForInternalId(LinuxDeviceConfiguration::Id internalId) const; LinuxDeviceConfiguration::Id internalId(LinuxDeviceConfiguration::ConstPtr devConf) const; - void setDefaultSshKeyFilePath(const QString &path); QString defaultSshKeyFilePath() const; void addConfiguration(const LinuxDeviceConfiguration::Ptr &devConfig); @@ -85,6 +84,9 @@ public: virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; +public slots: + void setDefaultSshKeyFilePath(const QString &path); + signals: void updated(); void cloningPossible(); @@ -92,6 +94,8 @@ signals: private: LinuxDeviceConfigurations(QObject *parent); + LinuxDeviceConfiguration::Ptr mutableDeviceAt(int index) const; + static void blockCloning(); static void unblockCloning(); diff --git a/src/plugins/remotelinux/linuxdeviceconfigurationssettingswidget.cpp b/src/plugins/remotelinux/linuxdeviceconfigurationssettingswidget.cpp index 8344295e5ab02d7f6fdc121286f980fa9737b3e6..4184dcb14a728caf54816fd60d4945e02bfddc36 100644 --- a/src/plugins/remotelinux/linuxdeviceconfigurationssettingswidget.cpp +++ b/src/plugins/remotelinux/linuxdeviceconfigurationssettingswidget.cpp @@ -102,7 +102,8 @@ LinuxDeviceConfigurationsSettingsWidget::LinuxDeviceConfigurationsSettingsWidget m_devConfigs(LinuxDeviceConfigurations::cloneInstance()), m_nameValidator(new NameValidator(m_devConfigs.data(), this)), m_saveSettingsRequested(false), - m_additionalActionsMapper(new QSignalMapper(this)) + m_additionalActionsMapper(new QSignalMapper(this)), + m_configWidget(0) { LinuxDeviceConfigurations::blockCloning(); initGui(); @@ -125,23 +126,11 @@ QString LinuxDeviceConfigurationsSettingsWidget::searchKeywords() const { QString rc; QTextStream(&rc) << m_ui->configurationLabel->text() - << ' ' << m_ui->sshPortLabel->text() - << ' ' << m_ui->keyButton->text() - << ' ' << m_ui->passwordButton->text() - << ' ' << m_ui->authTypeLabel->text() - << ' ' << m_ui->connectionTimeoutLabel->text() << ' ' << m_ui->deviceTypeLabel->text() << ' ' << m_ui->deviceTypeValueLabel->text() << ' ' << m_ui->deviceNameLabel->text() - << ' ' << m_ui->hostNameLabel->text() - << ' ' << m_ui->keyLabel->text() - << ' ' << m_ui->nameLineEdit->text() - << ' ' << m_ui->passwordLabel->text() - << ' ' << m_ui->freePortsLabel->text() - << ' ' << m_ui->pwdLineEdit->text() - << ' ' << m_ui->timeoutSpinBox->value() - << ' ' << m_ui->userLineEdit->text() - << ' ' << m_ui->userNameLabel->text(); + << ' ' << m_ui->nameLineEdit->text(); + if (m_configWidget) rc.remove(QLatin1Char('&')); return rc; } @@ -149,18 +138,9 @@ QString LinuxDeviceConfigurationsSettingsWidget::searchKeywords() const void LinuxDeviceConfigurationsSettingsWidget::initGui() { m_ui->setupUi(this); - m_ui->portsWarningLabel->setPixmap(QPixmap(":/projectexplorer/images/compile_error.png")); - m_ui->portsWarningLabel->setToolTip(QLatin1String("<font color=\"red\">") - + tr("You will need at least one port.") + QLatin1String("</font>")); m_ui->configurationComboBox->setModel(m_devConfigs.data()); m_ui->nameLineEdit->setValidator(m_nameValidator); - m_ui->keyFileLineEdit->setExpectedKind(Utils::PathChooser::File); - m_ui->keyFileLineEdit->lineEdit()->setMinimumWidth(0); - QRegExpValidator * const portsValidator - = new QRegExpValidator(QRegExp(PortList::regularExpression()), this); - m_ui->portsLineEdit->setValidator(portsValidator); - connect(m_ui->makeKeyFileDefaultButton, SIGNAL(clicked()), - SLOT(setDefaultKeyFilePath())); + int lastIndex = Core::ICore::settings() ->value(LastDeviceConfigIndexKey, 0).toInt(); if (lastIndex == -1) @@ -207,20 +187,13 @@ void LinuxDeviceConfigurationsSettingsWidget::displayCurrent() const LinuxDeviceConfiguration::ConstPtr ¤t = currentConfig(); m_ui->defaultDeviceButton->setEnabled(!current->isDefault()); m_ui->osTypeValueLabel->setText(RemoteLinuxUtils::osTypeToString(current->osType())); - const SshConnectionParameters &sshParams = current->sshParameters(); + if (current->deviceType() == LinuxDeviceConfiguration::Hardware) m_ui->deviceTypeValueLabel->setText(tr("Physical Device")); else m_ui->deviceTypeValueLabel->setText(tr("Emulator")); - if (sshParams.authenticationType == Utils::SshConnectionParameters::AuthenticationByPassword) - m_ui->passwordButton->setChecked(true); - else - m_ui->keyButton->setChecked(true); m_nameValidator->setDisplayName(current->displayName()); - m_ui->timeoutSpinBox->setValue(sshParams.timeout); m_ui->removeConfigButton->setEnabled(!current->isAutoDetected()); - m_ui->hostLineEdit->setReadOnly(current->isAutoDetected()); - m_ui->sshPortSpinBox->setEnabled(!current->isAutoDetected()); fillInValues(); } @@ -228,16 +201,6 @@ void LinuxDeviceConfigurationsSettingsWidget::fillInValues() { const LinuxDeviceConfiguration::ConstPtr ¤t = currentConfig(); m_ui->nameLineEdit->setText(current->displayName()); - const SshConnectionParameters &sshParams = current->sshParameters(); - m_ui->hostLineEdit->setText(sshParams.host); - m_ui->sshPortSpinBox->setValue(sshParams.port); - m_ui->portsLineEdit->setText(current->freePorts().toString()); - m_ui->timeoutSpinBox->setValue(sshParams.timeout); - m_ui->userLineEdit->setText(sshParams.userName); - m_ui->pwdLineEdit->setText(sshParams.password); - m_ui->keyFileLineEdit->setPath(sshParams.privateKeyFile); - m_ui->showPasswordCheckBox->setChecked(false); - updatePortsWarningLabel(); } void LinuxDeviceConfigurationsSettingsWidget::saveSettings() @@ -267,103 +230,26 @@ void LinuxDeviceConfigurationsSettingsWidget::configNameEditingFinished() m_nameValidator->setDisplayName(newName); } -void LinuxDeviceConfigurationsSettingsWidget::authenticationTypeChanged() -{ - SshConnectionParameters sshParams = currentConfig()->sshParameters(); - const bool usePassword = m_ui->passwordButton->isChecked(); - sshParams.authenticationType = usePassword - ? SshConnectionParameters::AuthenticationByPassword - : SshConnectionParameters::AuthenticationByKey; - m_devConfigs->setSshParameters(currentIndex(), sshParams); - m_ui->pwdLineEdit->setEnabled(usePassword); - m_ui->passwordLabel->setEnabled(usePassword); - m_ui->keyFileLineEdit->setEnabled(!usePassword); - m_ui->keyLabel->setEnabled(!usePassword); - m_ui->makeKeyFileDefaultButton->setEnabled(!usePassword); -} - -void LinuxDeviceConfigurationsSettingsWidget::hostNameEditingFinished() -{ - SshConnectionParameters sshParams = currentConfig()->sshParameters(); - sshParams.host = m_ui->hostLineEdit->text(); - m_devConfigs->setSshParameters(currentIndex(), sshParams); -} - -void LinuxDeviceConfigurationsSettingsWidget::sshPortEditingFinished() -{ - SshConnectionParameters sshParams = currentConfig()->sshParameters(); - sshParams.port = m_ui->sshPortSpinBox->value(); - m_devConfigs->setSshParameters(currentIndex(), sshParams); -} - -void LinuxDeviceConfigurationsSettingsWidget::timeoutEditingFinished() -{ - SshConnectionParameters sshParams = currentConfig()->sshParameters(); - sshParams.timeout = m_ui->timeoutSpinBox->value(); - m_devConfigs->setSshParameters(currentIndex(), sshParams); -} - -void LinuxDeviceConfigurationsSettingsWidget::userNameEditingFinished() -{ - SshConnectionParameters sshParams = currentConfig()->sshParameters(); - sshParams.userName = m_ui->userLineEdit->text(); - m_devConfigs->setSshParameters(currentIndex(), sshParams); -} - -void LinuxDeviceConfigurationsSettingsWidget::passwordEditingFinished() -{ - SshConnectionParameters sshParams = currentConfig()->sshParameters(); - sshParams.password = m_ui->pwdLineEdit->text(); - m_devConfigs->setSshParameters(currentIndex(), sshParams); -} - -void LinuxDeviceConfigurationsSettingsWidget::keyFileEditingFinished() -{ - SshConnectionParameters sshParams = currentConfig()->sshParameters(); - sshParams.privateKeyFile = m_ui->keyFileLineEdit->path(); - m_devConfigs->setSshParameters(currentIndex(), sshParams); -} - -void LinuxDeviceConfigurationsSettingsWidget::handleFreePortsChanged() -{ - m_devConfigs->setFreePorts(currentIndex(), PortList::fromString(m_ui->portsLineEdit->text())); - updatePortsWarningLabel(); -} - -void LinuxDeviceConfigurationsSettingsWidget::showPassword(bool showClearText) -{ - m_ui->pwdLineEdit->setEchoMode(showClearText - ? QLineEdit::Normal : QLineEdit::Password); -} - -void LinuxDeviceConfigurationsSettingsWidget::showGenerateSshKeyDialog() -{ - SshKeyCreationDialog dialog(this); - dialog.exec(); -} - -void LinuxDeviceConfigurationsSettingsWidget::setDefaultKeyFilePath() -{ - m_devConfigs->setDefaultSshKeyFilePath(m_ui->keyFileLineEdit->path()); -} - void LinuxDeviceConfigurationsSettingsWidget::setDefaultDevice() { m_devConfigs->setDefaultDevice(currentIndex()); m_ui->defaultDeviceButton->setEnabled(false); } -void LinuxDeviceConfigurationsSettingsWidget::setPrivateKey(const QString &path) +void LinuxDeviceConfigurationsSettingsWidget::showGenerateSshKeyDialog() { - m_ui->keyFileLineEdit->setPath(path); - keyFileEditingFinished(); + SshKeyCreationDialog dialog(this); + dialog.exec(); } void LinuxDeviceConfigurationsSettingsWidget::currentConfigChanged(int index) { qDeleteAll(m_additionalActionButtons); + delete m_configWidget; + m_configWidget = 0; m_additionalActionButtons.clear(); - m_ui->detailsWidget->setEnabled(false); + m_ui->generalGroupBox->setEnabled(false); + m_ui->osSpecificGroupBox->setEnabled(false); if (index == -1) { m_ui->removeConfigButton->setEnabled(false); m_ui->generateKeyButton->setEnabled(false); @@ -376,13 +262,24 @@ void LinuxDeviceConfigurationsSettingsWidget::currentConfigChanged(int index) if (factory) { const QStringList &actionIds = factory->supportedDeviceActionIds(); foreach (const QString &actionId, actionIds) { - QPushButton * const button = new QPushButton(factory->displayNameForActionId(actionId)); + QPushButton * const button = new QPushButton( + factory->displayNameForActionId(actionId)); m_additionalActionButtons << button; connect(button, SIGNAL(clicked()), m_additionalActionsMapper, SLOT(map())); m_additionalActionsMapper->setMapping(button, actionId); m_ui->buttonsLayout->insertWidget(m_ui->buttonsLayout->count() - 1, button); } - m_ui->detailsWidget->setEnabled(factory->isUserEditable()); + if (!m_ui->osSpecificGroupBox->layout()) + new QVBoxLayout(m_ui->osSpecificGroupBox); + m_configWidget = factory->createWidget(m_devConfigs->mutableDeviceAt(currentIndex()), + m_ui->osSpecificGroupBox); + if (m_configWidget) { + connect(m_configWidget, SIGNAL(defaultSshKeyFilePathChanged(QString)), + m_devConfigs.data(), SLOT(setDefaultSshKeyFilePath(QString))); + m_ui->osSpecificGroupBox->layout()->addWidget(m_configWidget); + m_ui->osSpecificGroupBox->setEnabled(factory->isUserEditable()); + } + m_ui->generalGroupBox->setEnabled(factory->isUserEditable()); } m_ui->configurationComboBox->setCurrentIndex(index); displayCurrent(); @@ -394,19 +291,6 @@ void LinuxDeviceConfigurationsSettingsWidget::clearDetails() m_ui->nameLineEdit->clear(); m_ui->osTypeValueLabel->clear(); m_ui->deviceTypeValueLabel->clear(); - m_ui->hostLineEdit->clear(); - m_ui->sshPortSpinBox->clear(); - m_ui->timeoutSpinBox->clear(); - m_ui->userLineEdit->clear(); - m_ui->pwdLineEdit->clear(); - m_ui->portsLineEdit->clear(); - m_ui->portsWarningLabel->clear(); - m_ui->keyFileLineEdit->lineEdit()->clear(); -} - -void LinuxDeviceConfigurationsSettingsWidget::updatePortsWarningLabel() -{ - m_ui->portsWarningLabel->setVisible(!currentConfig()->freePorts().hasMore()); } const ILinuxDeviceConfigurationFactory *LinuxDeviceConfigurationsSettingsWidget::factoryForCurrentConfig() const diff --git a/src/plugins/remotelinux/linuxdeviceconfigurationssettingswidget.h b/src/plugins/remotelinux/linuxdeviceconfigurationssettingswidget.h index fd441fb19aa39556fddd923c2f17cd1a8b3f43ff..855bacef8035bb6df0efe3a35502acaf46f654c4 100644 --- a/src/plugins/remotelinux/linuxdeviceconfigurationssettingswidget.h +++ b/src/plugins/remotelinux/linuxdeviceconfigurationssettingswidget.h @@ -47,6 +47,7 @@ namespace RemoteLinux { class ILinuxDeviceConfigurationFactory; class LinuxDeviceConfiguration; class LinuxDeviceConfigurations; +class ILinuxDeviceConfigurationWidget; namespace Internal { namespace Ui { class LinuxDeviceConfigurationsSettingsWidget; } @@ -67,20 +68,9 @@ private slots: void addConfig(); void deleteConfig(); void configNameEditingFinished(); - void authenticationTypeChanged(); - void hostNameEditingFinished(); - void sshPortEditingFinished(); - void timeoutEditingFinished(); - void userNameEditingFinished(); - void passwordEditingFinished(); - void keyFileEditingFinished(); - void showPassword(bool showClearText); - void handleFreePortsChanged(); - void setDefaultKeyFilePath(); void setDefaultDevice(); void showGenerateSshKeyDialog(); - void setPrivateKey(const QString &path); void handleAdditionalActionRequest(const QString &actionId); @@ -92,7 +82,6 @@ private: void clearDetails(); QString parseTestOutput(); void fillInValues(); - void updatePortsWarningLabel(); const ILinuxDeviceConfigurationFactory *factoryForCurrentConfig() const; Ui::LinuxDeviceConfigurationsSettingsWidget *m_ui; @@ -101,6 +90,7 @@ private: bool m_saveSettingsRequested; QList<QPushButton *> m_additionalActionButtons; QSignalMapper * const m_additionalActionsMapper; + ILinuxDeviceConfigurationWidget *m_configWidget; }; } // namespace Internal diff --git a/src/plugins/remotelinux/linuxdeviceconfigurationssettingswidget.ui b/src/plugins/remotelinux/linuxdeviceconfigurationssettingswidget.ui index 651146308fdd273c073157e6acffe208e4f1c8b2..bdee36b870a086ca534bc37458c52232aa42ee6b 100644 --- a/src/plugins/remotelinux/linuxdeviceconfigurationssettingswidget.ui +++ b/src/plugins/remotelinux/linuxdeviceconfigurationssettingswidget.ui @@ -47,282 +47,78 @@ </layout> </item> <item> - <widget class="QFrame" name="frame"> - <property name="frameShape"> - <enum>QFrame::StyledPanel</enum> + <widget class="QGroupBox" name="generalGroupBox"> + <property name="title"> + <string>General</string> </property> - <property name="frameShadow"> - <enum>QFrame::Raised</enum> - </property> - <layout class="QVBoxLayout" name="verticalLayout_2"> - <item> - <widget class="QWidget" name="detailsWidget" native="true"> - <property name="enabled"> - <bool>false</bool> + <layout class="QFormLayout" name="formLayout_3"> + <property name="fieldGrowthPolicy"> + <enum>QFormLayout::FieldsStayAtSizeHint</enum> + </property> + <item row="0" column="0"> + <widget class="QLabel" name="deviceNameLabel"> + <property name="text"> + <string>&Name:</string> + </property> + <property name="buddy"> + <cstring>nameLineEdit</cstring> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QLineEdit" name="nameLineEdit"/> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="oSTypeLabel"> + <property name="text"> + <string>OS type:</string> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QLabel" name="osTypeValueLabel"> + <property name="text"> + <string/> + </property> + </widget> + </item> + <item row="2" column="0"> + <widget class="QLabel" name="deviceTypeLabel"> + <property name="text"> + <string>Device type:</string> </property> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> + </widget> + </item> + <item row="2" column="1"> + <widget class="QLabel" name="deviceTypeValueLabel"> + <property name="text"> + <string/> </property> - <layout class="QFormLayout" name="formLayout_2"> - <property name="fieldGrowthPolicy"> - <enum>QFormLayout::FieldsStayAtSizeHint</enum> - </property> - <property name="margin"> - <number>0</number> - </property> - <item row="0" column="0"> - <widget class="QLabel" name="deviceNameLabel"> - <property name="text"> - <string>&Name:</string> - </property> - <property name="buddy"> - <cstring>nameLineEdit</cstring> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="QLineEdit" name="nameLineEdit"/> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="oSTypeLabel"> - <property name="text"> - <string>OS type:</string> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="QLabel" name="osTypeValueLabel"> - <property name="text"> - <string/> - </property> - </widget> - </item> - <item row="2" column="0"> - <widget class="QLabel" name="deviceTypeLabel"> - <property name="text"> - <string>Device type:</string> - </property> - </widget> - </item> - <item row="2" column="1"> - <widget class="QLabel" name="deviceTypeValueLabel"> - <property name="text"> - <string/> - </property> - </widget> - </item> - <item row="3" column="0"> - <widget class="QLabel" name="authTypeLabel"> - <property name="text"> - <string>Authentication type:</string> - </property> - </widget> - </item> - <item row="3" column="1"> - <widget class="QWidget" name="authTypeButtonsWidget" native="true"> - <layout class="QHBoxLayout" name="horizontalLayout_3"> - <property name="margin"> - <number>0</number> - </property> - <item> - <widget class="QRadioButton" name="passwordButton"> - <property name="text"> - <string>Password</string> - </property> - </widget> - </item> - <item> - <widget class="QRadioButton" name="keyButton"> - <property name="text"> - <string>&Key</string> - </property> - </widget> - </item> - <item> - <spacer name="horizontalSpacer_4"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>40</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - </layout> - </widget> - </item> - <item row="4" column="0"> - <widget class="QLabel" name="hostNameLabel"> - <property name="text"> - <string>&Host name:</string> - </property> - <property name="buddy"> - <cstring>hostLineEdit</cstring> - </property> - </widget> - </item> - <item row="4" column="1"> - <layout class="QHBoxLayout" name="horizontalLayout_4"> - <item> - <widget class="QLineEdit" name="hostLineEdit"> - <property name="placeholderText"> - <string>IP or host name of the device</string> - </property> - </widget> - </item> - <item> - <widget class="QLabel" name="sshPortLabel"> - <property name="text"> - <string>&SSH port:</string> - </property> - <property name="buddy"> - <cstring>sshPortSpinBox</cstring> - </property> - </widget> - </item> - <item> - <widget class="QSpinBox" name="sshPortSpinBox"> - <property name="minimum"> - <number>0</number> - </property> - <property name="maximum"> - <number>65535</number> - </property> - <property name="value"> - <number>22</number> - </property> - </widget> - </item> - </layout> - </item> - <item row="6" column="0"> - <widget class="QLabel" name="freePortsLabel"> - <property name="text"> - <string>Free ports:</string> - </property> - <property name="buddy"> - <cstring>portsLineEdit</cstring> - </property> - </widget> - </item> - <item row="6" column="1"> - <layout class="QHBoxLayout" name="horizontalLayout_7"> - <item> - <widget class="QLineEdit" name="portsLineEdit"> - <property name="toolTip"> - <string>You can enter lists and ranges like this: 1024,1026-1028,1030</string> - </property> - </widget> - </item> - <item> - <widget class="QLabel" name="portsWarningLabel"> - <property name="text"> - <string/> - </property> - </widget> - </item> - <item> - <widget class="QLabel" name="connectionTimeoutLabel"> - <property name="text"> - <string>Timeout:</string> - </property> - <property name="buddy"> - <cstring>timeoutSpinBox</cstring> - </property> - </widget> - </item> - <item> - <widget class="QSpinBox" name="timeoutSpinBox"> - <property name="suffix"> - <string>s</string> - </property> - <property name="maximum"> - <number>10000</number> - </property> - <property name="singleStep"> - <number>10</number> - </property> - <property name="value"> - <number>1000</number> - </property> - </widget> - </item> - </layout> - </item> - <item row="7" column="0"> - <widget class="QLabel" name="userNameLabel"> - <property name="text"> - <string>&Username:</string> - </property> - <property name="buddy"> - <cstring>userLineEdit</cstring> - </property> - </widget> - </item> - <item row="7" column="1"> - <widget class="QLineEdit" name="userLineEdit"/> - </item> - <item row="8" column="0"> - <widget class="QLabel" name="passwordLabel"> - <property name="text"> - <string>&Password:</string> - </property> - <property name="buddy"> - <cstring>pwdLineEdit</cstring> - </property> - </widget> - </item> - <item row="8" column="1"> - <layout class="QHBoxLayout" name="horizontalLayout_6"> - <item> - <widget class="QLineEdit" name="pwdLineEdit"> - <property name="echoMode"> - <enum>QLineEdit::Password</enum> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="showPasswordCheckBox"> - <property name="text"> - <string>Show password</string> - </property> - </widget> - </item> - </layout> - </item> - <item row="9" column="0"> - <widget class="QLabel" name="keyLabel"> - <property name="text"> - <string>Private key file:</string> - </property> - </widget> - </item> - <item row="9" column="1"> - <layout class="QHBoxLayout" name="horizontalLayout_8"> - <item> - <widget class="Utils::PathChooser" name="keyFileLineEdit" native="true"/> - </item> - <item> - <widget class="QPushButton" name="makeKeyFileDefaultButton"> - <property name="text"> - <string>Set as Default</string> - </property> - </widget> - </item> - </layout> - </item> - </layout> </widget> </item> </layout> </widget> </item> + <item> + <widget class="QGroupBox" name="osSpecificGroupBox"> + <property name="title"> + <string>OS Type Specific</string> + </property> + </widget> + </item> + <item> + <spacer name="verticalSpacer_2"> + <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> <item> @@ -403,68 +199,8 @@ </item> </layout> </widget> - <customwidgets> - <customwidget> - <class>Utils::PathChooser</class> - <extends>QWidget</extends> - <header location="global">utils/pathchooser.h</header> - <container>1</container> - <slots> - <signal>editingFinished()</signal> - <signal>browsingFinished()</signal> - </slots> - </customwidget> - </customwidgets> <resources/> <connections> - <connection> - <sender>hostLineEdit</sender> - <signal>editingFinished()</signal> - <receiver>RemoteLinux::Internal::LinuxDeviceConfigurationsSettingsWidget</receiver> - <slot>hostNameEditingFinished()</slot> - <hints> - <hint type="sourcelabel"> - <x>484</x> - <y>174</y> - </hint> - <hint type="destinationlabel"> - <x>424</x> - <y>231</y> - </hint> - </hints> - </connection> - <connection> - <sender>userLineEdit</sender> - <signal>editingFinished()</signal> - <receiver>RemoteLinux::Internal::LinuxDeviceConfigurationsSettingsWidget</receiver> - <slot>userNameEditingFinished()</slot> - <hints> - <hint type="sourcelabel"> - <x>540</x> - <y>317</y> - </hint> - <hint type="destinationlabel"> - <x>422</x> - <y>301</y> - </hint> - </hints> - </connection> - <connection> - <sender>pwdLineEdit</sender> - <signal>editingFinished()</signal> - <receiver>RemoteLinux::Internal::LinuxDeviceConfigurationsSettingsWidget</receiver> - <slot>passwordEditingFinished()</slot> - <hints> - <hint type="sourcelabel"> - <x>424</x> - <y>349</y> - </hint> - <hint type="destinationlabel"> - <x>423</x> - <y>336</y> - </hint> - </hints> - </connection> <connection> <sender>addConfigButton</sender> <signal>clicked()</signal> @@ -481,70 +217,6 @@ </hint> </hints> </connection> - <connection> - <sender>passwordButton</sender> - <signal>toggled(bool)</signal> - <receiver>RemoteLinux::Internal::LinuxDeviceConfigurationsSettingsWidget</receiver> - <slot>authenticationTypeChanged()</slot> - <hints> - <hint type="sourcelabel"> - <x>228</x> - <y>147</y> - </hint> - <hint type="destinationlabel"> - <x>513</x> - <y>240</y> - </hint> - </hints> - </connection> - <connection> - <sender>keyFileLineEdit</sender> - <signal>editingFinished()</signal> - <receiver>RemoteLinux::Internal::LinuxDeviceConfigurationsSettingsWidget</receiver> - <slot>keyFileEditingFinished()</slot> - <hints> - <hint type="sourcelabel"> - <x>344</x> - <y>383</y> - </hint> - <hint type="destinationlabel"> - <x>257</x> - <y>185</y> - </hint> - </hints> - </connection> - <connection> - <sender>keyFileLineEdit</sender> - <signal>browsingFinished()</signal> - <receiver>RemoteLinux::Internal::LinuxDeviceConfigurationsSettingsWidget</receiver> - <slot>keyFileEditingFinished()</slot> - <hints> - <hint type="sourcelabel"> - <x>344</x> - <y>383</y> - </hint> - <hint type="destinationlabel"> - <x>257</x> - <y>185</y> - </hint> - </hints> - </connection> - <connection> - <sender>keyButton</sender> - <signal>toggled(bool)</signal> - <receiver>RemoteLinux::Internal::LinuxDeviceConfigurationsSettingsWidget</receiver> - <slot>authenticationTypeChanged()</slot> - <hints> - <hint type="sourcelabel"> - <x>279</x> - <y>156</y> - </hint> - <hint type="destinationlabel"> - <x>525</x> - <y>351</y> - </hint> - </hints> - </connection> <connection> <sender>nameLineEdit</sender> <signal>editingFinished()</signal> @@ -552,8 +224,8 @@ <slot>configNameEditingFinished()</slot> <hints> <hint type="sourcelabel"> - <x>520</x> - <y>82</y> + <x>204</x> + <y>90</y> </hint> <hint type="destinationlabel"> <x>330</x> @@ -577,102 +249,6 @@ </hint> </hints> </connection> - <connection> - <sender>timeoutSpinBox</sender> - <signal>editingFinished()</signal> - <receiver>RemoteLinux::Internal::LinuxDeviceConfigurationsSettingsWidget</receiver> - <slot>timeoutEditingFinished()</slot> - <hints> - <hint type="sourcelabel"> - <x>222</x> - <y>285</y> - </hint> - <hint type="destinationlabel"> - <x>6</x> - <y>333</y> - </hint> - </hints> - </connection> - <connection> - <sender>timeoutSpinBox</sender> - <signal>valueChanged(int)</signal> - <receiver>RemoteLinux::Internal::LinuxDeviceConfigurationsSettingsWidget</receiver> - <slot>timeoutEditingFinished()</slot> - <hints> - <hint type="sourcelabel"> - <x>222</x> - <y>285</y> - </hint> - <hint type="destinationlabel"> - <x>0</x> - <y>299</y> - </hint> - </hints> - </connection> - <connection> - <sender>sshPortSpinBox</sender> - <signal>editingFinished()</signal> - <receiver>RemoteLinux::Internal::LinuxDeviceConfigurationsSettingsWidget</receiver> - <slot>sshPortEditingFinished()</slot> - <hints> - <hint type="sourcelabel"> - <x>210</x> - <y>201</y> - </hint> - <hint type="destinationlabel"> - <x>4</x> - <y>211</y> - </hint> - </hints> - </connection> - <connection> - <sender>sshPortSpinBox</sender> - <signal>valueChanged(int)</signal> - <receiver>RemoteLinux::Internal::LinuxDeviceConfigurationsSettingsWidget</receiver> - <slot>sshPortEditingFinished()</slot> - <hints> - <hint type="sourcelabel"> - <x>210</x> - <y>201</y> - </hint> - <hint type="destinationlabel"> - <x>3</x> - <y>136</y> - </hint> - </hints> - </connection> - <connection> - <sender>showPasswordCheckBox</sender> - <signal>toggled(bool)</signal> - <receiver>RemoteLinux::Internal::LinuxDeviceConfigurationsSettingsWidget</receiver> - <slot>showPassword(bool)</slot> - <hints> - <hint type="sourcelabel"> - <x>539</x> - <y>347</y> - </hint> - <hint type="destinationlabel"> - <x>3</x> - <y>262</y> - </hint> - </hints> - </connection> - <connection> - <sender>portsLineEdit</sender> - <signal>editingFinished()</signal> - <receiver>RemoteLinux::Internal::LinuxDeviceConfigurationsSettingsWidget</receiver> - <slot>handleFreePortsChanged()</slot> - <hints> - <hint type="sourcelabel"> - <x>310</x> - <y>230</y> - </hint> - <hint type="destinationlabel"> - <x>0</x> - <y>393</y> - </hint> - </hints> - </connection> <connection> <sender>removeConfigButton</sender> <signal>clicked()</signal> diff --git a/src/plugins/remotelinux/remotelinux.pro b/src/plugins/remotelinux/remotelinux.pro index 8feab7f75df713c5bc1f221807c43304a4830eaf..186f71f1f85723b729e97d98e87e83e9a551b7eb 100644 --- a/src/plugins/remotelinux/remotelinux.pro +++ b/src/plugins/remotelinux/remotelinux.pro @@ -62,7 +62,8 @@ HEADERS += \ startgdbserverdialog.h \ remotelinuxcustomcommanddeployservice.h \ remotelinuxcustomcommanddeploymentstep.h \ - abstractembeddedlinuxtarget.h + abstractembeddedlinuxtarget.h \ + genericlinuxdeviceconfigurationwidget.h SOURCES += \ genericembeddedlinuxtarget.cpp \ @@ -118,7 +119,8 @@ SOURCES += \ startgdbserverdialog.cpp \ remotelinuxcustomcommanddeployservice.cpp \ remotelinuxcustomcommanddeploymentstep.cpp \ - abstractembeddedlinuxtarget.cpp + abstractembeddedlinuxtarget.cpp \ + genericlinuxdeviceconfigurationwidget.cpp FORMS += \ linuxdevicefactoryselectiondialog.ui \ @@ -128,7 +130,8 @@ FORMS += \ linuxdeviceconfigurationssettingswidget.ui \ sshkeycreationdialog.ui \ remotelinuxdeployconfigurationwidget.ui \ - profilesupdatedialog.ui + profilesupdatedialog.ui \ + genericlinuxdeviceconfigurationwidget.ui RESOURCES += remotelinux.qrc