diff options
Diffstat (limited to 'src/plugins/boot2qt/qdbdevice.cpp')
-rw-r--r-- | src/plugins/boot2qt/qdbdevice.cpp | 95 |
1 files changed, 86 insertions, 9 deletions
diff --git a/src/plugins/boot2qt/qdbdevice.cpp b/src/plugins/boot2qt/qdbdevice.cpp index a5b898d3cd7..8156ee7a89a 100644 --- a/src/plugins/boot2qt/qdbdevice.cpp +++ b/src/plugins/boot2qt/qdbdevice.cpp @@ -28,7 +28,6 @@ #include "qdbutils.h" #include "qdbconstants.h" #include "qdbdevicedebugsupport.h" -#include "qdbdevicewizard.h" #include <coreplugin/icore.h> @@ -44,6 +43,11 @@ #include <utils/qtcassert.h> #include <utils/qtcprocess.h> +#include <QFormLayout> +#include <QLabel> +#include <QLineEdit> +#include <QWizard> + using namespace ProjectExplorer; using namespace Utils; @@ -213,16 +217,85 @@ std::function<ProjectExplorer::RunWorker *(ProjectExplorer::RunControl *)> } -// Device factory +// QdbDeviceWizard -static IDevice::Ptr createDevice(QdbDeviceWizard::DeviceType deviceType) +class QdbSettingsPage : public QWizardPage { - QdbDeviceWizard wizard(deviceType, Core::ICore::mainWindow()); +public: + QdbSettingsPage() + { + setWindowTitle(QdbDevice::tr("WizardPage")); + setTitle(QdbDevice::tr("Device Settings")); - if (wizard.exec() != QDialog::Accepted) - return IDevice::Ptr(); - return wizard.device(); -} + nameLineEdit = new QLineEdit(this); + nameLineEdit->setPlaceholderText(QdbDevice::tr("A short, free-text description")); + + addressLineEdit = new QLineEdit(this); + addressLineEdit->setPlaceholderText(QdbDevice::tr("Host name or IP address")); + + auto usbWarningLabel = new QLabel(this); + usbWarningLabel->setText(QString("<html><head/><body><it><b>%1</it><p>%2</p></body></html>") + .arg("Note:") + .arg("Do not use this wizard for devices connected via USB.<br/>" + "Those will be auto-detected.</p>" + "<p>The connectivity to the device is tested after finishing.")); + + auto formLayout = new QFormLayout(this); + formLayout->addRow(QdbDevice::tr("Device name:"), nameLineEdit); + formLayout->addRow(QdbDevice::tr("Device address:"), addressLineEdit); + formLayout->addRow(usbWarningLabel); + + connect(nameLineEdit, &QLineEdit::textChanged, this, &QWizardPage::completeChanged); + connect(addressLineEdit, &QLineEdit::textChanged, this, &QWizardPage::completeChanged); + } + + QString deviceName() const { return nameLineEdit->text().trimmed(); } + QString deviceAddress() const { return addressLineEdit->text().trimmed(); } + +private: + bool isComplete() const final { + return !deviceName().isEmpty() && !deviceAddress().isEmpty(); + } + + QLineEdit *nameLineEdit; + QLineEdit *addressLineEdit; + +}; + +class QdbDeviceWizard : public QWizard +{ +public: + QdbDeviceWizard(QWidget *parent) + : QWizard(parent) + { + setWindowTitle(QdbDeviceWizard::tr("Boot2Qt Network Device Setup")); + settingsPage.setCommitPage(true); + + enum { SettingsPageId }; + + setPage(SettingsPageId, &settingsPage); + } + + ProjectExplorer::IDevice::Ptr device() + { + QdbDevice::Ptr device = QdbDevice::create(); + + device->setDisplayName(settingsPage.deviceName()); + device->setupId(ProjectExplorer::IDevice::ManuallyAdded, Core::Id()); + device->setType(Constants::QdbLinuxOsType); + device->setMachineType(ProjectExplorer::IDevice::Hardware); + + device->setupDefaultNetworkSettings(settingsPage.deviceAddress()); + + return device; + } + +private: + QdbSettingsPage settingsPage; +}; + + +// Device factory QdbLinuxDeviceFactory::QdbLinuxDeviceFactory() : IDeviceFactory(Constants::QdbLinuxOsType) @@ -235,7 +308,11 @@ QdbLinuxDeviceFactory::QdbLinuxDeviceFactory() IDevice::Ptr QdbLinuxDeviceFactory::create() const { - return createDevice(QdbDeviceWizard::HardwareDevice); + QdbDeviceWizard wizard(Core::ICore::mainWindow()); + + if (wizard.exec() != QDialog::Accepted) + return IDevice::Ptr(); + return wizard.device(); } } // namespace Internal |