From 661f89be41b64d500bfe8b0a23398798733dd40d Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Fri, 21 Jul 2023 00:21:07 +0200 Subject: [PATCH] RemoteLinux: Make generic wizard reusable Reuse it in QnxPlugin. Change-Id: Ie60e2829dffa90a4097ef2a0cf1ab19220c2631f Reviewed-by: Qt CI Bot Reviewed-by: hjk --- .../devicesupport/idevicefactory.cpp | 2 +- src/plugins/qnx/qnxdevice.cpp | 42 +++------------ .../genericlinuxdeviceconfigurationwizard.cpp | 53 +++++-------------- .../genericlinuxdeviceconfigurationwizard.h | 10 +--- ...riclinuxdeviceconfigurationwizardpages.cpp | 10 ++-- ...nericlinuxdeviceconfigurationwizardpages.h | 4 +- src/plugins/remotelinux/linuxdevice.cpp | 12 ++--- 7 files changed, 36 insertions(+), 97 deletions(-) diff --git a/src/plugins/projectexplorer/devicesupport/idevicefactory.cpp b/src/plugins/projectexplorer/devicesupport/idevicefactory.cpp index b5178445702..2ff351a8c29 100644 --- a/src/plugins/projectexplorer/devicesupport/idevicefactory.cpp +++ b/src/plugins/projectexplorer/devicesupport/idevicefactory.cpp @@ -112,7 +112,7 @@ void IDeviceFactory::setCombinedIcon(const FilePath &small, const FilePath &larg Icon({{large, Theme::IconsBaseColor}})}); } -void IDeviceFactory::setCreator(const std::function &creator) +void IDeviceFactory::setCreator(const std::function &creator) { QTC_ASSERT(creator, return); m_creator = creator; diff --git a/src/plugins/qnx/qnxdevice.cpp b/src/plugins/qnx/qnxdevice.cpp index 306b87e861d..ccb19c2031d 100644 --- a/src/plugins/qnx/qnxdevice.cpp +++ b/src/plugins/qnx/qnxdevice.cpp @@ -12,7 +12,7 @@ #include -#include +#include #include #include @@ -86,36 +86,6 @@ public: DeviceTester *createDeviceTester() const final { return new QnxDeviceTester; } }; -class QnxDeviceWizard : public Wizard -{ -public: - QnxDeviceWizard() : Wizard(Core::ICore::dialogParent()) - { - setWindowTitle(Tr::tr("New QNX Device Configuration Setup")); - - addPage(&m_setupPage); - addPage(&m_keyDeploymentPage); - addPage(&m_finalPage); - m_finalPage.setCommitPage(true); - - m_device.reset(new QnxDevice); - - m_setupPage.setDevice(m_device); - m_keyDeploymentPage.setDevice(m_device); - } - - IDevice::Ptr device() const { return m_device; } - -private: - GenericLinuxDeviceConfigurationWizardSetupPage m_setupPage; - GenericLinuxDeviceConfigurationWizardKeyDeploymentPage m_keyDeploymentPage; - GenericLinuxDeviceConfigurationWizardFinalPage m_finalPage; - - LinuxDevice::Ptr m_device; -}; - -// Factory - QnxDeviceFactory::QnxDeviceFactory() : IDeviceFactory(Constants::QNX_QNX_OS_TYPE) { setDisplayName(Tr::tr("QNX Device")); @@ -123,11 +93,13 @@ QnxDeviceFactory::QnxDeviceFactory() : IDeviceFactory(Constants::QNX_QNX_OS_TYPE ":/qnx/images/qnxdevice.png"); setQuickCreationAllowed(true); setConstructionFunction([] { return IDevice::Ptr(new QnxDevice); }); - setCreator([] { - QnxDeviceWizard wizard; + setCreator([]() -> IDevice::Ptr { + const IDevice::Ptr device = IDevice::Ptr(new QnxDevice); + GenericLinuxDeviceConfigurationWizard wizard( + Tr::tr("New QNX Device Configuration Setup"), device); if (wizard.exec() != QDialog::Accepted) - return IDevice::Ptr(); - return wizard.device(); + return {}; + return device; }); } diff --git a/src/plugins/remotelinux/genericlinuxdeviceconfigurationwizard.cpp b/src/plugins/remotelinux/genericlinuxdeviceconfigurationwizard.cpp index 48e61ca4670..b1270a276a0 100644 --- a/src/plugins/remotelinux/genericlinuxdeviceconfigurationwizard.cpp +++ b/src/plugins/remotelinux/genericlinuxdeviceconfigurationwizard.cpp @@ -4,57 +4,28 @@ #include "genericlinuxdeviceconfigurationwizard.h" #include "genericlinuxdeviceconfigurationwizardpages.h" -#include "linuxdevice.h" -#include "remotelinux_constants.h" -#include "remotelinuxtr.h" #include -#include -#include - -#include - -using namespace ProjectExplorer; - namespace RemoteLinux { -namespace Internal { -class GenericLinuxDeviceConfigurationWizardPrivate -{ -public: - GenericLinuxDeviceConfigurationWizardSetupPage setupPage; - GenericLinuxDeviceConfigurationWizardKeyDeploymentPage keyDeploymentPage; - GenericLinuxDeviceConfigurationWizardFinalPage finalPage; - LinuxDevice::Ptr device; -}; - -} // namespace Internal - -GenericLinuxDeviceConfigurationWizard::GenericLinuxDeviceConfigurationWizard() +GenericLinuxDeviceConfigurationWizard::GenericLinuxDeviceConfigurationWizard( + const QString &title, const ProjectExplorer::IDevicePtr &device) : Utils::Wizard(Core::ICore::dialogParent()) - , d(new Internal::GenericLinuxDeviceConfigurationWizardPrivate) { - setWindowTitle(Tr::tr("New Remote Linux Device Configuration Setup")); - addPage(&d->setupPage); - addPage(&d->keyDeploymentPage); - addPage(&d->finalPage); - d->finalPage.setCommitPage(true); + setWindowTitle(title); - d->device = LinuxDevice::create(); + auto setupPage = new GenericLinuxDeviceConfigurationWizardSetupPage; + auto keyDeploymentPage = new GenericLinuxDeviceConfigurationWizardKeyDeploymentPage; + auto finalPage = new GenericLinuxDeviceConfigurationWizardFinalPage; - d->setupPage.setDevice(d->device); - d->keyDeploymentPage.setDevice(d->device); -} + addPage(setupPage); + addPage(keyDeploymentPage); + addPage(finalPage); -GenericLinuxDeviceConfigurationWizard::~GenericLinuxDeviceConfigurationWizard() -{ - delete d; -} - -IDevice::Ptr GenericLinuxDeviceConfigurationWizard::device() -{ - return d->device; + finalPage->setCommitPage(true); + setupPage->setDevice(device); + keyDeploymentPage->setDevice(device); } } // namespace RemoteLinux diff --git a/src/plugins/remotelinux/genericlinuxdeviceconfigurationwizard.h b/src/plugins/remotelinux/genericlinuxdeviceconfigurationwizard.h index 87b27bf402e..2d1892e4c36 100644 --- a/src/plugins/remotelinux/genericlinuxdeviceconfigurationwizard.h +++ b/src/plugins/remotelinux/genericlinuxdeviceconfigurationwizard.h @@ -9,20 +9,14 @@ #include namespace RemoteLinux { -namespace Internal { class GenericLinuxDeviceConfigurationWizardPrivate; } class REMOTELINUX_EXPORT GenericLinuxDeviceConfigurationWizard : public Utils::Wizard { Q_OBJECT public: - GenericLinuxDeviceConfigurationWizard(); - ~GenericLinuxDeviceConfigurationWizard() override; - - ProjectExplorer::IDevicePtr device(); - -private: - Internal::GenericLinuxDeviceConfigurationWizardPrivate * const d; + GenericLinuxDeviceConfigurationWizard(const QString &title, + const ProjectExplorer::IDevicePtr &device); }; } // namespace RemoteLinux diff --git a/src/plugins/remotelinux/genericlinuxdeviceconfigurationwizardpages.cpp b/src/plugins/remotelinux/genericlinuxdeviceconfigurationwizardpages.cpp index 0a34683bdeb..03f945098ac 100644 --- a/src/plugins/remotelinux/genericlinuxdeviceconfigurationwizardpages.cpp +++ b/src/plugins/remotelinux/genericlinuxdeviceconfigurationwizardpages.cpp @@ -35,7 +35,7 @@ public: QSpinBox *sshPortSpinBox; FancyLineEdit *userNameLineEdit; - LinuxDevice::Ptr device; + IDevicePtr device; }; class GenericLinuxDeviceConfigurationWizardFinalPagePrivate @@ -116,7 +116,8 @@ QString GenericLinuxDeviceConfigurationWizardSetupPage::configurationName() cons return d->nameLineEdit->text().trimmed(); } -void GenericLinuxDeviceConfigurationWizardSetupPage::setDevice(const LinuxDevice::Ptr &device) +void GenericLinuxDeviceConfigurationWizardSetupPage::setDevice( + const ProjectExplorer::IDevicePtr &device) { d->device = device; } @@ -158,7 +159,7 @@ struct GenericLinuxDeviceConfigurationWizardKeyDeploymentPage::Private PathChooser keyFileChooser; QLabel iconLabel; - LinuxDevice::Ptr device; + IDevicePtr device; }; GenericLinuxDeviceConfigurationWizardKeyDeploymentPage::GenericLinuxDeviceConfigurationWizardKeyDeploymentPage(QWidget *parent) @@ -214,7 +215,8 @@ GenericLinuxDeviceConfigurationWizardKeyDeploymentPage::~GenericLinuxDeviceConfi delete d; } -void GenericLinuxDeviceConfigurationWizardKeyDeploymentPage::setDevice(const LinuxDevice::Ptr &device) +void GenericLinuxDeviceConfigurationWizardKeyDeploymentPage::setDevice( + const ProjectExplorer::IDevicePtr &device) { d->device = device; } diff --git a/src/plugins/remotelinux/genericlinuxdeviceconfigurationwizardpages.h b/src/plugins/remotelinux/genericlinuxdeviceconfigurationwizardpages.h index 2e2d5298913..4e3f15965fd 100644 --- a/src/plugins/remotelinux/genericlinuxdeviceconfigurationwizardpages.h +++ b/src/plugins/remotelinux/genericlinuxdeviceconfigurationwizardpages.h @@ -24,7 +24,7 @@ public: explicit GenericLinuxDeviceConfigurationWizardSetupPage(QWidget *parent = nullptr); ~GenericLinuxDeviceConfigurationWizardSetupPage() override; - void setDevice(const LinuxDevice::Ptr &device); + void setDevice(const ProjectExplorer::IDevicePtr &device); private: void initializePage() override; @@ -44,7 +44,7 @@ public: explicit GenericLinuxDeviceConfigurationWizardKeyDeploymentPage(QWidget *parent = nullptr); ~GenericLinuxDeviceConfigurationWizardKeyDeploymentPage() override; - void setDevice(const LinuxDevice::Ptr &device); + void setDevice(const ProjectExplorer::IDevicePtr &device); private: void initializePage() override; diff --git a/src/plugins/remotelinux/linuxdevice.cpp b/src/plugins/remotelinux/linuxdevice.cpp index d78a91c99a2..782ed03d2fd 100644 --- a/src/plugins/remotelinux/linuxdevice.cpp +++ b/src/plugins/remotelinux/linuxdevice.cpp @@ -1475,8 +1475,6 @@ void LinuxDevice::checkOsType() namespace Internal { -// Factory - LinuxDeviceFactory::LinuxDeviceFactory() : IDeviceFactory(Constants::GenericLinuxOsType) { @@ -1484,11 +1482,13 @@ LinuxDeviceFactory::LinuxDeviceFactory() setIcon(QIcon()); setConstructionFunction(&LinuxDevice::create); setQuickCreationAllowed(true); - setCreator([] { - GenericLinuxDeviceConfigurationWizard wizard; + setCreator([]() -> IDevice::Ptr { + const IDevice::Ptr device = LinuxDevice::create(); + GenericLinuxDeviceConfigurationWizard wizard( + Tr::tr("New Remote Linux Device Configuration Setup"), device); if (wizard.exec() != QDialog::Accepted) - return IDevice::Ptr(); - return wizard.device(); + return {}; + return device; }); }