VirtualBox

Changeset 91645 in vbox for trunk


Ignore:
Timestamp:
Oct 8, 2021 3:04:50 PM (4 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
147370
Message:

FE/Qt: bugref:9996: Overall cleanup for UIWizardImportApp.

Location:
trunk/src/VBox/Frontends/VirtualBox/src/wizards/importappliance
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIApplianceUnverifiedCertificateViewer.h

    r82968 r91645  
    55
    66/*
    7  * Copyright (C) 2009-2020 Oracle Corporation
     7 * Copyright (C) 2009-2021 Oracle Corporation
    88 *
    99 * This file is part of VirtualBox Open Source Edition (OSE), as
     
    4848
    4949    /** Handles translation event. */
    50     virtual void retranslateUi() /* override */;
     50    virtual void retranslateUi() /* override final */;
    5151
    5252private:
  • trunk/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIWizardImportApp.cpp

    r91589 r91645  
    147147*********************************************************************************************************************************/
    148148
    149 UIWizardImportApp::UIWizardImportApp(QWidget *pParent, bool fImportFromOCIByDefault, const QString &strFileName)
     149UIWizardImportApp::UIWizardImportApp(QWidget *pParent,
     150                                     bool fImportFromOCIByDefault,
     151                                     const QString &strFileName)
    150152    : UIWizard(pParent, WizardType_ImportAppliance)
    151153    , m_fImportFromOCIByDefault(fImportFromOCIByDefault)
     
    189191}
    190192
    191 CAppliance UIWizardImportApp::appliance() const
    192 {
    193     return m_comAppliance;
    194 }
    195 
    196 bool UIWizardImportApp::setFile(const QString &strFileName)
     193bool UIWizardImportApp::setFile(const QString &strName)
    197194{
    198195    /* Clear object: */
    199     m_comAppliance = CAppliance();
    200 
    201     if (strFileName.isEmpty())
     196    m_comLocalAppliance = CAppliance();
     197
     198    if (strName.isEmpty())
    202199        return false;
    203200
     
    212209
    213210    /* Read the file to appliance: */
    214     CProgress comProgress = comAppliance.Read(strFileName);
     211    CProgress comProgress = comAppliance.Read(strName);
    215212    if (!comAppliance.isOk())
    216213    {
     
    237234
    238235    /* Remember appliance: */
    239     m_comAppliance = comAppliance;
     236    m_comLocalAppliance = comAppliance;
    240237
    241238    /* Success finally: */
     
    245242bool UIWizardImportApp::isValid() const
    246243{
    247     return m_comAppliance.isNotNull();
     244    return m_comLocalAppliance.isNotNull();
    248245}
    249246
     
    251248{
    252249    /* Check whether there was cloud source selected: */
    253     const bool fIsSourceCloudOne = field("isSourceCloudOne").toBool();
    254     if (fIsSourceCloudOne)
    255     {
    256         /* Acquire prepared appliance: */
     250    if (field("isSourceCloudOne").toBool())
     251    {
     252        /* Make sure cloud appliance valid: */
    257253        CAppliance comAppliance = field("cloudAppliance").value<CAppliance>();
    258         AssertReturn(!comAppliance.isNull(), false);
     254        AssertReturn(comAppliance.isNotNull(), false);
    259255
    260256        /* No options for cloud VMs for now: */
     
    276272        {
    277273            UIImportLicenseViewer ilv(this);
    278             for (int i = 0; i < licAgreements.size(); ++ i)
     274            for (int i = 0; i < licAgreements.size(); ++i)
    279275            {
    280276                const QPair<QString, QString> &lic = licAgreements.at(i);
     
    287283        /* Gather import options: */
    288284        QVector<KImportOptions> options;
    289         const MACAddressImportPolicy enmPolicy = field("macAddressImportPolicy").value<MACAddressImportPolicy>();
    290         switch (enmPolicy)
     285        switch (field("macAddressImportPolicy").value<MACAddressImportPolicy>())
    291286        {
    292287            case MACAddressImportPolicy_KeepAllMACs: options.append(KImportOptions_KeepAllMACs); break;
     
    294289            default: break;
    295290        }
    296         bool fImportHDsAsVDI = field("importHDsAsVDI").toBool();
    297         if (fImportHDsAsVDI)
     291        if (field("importHDsAsVDI").toBool())
    298292            options.append(KImportOptions_ImportToVDI);
    299293
    300294        /* Import appliance: */
    301         UINotificationProgressApplianceImport *pNotification = new UINotificationProgressApplianceImport(m_comAppliance,
     295        UINotificationProgressApplianceImport *pNotification = new UINotificationProgressApplianceImport(m_comLocalAppliance,
    302296                                                                                                         options);
    303297        gpNotificationCenter->append(pNotification);
     
    322316    QList<QPair<QString, QString> > list;
    323317
    324     foreach (CVirtualSystemDescription comVsd, m_comAppliance.GetVirtualSystemDescriptions())
     318    foreach (CVirtualSystemDescription comVsd, m_comLocalAppliance.GetVirtualSystemDescriptions())
    325319    {
    326320        QVector<QString> strLicense;
  • trunk/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIWizardImportApp.h

    r91589 r91645  
    5959    };
    6060
    61     /** Constructs export appliance wizard passing @a pParent to the base-class.
    62       * @param  strFileName  Brings appliance file name. */
    63     UIWizardImportApp(QWidget *pParent, bool fImportFromOCIByDefault, const QString &strFileName);
     61    /** Constructs Import Appliance wizard passing @a pParent to the base-class.
     62      * @param  fImportFromOCIByDefault  Brings whether wizard should start with OCI target.
     63      * @param  strFileName              Brings local file name to import OVF/OVA from. */
     64    UIWizardImportApp(QWidget *pParent,
     65                      bool fImportFromOCIByDefault,
     66                      const QString &strFileName);
    6467
    6568    /** Prepares all. */
    6669    virtual void prepare() /* override */;
    6770
    68     /** Returns appliance. */
    69     CAppliance appliance() const;
    70     /** Defines @a strFileName. */
    71     bool setFile(const QString &strFileName);
    72     /** Returns whether appliance is valid. */
    73     bool isValid() const;
     71    /** @name Local import fields.
     72      * @{ */
     73        /** Returns local Appliance object. */
     74        CAppliance localAppliance() const { return m_comLocalAppliance; }
     75        /** Defines file @a strName. */
     76        bool setFile(const QString &strName);
     77        /** Returns whether appliance is valid. */
     78        bool isValid() const;
     79    /** @} */
    7480
    75     /** Imports appliance. */
    76     bool importAppliance();
     81    /** @name Auxiliary stuff.
     82      * @{ */
     83        /** Imports appliance. */
     84        bool importAppliance();
     85    /** @} */
    7786
    7887protected:
    7988
    80     /** Handles translation event. */
    81     virtual void retranslateUi() /* override */;
     89    /** @name Inherited stuff.
     90      * @{ */
     91        /** Handles translation event. */
     92        virtual void retranslateUi() /* override final */;
     93    /** @} */
    8294
    8395private:
    8496
    85     /** Returns a list of license agreement pairs. */
    86     QList<QPair<QString, QString> > licenseAgreements() const;
     97    /** @name Auxiliary stuff.
     98      * @{ */
     99        /** Returns a list of license agreement pairs. */
     100        QList<QPair<QString, QString> > licenseAgreements() const;
     101    /** @} */
    87102
    88     /** Holds whether default source should be Import from OCI. */
    89     bool     m_fImportFromOCIByDefault;
    90     /** Handles the appliance file name. */
    91     QString  m_strFileName;
     103    /** @name Arguments.
     104      * @{ */
     105        /** Holds whether default source should be Import from OCI. */
     106        bool     m_fImportFromOCIByDefault;
     107        /** Handles the appliance file name. */
     108        QString  m_strFileName;
     109    /** @} */
    92110
    93     /** Holds the appliance wrapper instance. */
    94     CAppliance  m_comAppliance;
     111    /** @name Local import fields.
     112      * @{ */
     113        /** Holds the local appliance wrapper instance. */
     114        CAppliance  m_comLocalAppliance;
     115    /** @} */
    95116};
    96117
  • trunk/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIWizardImportAppPageBasic1.cpp

    r91590 r91645  
    55
    66/*
    7  * Copyright (C) 2009-2020 Oracle Corporation
     7 * Copyright (C) 2009-2021 Oracle Corporation
    88 *
    99 * This file is part of VirtualBox Open Source Edition (OSE), as
     
    2121#include <QLabel>
    2222#include <QListWidget>
    23 #include <QStackedLayout>
     23#include <QStackedWidget>
    2424#include <QTableWidget>
    2525#include <QVBoxLayout>
     
    5454    , m_pSourceLabel(0)
    5555    , m_pSourceComboBox(0)
    56     , m_pStackedLayout(0)
     56    , m_pSettingsWidget1(0)
    5757    , m_pLocalContainerLayout(0)
    5858    , m_pFileLabel(0)
     
    7575    m_pSourceComboBox->clear();
    7676
    77     /* Compose hardcoded sources list, there might be few of list items: */
     77    /* Compose hardcoded sources list: */
    7878    QStringList sources;
    7979    sources << "local";
     
    8181    foreach (const QString &strShortName, sources)
    8282    {
    83         /* Compose empty combo item, fill it's data: */
     83        /* Compose empty item, fill it's data: */
    8484        m_pSourceComboBox->addItem(QString());
    8585        m_pSourceComboBox->setItemData(m_pSourceComboBox->count() - 1, strShortName, SourceData_ShortName);
     
    302302{
    303303    /* Update page appearance according to chosen source: */
    304     m_pStackedLayout->setCurrentIndex((int)isSourceCloudOne());
     304    m_pSettingsWidget1->setCurrentIndex((int)isSourceCloudOne());
    305305}
    306306
     
    406406            pMainLayout->addWidget(m_pLabelDescription);
    407407
    408         /* Prepare stacked layout: */
    409         m_pStackedLayout = new QStackedLayout;
    410         if (m_pStackedLayout)
     408        /* Prepare settings widget: */
     409        m_pSettingsWidget1 = new QStackedWidget(this);
     410        if (m_pSettingsWidget1)
    411411        {
    412412            /* Prepare local container: */
    413             QWidget *pLocalContainer = new QWidget(this);
    414             if (pLocalContainer)
     413            QWidget *pContainerLocal = new QWidget(m_pSettingsWidget1);
     414            if (pContainerLocal)
    415415            {
    416416                /* Prepare local container layout: */
    417                 m_pLocalContainerLayout = new QGridLayout(pLocalContainer);
     417                m_pLocalContainerLayout = new QGridLayout(pContainerLocal);
    418418                if (m_pLocalContainerLayout)
    419419                {
     
    424424
    425425                    /* Prepare file label: */
    426                     m_pFileLabel = new QLabel(pLocalContainer);
     426                    m_pFileLabel = new QLabel(pContainerLocal);
    427427                    if (m_pFileLabel)
    428428                        m_pLocalContainerLayout->addWidget(m_pFileLabel, 0, 0, Qt::AlignRight);
    429429
    430430                    /* Prepare file-path selector: */
    431                     m_pFileSelector = new UIEmptyFilePathSelector(pLocalContainer);
     431                    m_pFileSelector = new UIEmptyFilePathSelector(pContainerLocal);
    432432                    if (m_pFileSelector)
    433433                    {
     
    441441                }
    442442
    443                 /* Add into layout: */
    444                 m_pStackedLayout->addWidget(pLocalContainer);
     443                /* Add into widget: */
     444                m_pSettingsWidget1->addWidget(pContainerLocal);
    445445            }
    446446
    447447            /* Prepare cloud container: */
    448             QWidget *pCloudContainer = new QWidget(this);
    449             if (pCloudContainer)
     448            QWidget *pContainerCloud = new QWidget(m_pSettingsWidget1);
     449            if (pContainerCloud)
    450450            {
    451451                /* Prepare cloud container layout: */
    452                 m_pCloudContainerLayout = new QGridLayout(pCloudContainer);
     452                m_pCloudContainerLayout = new QGridLayout(pContainerCloud);
    453453                if (m_pCloudContainerLayout)
    454454                {
     
    460460
    461461                    /* Prepare profile label: */
    462                     m_pProfileLabel = new QLabel(pCloudContainer);
     462                    m_pProfileLabel = new QLabel(pContainerCloud);
    463463                    if (m_pProfileLabel)
    464464                        m_pCloudContainerLayout->addWidget(m_pProfileLabel, 0, 0, Qt::AlignRight);
     
    472472
    473473                        /* Prepare profile combo-box: */
    474                         m_pProfileComboBox = new QIComboBox(pCloudContainer);
     474                        m_pProfileComboBox = new QIComboBox(pContainerCloud);
    475475                        if (m_pProfileComboBox)
    476476                        {
     
    480480
    481481                        /* Prepare profile tool-button: */
    482                         m_pProfileToolButton = new QIToolButton(pCloudContainer);
     482                        m_pProfileToolButton = new QIToolButton(pContainerCloud);
    483483                        if (m_pProfileToolButton)
    484484                        {
     
    493493
    494494                    /* Prepare profile instance label: */
    495                     m_pProfileInstanceLabel = new QLabel(pCloudContainer);
     495                    m_pProfileInstanceLabel = new QLabel(pContainerCloud);
    496496                    if (m_pProfileInstanceLabel)
    497497                        m_pCloudContainerLayout->addWidget(m_pProfileInstanceLabel, 1, 0, Qt::AlignRight);
    498498
    499499                    /* Prepare profile instances table: */
    500                     m_pProfileInstanceList = new QListWidget(pCloudContainer);
     500                    m_pProfileInstanceList = new QListWidget(pContainerCloud);
    501501                    if (m_pProfileInstanceList)
    502502                    {
     
    514514                }
    515515
    516                 /* Add into layout: */
    517                 m_pStackedLayout->addWidget(pCloudContainer);
     516                /* Add into widget: */
     517                m_pSettingsWidget1->addWidget(pContainerCloud);
    518518            }
    519519
    520520            /* Add into layout: */
    521             pMainLayout->addLayout(m_pStackedLayout);
     521            pMainLayout->addWidget(m_pSettingsWidget1);
    522522        }
    523523    }
     
    525525    /* Setup connections: */
    526526    connect(gVBoxEvents, &UIVirtualBoxEventHandler::sigCloudProfileRegistered,
    527             this, &UIWizardImportAppPageBasic1::sltHandleSourceChange);
     527            this, &UIWizardImportAppPageBasic1::sltHandleSourceComboChange);
    528528    connect(gVBoxEvents, &UIVirtualBoxEventHandler::sigCloudProfileChanged,
    529             this, &UIWizardImportAppPageBasic1::sltHandleSourceChange);
    530     connect(m_pSourceComboBox, static_cast<void(QIComboBox::*)(int)>(&QIComboBox::activated),
    531             this, &UIWizardImportAppPageBasic1::sltHandleSourceChange);
     529            this, &UIWizardImportAppPageBasic1::sltHandleSourceComboChange);
     530    connect(m_pSourceComboBox, static_cast<void(QIComboBox::*)(int)>(&QIComboBox::currentIndexChanged),
     531            this, &UIWizardImportAppPageBasic1::sltHandleSourceComboChange);
    532532    connect(m_pFileSelector, &UIEmptyFilePathSelector::pathChanged,
    533533            this, &UIWizardImportAppPageBasic1::completeChanged);
     
    640640bool UIWizardImportAppPageBasic1::isComplete() const
    641641{
     642    /* Initial result: */
    642643    bool fResult = true;
    643644
    644     /* Check appliance settings: */
    645     if (fResult)
    646     {
    647         const bool fOVF = !isSourceCloudOne();
    648         const bool fCSP = !fOVF;
    649 
    650         fResult =    (   fOVF
    651                       && UICommon::hasAllowedExtension(m_pFileSelector->path().toLower(), OVFFileExts)
    652                       && QFile::exists(m_pFileSelector->path()))
    653                   || (   fCSP
    654                       && !m_comCloudProfile.isNull()
    655                       && !m_comCloudClient.isNull()
    656                       && !machineId().isNull());
    657     }
    658 
     645    /* Check whether there was cloud source selected: */
     646    if (isSourceCloudOne())
     647        fResult = !machineId().isNull();
     648    else
     649        fResult =    UICommon::hasAllowedExtension(m_pFileSelector->path().toLower(), OVFFileExts)
     650                  && QFile::exists(m_pFileSelector->path());
     651
     652    /* Return result: */
    659653    return fResult;
    660654}
     
    662656bool UIWizardImportAppPageBasic1::validatePage()
    663657{
     658    /* Initial result: */
     659    bool fResult = true;
     660
     661    /* Check whether there was cloud source selected: */
    664662    if (isSourceCloudOne())
    665663    {
    666664        /* Create appliance & populate form properties: */
    667665        populateFormProperties();
    668         /* And make sure they are not null: */
    669         return m_comCloudAppliance.isNotNull() && m_comVSDForm.isNotNull();
     666        /* Which is required to continue to the next page: */
     667        fResult =    m_comCloudAppliance.isNotNull()
     668                  && m_comVSDForm.isNotNull();
    670669    }
    671670    else
     
    681680            m_pFileSelector->resetModified();
    682681        }
    683 
    684682        /* If we have a valid ovf proceed to the appliance settings page: */
    685         return qobject_cast<UIWizardImportApp*>(wizard())->isValid();
    686     }
     683        fResult = qobject_cast<UIWizardImportApp*>(wizard())->isValid();
     684    }
     685
     686    /* Return result: */
     687    return fResult;
    687688}
    688689
     
    711712}
    712713
    713 void UIWizardImportAppPageBasic1::sltHandleSourceChange()
    714 {
    715     /* Update tool-tip: */
     714void UIWizardImportAppPageBasic1::sltHandleSourceComboChange()
     715{
     716    /* Update combo tool-tip: */
    716717    updateSourceComboToolTip();
    717718
     
    721722    populateProfile();
    722723    populateProfileInstances();
     724
     725    /* Notify about changes: */
    723726    emit completeChanged();
    724727}
     
    729732    populateProfile();
    730733    populateProfileInstances();
     734
     735    /* Notify about changes: */
    731736    emit completeChanged();
    732737}
  • trunk/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIWizardImportAppPageBasic1.h

    r91590 r91645  
    55
    66/*
    7  * Copyright (C) 2009-2020 Oracle Corporation
     7 * Copyright (C) 2009-2021 Oracle Corporation
    88 *
    99 * This file is part of VirtualBox Open Source Edition (OSE), as
     
    3939class QListWidget;
    4040class QTableWidget;
    41 class QStackedLayout;
     41class QStackedWidget;
    4242class QIComboBox;
    4343class QIRichTextLabel;
     
    125125    QIComboBox  *m_pSourceComboBox;
    126126
    127     /** Holds the stacked layout instance. */
    128     QStackedLayout *m_pStackedLayout;
     127    /** Holds the settings widget 1 instance. */
     128    QStackedWidget *m_pSettingsWidget1;
    129129
    130130    /** Holds the local container layout instance. */
     
    161161public:
    162162
    163     /** Constructs 1st basic page. */
     163    /** Constructs 1st basic page.
     164      * @param  fImportFromOCIByDefault  Brings whether we should propose import from OCI by default. */
    164165    UIWizardImportAppPageBasic1(bool fImportFromOCIByDefault);
    165166
     
    170171
    171172    /** Handles translation event. */
    172     virtual void retranslateUi() /* override */;
     173    virtual void retranslateUi() /* override final */;
    173174
    174175    /** Performs page initialization. */
    175     virtual void initializePage() /* override */;
     176    virtual void initializePage() /* override final */;
    176177
    177178    /** Returns whether page is complete. */
    178     virtual bool isComplete() const /* override */;
     179    virtual bool isComplete() const /* override final */;
    179180
    180181    /** Performs page validation. */
    181     virtual bool validatePage() /* override */;
     182    virtual bool validatePage() /* override final */;
    182183
    183184    /** Updates page appearance. */
    184     virtual void updatePageAppearance() /* override */;
     185    virtual void updatePageAppearance() /* override final */;
    185186
    186187private slots:
    187188
    188     /** Handles import source change. */
    189     void sltHandleSourceChange();
    190 
    191     /** Handles change in profile combo-box. */
     189    /** Handles source combo change. */
     190    void sltHandleSourceComboChange();
     191
     192    /** Handles profile combo change. */
    192193    void sltHandleProfileComboChange();
    193 
    194194    /** Handles profile tool-button click. */
    195195    void sltHandleProfileButtonClick();
  • trunk/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIWizardImportAppPageBasic2.cpp

    r91589 r91645  
    55
    66/*
    7  * Copyright (C) 2009-2020 Oracle Corporation
     7 * Copyright (C) 2009-2021 Oracle Corporation
    88 *
    99 * This file is part of VirtualBox Open Source Edition (OSE), as
     
    1818/* Qt includes: */
    1919#include <QCheckBox>
    20 #include <QComboBox>
    2120#include <QGridLayout>
    2221#include <QLabel>
    2322#include <QPointer>
    24 #include <QStackedLayout>
     23#include <QStackedWidget>
    2524#include <QVBoxLayout>
    2625
    2726/* GUI includes: */
     27#include "QIComboBox.h"
    2828#include "QIRichTextLabel.h"
    2929#include "UIApplianceImportEditorWidget.h"
     
    4848
    4949UIWizardImportAppPage2::UIWizardImportAppPage2()
    50     : m_pSettingsCntLayout(0)
     50    : m_pSettingsWidget2(0)
    5151    , m_pApplianceWidget(0)
    5252    , m_pLabelImportFilePath(0)
     
    105105    const bool fIsSourceCloudOne = fieldImp("isSourceCloudOne").toBool();
    106106    /* Update page appearance according to chosen source: */
    107     m_pSettingsCntLayout->setCurrentIndex((int)fIsSourceCloudOne);
     107    m_pSettingsWidget2->setCurrentIndex((int)fIsSourceCloudOne);
    108108}
    109109
     
    154154    {
    155155        /* Prepare label: */
    156         m_pLabel = new QIRichTextLabel(this);
    157         if (m_pLabel)
    158             pMainLayout->addWidget(m_pLabel);
    159 
    160         /* Prepare settings container layout: */
    161         m_pSettingsCntLayout = new QStackedLayout;
    162         if (m_pSettingsCntLayout)
     156        m_pLabelDescription = new QIRichTextLabel(this);
     157        if (m_pLabelDescription)
     158            pMainLayout->addWidget(m_pLabelDescription);
     159
     160        /* Prepare settings widget 2: */
     161        m_pSettingsWidget2 = new QStackedWidget(this);
     162        if (m_pSettingsWidget2)
    163163        {
    164             /* Prepare appliance widget container: */
    165             QWidget *pApplianceWidgetCnt = new QWidget(this);
    166             if (pApplianceWidgetCnt)
     164            /* Prepare appliance container: */
     165            QWidget *pContainerAppliance = new QWidget(m_pSettingsWidget2);
     166            if (pContainerAppliance)
    167167            {
    168                 /* Prepare appliance widget layout: */
    169                 QGridLayout *pApplianceWidgetLayout = new QGridLayout(pApplianceWidgetCnt);
    170                 if (pApplianceWidgetLayout)
     168                /* Prepare appliance layout: */
     169                QGridLayout *pLayoutAppliance = new QGridLayout(pContainerAppliance);
     170                if (pLayoutAppliance)
    171171                {
    172                     pApplianceWidgetLayout->setContentsMargins(0, 0, 0, 0);
    173                     pApplianceWidgetLayout->setColumnStretch(0, 0);
    174                     pApplianceWidgetLayout->setColumnStretch(1, 1);
     172                    pLayoutAppliance->setContentsMargins(0, 0, 0, 0);
     173                    pLayoutAppliance->setColumnStretch(0, 0);
     174                    pLayoutAppliance->setColumnStretch(1, 1);
    175175
    176176                    /* Prepare appliance widget: */
    177                     m_pApplianceWidget = new UIApplianceImportEditorWidget(pApplianceWidgetCnt);
     177                    m_pApplianceWidget = new UIApplianceImportEditorWidget(pContainerAppliance);
    178178                    if (m_pApplianceWidget)
    179179                    {
    180180                        m_pApplianceWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding);
    181                         pApplianceWidgetLayout->addWidget(m_pApplianceWidget, 0, 0, 1, 3);
     181                        pLayoutAppliance->addWidget(m_pApplianceWidget, 0, 0, 1, 3);
    182182                    }
    183183
    184184                    /* Prepare path selector label: */
    185                     m_pLabelImportFilePath = new QLabel(pApplianceWidgetCnt);
     185                    m_pLabelImportFilePath = new QLabel(pContainerAppliance);
    186186                    if (m_pLabelImportFilePath)
    187187                    {
    188188                        m_pLabelImportFilePath->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
    189                         pApplianceWidgetLayout->addWidget(m_pLabelImportFilePath, 1, 0);
     189                        pLayoutAppliance->addWidget(m_pLabelImportFilePath, 1, 0);
    190190                    }
    191191                    /* Prepare path selector editor: */
    192                     m_pEditorImportFilePath = new UIFilePathSelector(pApplianceWidgetCnt);
     192                    m_pEditorImportFilePath = new UIFilePathSelector(pContainerAppliance);
    193193                    if (m_pEditorImportFilePath)
    194194                    {
     
    197197                        m_pEditorImportFilePath->setPath(uiCommon().virtualBox().GetSystemProperties().GetDefaultMachineFolder());
    198198                        m_pLabelImportFilePath->setBuddy(m_pEditorImportFilePath);
    199                         pApplianceWidgetLayout->addWidget(m_pEditorImportFilePath, 1, 1, 1, 2);
     199                        pLayoutAppliance->addWidget(m_pEditorImportFilePath, 1, 1, 1, 2);
    200200                    }
    201201
    202202                    /* Prepare MAC address policy label: */
    203                     m_pLabelMACImportPolicy = new QLabel(pApplianceWidgetCnt);
     203                    m_pLabelMACImportPolicy = new QLabel(pContainerAppliance);
    204204                    if (m_pLabelMACImportPolicy)
    205205                    {
    206206                        m_pLabelMACImportPolicy->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
    207                         pApplianceWidgetLayout->addWidget(m_pLabelMACImportPolicy, 2, 0);
     207                        pLayoutAppliance->addWidget(m_pLabelMACImportPolicy, 2, 0);
    208208                    }
    209209                    /* Prepare MAC address policy combo: */
    210                     m_pComboMACImportPolicy = new QComboBox(pApplianceWidgetCnt);
     210                    m_pComboMACImportPolicy = new QIComboBox(pContainerAppliance);
    211211                    if (m_pComboMACImportPolicy)
    212212                    {
    213213                        m_pComboMACImportPolicy->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
    214214                        m_pLabelMACImportPolicy->setBuddy(m_pComboMACImportPolicy);
    215                         pApplianceWidgetLayout->addWidget(m_pComboMACImportPolicy, 2, 1, 1, 2);
     215                        pLayoutAppliance->addWidget(m_pComboMACImportPolicy, 2, 1, 1, 2);
    216216                    }
    217217
    218218                    /* Prepare additional options label: */
    219                     m_pLabelAdditionalOptions = new QLabel(pApplianceWidgetCnt);
     219                    m_pLabelAdditionalOptions = new QLabel(pContainerAppliance);
    220220                    if (m_pLabelAdditionalOptions)
    221221                    {
    222222                        m_pLabelAdditionalOptions->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
    223                         pApplianceWidgetLayout->addWidget(m_pLabelAdditionalOptions, 3, 0);
     223                        pLayoutAppliance->addWidget(m_pLabelAdditionalOptions, 3, 0);
    224224                    }
    225225                    /* Prepare import HDs as VDIs checkbox: */
    226                     m_pCheckboxImportHDsAsVDI = new QCheckBox(pApplianceWidgetCnt);
     226                    m_pCheckboxImportHDsAsVDI = new QCheckBox(pContainerAppliance);
    227227                    {
    228228                        m_pCheckboxImportHDsAsVDI->setCheckState(Qt::Checked);
    229                         pApplianceWidgetLayout->addWidget(m_pCheckboxImportHDsAsVDI, 3, 1);
     229                        pLayoutAppliance->addWidget(m_pCheckboxImportHDsAsVDI, 3, 1);
    230230                    }
    231231
    232232                    /* Prepare certificate label: */
    233                     m_pCertLabel = new QLabel(pApplianceWidgetCnt);
     233                    m_pCertLabel = new QLabel(pContainerAppliance);
    234234                    if (m_pCertLabel)
    235                         pApplianceWidgetLayout->addWidget(m_pCertLabel, 4, 0, 1, 3);
     235                        pLayoutAppliance->addWidget(m_pCertLabel, 4, 0, 1, 3);
    236236                }
    237237
    238                 /* Add into layout: */
    239                 m_pSettingsCntLayout->addWidget(pApplianceWidgetCnt);
     238                /* Add into widget: */
     239                m_pSettingsWidget2->addWidget(pContainerAppliance);
    240240            }
    241241
    242242            /* Prepare form editor container: */
    243             QWidget *pFormEditorCnt = new QWidget(this);
    244             if (pFormEditorCnt)
     243            QWidget *pContainerFormEditor = new QWidget(m_pSettingsWidget2);
     244            if (pContainerFormEditor)
    245245            {
    246246                /* Prepare form editor layout: */
    247                 QVBoxLayout *pFormEditorLayout = new QVBoxLayout(pFormEditorCnt);
    248                 if (pFormEditorLayout)
     247                QVBoxLayout *pLayoutFormEditor = new QVBoxLayout(pContainerFormEditor);
     248                if (pLayoutFormEditor)
    249249                {
    250                     pFormEditorLayout->setContentsMargins(0, 0, 0, 0);
     250                    pLayoutFormEditor->setContentsMargins(0, 0, 0, 0);
    251251
    252252                    /* Prepare form editor widget: */
    253                     m_pFormEditor = new UIFormEditorWidget(pFormEditorCnt);
     253                    m_pFormEditor = new UIFormEditorWidget(pContainerFormEditor);
    254254                    if (m_pFormEditor)
    255                         pFormEditorLayout->addWidget(m_pFormEditor);
     255                        pLayoutFormEditor->addWidget(m_pFormEditor);
    256256                }
    257257
    258                 /* Add into layout: */
    259                 m_pSettingsCntLayout->addWidget(pFormEditorCnt);
     258                /* Add into widget: */
     259                m_pSettingsWidget2->addWidget(pContainerFormEditor);
    260260            }
    261261
    262262            /* Add into layout: */
    263             pMainLayout->addLayout(m_pSettingsCntLayout);
     263            pMainLayout->addWidget(m_pSettingsWidget2);
    264264        }
    265265    }
     
    267267    /* Setup connections: */
    268268    connect(m_pEditorImportFilePath, &UIFilePathSelector::pathChanged,
    269             this, &UIWizardImportAppPageBasic2::sltHandlePathChanged);
    270     connect(m_pComboMACImportPolicy, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
    271             this, &UIWizardImportAppPageBasic2::sltHandleMACImportPolicyChange);
     269            this, &UIWizardImportAppPageBasic2::sltHandleImportPathEditorChange);
     270    connect(m_pComboMACImportPolicy, static_cast<void(QIComboBox::*)(int)>(&QIComboBox::currentIndexChanged),
     271            this, &UIWizardImportAppPageBasic2::sltHandleMACImportPolicyComboChange);
    272272
    273273    /* Register fields: */
     
    285285        m_pLabelImportFilePath->setText(tr("&Machine Base Folder:"));
    286286
    287     /* Translate MAC address policy combo-box: */
     287    /* Translate MAC import policy label: */
    288288    if (m_pLabelMACImportPolicy)
    289289    {
     
    394394
    395395        /* Acquire appliance: */
    396         CAppliance comAppliance = qobject_cast<UIWizardImportApp*>(wizard())->appliance();
     396        CAppliance comAppliance = qobject_cast<UIWizardImportApp*>(wizard())->localAppliance();
    397397
    398398        /* Initialize appliance widget: */
    399399        m_pApplianceWidget->setAppliance(comAppliance);
    400400        /* Make sure we initialize appliance widget model with correct base folder path: */
    401         if (m_pEditorImportFilePath)
    402             sltHandlePathChanged(m_pEditorImportFilePath->path());
     401        sltHandleImportPathEditorChange();
    403402
    404403        /* Acquire certificate: */
     
    468467
    469468    /* Check whether there was cloud source selected: */
    470     const bool fIsSourceCloudOne = fieldImp("isSourceCloudOne").toBool();
    471     if (fIsSourceCloudOne)
     469    if (fieldImp("isSourceCloudOne").toBool())
    472470    {
    473471        /* Make sure table has own data committed: */
     
    477475        CVirtualSystemDescriptionForm comForm = fieldImp("vsdForm").value<CVirtualSystemDescriptionForm>();
    478476        fResult = comForm.isNotNull();
    479         Assert(fResult);
    480477
    481478        /* Give changed VSD back to appliance: */
     
    514511    if (fIsSourceCloudOne)
    515512    {
    516         m_pLabel->setText(UIWizardImportApp::tr("These are the the suggested settings of the cloud VM import "
    517                                                 "procedure, they are influencing the resulting local VM instance. "
    518                                                 "You can change many of the properties shown by double-clicking "
    519                                                 "on the items and disable others using the check boxes below."));
     513        m_pLabelDescription->setText(UIWizardImportApp::tr("These are the the suggested settings of the cloud VM import "
     514                                                           "procedure, they are influencing the resulting local VM instance. "
     515                                                           "You can change many of the properties shown by double-clicking "
     516                                                           "on the items and disable others using the check boxes below."));
    520517        m_pFormEditor->setFocus();
    521518    }
    522519    else
    523520    {
    524         m_pLabel->setText(UIWizardImportApp::tr("These are the virtual machines contained in the appliance "
    525                                                 "and the suggested settings of the imported VirtualBox machines. "
    526                                                 "You can change many of the properties shown by double-clicking "
    527                                                 "on the items and disable others using the check boxes below."));
     521        m_pLabelDescription->setText(UIWizardImportApp::tr("These are the virtual machines contained in the appliance "
     522                                                            "and the suggested settings of the imported VirtualBox machines. "
     523                                                            "You can change many of the properties shown by double-clicking "
     524                                                            "on the items and disable others using the check boxes below."));
    528525        m_pApplianceWidget->setFocus();
    529526    }
    530527}
    531528
    532 void UIWizardImportAppPageBasic2::sltHandlePathChanged(const QString &strNewPath)
    533 {
    534     m_pApplianceWidget->setVirtualSystemBaseFolder(strNewPath);
    535 }
    536 
    537 void UIWizardImportAppPageBasic2::sltHandleMACImportPolicyChange()
     529void UIWizardImportAppPageBasic2::sltHandleImportPathEditorChange()
     530{
     531    AssertPtrReturnVoid(m_pApplianceWidget);
     532    AssertPtrReturnVoid(m_pEditorImportFilePath);
     533    m_pApplianceWidget->setVirtualSystemBaseFolder(m_pEditorImportFilePath->path());
     534}
     535
     536void UIWizardImportAppPageBasic2::sltHandleMACImportPolicyComboChange()
    538537{
    539538    updateMACImportPolicyComboToolTip();
  • trunk/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIWizardImportAppPageBasic2.h

    r91589 r91645  
    55
    66/*
    7  * Copyright (C) 2009-2020 Oracle Corporation
     7 * Copyright (C) 2009-2021 Oracle Corporation
    88 *
    99 * This file is part of VirtualBox Open Source Edition (OSE), as
     
    2828/* Forward declarations: */
    2929class QCheckBox;
    30 class QComboBox;
     30class QIComboBox;
    3131class QLabel;
    32 class QStackedLayout;
     32class QStackedWidget;
    3333class QIRichTextLabel;
    3434class UIApplianceImportEditorWidget;
     
    6464    bool importHDsAsVDI() const;
    6565
    66     /** Holds the settings container layout instance. */
    67     QStackedLayout *m_pSettingsCntLayout;
     66    /** Holds the settings widget 2 instance. */
     67    QStackedWidget *m_pSettingsWidget2;
    6868
    6969    /** Holds the appliance widget instance. */
     
    7676    QLabel                        *m_pLabelMACImportPolicy;
    7777    /** Holds the MAC address combo instance. */
    78     QComboBox                     *m_pComboMACImportPolicy;
     78    QIComboBox                    *m_pComboMACImportPolicy;
    7979    /** Holds the additional options label instance. */
    8080    QLabel                        *m_pLabelAdditionalOptions;
     
    105105
    106106    /** Handles translation event. */
    107     virtual void retranslateUi() /* override */;
     107    virtual void retranslateUi() /* override final */;
    108108
    109109    /** Performs page initialization. */
    110     virtual void initializePage() /* override */;
     110    virtual void initializePage() /* override final */;
    111111    /** Performs page cleanup. */
    112     virtual void cleanupPage() /* override */;
     112    virtual void cleanupPage() /* override final */;
    113113
    114114    /** Performs page validation. */
    115     virtual bool validatePage() /* override */;
     115    virtual bool validatePage() /* override final */;
    116116
    117117    /** Updates page appearance. */
    118     virtual void updatePageAppearance() /* override */;
     118    virtual void updatePageAppearance() /* override final */;
    119119
    120120private slots:
    121121
    122     /** Handles file path being changed to @a strNewPath. */
    123     void sltHandlePathChanged(const QString &strNewPath);
    124 
    125     /** Handles MAC address import policy changes. */
    126     void sltHandleMACImportPolicyChange();
     122    /** Handles import path editor change. */
     123    void sltHandleImportPathEditorChange();
     124    /** Handles MAC address import policy combo change. */
     125    void sltHandleMACImportPolicyComboChange();
    127126
    128127private:
     
    131130    QString  m_strFileName;
    132131
    133     /** Holds the label instance. */
    134     QIRichTextLabel *m_pLabel;
     132    /** Holds the description label instance. */
     133    QIRichTextLabel *m_pLabelDescription;
    135134
    136135    /** Holds the signature/certificate info label instance. */
  • trunk/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIWizardImportAppPageExpert.cpp

    r91589 r91645  
    55
    66/*
    7  * Copyright (C) 2009-2020 Oracle Corporation
     7 * Copyright (C) 2009-2021 Oracle Corporation
    88 *
    99 * This file is part of VirtualBox Open Source Edition (OSE), as
     
    2323#include <QLabel>
    2424#include <QListWidget>
    25 #include <QStackedLayout>
     25#include <QStackedWidget>
    2626#include <QTableWidget>
    2727#include <QVBoxLayout>
     
    6464            if (m_pSourceLayout)
    6565            {
    66                 /* Prepare source selector: */
     66                /* Prepare source combo: */
    6767                m_pSourceComboBox = new QIComboBox(m_pCntSource);
    6868                if (m_pSourceComboBox)
    6969                    m_pSourceLayout->addWidget(m_pSourceComboBox, 0, 0);
    7070
    71                 /* Prepare stacked layout: */
    72                 m_pStackedLayout = new QStackedLayout;
    73                 if (m_pStackedLayout)
     71                /* Prepare settings widget 1: */
     72                m_pSettingsWidget1 = new QStackedWidget(m_pCntSource);
     73                if (m_pSettingsWidget1)
    7474                {
    7575                    /* Prepare local container: */
    76                     QWidget *pLocalContainer = new QWidget(m_pCntSource);
    77                     if (pLocalContainer)
     76                    QWidget *pContainerLocal = new QWidget(m_pSettingsWidget1);
     77                    if (pContainerLocal)
    7878                    {
    79                         /* Prepare local container layout: */
    80                         m_pLocalContainerLayout = new QGridLayout(pLocalContainer);
     79                        /* Prepare local widget layout: */
     80                        m_pLocalContainerLayout = new QGridLayout(pContainerLocal);
    8181                        if (m_pLocalContainerLayout)
    8282                        {
     
    8585
    8686                            /* Prepare file-path selector: */
    87                             m_pFileSelector = new UIEmptyFilePathSelector(pLocalContainer);
     87                            m_pFileSelector = new UIEmptyFilePathSelector(pContainerLocal);
    8888                            if (m_pFileSelector)
    8989                            {
     
    9696                        }
    9797
    98                         /* Add into layout: */
    99                         m_pStackedLayout->addWidget(pLocalContainer);
     98                        /* Add into widget: */
     99                        m_pSettingsWidget1->addWidget(pContainerLocal);
    100100                    }
    101101
    102102                    /* Prepare cloud container: */
    103                     QWidget *pCloudContainer = new QWidget(m_pCntSource);
    104                     if (pCloudContainer)
     103                    QWidget *pContainerCloud = new QWidget(m_pSettingsWidget1);
     104                    if (pContainerCloud)
    105105                    {
    106106                        /* Prepare cloud container layout: */
    107                         m_pCloudContainerLayout = new QGridLayout(pCloudContainer);
     107                        m_pCloudContainerLayout = new QGridLayout(pContainerCloud);
    108108                        if (m_pCloudContainerLayout)
    109109                        {
     
    111111                            m_pCloudContainerLayout->setRowStretch(1, 1);
    112112
    113                             /* Prepare sub-layout: */
    114                             QHBoxLayout *pSubLayout = new QHBoxLayout;
    115                             if (pSubLayout)
    116                             {
    117                                 pSubLayout->setContentsMargins(0, 0, 0, 0);
    118                                 pSubLayout->setSpacing(1);
     113                            /* Prepare profile layout: */
     114                            QHBoxLayout *pLayoutProfile = new QHBoxLayout;
     115                            if (pLayoutProfile)
     116                            {
     117                                pLayoutProfile->setContentsMargins(0, 0, 0, 0);
     118                                pLayoutProfile->setSpacing(1);
    119119
    120120                                /* Prepare profile combo-box: */
    121                                 m_pProfileComboBox = new QIComboBox(pCloudContainer);
     121                                m_pProfileComboBox = new QIComboBox(pContainerCloud);
    122122                                if (m_pProfileComboBox)
    123                                     pSubLayout->addWidget(m_pProfileComboBox);
     123                                    pLayoutProfile->addWidget(m_pProfileComboBox);
    124124
    125125                                /* Prepare profile tool-button: */
    126                                 m_pProfileToolButton = new QIToolButton(pCloudContainer);
     126                                m_pProfileToolButton = new QIToolButton(pContainerCloud);
    127127                                if (m_pProfileToolButton)
    128128                                {
    129129                                    m_pProfileToolButton->setIcon(UIIconPool::iconSet(":/cloud_profile_manager_16px.png",
    130130                                                                                      ":/cloud_profile_manager_disabled_16px.png"));
    131                                     pSubLayout->addWidget(m_pProfileToolButton);
     131                                    pLayoutProfile->addWidget(m_pProfileToolButton);
    132132                                }
    133133
    134134                                /* Add into layout: */
    135                                 m_pCloudContainerLayout->addLayout(pSubLayout, 0, 0);
     135                                m_pCloudContainerLayout->addLayout(pLayoutProfile, 0, 0);
    136136                            }
    137137
    138138                            /* Create profile instances table: */
    139                             m_pProfileInstanceList = new QListWidget(pCloudContainer);
     139                            m_pProfileInstanceList = new QListWidget(pContainerCloud);
    140140                            if (m_pProfileInstanceList)
    141141                            {
     
    152152                        }
    153153
    154                         /* Add into layout: */
    155                         m_pStackedLayout->addWidget(pCloudContainer);
     154                        /* Add into widget: */
     155                        m_pSettingsWidget1->addWidget(pContainerCloud);
    156156                    }
    157157
    158158                    /* Add into layout: */
    159                     m_pSourceLayout->addLayout(m_pStackedLayout, 1, 0);
     159                    m_pSourceLayout->addWidget(m_pSettingsWidget1, 1, 0);
    160160                }
    161161            }
     
    169169        if (m_pSettingsCnt)
    170170        {
    171             /* Prepare settings container layout: */
    172             m_pSettingsCntLayout = new QStackedLayout(m_pSettingsCnt);
    173             if (m_pSettingsCntLayout)
     171            /* Prepare settings layout: */
     172            QVBoxLayout *pLayoutSettings = new QVBoxLayout(m_pSettingsCnt);
     173            if (pLayoutSettings)
    174174            {
    175                 /* Prepare appliance widget container: */
    176                 QWidget *pApplianceWidgetCnt = new QWidget(m_pSettingsCnt);
    177                 if (pApplianceWidgetCnt)
     175                /* Prepare settings widget 2: */
     176                m_pSettingsWidget2 = new QStackedWidget(m_pSettingsCnt);
     177                if (m_pSettingsWidget2)
    178178                {
    179                     /* Prepare appliance widget layout: */
    180                     QGridLayout *pApplianceWidgetLayout = new QGridLayout(pApplianceWidgetCnt);
    181                     if (pApplianceWidgetLayout)
     179                    /* Prepare appliance container: */
     180                    QWidget *pContainerAppliance = new QWidget(m_pSettingsCnt);
     181                    if (pContainerAppliance)
    182182                    {
    183                         /* Prepare appliance widget: */
    184                         m_pApplianceWidget = new UIApplianceImportEditorWidget(pApplianceWidgetCnt);
    185                         if (m_pApplianceWidget)
     183                        /* Prepare appliance layout: */
     184                        QGridLayout *pLayoutAppliance = new QGridLayout(pContainerAppliance);
     185                        if (pLayoutAppliance)
    186186                        {
    187                             m_pApplianceWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding);
    188                             pApplianceWidgetLayout->addWidget(m_pApplianceWidget, 0, 0, 1, 3);
     187                            /* Prepare appliance widget: */
     188                            m_pApplianceWidget = new UIApplianceImportEditorWidget(pContainerAppliance);
     189                            if (m_pApplianceWidget)
     190                            {
     191                                m_pApplianceWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding);
     192                                pLayoutAppliance->addWidget(m_pApplianceWidget, 0, 0, 1, 3);
     193                            }
     194
     195                            /* Prepare import path label: */
     196                            m_pLabelImportFilePath = new QLabel(pContainerAppliance);
     197                            if (m_pLabelImportFilePath)
     198                            {
     199                                m_pLabelImportFilePath->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
     200                                pLayoutAppliance->addWidget(m_pLabelImportFilePath, 1, 0);
     201                            }
     202                            /* Prepare import path selector: */
     203                            m_pEditorImportFilePath = new UIFilePathSelector(pContainerAppliance);
     204                            if (m_pEditorImportFilePath)
     205                            {
     206                                m_pEditorImportFilePath->setResetEnabled(true);
     207                                m_pEditorImportFilePath->setDefaultPath(uiCommon().virtualBox().GetSystemProperties().GetDefaultMachineFolder());
     208                                m_pEditorImportFilePath->setPath(uiCommon().virtualBox().GetSystemProperties().GetDefaultMachineFolder());
     209                                m_pLabelImportFilePath->setBuddy(m_pEditorImportFilePath);
     210                                pLayoutAppliance->addWidget(m_pEditorImportFilePath, 1, 1, 1, 2);
     211                            }
     212
     213                            /* Prepare MAC address policy label: */
     214                            m_pLabelMACImportPolicy = new QLabel(pContainerAppliance);
     215                            if (m_pLabelMACImportPolicy)
     216                            {
     217                                m_pLabelMACImportPolicy->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
     218                                pLayoutAppliance->addWidget(m_pLabelMACImportPolicy, 2, 0);
     219                            }
     220                            /* Prepare MAC address policy combo: */
     221                            m_pComboMACImportPolicy = new QIComboBox(pContainerAppliance);
     222                            if (m_pComboMACImportPolicy)
     223                            {
     224                                m_pComboMACImportPolicy->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
     225                                m_pLabelMACImportPolicy->setBuddy(m_pComboMACImportPolicy);
     226                                pLayoutAppliance->addWidget(m_pComboMACImportPolicy, 2, 1, 1, 2);
     227                            }
     228
     229                            /* Prepare additional options label: */
     230                            m_pLabelAdditionalOptions = new QLabel(pContainerAppliance);
     231                            if (m_pLabelAdditionalOptions)
     232                            {
     233                                m_pLabelAdditionalOptions->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
     234                                pLayoutAppliance->addWidget(m_pLabelAdditionalOptions, 3, 0);
     235                            }
     236                            /* Prepare import HDs as VDIs checkbox: */
     237                            m_pCheckboxImportHDsAsVDI = new QCheckBox(pContainerAppliance);
     238                            {
     239                                m_pCheckboxImportHDsAsVDI->setCheckState(Qt::Checked);
     240                                pLayoutAppliance->addWidget(m_pCheckboxImportHDsAsVDI, 3, 1);
     241                            }
    189242                        }
    190243
    191                         /* Prepare path selector label: */
    192                         m_pLabelImportFilePath = new QLabel(pApplianceWidgetCnt);
    193                         if (m_pLabelImportFilePath)
     244                        /* Add into layout: */
     245                        m_pSettingsWidget2->addWidget(pContainerAppliance);
     246                    }
     247
     248                    /* Prepare form editor container: */
     249                    QWidget *pContainerFormEditor = new QWidget(m_pSettingsCnt);
     250                    if (pContainerFormEditor)
     251                    {
     252                        /* Prepare form editor layout: */
     253                        QVBoxLayout *pLayoutFormEditor = new QVBoxLayout(pContainerFormEditor);
     254                        if (pLayoutFormEditor)
    194255                        {
    195                             m_pLabelImportFilePath->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
    196                             pApplianceWidgetLayout->addWidget(m_pLabelImportFilePath, 1, 0);
     256                            /* Prepare form editor widget: */
     257                            m_pFormEditor = new UIFormEditorWidget(pContainerFormEditor);
     258                            if (m_pFormEditor)
     259                                pLayoutFormEditor->addWidget(m_pFormEditor);
    197260                        }
    198                         /* Prepare path selector editor: */
    199                         m_pEditorImportFilePath = new UIFilePathSelector(pApplianceWidgetCnt);
    200                         if (m_pEditorImportFilePath)
    201                         {
    202                             m_pEditorImportFilePath->setResetEnabled(true);
    203                             m_pEditorImportFilePath->setDefaultPath(uiCommon().virtualBox().GetSystemProperties().GetDefaultMachineFolder());
    204                             m_pEditorImportFilePath->setPath(uiCommon().virtualBox().GetSystemProperties().GetDefaultMachineFolder());
    205                             m_pLabelImportFilePath->setBuddy(m_pEditorImportFilePath);
    206                             pApplianceWidgetLayout->addWidget(m_pEditorImportFilePath, 1, 1, 1, 2);
    207                         }
    208 
    209                         /* Prepare MAC address policy label: */
    210                         m_pLabelMACImportPolicy = new QLabel(pApplianceWidgetCnt);
    211                         if (m_pLabelMACImportPolicy)
    212                         {
    213                             m_pLabelMACImportPolicy->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
    214                             pApplianceWidgetLayout->addWidget(m_pLabelMACImportPolicy, 2, 0);
    215                         }
    216                         /* Prepare MAC address policy combo: */
    217                         m_pComboMACImportPolicy = new QComboBox(pApplianceWidgetCnt);
    218                         if (m_pComboMACImportPolicy)
    219                         {
    220                             m_pComboMACImportPolicy->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
    221                             m_pLabelMACImportPolicy->setBuddy(m_pComboMACImportPolicy);
    222                             pApplianceWidgetLayout->addWidget(m_pComboMACImportPolicy, 2, 1, 1, 2);
    223                         }
    224 
    225                         /* Prepare additional options label: */
    226                         m_pLabelAdditionalOptions = new QLabel(pApplianceWidgetCnt);
    227                         if (m_pLabelAdditionalOptions)
    228                         {
    229                             m_pLabelAdditionalOptions->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
    230                             pApplianceWidgetLayout->addWidget(m_pLabelAdditionalOptions, 3, 0);
    231                         }
    232                         /* Prepare import HDs as VDIs checkbox: */
    233                         m_pCheckboxImportHDsAsVDI = new QCheckBox(pApplianceWidgetCnt);
    234                         {
    235                             m_pCheckboxImportHDsAsVDI->setCheckState(Qt::Checked);
    236                             pApplianceWidgetLayout->addWidget(m_pCheckboxImportHDsAsVDI, 3, 1);
    237                         }
     261
     262                        /* Add into layout: */
     263                        m_pSettingsWidget2->addWidget(pContainerFormEditor);
    238264                    }
    239265
    240266                    /* Add into layout: */
    241                     m_pSettingsCntLayout->addWidget(pApplianceWidgetCnt);
    242                 }
    243 
    244                 /* Prepare form editor container: */
    245                 QWidget *pFormEditorCnt = new QWidget(m_pSettingsCnt);
    246                 if (pFormEditorCnt)
    247                 {
    248                     /* Prepare form editor layout: */
    249                     QVBoxLayout *pFormEditorLayout = new QVBoxLayout(pFormEditorCnt);
    250                     if (pFormEditorLayout)
    251                     {
    252                         /* Prepare form editor widget: */
    253                         m_pFormEditor = new UIFormEditorWidget(pFormEditorCnt);
    254                         if (m_pFormEditor)
    255                             pFormEditorLayout->addWidget(m_pFormEditor);
    256                     }
    257 
    258                     /* Add into layout: */
    259                     m_pSettingsCntLayout->addWidget(pFormEditorCnt);
     267                    pLayoutSettings->addWidget(m_pSettingsWidget2);
    260268                }
    261269            }
     
    268276    /* Setup connections: */
    269277    connect(gVBoxEvents, &UIVirtualBoxEventHandler::sigCloudProfileRegistered,
    270             this, &UIWizardImportAppPageExpert::sltHandleSourceChange);
     278            this, &UIWizardImportAppPageExpert::sltHandleSourceComboChange);
    271279    connect(gVBoxEvents, &UIVirtualBoxEventHandler::sigCloudProfileChanged,
    272             this, &UIWizardImportAppPageExpert::sltHandleSourceChange);
     280            this, &UIWizardImportAppPageExpert::sltHandleSourceComboChange);
    273281    connect(m_pSourceComboBox, static_cast<void(QIComboBox::*)(int)>(&QIComboBox::activated),
    274             this, &UIWizardImportAppPageExpert::sltHandleSourceChange);
     282            this, &UIWizardImportAppPageExpert::sltHandleSourceComboChange);
    275283    connect(m_pFileSelector, &UIEmptyFilePathSelector::pathChanged,
    276             this, &UIWizardImportAppPageExpert::sltFilePathChangeHandler);
     284            this, &UIWizardImportAppPageExpert::sltHandleImportedFileSelectorChange);
    277285    connect(m_pProfileComboBox, static_cast<void(QIComboBox::*)(int)>(&QIComboBox::currentIndexChanged),
    278286            this, &UIWizardImportAppPageExpert::sltHandleProfileComboChange);
     
    282290            this, &UIWizardImportAppPageExpert::sltHandleInstanceListChange);
    283291    connect(m_pEditorImportFilePath, &UIFilePathSelector::pathChanged,
    284             this, &UIWizardImportAppPageExpert::sltHandlePathChanged);
    285     connect(m_pComboMACImportPolicy, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
    286             this, &UIWizardImportAppPageExpert::sltHandleMACImportPolicyChange);
     292            this, &UIWizardImportAppPageExpert::sltHandleImportPathEditorChange);
     293    connect(m_pComboMACImportPolicy, static_cast<void(QIComboBox::*)(int)>(&QIComboBox::currentIndexChanged),
     294            this, &UIWizardImportAppPageExpert::sltHandleMACImportPolicyComboChange);
    287295
    288296    /* Register fields: */
     
    307315        m_pSourceComboBox->setItemText(0, UIWizardImportApp::tr("Local File System"));
    308316        m_pSourceComboBox->setItemData(0, UIWizardImportApp::tr("Import from local file system."), Qt::ToolTipRole);
     317
    309318        /* Translate received values of Source combo-box.
    310319         * We are enumerating starting from 0 for simplicity: */
     
    417426
    418427    /* Acquire appliance: */
    419     CAppliance comAppliance = qobject_cast<UIWizardImportApp*>(wizard())->appliance();
     428    CAppliance comAppliance = qobject_cast<UIWizardImportApp*>(wizard())->localAppliance();
    420429    if (comAppliance.isNotNull())
    421430    {
     
    423432        m_pApplianceWidget->setAppliance(comAppliance);
    424433        /* Make sure we initialize appliance widget model with correct base folder path: */
    425         if (m_pEditorImportFilePath)
    426             sltHandlePathChanged(m_pEditorImportFilePath->path());
     434        sltHandleImportPathEditorChange();
    427435    }
    428436}
    429437
    430438bool UIWizardImportAppPageExpert::isComplete() const
    431 {
    432     bool fResult = true;
    433 
    434     /* Check appliance settings: */
    435     if (fResult)
    436     {
    437         const bool fOVF = !isSourceCloudOne();
    438         const bool fCSP = !fOVF;
    439 
    440         fResult =    (   fOVF
    441                       && UICommon::hasAllowedExtension(m_pFileSelector->path().toLower(), OVFFileExts)
    442                       && QFile::exists(m_pFileSelector->path())
    443                       && qobject_cast<UIWizardImportApp*>(wizard())->isValid())
    444                   || (   fCSP
    445                       && !m_comCloudProfile.isNull()
    446                       && !m_comCloudClient.isNull()
    447                       && !machineId().isNull()
    448                       && !m_comCloudAppliance.isNull()
    449                       && !m_comVSDForm.isNull());
    450     }
    451 
    452     return fResult;
    453 }
    454 
    455 bool UIWizardImportAppPageExpert::validatePage()
    456439{
    457440    /* Initial result: */
    458441    bool fResult = true;
    459442
     443    /* Check whether there was cloud source selected: */
     444    if (isSourceCloudOne())
     445        fResult =    m_comCloudAppliance.isNotNull()
     446                  && m_comVSDForm.isNotNull();
     447    else
     448        fResult = qobject_cast<UIWizardImportApp*>(wizard())->isValid();
     449
     450    /* Return result: */
     451    return fResult;
     452}
     453
     454bool UIWizardImportAppPageExpert::validatePage()
     455{
     456    /* Initial result: */
     457    bool fResult = true;
     458
    460459    /* Lock finish button: */
    461460    startProcessing();
    462461
    463462    /* Check whether there was cloud source selected: */
    464     const bool fIsSourceCloudOne = fieldImp("isSourceCloudOne").toBool();
    465     if (fIsSourceCloudOne)
     463    if (fieldImp("isSourceCloudOne").toBool())
    466464    {
    467465        /* Make sure table has own data committed: */
     
    471469        CVirtualSystemDescriptionForm comForm = fieldImp("vsdForm").value<CVirtualSystemDescriptionForm>();
    472470        fResult = comForm.isNotNull();
    473         Assert(fResult);
    474471
    475472        /* Give changed VSD back to appliance: */
     
    512509}
    513510
    514 void UIWizardImportAppPageExpert::sltHandleSourceChange()
    515 {
    516     /* Update tool-tip: */
     511void UIWizardImportAppPageExpert::sltHandleSourceComboChange()
     512{
     513    /* Update combo tool-tip: */
    517514    updateSourceComboToolTip();
    518515
     
    524521    populateFormProperties();
    525522    refreshFormPropertiesTable();
     523
     524    /* Notify about changes: */
    526525    emit completeChanged();
    527526}
    528527
    529 void UIWizardImportAppPageExpert::sltFilePathChangeHandler()
    530 {
    531     /* Check if specified file contains valid appliance: */
    532     if (   !QFile::exists(m_pFileSelector->path())
    533         || !qobject_cast<UIWizardImportApp*>(wizard())->setFile(m_pFileSelector->path()))
    534         return;
    535     /* Reset the modified bit afterwards: */
    536     m_pFileSelector->resetModified();
     528void UIWizardImportAppPageExpert::sltHandleImportedFileSelectorChange()
     529{
     530    /* Update local stuff (only if something changed): */
     531    if (m_pFileSelector->isModified())
     532    {
     533        /* Create local appliance: */
     534        qobject_cast<UIWizardImportApp*>(wizard())->setFile(m_pFileSelector->path());
     535        m_pFileSelector->resetModified();
     536    }
    537537
    538538    /* Acquire appliance: */
    539     CAppliance comAppliance = qobject_cast<UIWizardImportApp*>(wizard())->appliance();
     539    CAppliance comAppliance = qobject_cast<UIWizardImportApp*>(wizard())->localAppliance();
    540540    /* Initialize appliance widget: */
    541541    m_pApplianceWidget->setAppliance(comAppliance);
    542542    /* Make sure we initialize appliance widget model with correct base folder path: */
    543     if (m_pEditorImportFilePath)
    544         sltHandlePathChanged(m_pEditorImportFilePath->path());
    545 
     543    sltHandleImportPathEditorChange();
     544
     545    /* Notify about changes: */
    546546    emit completeChanged();
    547547}
     
    554554    populateFormProperties();
    555555    refreshFormPropertiesTable();
     556
     557    /* Notify about changes: */
    556558    emit completeChanged();
    557559}
     
    568570    populateFormProperties();
    569571    refreshFormPropertiesTable();
     572
     573    /* Notify about changes: */
    570574    emit completeChanged();
    571575}
    572576
    573 void UIWizardImportAppPageExpert::sltHandlePathChanged(const QString &strNewPath)
    574 {
    575     m_pApplianceWidget->setVirtualSystemBaseFolder(strNewPath);
    576 }
    577 
    578 void UIWizardImportAppPageExpert::sltHandleMACImportPolicyChange()
     577void UIWizardImportAppPageExpert::sltHandleImportPathEditorChange()
     578{
     579    AssertPtrReturnVoid(m_pApplianceWidget);
     580    AssertPtrReturnVoid(m_pEditorImportFilePath);
     581    m_pApplianceWidget->setVirtualSystemBaseFolder(m_pEditorImportFilePath->path());
     582}
     583
     584void UIWizardImportAppPageExpert::sltHandleMACImportPolicyComboChange()
    579585{
    580586    updateMACImportPolicyComboToolTip();
  • trunk/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIWizardImportAppPageExpert.h

    r91589 r91645  
    55
    66/*
    7  * Copyright (C) 2009-2020 Oracle Corporation
     7 * Copyright (C) 2009-2021 Oracle Corporation
    88 *
    99 * This file is part of VirtualBox Open Source Edition (OSE), as
     
    4646
    4747    /** Constructs expert page.
    48       * @param  strFileName  Brings appliance file name. */
     48      * @param  fImportFromOCIByDefault  Brings whether we should propose import from OCI by default.
     49      * @param  strFileName              Brings appliance file name. */
    4950    UIWizardImportAppPageExpert(bool fImportFromOCIByDefault, const QString &strFileName);
    5051
     
    5758
    5859    /** Handles translation event. */
    59     virtual void retranslateUi() /* override */;
     60    virtual void retranslateUi() /* override final */;
    6061
    6162    /** Performs page initialization. */
    62     virtual void initializePage() /* override */;
     63    virtual void initializePage() /* override final */;
    6364
    6465    /** Returns whether page is complete. */
    65     virtual bool isComplete() const /* override */;
     66    virtual bool isComplete() const /* override final */;
    6667
    6768    /** Performs page validation. */
    68     virtual bool validatePage() /* override */;
     69    virtual bool validatePage() /* override final */;
    6970
    7071    /** Updates page appearance. */
    71     virtual void updatePageAppearance() /* override */;
     72    virtual void updatePageAppearance() /* override final */;
    7273
    7374private slots:
    7475
    75     /** Handles import source change. */
    76     void sltHandleSourceChange();
     76    /** Handles source combo change. */
     77    void sltHandleSourceComboChange();
    7778
    78     /** Handles file-path change. */
    79     void sltFilePathChangeHandler();
    80 
    81     /** Handles change in profile combo-box. */
     79    /** Handles imported file selector change. */
     80    void sltHandleImportedFileSelectorChange();
     81    /** Handles profile combo change. */
    8282    void sltHandleProfileComboChange();
    8383    /** Handles profile tool-button click. */
    8484    void sltHandleProfileButtonClick();
    85 
    86     /** Handles change in instance list. */
     85    /** Handles instance list change. */
    8786    void sltHandleInstanceListChange();
    8887
    89     /** Handles file path being changed to @a strNewPath. */
    90     void sltHandlePathChanged(const QString &strNewPath);
     88    /** Handles import path editor change. */
     89    void sltHandleImportPathEditorChange();
    9190
    92     /** Handles MAC address import policy changes. */
    93     void sltHandleMACImportPolicyChange();
     91    /** Handles MAC address import policy combo changes. */
     92    void sltHandleMACImportPolicyComboChange();
    9493
    9594private:
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette