Index: /trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk	(revision 91706)
+++ /trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk	(revision 91707)
@@ -678,8 +678,8 @@
 	src/wizards/clonevd/UIWizardCloneVDExpertPage.h \
 	src/wizards/exportappliance/UIWizardExportApp.h \
-	src/wizards/exportappliance/UIWizardExportAppPageBasic1.h \
-	src/wizards/exportappliance/UIWizardExportAppPageBasic2.h \
-	src/wizards/exportappliance/UIWizardExportAppPageBasic3.h \
 	src/wizards/exportappliance/UIWizardExportAppPageExpert.h \
+	src/wizards/exportappliance/UIWizardExportAppPageFormat.h \
+	src/wizards/exportappliance/UIWizardExportAppPageSettings.h \
+	src/wizards/exportappliance/UIWizardExportAppPageVMs.h \
 	src/wizards/importappliance/UIApplianceUnverifiedCertificateViewer.h \
 	src/wizards/importappliance/UIWizardImportApp.h \
@@ -1188,8 +1188,8 @@
 	src/wizards/clonevd/UIWizardCloneVDExpertPage.cpp \
 	src/wizards/exportappliance/UIWizardExportApp.cpp \
-	src/wizards/exportappliance/UIWizardExportAppPageBasic1.cpp \
-	src/wizards/exportappliance/UIWizardExportAppPageBasic2.cpp \
-	src/wizards/exportappliance/UIWizardExportAppPageBasic3.cpp \
 	src/wizards/exportappliance/UIWizardExportAppPageExpert.cpp \
+	src/wizards/exportappliance/UIWizardExportAppPageFormat.cpp \
+	src/wizards/exportappliance/UIWizardExportAppPageSettings.cpp \
+	src/wizards/exportappliance/UIWizardExportAppPageVMs.cpp \
 	src/wizards/importappliance/UIApplianceUnverifiedCertificateViewer.cpp \
 	src/wizards/importappliance/UIWizardImportApp.cpp \
Index: /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportApp.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportApp.cpp	(revision 91706)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportApp.cpp	(revision 91707)
@@ -28,8 +28,8 @@
 #include "UIProgressObject.h"
 #include "UIWizardExportApp.h"
-#include "UIWizardExportAppPageBasic1.h"
-#include "UIWizardExportAppPageBasic2.h"
-#include "UIWizardExportAppPageBasic3.h"
 #include "UIWizardExportAppPageExpert.h"
+#include "UIWizardExportAppPageFormat.h"
+#include "UIWizardExportAppPageSettings.h"
+#include "UIWizardExportAppPageVMs.h"
 
 /* COM includes: */
@@ -443,7 +443,7 @@
         case WizardMode_Basic:
         {
-            addPage(new UIWizardExportAppPageBasic1(m_predefinedMachineNames, m_fFastTraverToExportOCI));
-            addPage(new UIWizardExportAppPageBasic2(m_fFastTraverToExportOCI));
-            addPage(new UIWizardExportAppPageBasic3);
+            addPage(new UIWizardExportAppPageVMs(m_predefinedMachineNames, m_fFastTraverToExportOCI));
+            addPage(new UIWizardExportAppPageFormat(m_fFastTraverToExportOCI));
+            addPage(new UIWizardExportAppPageSettings);
             break;
         }
Index: unk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic1.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic1.cpp	(revision 91706)
+++ 	(revision )
@@ -1,252 +1,0 @@
-/* $Id$ */
-/** @file
- * VBox Qt GUI - UIWizardExportAppPageBasic1 class implementation.
- */
-
-/*
- * Copyright (C) 2009-2021 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- */
-
-/* Qt includes: */
-#include <QListWidget>
-#include <QVBoxLayout>
-
-/* GUI includes: */
-#include "QIRichTextLabel.h"
-#include "UICommon.h"
-#include "UIIconPool.h"
-#include "UIMessageCenter.h"
-#include "UIWizardExportApp.h"
-#include "UIWizardExportAppPageBasic1.h"
-
-/* COM includes: */
-#include "CMachine.h"
-
-/* Namespaces: */
-using namespace UIWizardExportAppPage1;
-
-
-/** QListWidgetItem subclass for Export Appliance wizard VM list. */
-class UIVMListWidgetItem : public QListWidgetItem
-{
-public:
-
-    /** Constructs VM list item passing @a pixIcon, @a strText and @a pParent to the base-class.
-      * @param  strUuid       Brings the machine ID.
-      * @param  fInSaveState  Brings whether machine is in Saved state. */
-    UIVMListWidgetItem(QPixmap &pixIcon, QString &strText, QUuid uUuid, bool fInSaveState, QListWidget *pParent)
-        : QListWidgetItem(pixIcon, strText, pParent)
-        , m_uUuid(uUuid)
-        , m_fInSaveState(fInSaveState)
-    {}
-
-    /** Returns whether this item is less than @a other. */
-    bool operator<(const QListWidgetItem &other) const
-    {
-        return text().toLower() < other.text().toLower();
-    }
-
-    /** Returns the machine ID. */
-    QUuid uuid() const { return m_uUuid; }
-    /** Returns whether machine is in Saved state. */
-    bool isInSaveState() const { return m_fInSaveState; }
-
-private:
-
-    /** Holds the machine ID. */
-    QUuid  m_uUuid;
-    /** Holds whether machine is in Saved state. */
-    bool   m_fInSaveState;
-};
-
-
-/*********************************************************************************************************************************
-*   Class UIWizardExportAppPage1 implementation.                                                                                 *
-*********************************************************************************************************************************/
-
-void UIWizardExportAppPage1::populateVMItems(QListWidget *pVMSelector, const QStringList &selectedVMNames)
-{
-    /* Add all VM items into VM selector: */
-    foreach (const CMachine &comMachine, uiCommon().virtualBox().GetMachines())
-    {
-        QPixmap pixIcon;
-        QString strName;
-        QUuid uUuid;
-        bool fInSaveState = false;
-        bool fEnabled = false;
-        const int iIconMetric = QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize);
-        if (comMachine.GetAccessible())
-        {
-            pixIcon = generalIconPool().userMachinePixmapDefault(comMachine);
-            if (pixIcon.isNull())
-                pixIcon = generalIconPool().guestOSTypePixmapDefault(comMachine.GetOSTypeId());
-            strName = comMachine.GetName();
-            uUuid = comMachine.GetId();
-            fEnabled = comMachine.GetSessionState() == KSessionState_Unlocked;
-            fInSaveState = comMachine.GetState() == KMachineState_Saved || comMachine.GetState() == KMachineState_AbortedSaved;
-        }
-        else
-        {
-            QFileInfo fi(comMachine.GetSettingsFilePath());
-            strName = UICommon::hasAllowedExtension(fi.completeSuffix(), VBoxFileExts) ? fi.completeBaseName() : fi.fileName();
-            pixIcon = QPixmap(":/os_other.png").scaled(iIconMetric, iIconMetric, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
-        }
-        QListWidgetItem *pItem = new UIVMListWidgetItem(pixIcon, strName, uUuid, fInSaveState, pVMSelector);
-        if (!fEnabled)
-            pItem->setFlags(Qt::ItemFlags());
-        pVMSelector->addItem(pItem);
-    }
-    pVMSelector->sortItems();
-
-    /* Choose initially selected items (if passed): */
-    foreach (const QString &strSelectedVMName, selectedVMNames)
-    {
-        const QList<QListWidgetItem*> list = pVMSelector->findItems(strSelectedVMName, Qt::MatchExactly);
-        if (list.size() > 0)
-        {
-            if (pVMSelector->selectedItems().isEmpty())
-                pVMSelector->setCurrentItem(list.first());
-            else
-                list.first()->setSelected(true);
-        }
-    }
-}
-
-void UIWizardExportAppPage1::refreshSavedMachines(QStringList &savedMachines, QListWidget *pVMSelector)
-{
-    savedMachines.clear();
-    foreach (QListWidgetItem *pItem, pVMSelector->selectedItems())
-        if (static_cast<UIVMListWidgetItem*>(pItem)->isInSaveState())
-            savedMachines << pItem->text();
-}
-
-QStringList UIWizardExportAppPage1::machineNames(QListWidget *pVMSelector)
-{
-    /* Prepare list: */
-    QStringList names;
-    /* Iterate over all the selected items: */
-    foreach (QListWidgetItem *pItem, pVMSelector->selectedItems())
-        names << pItem->text();
-    /* Return result list: */
-    return names;
-}
-
-QList<QUuid> UIWizardExportAppPage1::machineIDs(QListWidget *pVMSelector)
-{
-    /* Prepare list: */
-    QList<QUuid> ids;
-    /* Iterate over all the selected items: */
-    foreach (QListWidgetItem *pItem, pVMSelector->selectedItems())
-        ids.append(static_cast<UIVMListWidgetItem*>(pItem)->uuid());
-    /* Return result list: */
-    return ids;
-}
-
-
-/*********************************************************************************************************************************
-*   Class UIWizardExportAppPageBasic1 implementation.                                                                            *
-*********************************************************************************************************************************/
-
-UIWizardExportAppPageBasic1::UIWizardExportAppPageBasic1(const QStringList &selectedVMNames, bool fFastTravelToNextPage)
-    : m_selectedVMNames(selectedVMNames)
-    , m_fFastTravelToNextPage(fFastTravelToNextPage)
-    , m_pLabelMain(0)
-    , m_pVMSelector(0)
-{
-    /* Prepare main layout: */
-    QVBoxLayout *pLayoutMain = new QVBoxLayout(this);
-    if (pLayoutMain)
-    {
-        /* Prepare main label: */
-        m_pLabelMain = new QIRichTextLabel(this);
-        if (m_pLabelMain)
-            pLayoutMain->addWidget(m_pLabelMain);
-
-        /* Prepare VM selector: */
-        m_pVMSelector = new QListWidget(this);
-        if (m_pVMSelector)
-        {
-            m_pVMSelector->setAlternatingRowColors(true);
-            m_pVMSelector->setSelectionMode(QAbstractItemView::ExtendedSelection);
-            pLayoutMain->addWidget(m_pVMSelector);
-        }
-    }
-
-    /* Setup connections: */
-    connect(m_pVMSelector, &QListWidget::itemSelectionChanged,
-            this, &UIWizardExportAppPageBasic1::sltHandleVMItemSelectionChanged);
-}
-
-UIWizardExportApp *UIWizardExportAppPageBasic1::wizard() const
-{
-    return qobject_cast<UIWizardExportApp*>(UINativeWizardPage::wizard());
-}
-
-void UIWizardExportAppPageBasic1::retranslateUi()
-{
-    /* Translate page: */
-    setTitle(UIWizardExportApp::tr("Virtual machines to export"));
-
-    /* Translate widgets: */
-    m_pLabelMain->setText(UIWizardExportApp::tr("<p>Please select the virtual machines that should be added to the appliance. "
-                                                "You can select more than one. Please note that these machines have to be "
-                                                "turned off before they can be exported.</p>"));
-}
-
-void UIWizardExportAppPageBasic1::initializePage()
-{
-    /* Populate VM items: */
-    populateVMItems(m_pVMSelector, m_selectedVMNames);
-    /* Translate page: */
-    retranslateUi();
-
-    /* Now, when we are ready, we can
-     * fast traver to page 2 if requested: */
-    if (m_fFastTravelToNextPage)
-        wizard()->goForward();
-}
-
-bool UIWizardExportAppPageBasic1::isComplete() const
-{
-    /* Initial result: */
-    bool fResult = true;
-
-    /* There should be at least one VM selected: */
-    fResult = wizard()->machineNames().size() > 0;
-
-    /* Return result: */
-    return fResult;
-}
-
-bool UIWizardExportAppPageBasic1::validatePage()
-{
-    /* Initial result: */
-    bool fResult = true;
-
-    /* Ask user about machines which are in Saved state currently: */
-    QStringList savedMachines;
-    refreshSavedMachines(savedMachines, m_pVMSelector);
-    if (!savedMachines.isEmpty())
-        fResult = msgCenter().confirmExportMachinesInSaveState(savedMachines, this);
-
-    /* Return result: */
-    return fResult;
-}
-
-void UIWizardExportAppPageBasic1::sltHandleVMItemSelectionChanged()
-{
-    /* Update wizard fields: */
-    wizard()->setMachineNames(machineNames(m_pVMSelector));
-    wizard()->setMachineIDs(machineIDs(m_pVMSelector));
-
-    /* Notify about changes: */
-    emit completeChanged();
-}
Index: unk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic1.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic1.h	(revision 91706)
+++ 	(revision )
@@ -1,99 +1,0 @@
-/* $Id$ */
-/** @file
- * VBox Qt GUI - UIWizardExportAppPageBasic1 class declaration.
- */
-
-/*
- * Copyright (C) 2009-2021 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- */
-
-#ifndef FEQT_INCLUDED_SRC_wizards_exportappliance_UIWizardExportAppPageBasic1_h
-#define FEQT_INCLUDED_SRC_wizards_exportappliance_UIWizardExportAppPageBasic1_h
-#ifndef RT_WITHOUT_PRAGMA_ONCE
-# pragma once
-#endif
-
-/* Qt includes */
-#include <QUuid>
-
-/* GUI includes: */
-#include "UINativeWizardPage.h"
-
-/* Forward declarations: */
-class QListWidget;
-class QIRichTextLabel;
-class UIWizardExportApp;
-
-/** Namespace for 1st basic page of the Export Appliance wizard. */
-namespace UIWizardExportAppPage1
-{
-    /** Populates @a pVMSelector with items on the basis of passed @a selectedVMNames. */
-    void populateVMItems(QListWidget *pVMSelector, const QStringList &selectedVMNames);
-
-    /** Refresh a list of saved machines selected in @a pVMSelector. */
-    void refreshSavedMachines(QStringList &savedMachines, QListWidget *pVMSelector);
-
-    /** Returns a list of machine names selected in @a pVMSelector. */
-    QStringList machineNames(QListWidget *pVMSelector);
-    /** Returns a list of machine IDs selected in @a pVMSelector. */
-    QList<QUuid> machineIDs(QListWidget *pVMSelector);
-}
-
-/** UINativeWizardPage extension for 1st basic page of the Export Appliance wizard,
-  * based on UIWizardExportAppPage1 namespace functions. */
-class UIWizardExportAppPageBasic1 : public UINativeWizardPage
-{
-    Q_OBJECT;
-
-public:
-
-    /** Constructs 1st basic page.
-      * @param  selectedVMNames        Brings the list of selected VM names.
-      * @param  fFastTravelToNextPage  Brings whether we should fast-travel to next page. */
-    UIWizardExportAppPageBasic1(const QStringList &selectedVMNames, bool fFastTravelToNextPage);
-
-protected:
-
-    /** Returns wizard this page belongs to. */
-    UIWizardExportApp *wizard() const;
-
-    /** Handles translation event. */
-    virtual void retranslateUi() /* override final */;
-
-    /** Performs page initialization. */
-    virtual void initializePage() /* override final */;
-
-    /** Returns whether page is complete. */
-    virtual bool isComplete() const /* override final */;
-
-    /** Performs page validation. */
-    virtual bool validatePage() /* override final */;
-
-private slots:
-
-    /** Handles VM item selection change. */
-    void sltHandleVMItemSelectionChanged();
-
-private:
-
-    /** Holds the list of selected VM names. */
-    const QStringList  m_selectedVMNames;
-    /** Holds whether we should fast travel to next page. */
-    bool               m_fFastTravelToNextPage;
-
-    /** Holds the main label instance. */
-    QIRichTextLabel *m_pLabelMain;
-
-    /** Holds the VM selector instance. */
-    QListWidget *m_pVMSelector;
-};
-
-#endif /* !FEQT_INCLUDED_SRC_wizards_exportappliance_UIWizardExportAppPageBasic1_h */
Index: unk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic2.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic2.cpp	(revision 91706)
+++ 	(revision )
@@ -1,1181 +1,0 @@
-/* $Id$ */
-/** @file
- * VBox Qt GUI - UIWizardExportAppPageBasic2 class implementation.
- */
-
-/*
- * Copyright (C) 2009-2021 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- */
-
-/* Qt includes: */
-#include <QButtonGroup>
-#include <QCheckBox>
-#include <QDir>
-#include <QGridLayout>
-#include <QLabel>
-#include <QRadioButton>
-#include <QStackedWidget>
-#include <QVBoxLayout>
-
-/* GUI includes: */
-#include "QIComboBox.h"
-#include "QIRichTextLabel.h"
-#include "QIToolButton.h"
-#include "UICloudNetworkingStuff.h"
-#include "UICommon.h"
-#include "UIEmptyFilePathSelector.h"
-#include "UIIconPool.h"
-#include "UIMessageCenter.h"
-#include "UIVirtualBoxEventHandler.h"
-#include "UIVirtualBoxManager.h"
-#include "UIWizardExportApp.h"
-#include "UIWizardExportAppPageBasic2.h"
-
-/* COM includes: */
-#include "CMachine.h"
-#include "CSystemProperties.h"
-
-/* Namespaces: */
-using namespace UIWizardExportAppPage2;
-
-
-/*********************************************************************************************************************************
-*   Class UIWizardExportAppPage2 implementation.                                                                                 *
-*********************************************************************************************************************************/
-
-void UIWizardExportAppPage2::populateFormats(QIComboBox *pCombo, bool fExportToOCIByDefault)
-{
-    /* Sanity check: */
-    AssertPtrReturnVoid(pCombo);
-    /* We need top-level parent as well: */
-    QWidget *pParent = pCombo->window();
-    AssertPtrReturnVoid(pParent);
-
-    /* Remember current item data to be able to restore it: */
-    QString strOldData;
-    if (pCombo->currentIndex() != -1)
-        strOldData = pCombo->currentData(FormatData_ShortName).toString();
-    else
-    {
-        /* Otherwise "OCI" or "ovf-1.0" should be the default one: */
-        if (fExportToOCIByDefault)
-            strOldData = "OCI";
-        else
-            strOldData = "ovf-1.0";
-    }
-
-    /* Block signals while updating: */
-    pCombo->blockSignals(true);
-
-    /* Clear combo initially: */
-    pCombo->clear();
-
-    /* Compose hardcoded format list: */
-    QStringList formats;
-    formats << "ovf-0.9";
-    formats << "ovf-1.0";
-    formats << "ovf-2.0";
-    /* Add that list to combo: */
-    foreach (const QString &strShortName, formats)
-    {
-        /* Compose empty item, fill it's data: */
-        pCombo->addItem(QString());
-        pCombo->setItemData(pCombo->count() - 1, strShortName, FormatData_ShortName);
-    }
-
-    /* Iterate through existing providers: */
-    foreach (const CCloudProvider &comProvider, listCloudProviders(pParent))
-    {
-        /* Skip if we have nothing to populate (file missing?): */
-        if (comProvider.isNull())
-            continue;
-        /* Acquire provider name: */
-        QString strProviderName;
-        if (!cloudProviderName(comProvider, strProviderName, pParent))
-            continue;
-        /* Acquire provider short name: */
-        QString strProviderShortName;
-        if (!cloudProviderShortName(comProvider, strProviderShortName, pParent))
-            continue;
-
-        /* Compose empty item, fill it's data: */
-        pCombo->addItem(QString());
-        pCombo->setItemData(pCombo->count() - 1, strProviderName,      FormatData_Name);
-        pCombo->setItemData(pCombo->count() - 1, strProviderShortName, FormatData_ShortName);
-        pCombo->setItemData(pCombo->count() - 1, true,                 FormatData_IsItCloudFormat);
-    }
-
-    /* Set previous/default item if possible: */
-    int iNewIndex = -1;
-    if (   iNewIndex == -1
-        && !strOldData.isNull())
-        iNewIndex = pCombo->findData(strOldData, FormatData_ShortName);
-    if (   iNewIndex == -1
-        && pCombo->count() > 0)
-        iNewIndex = 0;
-    if (iNewIndex != -1)
-        pCombo->setCurrentIndex(iNewIndex);
-
-    /* Unblock signals after update: */
-    pCombo->blockSignals(false);
-}
-
-void UIWizardExportAppPage2::populateMACAddressPolicies(QIComboBox *pCombo)
-{
-    /* Sanity check: */
-    AssertPtrReturnVoid(pCombo);
-    /* We need top-level parent as well: */
-    QWidget *pParent = pCombo->window();
-    AssertPtrReturnVoid(pParent);
-
-    /* Map known export options to known MAC address export policies: */
-    QMap<KExportOptions, MACAddressExportPolicy> knownOptions;
-    knownOptions[KExportOptions_StripAllMACs] = MACAddressExportPolicy_StripAllMACs;
-    knownOptions[KExportOptions_StripAllNonNATMACs] = MACAddressExportPolicy_StripAllNonNATMACs;
-    /* Load currently supported export options: */
-    const QVector<KExportOptions> supportedOptions =
-        uiCommon().virtualBox().GetSystemProperties().GetSupportedExportOptions();
-    /* Check which of supported options/policies are known: */
-    QList<MACAddressExportPolicy> supportedPolicies;
-    foreach (const KExportOptions &enmOption, supportedOptions)
-        if (knownOptions.contains(enmOption))
-            supportedPolicies << knownOptions.value(enmOption);
-    /* Remember current item data to be able to restore it: */
-    MACAddressExportPolicy enmOldData = MACAddressExportPolicy_MAX;
-    if (pCombo->currentIndex() != -1)
-        enmOldData = pCombo->currentData().value<MACAddressExportPolicy>();
-    else
-    {
-        if (supportedPolicies.contains(MACAddressExportPolicy_StripAllNonNATMACs))
-            enmOldData = MACAddressExportPolicy_StripAllNonNATMACs;
-        else
-            enmOldData = MACAddressExportPolicy_KeepAllMACs;
-    }
-
-    /* Block signals while updating: */
-    pCombo->blockSignals(true);
-
-    /* Clear combo initially: */
-    pCombo->clear();
-
-    /* Add supported policies first: */
-    foreach (const MACAddressExportPolicy &enmPolicy, supportedPolicies)
-        pCombo->addItem(QString(), QVariant::fromValue(enmPolicy));
-
-    /* Add hardcoded policy finally: */
-    pCombo->addItem(QString(), QVariant::fromValue(MACAddressExportPolicy_KeepAllMACs));
-
-    /* Set previous/default item if possible: */
-    int iNewIndex = -1;
-    if (   iNewIndex == -1
-        && enmOldData != MACAddressExportPolicy_MAX)
-        iNewIndex = pCombo->findData(QVariant::fromValue(enmOldData));
-    if (   iNewIndex == -1
-        && pCombo->count() > 0)
-        iNewIndex = 0;
-    if (iNewIndex != -1)
-        pCombo->setCurrentIndex(iNewIndex);
-
-    /* Unblock signals after update: */
-    pCombo->blockSignals(false);
-}
-
-QString UIWizardExportAppPage2::format(QIComboBox *pCombo)
-{
-    /* Sanity check: */
-    AssertPtrReturn(pCombo, QString());
-
-    /* Give the actual result: */
-    return pCombo->currentData(FormatData_ShortName).toString();
-}
-
-bool UIWizardExportAppPage2::isFormatCloudOne(QIComboBox *pCombo, int iIndex /* = -1 */)
-{
-    /* Sanity check: */
-    AssertPtrReturn(pCombo, false);
-
-    /* Handle special case, -1 means "current one": */
-    if (iIndex == -1)
-        iIndex = pCombo->currentIndex();
-
-    /* Give the actual result: */
-    return pCombo->itemData(iIndex, FormatData_IsItCloudFormat).toBool();
-}
-
-void UIWizardExportAppPage2::refreshStackedWidget(QStackedWidget *pStackedWidget, bool fIsFormatCloudOne)
-{
-    /* Update stack appearance according to chosen format: */
-    pStackedWidget->setCurrentIndex((int)fIsFormatCloudOne);
-}
-
-void UIWizardExportAppPage2::refreshFileSelectorName(QString &strFileSelectorName,
-                                                     const QStringList &machineNames,
-                                                     const QString &strDefaultApplianceName,
-                                                     bool fIsFormatCloudOne)
-{
-    /* If format is cloud one: */
-    if (fIsFormatCloudOne)
-    {
-        /* We use no name: */
-        strFileSelectorName.clear();
-    }
-    /* If format is local one: */
-    else
-    {
-        /* If it's one VM only, we use the VM name as file-name: */
-        if (machineNames.size() == 1)
-            strFileSelectorName = machineNames.first();
-        /* Otherwise => we use the default file-name: */
-        else
-            strFileSelectorName = strDefaultApplianceName;
-    }
-}
-
-void UIWizardExportAppPage2::refreshFileSelectorExtension(QString &strFileSelectorExt,
-                                                          UIEmptyFilePathSelector *pFileSelector,
-                                                          bool fIsFormatCloudOne)
-{
-    /* If format is cloud one: */
-    if (fIsFormatCloudOne)
-    {
-        /* We use no extension: */
-        strFileSelectorExt.clear();
-
-        /* Update file chooser accordingly: */
-        pFileSelector->setFileFilters(QString());
-    }
-    /* If format is local one: */
-    else
-    {
-        /* We use the default (.ova) extension: */
-        strFileSelectorExt = ".ova";
-
-        /* Update file chooser accordingly: */
-        pFileSelector->setFileFilters(UIWizardExportApp::tr("Open Virtualization Format Archive (%1)").arg("*.ova") + ";;" +
-                                      UIWizardExportApp::tr("Open Virtualization Format (%1)").arg("*.ovf"));
-    }
-}
-
-void UIWizardExportAppPage2::refreshFileSelectorPath(UIEmptyFilePathSelector *pFileSelector,
-                                                     const QString &strFileSelectorName,
-                                                     const QString &strFileSelectorExt,
-                                                     bool fIsFormatCloudOne)
-{
-    /* If format is cloud one: */
-    if (fIsFormatCloudOne)
-    {
-        /* Clear file selector path: */
-        pFileSelector->setPath(QString());
-    }
-    /* If format is local one: */
-    else
-    {
-        /* Compose file selector path: */
-        const QString strPath = QDir::toNativeSeparators(QString("%1/%2")
-                                                         .arg(uiCommon().documentsPath())
-                                                         .arg(strFileSelectorName + strFileSelectorExt));
-        pFileSelector->setPath(strPath);
-    }
-}
-
-void UIWizardExportAppPage2::refreshManifestCheckBoxAccess(QCheckBox *pCheckBox,
-                                                           bool fIsFormatCloudOne)
-{
-    /* If format is cloud one: */
-    if (fIsFormatCloudOne)
-    {
-        /* Disable manifest check-box: */
-        pCheckBox->setChecked(false);
-        pCheckBox->setEnabled(false);
-    }
-    /* If format is local one: */
-    else
-    {
-        /* Enable and select manifest check-box: */
-        pCheckBox->setChecked(true);
-        pCheckBox->setEnabled(true);
-    }
-}
-
-void UIWizardExportAppPage2::refreshIncludeISOsCheckBoxAccess(QCheckBox *pCheckBox,
-                                                              bool fIsFormatCloudOne)
-{
-    /* If format is cloud one: */
-    if (fIsFormatCloudOne)
-    {
-        /* Disable include ISO check-box: */
-        pCheckBox->setChecked(false);
-        pCheckBox->setEnabled(false);
-    }
-    /* If format is local one: */
-    else
-    {
-        /* Enable include ISO check-box: */
-        pCheckBox->setEnabled(true);
-    }
-}
-
-void UIWizardExportAppPage2::refreshLocalStuff(CAppliance &comLocalAppliance,
-                                               const QList<QUuid> &machineIDs,
-                                               const QString &strUri)
-{
-    /* Clear stuff: */
-    comLocalAppliance = CAppliance();
-
-    /* Create appliance: */
-    CVirtualBox comVBox = uiCommon().virtualBox();
-    CAppliance comAppliance = comVBox.CreateAppliance();
-    if (!comVBox.isOk())
-    {
-        msgCenter().cannotCreateAppliance(comVBox);
-        return;
-    }
-
-    /* Remember appliance: */
-    comLocalAppliance = comAppliance;
-
-    /* Iterate over all the selected machine uuids: */
-    foreach (const QUuid &uMachineId, machineIDs)
-    {
-        /* Get the machine with the uMachineId: */
-        CVirtualBox comVBox = uiCommon().virtualBox();
-        CMachine comMachine = comVBox.FindMachine(uMachineId.toString());
-        if (!comVBox.isOk())
-            return msgCenter().cannotFindMachineById(comVBox, uMachineId);
-        /* Add the export description to our appliance object: */
-        CVirtualSystemDescription comVsd = comMachine.ExportTo(comLocalAppliance, strUri);
-        if (!comMachine.isOk())
-            return msgCenter().cannotExportAppliance(comMachine, comLocalAppliance.GetPath());
-        /* Add some additional fields the user may change: */
-        comVsd.AddDescription(KVirtualSystemDescriptionType_Product, "", "");
-        comVsd.AddDescription(KVirtualSystemDescriptionType_ProductUrl, "", "");
-        comVsd.AddDescription(KVirtualSystemDescriptionType_Vendor, "", "");
-        comVsd.AddDescription(KVirtualSystemDescriptionType_VendorUrl, "", "");
-        comVsd.AddDescription(KVirtualSystemDescriptionType_Version, "", "");
-        comVsd.AddDescription(KVirtualSystemDescriptionType_License, "", "");
-    }
-}
-
-void UIWizardExportAppPage2::refreshProfileCombo(QIComboBox *pCombo,
-                                                 const QString &strFormat,
-                                                 bool fIsFormatCloudOne)
-{
-    /* Sanity check: */
-    AssertPtrReturnVoid(pCombo);
-
-    /* If format is cloud one: */
-    if (fIsFormatCloudOne)
-    {
-        /* We need top-level parent as well: */
-        QWidget *pParent = pCombo->window();
-        AssertPtrReturnVoid(pParent);
-        /* Acquire provider: */
-        CCloudProvider comProvider = cloudProviderByShortName(strFormat, pParent);
-        AssertReturnVoid(comProvider.isNotNull());
-
-        /* Remember current item data to be able to restore it: */
-        QString strOldData;
-        if (pCombo->currentIndex() != -1)
-            strOldData = pCombo->currentData(ProfileData_Name).toString();
-
-        /* Block signals while updating: */
-        pCombo->blockSignals(true);
-
-        /* Clear combo initially: */
-        pCombo->clear();
-
-        /* Iterate through existing profile names: */
-        foreach (const CCloudProfile &comProfile, listCloudProfiles(comProvider, pParent))
-        {
-            /* Skip if we have nothing to populate (wtf happened?): */
-            if (comProfile.isNull())
-                continue;
-            /* Acquire profile name: */
-            QString strProfileName;
-            if (!cloudProfileName(comProfile, strProfileName, pParent))
-                continue;
-
-            /* Compose item, fill it's data: */
-            pCombo->addItem(strProfileName);
-            pCombo->setItemData(pCombo->count() - 1, strProfileName, ProfileData_Name);
-        }
-
-        /* Set previous/default item if possible: */
-        int iNewIndex = -1;
-        if (   iNewIndex == -1
-            && !strOldData.isNull())
-            iNewIndex = pCombo->findData(strOldData, ProfileData_Name);
-        if (   iNewIndex == -1
-            && pCombo->count() > 0)
-            iNewIndex = 0;
-        if (iNewIndex != -1)
-            pCombo->setCurrentIndex(iNewIndex);
-
-        /* Unblock signals after update: */
-        pCombo->blockSignals(false);
-    }
-    /* If format is local one: */
-    else
-    {
-        /* Block signals while updating: */
-        pCombo->blockSignals(true);
-
-        /* Clear combo: */
-        pCombo->clear();
-
-        /* Unblock signals after update: */
-        pCombo->blockSignals(false);
-    }
-}
-
-void UIWizardExportAppPage2::refreshCloudProfile(CCloudProfile &comCloudProfile,
-                                                 const QString &strShortProviderName,
-                                                 const QString &strProfileName,
-                                                 bool fIsFormatCloudOne)
-{
-    /* If format is cloud one: */
-    if (fIsFormatCloudOne)
-        comCloudProfile = cloudProfileByName(strShortProviderName, strProfileName);
-    /* If format is local one: */
-    else
-        comCloudProfile = CCloudProfile();
-}
-
-void UIWizardExportAppPage2::refreshCloudExportMode(const QMap<CloudExportMode, QAbstractButton*> &radios,
-                                                    bool fIsFormatCloudOne)
-{
-    /* If format is cloud one: */
-    if (fIsFormatCloudOne)
-    {
-        /* Check if something already chosen: */
-        bool fSomethingChosen = false;
-        foreach (QAbstractButton *pButton, radios.values())
-            if (pButton->isChecked())
-                fSomethingChosen = true;
-        /* Choose default cloud export option: */
-        if (!fSomethingChosen)
-            radios.value(CloudExportMode_ExportThenAsk)->setChecked(true);
-    }
-    /* If format is local one: */
-    else
-    {
-        /* Make sure nothing chosen: */
-        foreach (QAbstractButton *pButton, radios.values())
-            pButton->setChecked(false);
-    }
-}
-
-void UIWizardExportAppPage2::refreshCloudStuff(CAppliance &comCloudAppliance,
-                                               CCloudClient &comCloudClient,
-                                               CVirtualSystemDescription &comCloudVsd,
-                                               CVirtualSystemDescriptionForm &comCloudVsdExportForm,
-                                               const CCloudProfile &comCloudProfile,
-                                               const QList<QUuid> &machineIDs,
-                                               const QString &strUri,
-                                               const CloudExportMode enmCloudExportMode)
-{
-    /* Clear stuff: */
-    comCloudAppliance = CAppliance();
-    comCloudClient = CCloudClient();
-    comCloudVsd = CVirtualSystemDescription();
-    comCloudVsdExportForm = CVirtualSystemDescriptionForm();
-
-    /* Sanity check: */
-    if (comCloudProfile.isNull())
-        return;
-    if (machineIDs.isEmpty())
-        return;
-
-    /* Perform cloud export procedure for first uuid only: */
-    const QUuid uMachineId = machineIDs.first();
-
-    /* Get the machine with the uMachineId: */
-    CVirtualBox comVBox = uiCommon().virtualBox();
-    CMachine comMachine = comVBox.FindMachine(uMachineId.toString());
-    if (!comVBox.isOk())
-    {
-        msgCenter().cannotFindMachineById(comVBox, uMachineId);
-        return;
-    }
-
-    /* Create appliance: */
-    CAppliance comAppliance = comVBox.CreateAppliance();
-    if (!comVBox.isOk())
-    {
-        msgCenter().cannotCreateAppliance(comVBox);
-        return;
-    }
-
-    /* Remember appliance: */
-    comCloudAppliance = comAppliance;
-
-    /* Add the export virtual system description to our appliance object: */
-    CVirtualSystemDescription comVsd = comMachine.ExportTo(comCloudAppliance, strUri);
-    if (!comMachine.isOk())
-    {
-        msgCenter().cannotExportAppliance(comMachine, comCloudAppliance.GetPath());
-        return;
-    }
-
-    /* Remember description: */
-    comCloudVsd = comVsd;
-
-    /* Add Launch Instance flag to virtual system description: */
-    switch (enmCloudExportMode)
-    {
-        case CloudExportMode_AskThenExport:
-        case CloudExportMode_ExportThenAsk:
-            comCloudVsd.AddDescription(KVirtualSystemDescriptionType_CloudLaunchInstance, "true", QString());
-            break;
-        default:
-            comCloudVsd.AddDescription(KVirtualSystemDescriptionType_CloudLaunchInstance, "false", QString());
-            break;
-    }
-    if (!comCloudVsd.isOk())
-    {
-        msgCenter().cannotAddVirtualSystemDescriptionValue(comCloudVsd);
-        return;
-    }
-
-    /* Create Cloud Client: */
-    CCloudClient comClient = cloudClient(comCloudProfile);
-    if (comClient.isNull())
-        return;
-
-    /* Remember client: */
-    comCloudClient = comClient;
-
-    /* Read Cloud Client Export description form: */
-    CVirtualSystemDescriptionForm comVsdExportForm;
-    bool fResult = exportDescriptionForm(comCloudClient, comCloudVsd, comVsdExportForm);
-    if (!fResult)
-        return;
-
-    /* Remember export description form: */
-    comCloudVsdExportForm = comVsdExportForm;
-}
-
-QString UIWizardExportAppPage2::profileName(QIComboBox *pCombo)
-{
-    return pCombo->currentData(ProfileData_Name).toString();
-}
-
-void UIWizardExportAppPage2::updateFormatComboToolTip(QIComboBox *pCombo)
-{
-    AssertPtrReturnVoid(pCombo);
-    QString strCurrentToolTip;
-    if (pCombo->count() != 0)
-    {
-        strCurrentToolTip = pCombo->currentData(Qt::ToolTipRole).toString();
-        AssertMsg(!strCurrentToolTip.isEmpty(), ("Data not found!"));
-    }
-    pCombo->setToolTip(strCurrentToolTip);
-}
-
-void UIWizardExportAppPage2::updateMACAddressExportPolicyComboToolTip(QIComboBox *pCombo)
-{
-    AssertPtrReturnVoid(pCombo);
-    QString strCurrentToolTip;
-    if (pCombo->count() != 0)
-    {
-        strCurrentToolTip = pCombo->currentData(Qt::ToolTipRole).toString();
-        AssertMsg(!strCurrentToolTip.isEmpty(), ("Data not found!"));
-    }
-    pCombo->setToolTip(strCurrentToolTip);
-}
-
-
-/*********************************************************************************************************************************
-*   Class UIWizardExportAppPageBasic2 implementation.                                                                            *
-*********************************************************************************************************************************/
-
-UIWizardExportAppPageBasic2::UIWizardExportAppPageBasic2(bool fExportToOCIByDefault)
-    : m_fExportToOCIByDefault(fExportToOCIByDefault)
-    , m_pLabelFormat(0)
-    , m_pLabelSettings(0)
-    , m_pFormatLayout(0)
-    , m_pFormatComboBoxLabel(0)
-    , m_pFormatComboBox(0)
-    , m_pSettingsWidget1(0)
-    , m_pSettingsLayout1(0)
-    , m_pFileSelectorLabel(0)
-    , m_pFileSelector(0)
-    , m_pMACComboBoxLabel(0)
-    , m_pMACComboBox(0)
-    , m_pAdditionalLabel(0)
-    , m_pManifestCheckbox(0)
-    , m_pIncludeISOsCheckbox(0)
-    , m_pSettingsLayout2(0)
-    , m_pProfileLabel(0)
-    , m_pProfileComboBox(0)
-    , m_pProfileToolButton(0)
-    , m_pExportModeLabel(0)
-    , m_pExportModeButtonGroup(0)
-{
-    /* Create main layout: */
-    QVBoxLayout *pMainLayout = new QVBoxLayout(this);
-    if (pMainLayout)
-    {
-        /* Create format label: */
-        m_pLabelFormat = new QIRichTextLabel(this);
-        if (m_pLabelFormat)
-            pMainLayout->addWidget(m_pLabelFormat);
-
-        /* Create format layout: */
-        m_pFormatLayout = new QGridLayout;
-        if (m_pFormatLayout)
-        {
-#ifdef VBOX_WS_MAC
-            m_pFormatLayout->setContentsMargins(0, 10, 0, 10);
-            m_pFormatLayout->setSpacing(10);
-#else
-            m_pFormatLayout->setContentsMargins(0, qApp->style()->pixelMetric(QStyle::PM_LayoutTopMargin),
-                                                0, qApp->style()->pixelMetric(QStyle::PM_LayoutBottomMargin));
-#endif
-            m_pFormatLayout->setColumnStretch(0, 0);
-            m_pFormatLayout->setColumnStretch(1, 1);
-
-            /* Create format combo-box label: */
-            m_pFormatComboBoxLabel = new QLabel(this);
-            if (m_pFormatComboBoxLabel)
-            {
-                m_pFormatComboBoxLabel->setAlignment(Qt::AlignRight | Qt::AlignTrailing | Qt::AlignVCenter);
-                m_pFormatLayout->addWidget(m_pFormatComboBoxLabel, 0, 0);
-            }
-            /* Create format combo-box: */
-            m_pFormatComboBox = new QIComboBox(this);
-            if (m_pFormatComboBox)
-            {
-                m_pFormatComboBoxLabel->setBuddy(m_pFormatComboBox);
-                m_pFormatLayout->addWidget(m_pFormatComboBox, 0, 1);
-            }
-
-            /* Add into layout: */
-            pMainLayout->addLayout(m_pFormatLayout);
-        }
-
-        /* Create settings label: */
-        m_pLabelSettings = new QIRichTextLabel(this);
-        if (m_pLabelSettings)
-            pMainLayout->addWidget(m_pLabelSettings);
-
-        /* Create settings widget 1: */
-        m_pSettingsWidget1 = new QStackedWidget(this);
-        if (m_pSettingsWidget1)
-        {
-            /* Create settings pane 1: */
-            QWidget *pSettingsPane1 = new QWidget(m_pSettingsWidget1);
-            if (pSettingsPane1)
-            {
-                /* Create settings layout 1: */
-                m_pSettingsLayout1 = new QGridLayout(pSettingsPane1);
-                if (m_pSettingsLayout1)
-                {
-#ifdef VBOX_WS_MAC
-                    m_pSettingsLayout1->setContentsMargins(0, 10, 0, 10);
-                    m_pSettingsLayout1->setSpacing(10);
-#else
-                    m_pSettingsLayout1->setContentsMargins(0, qApp->style()->pixelMetric(QStyle::PM_LayoutTopMargin),
-                                                           0, qApp->style()->pixelMetric(QStyle::PM_LayoutBottomMargin));
-#endif
-                    m_pSettingsLayout1->setColumnStretch(0, 0);
-                    m_pSettingsLayout1->setColumnStretch(1, 1);
-
-                    /* Create file selector: */
-                    m_pFileSelector = new UIEmptyFilePathSelector(pSettingsPane1);
-                    if (m_pFileSelector)
-                    {
-                        m_pFileSelector->setMode(UIEmptyFilePathSelector::Mode_File_Save);
-                        m_pFileSelector->setEditable(true);
-                        m_pFileSelector->setButtonPosition(UIEmptyFilePathSelector::RightPosition);
-                        m_pFileSelector->setDefaultSaveExt("ova");
-                        m_pSettingsLayout1->addWidget(m_pFileSelector, 0, 1, 1, 2);
-                    }
-                    /* Create file selector label: */
-                    m_pFileSelectorLabel = new QLabel(pSettingsPane1);
-                    if (m_pFileSelectorLabel)
-                    {
-                        m_pFileSelectorLabel->setAlignment(Qt::AlignRight | Qt::AlignTrailing | Qt::AlignVCenter);
-                        m_pFileSelectorLabel->setBuddy(m_pFileSelector);
-                        m_pSettingsLayout1->addWidget(m_pFileSelectorLabel, 0, 0);
-                    }
-
-                    /* Create MAC policy combo-box: */
-                    m_pMACComboBox = new QIComboBox(pSettingsPane1);
-                    if (m_pMACComboBox)
-                        m_pSettingsLayout1->addWidget(m_pMACComboBox, 1, 1, 1, 2);
-                    /* Create format combo-box label: */
-                    m_pMACComboBoxLabel = new QLabel(pSettingsPane1);
-                    if (m_pMACComboBoxLabel)
-                    {
-                        m_pMACComboBoxLabel->setAlignment(Qt::AlignRight | Qt::AlignTrailing | Qt::AlignVCenter);
-                        m_pMACComboBoxLabel->setBuddy(m_pMACComboBox);
-                        m_pSettingsLayout1->addWidget(m_pMACComboBoxLabel, 1, 0);
-                    }
-
-                    /* Create advanced label: */
-                    m_pAdditionalLabel = new QLabel(pSettingsPane1);
-                    if (m_pAdditionalLabel)
-                    {
-                        m_pAdditionalLabel->setAlignment(Qt::AlignRight | Qt::AlignTrailing | Qt::AlignVCenter);
-                        m_pSettingsLayout1->addWidget(m_pAdditionalLabel, 2, 0);
-                    }
-                    /* Create manifest check-box: */
-                    m_pManifestCheckbox = new QCheckBox(pSettingsPane1);
-                    if (m_pManifestCheckbox)
-                        m_pSettingsLayout1->addWidget(m_pManifestCheckbox, 2, 1);
-                    /* Create include ISOs check-box: */
-                    m_pIncludeISOsCheckbox = new QCheckBox(pSettingsPane1);
-                    if (m_pIncludeISOsCheckbox)
-                        m_pSettingsLayout1->addWidget(m_pIncludeISOsCheckbox, 3, 1);
-
-                    /* Create placeholder: */
-                    QWidget *pPlaceholder = new QWidget(pSettingsPane1);
-                    if (pPlaceholder)
-                        m_pSettingsLayout1->addWidget(pPlaceholder, 4, 0, 1, 3);
-                }
-
-                /* Add into layout: */
-                m_pSettingsWidget1->addWidget(pSettingsPane1);
-            }
-
-            /* Create settings pane 2: */
-            QWidget *pSettingsPane2 = new QWidget(m_pSettingsWidget1);
-            if (pSettingsPane2)
-            {
-                /* Create settings layout 2: */
-                m_pSettingsLayout2 = new QGridLayout(pSettingsPane2);
-                if (m_pSettingsLayout2)
-                {
-#ifdef VBOX_WS_MAC
-                    m_pSettingsLayout2->setContentsMargins(0, 10, 0, 10);
-                    m_pSettingsLayout2->setSpacing(10);
-
-#else
-                    m_pSettingsLayout2->setContentsMargins(0, qApp->style()->pixelMetric(QStyle::PM_LayoutTopMargin),
-                                                           0, qApp->style()->pixelMetric(QStyle::PM_LayoutBottomMargin));
-#endif
-                    m_pSettingsLayout2->setColumnStretch(0, 0);
-                    m_pSettingsLayout2->setColumnStretch(1, 1);
-                    m_pSettingsLayout2->setRowStretch(4, 1);
-
-                    /* Create profile label: */
-                    m_pProfileLabel = new QLabel(pSettingsPane2);
-                    if (m_pProfileLabel)
-                    {
-                        m_pProfileLabel->setAlignment(Qt::AlignRight | Qt::AlignTrailing | Qt::AlignVCenter);
-                        m_pSettingsLayout2->addWidget(m_pProfileLabel, 0, 0);
-                    }
-                    /* Create sub-layout: */
-                    QHBoxLayout *pSubLayout = new QHBoxLayout;
-                    if (pSubLayout)
-                    {
-                        pSubLayout->setContentsMargins(0, 0, 0, 0);
-                        pSubLayout->setSpacing(1);
-
-                        /* Create profile combo-box: */
-                        m_pProfileComboBox = new QIComboBox(pSettingsPane2);
-                        if (m_pProfileComboBox)
-                        {
-                            m_pProfileLabel->setBuddy(m_pProfileComboBox);
-                            pSubLayout->addWidget(m_pProfileComboBox);
-                        }
-                        /* Create profile tool-button: */
-                        m_pProfileToolButton = new QIToolButton(pSettingsPane2);
-                        if (m_pProfileToolButton)
-                        {
-                            m_pProfileToolButton->setIcon(UIIconPool::iconSet(":/cloud_profile_manager_16px.png",
-                                                                              ":/cloud_profile_manager_disabled_16px.png"));
-                            pSubLayout->addWidget(m_pProfileToolButton);
-                        }
-
-                        /* Add into layout: */
-                        m_pSettingsLayout2->addLayout(pSubLayout, 0, 1);
-                    }
-
-                    /* Create profile label: */
-                    m_pExportModeLabel = new QLabel(pSettingsPane2);
-                    if (m_pExportModeLabel)
-                    {
-                        m_pExportModeLabel->setAlignment(Qt::AlignRight | Qt::AlignTrailing | Qt::AlignVCenter);
-                        m_pSettingsLayout2->addWidget(m_pExportModeLabel, 1, 0);
-                    }
-
-                    /* Create button-group: */
-                    m_pExportModeButtonGroup = new QButtonGroup(pSettingsPane2);
-                    if (m_pExportModeButtonGroup)
-                    {
-                        /* Create Do Not Ask button: */
-                        m_exportModeButtons[CloudExportMode_DoNotAsk] = new QRadioButton(pSettingsPane2);
-                        if (m_exportModeButtons.value(CloudExportMode_DoNotAsk))
-                        {
-                            m_pExportModeButtonGroup->addButton(m_exportModeButtons.value(CloudExportMode_DoNotAsk));
-                            m_pSettingsLayout2->addWidget(m_exportModeButtons.value(CloudExportMode_DoNotAsk), 1, 1);
-                        }
-                        /* Create Ask Then Export button: */
-                        m_exportModeButtons[CloudExportMode_AskThenExport] = new QRadioButton(pSettingsPane2);
-                        if (m_exportModeButtons.value(CloudExportMode_AskThenExport))
-                        {
-                            m_pExportModeButtonGroup->addButton(m_exportModeButtons.value(CloudExportMode_AskThenExport));
-                            m_pSettingsLayout2->addWidget(m_exportModeButtons.value(CloudExportMode_AskThenExport), 2, 1);
-                        }
-                        /* Create Export Then Ask button: */
-                        m_exportModeButtons[CloudExportMode_ExportThenAsk] = new QRadioButton(pSettingsPane2);
-                        if (m_exportModeButtons.value(CloudExportMode_ExportThenAsk))
-                        {
-                            m_pExportModeButtonGroup->addButton(m_exportModeButtons.value(CloudExportMode_ExportThenAsk));
-                            m_pSettingsLayout2->addWidget(m_exportModeButtons.value(CloudExportMode_ExportThenAsk), 3, 1);
-                        }
-                    }
-                }
-
-                /* Add into layout: */
-                m_pSettingsWidget1->addWidget(pSettingsPane2);
-            }
-
-            /* Add into layout: */
-            pMainLayout->addWidget(m_pSettingsWidget1);
-        }
-    }
-
-    /* Setup connections: */
-    connect(gVBoxEvents, &UIVirtualBoxEventHandler::sigCloudProfileRegistered,
-            this, &UIWizardExportAppPageBasic2::sltHandleFormatComboChange);
-    connect(gVBoxEvents, &UIVirtualBoxEventHandler::sigCloudProfileChanged,
-            this, &UIWizardExportAppPageBasic2::sltHandleFormatComboChange);
-    connect(m_pFileSelector, &UIEmptyFilePathSelector::pathChanged,
-            this, &UIWizardExportAppPageBasic2::sltHandleFileSelectorChange);
-    connect(m_pFormatComboBox, static_cast<void(QIComboBox::*)(int)>(&QIComboBox::currentIndexChanged),
-            this, &UIWizardExportAppPageBasic2::sltHandleFormatComboChange);
-    connect(m_pMACComboBox, static_cast<void(QIComboBox::*)(int)>(&QIComboBox::currentIndexChanged),
-            this, &UIWizardExportAppPageBasic2::sltHandleMACAddressExportPolicyComboChange);
-    connect(m_pManifestCheckbox, &QCheckBox::stateChanged,
-            this, &UIWizardExportAppPageBasic2::sltHandleManifestCheckBoxChange);
-    connect(m_pIncludeISOsCheckbox, &QCheckBox::stateChanged,
-            this, &UIWizardExportAppPageBasic2::sltHandleIncludeISOsCheckBoxChange);
-    connect(m_pProfileComboBox, static_cast<void(QIComboBox::*)(int)>(&QIComboBox::currentIndexChanged),
-            this, &UIWizardExportAppPageBasic2::sltHandleProfileComboChange);
-    connect(m_pExportModeButtonGroup, static_cast<void(QButtonGroup::*)(QAbstractButton*, bool)>(&QButtonGroup::buttonToggled),
-            this, &UIWizardExportAppPageBasic2::sltHandleRadioButtonToggled);
-    connect(m_pProfileToolButton, &QIToolButton::clicked,
-            this, &UIWizardExportAppPageBasic2::sltHandleProfileButtonClick);
-}
-
-UIWizardExportApp *UIWizardExportAppPageBasic2::wizard() const
-{
-    return qobject_cast<UIWizardExportApp*>(UINativeWizardPage::wizard());
-}
-
-void UIWizardExportAppPageBasic2::retranslateUi()
-{
-    /* Translate page: */
-    setTitle(UIWizardExportApp::tr("Appliance settings"));
-
-    /* Translate objects: */
-    m_strDefaultApplianceName = UIWizardExportApp::tr("Appliance");
-    refreshFileSelectorName(m_strFileSelectorName, wizard()->machineNames(), m_strDefaultApplianceName, wizard()->isFormatCloudOne());
-    refreshFileSelectorPath(m_pFileSelector, m_strFileSelectorName, m_strFileSelectorExt, wizard()->isFormatCloudOne());
-
-    /* Translate format label: */
-    m_pLabelFormat->setText(UIWizardExportApp::
-                            tr("<p>Please choose a format to export the virtual appliance to.</p>"
-                               "<p>The <b>Open Virtualization Format</b> supports only <b>ovf</b> or <b>ova</b> extensions. "
-                               "If you use the <b>ovf</b> extension, several files will be written separately. "
-                               "If you use the <b>ova</b> extension, all the files will be combined into one Open "
-                               "Virtualization Format archive.</p>"
-                               "<p>The <b>Oracle Cloud Infrastructure</b> format supports exporting to remote cloud servers only. "
-                               "Main virtual disk of each selected machine will be uploaded to remote server.</p>"));
-
-    /* Translate settings label: */
-    if (wizard()->isFormatCloudOne())
-        m_pLabelSettings->setText(UIWizardExportApp::
-                                  tr("<p>Please choose one of cloud service profiles you have registered to export virtual "
-                                     "machines to. It will be used to establish network connection required to upload your "
-                                     "virtual machine files to a remote cloud facility.</p>"));
-    else
-        m_pLabelSettings->setText(UIWizardExportApp::
-                                  tr("<p>Please choose a filename to export the virtual appliance to. Besides that you can "
-                                     "specify a certain amount of options which affects the size and content of resulting "
-                                     "archive.</p>"));
-
-    /* Translate file selector: */
-    m_pFileSelectorLabel->setText(UIWizardExportApp::tr("&File:"));
-    m_pFileSelector->setChooseButtonToolTip(UIWizardExportApp::tr("Choose a file to export the virtual appliance to..."));
-    m_pFileSelector->setFileDialogTitle(UIWizardExportApp::tr("Please choose a file to export the virtual appliance to"));
-
-    /* Translate hardcoded values of Format combo-box: */
-    m_pFormatComboBoxLabel->setText(UIWizardExportApp::tr("F&ormat:"));
-    m_pFormatComboBox->setItemText(0, UIWizardExportApp::tr("Open Virtualization Format 0.9"));
-    m_pFormatComboBox->setItemText(1, UIWizardExportApp::tr("Open Virtualization Format 1.0"));
-    m_pFormatComboBox->setItemText(2, UIWizardExportApp::tr("Open Virtualization Format 2.0"));
-    m_pFormatComboBox->setItemData(0, UIWizardExportApp::tr("Write in legacy OVF 0.9 format for compatibility "
-                                                            "with other virtualization products."), Qt::ToolTipRole);
-    m_pFormatComboBox->setItemData(1, UIWizardExportApp::tr("Write in standard OVF 1.0 format."), Qt::ToolTipRole);
-    m_pFormatComboBox->setItemData(2, UIWizardExportApp::tr("Write in new OVF 2.0 format."), Qt::ToolTipRole);
-    /* Translate received values of Format combo-box.
-     * We are enumerating starting from 0 for simplicity: */
-    for (int i = 0; i < m_pFormatComboBox->count(); ++i)
-        if (isFormatCloudOne(m_pFormatComboBox, i))
-        {
-            m_pFormatComboBox->setItemText(i, m_pFormatComboBox->itemData(i, FormatData_Name).toString());
-            m_pFormatComboBox->setItemData(i, UIWizardExportApp::tr("Export to cloud service provider."), Qt::ToolTipRole);
-        }
-
-    /* Translate MAC address policy combo-box: */
-    m_pMACComboBoxLabel->setText(UIWizardExportApp::tr("MAC Address &Policy:"));
-    for (int i = 0; i < m_pMACComboBox->count(); ++i)
-    {
-        const MACAddressExportPolicy enmPolicy = m_pMACComboBox->itemData(i).value<MACAddressExportPolicy>();
-        switch (enmPolicy)
-        {
-            case MACAddressExportPolicy_KeepAllMACs:
-            {
-                m_pMACComboBox->setItemText(i, UIWizardExportApp::tr("Include all network adapter MAC addresses"));
-                m_pMACComboBox->setItemData(i, UIWizardExportApp::tr("Include all network adapter MAC addresses in exported "
-                                                                     "appliance archive."), Qt::ToolTipRole);
-                break;
-            }
-            case MACAddressExportPolicy_StripAllNonNATMACs:
-            {
-                m_pMACComboBox->setItemText(i, UIWizardExportApp::tr("Include only NAT network adapter MAC addresses"));
-                m_pMACComboBox->setItemData(i, UIWizardExportApp::tr("Include only NAT network adapter MAC addresses in exported "
-                                                                     "appliance archive."), Qt::ToolTipRole);
-                break;
-            }
-            case MACAddressExportPolicy_StripAllMACs:
-            {
-                m_pMACComboBox->setItemText(i, UIWizardExportApp::tr("Strip all network adapter MAC addresses"));
-                m_pMACComboBox->setItemData(i, UIWizardExportApp::tr("Strip all network adapter MAC addresses from exported "
-                                                                     "appliance archive."), Qt::ToolTipRole);
-                break;
-            }
-            default:
-                break;
-        }
-    }
-
-    /* Translate addtional stuff: */
-    m_pAdditionalLabel->setText(UIWizardExportApp::tr("Additionally:"));
-    m_pManifestCheckbox->setToolTip(UIWizardExportApp::tr("Create a Manifest file for automatic data integrity checks on import."));
-    m_pManifestCheckbox->setText(UIWizardExportApp::tr("&Write Manifest file"));
-    m_pIncludeISOsCheckbox->setToolTip(UIWizardExportApp::tr("Include ISO image files into exported VM archive."));
-    m_pIncludeISOsCheckbox->setText(UIWizardExportApp::tr("&Include ISO image files"));
-
-    /* Translate profile stuff: */
-    m_pProfileLabel->setText(UIWizardExportApp::tr("&Profile:"));
-    m_pProfileToolButton->setToolTip(UIWizardExportApp::tr("Open Cloud Profile Manager..."));
-
-    /* Translate option label: */
-    m_pExportModeLabel->setText(UIWizardExportApp::tr("Machine Creation:"));
-    m_exportModeButtons.value(CloudExportMode_DoNotAsk)->setText(UIWizardExportApp::tr("Do not ask me about it, leave custom &image for future usage"));
-    m_exportModeButtons.value(CloudExportMode_AskThenExport)->setText(UIWizardExportApp::tr("Ask me about it &before exporting disk as custom image"));
-    m_exportModeButtons.value(CloudExportMode_ExportThenAsk)->setText(UIWizardExportApp::tr("Ask me about it &after exporting disk as custom image"));
-
-    /* Adjust label widths: */
-    QList<QWidget*> labels;
-    labels << m_pFormatComboBoxLabel;
-    labels << m_pFileSelectorLabel;
-    labels << m_pMACComboBoxLabel;
-    labels << m_pAdditionalLabel;
-    labels << m_pProfileLabel;
-    labels << m_pExportModeLabel;
-    int iMaxWidth = 0;
-    foreach (QWidget *pLabel, labels)
-        iMaxWidth = qMax(iMaxWidth, pLabel->minimumSizeHint().width());
-    m_pFormatLayout->setColumnMinimumWidth(0, iMaxWidth);
-    m_pSettingsLayout1->setColumnMinimumWidth(0, iMaxWidth);
-    m_pSettingsLayout2->setColumnMinimumWidth(0, iMaxWidth);
-
-    /* Update tool-tips: */
-    updateFormatComboToolTip(m_pFormatComboBox);
-    updateMACAddressExportPolicyComboToolTip(m_pMACComboBox);
-}
-
-void UIWizardExportAppPageBasic2::initializePage()
-{
-    /* Populate formats: */
-    populateFormats(m_pFormatComboBox, m_fExportToOCIByDefault);
-    /* Populate MAC address policies: */
-    populateMACAddressPolicies(m_pMACComboBox);
-    /* Translate page: */
-    retranslateUi();
-
-    /* Choose initially focused widget: */
-    if (wizard()->isFormatCloudOne())
-        m_pProfileComboBox->setFocus();
-    else
-        m_pFileSelector->setFocus();
-
-    /* Fetch it, asynchronously: */
-    QMetaObject::invokeMethod(this, "sltHandleFormatComboChange", Qt::QueuedConnection);
-}
-
-bool UIWizardExportAppPageBasic2::isComplete() const
-{
-    /* Initial result: */
-    bool fResult = true;
-
-    /* Check whether there was cloud target selected: */
-    if (wizard()->isFormatCloudOne())
-        fResult = m_comCloudProfile.isNotNull();
-    else
-        fResult = UICommon::hasAllowedExtension(wizard()->path().toLower(), OVFFileExts);
-
-    /* Return result: */
-    return fResult;
-}
-
-bool UIWizardExportAppPageBasic2::validatePage()
-{
-    /* Initial result: */
-    bool fResult = true;
-
-    /* Check whether there was cloud target selected: */
-    if (wizard()->isFormatCloudOne())
-    {
-        /* Update cloud stuff: */
-        updateCloudStuff();
-        /* Which is required to continue to the next page: */
-        fResult =    wizard()->cloudAppliance().isNotNull()
-                  && wizard()->cloudClient().isNotNull()
-                  && wizard()->vsd().isNotNull()
-                  && wizard()->vsdExportForm().isNotNull();
-    }
-    else
-    {
-        /* Update local stuff: */
-        updateLocalStuff();
-        /* Which is required to continue to the next page: */
-        fResult = wizard()->localAppliance().isNotNull();
-    }
-
-    /* Return result: */
-    return fResult;
-}
-
-void UIWizardExportAppPageBasic2::sltHandleFormatComboChange()
-{
-    /* Update combo tool-tip: */
-    updateFormatComboToolTip(m_pFormatComboBox);
-
-    /* Update wizard fields: */
-    wizard()->setFormat(format(m_pFormatComboBox));
-    wizard()->setFormatCloudOne(isFormatCloudOne(m_pFormatComboBox));
-
-    /* Refresh settings widget state: */
-    refreshStackedWidget(m_pSettingsWidget1, wizard()->isFormatCloudOne());
-
-    /* Update export settings: */
-    refreshFileSelectorExtension(m_strFileSelectorExt, m_pFileSelector, wizard()->isFormatCloudOne());
-    refreshFileSelectorPath(m_pFileSelector, m_strFileSelectorName, m_strFileSelectorExt, wizard()->isFormatCloudOne());
-    refreshManifestCheckBoxAccess(m_pManifestCheckbox, wizard()->isFormatCloudOne());
-    refreshIncludeISOsCheckBoxAccess(m_pIncludeISOsCheckbox, wizard()->isFormatCloudOne());
-    refreshProfileCombo(m_pProfileComboBox, wizard()->format(), wizard()->isFormatCloudOne());
-    refreshCloudExportMode(m_exportModeButtons, wizard()->isFormatCloudOne());
-
-    /* Update profile: */
-    sltHandleProfileComboChange();
-
-    /* Notify about changes: */
-    emit completeChanged();
-}
-
-void UIWizardExportAppPageBasic2::sltHandleFileSelectorChange()
-{
-    /* Skip empty paths: */
-    if (m_pFileSelector->path().isEmpty())
-        return;
-
-    m_strFileSelectorName = QFileInfo(m_pFileSelector->path()).completeBaseName();
-    wizard()->setPath(m_pFileSelector->path());
-    emit completeChanged();
-}
-
-void UIWizardExportAppPageBasic2::sltHandleMACAddressExportPolicyComboChange()
-{
-    updateMACAddressExportPolicyComboToolTip(m_pMACComboBox);
-    wizard()->setMACAddressExportPolicy(m_pMACComboBox->currentData().value<MACAddressExportPolicy>());
-    emit completeChanged();
-}
-
-void UIWizardExportAppPageBasic2::sltHandleManifestCheckBoxChange()
-{
-    wizard()->setManifestSelected(m_pManifestCheckbox->isChecked());
-    emit completeChanged();
-}
-
-void UIWizardExportAppPageBasic2::sltHandleIncludeISOsCheckBoxChange()
-{
-    wizard()->setIncludeISOsSelected(m_pIncludeISOsCheckbox->isChecked());
-    emit completeChanged();
-}
-
-void UIWizardExportAppPageBasic2::sltHandleProfileComboChange()
-{
-    /* Update wizard fields: */
-    wizard()->setProfileName(profileName(m_pProfileComboBox));
-
-    /* Update export settings: */
-    refreshCloudProfile(m_comCloudProfile,
-                        wizard()->format(),
-                        wizard()->profileName(),
-                        wizard()->isFormatCloudOne());
-
-    /* Notify about changes: */
-    emit completeChanged();
-}
-
-void UIWizardExportAppPageBasic2::sltHandleRadioButtonToggled(QAbstractButton *pButton, bool fToggled)
-{
-    /* Handle checked buttons only: */
-    if (!fToggled)
-        return;
-
-    /* Update cloud export mode field value: */
-    wizard()->setCloudExportMode(m_exportModeButtons.key(pButton));
-    emit completeChanged();
-}
-
-void UIWizardExportAppPageBasic2::sltHandleProfileButtonClick()
-{
-    /* Open Cloud Profile Manager: */
-    if (gpManager)
-        gpManager->openCloudProfileManager();
-}
-
-void UIWizardExportAppPageBasic2::updateLocalStuff()
-{
-    /* Create appliance: */
-    CAppliance comAppliance;
-    refreshLocalStuff(comAppliance, wizard()->machineIDs(), wizard()->uri());
-    wizard()->setLocalAppliance(comAppliance);
-}
-
-void UIWizardExportAppPageBasic2::updateCloudStuff()
-{
-    /* Create appliance, client, VSD and VSD export form: */
-    CAppliance comAppliance;
-    CCloudClient comClient;
-    CVirtualSystemDescription comDescription;
-    CVirtualSystemDescriptionForm comForm;
-    refreshCloudStuff(comAppliance,
-                      comClient,
-                      comDescription,
-                      comForm,
-                      m_comCloudProfile,
-                      wizard()->machineIDs(),
-                      wizard()->uri(),
-                      wizard()->cloudExportMode());
-    wizard()->setCloudAppliance(comAppliance);
-    wizard()->setCloudClient(comClient);
-    wizard()->setVsd(comDescription);
-    wizard()->setVsdExportForm(comForm);
-}
Index: unk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic2.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic2.h	(revision 91706)
+++ 	(revision )
@@ -1,262 +1,0 @@
-/* $Id$ */
-/** @file
- * VBox Qt GUI - UIWizardExportAppPageBasic2 class declaration.
- */
-
-/*
- * Copyright (C) 2009-2021 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- */
-
-#ifndef FEQT_INCLUDED_SRC_wizards_exportappliance_UIWizardExportAppPageBasic2_h
-#define FEQT_INCLUDED_SRC_wizards_exportappliance_UIWizardExportAppPageBasic2_h
-#ifndef RT_WITHOUT_PRAGMA_ONCE
-# pragma once
-#endif
-
-/* GUI includes: */
-#include "UINativeWizardPage.h"
-#include "UIWizardExportApp.h"
-
-/* COM includes: */
-#include "COMEnums.h"
-#include "CAppliance.h"
-#include "CCloudClient.h"
-#include "CCloudProfile.h"
-#include "CVirtualSystemDescription.h"
-#include "CVirtualSystemDescriptionForm.h"
-
-/* Forward declarations: */
-class QAbstractButton;
-class QButtonGroup;
-class QCheckBox;
-class QGridLayout;
-class QLabel;
-class QStackedWidget;
-class QIComboBox;
-class QIRichTextLabel;
-class QIToolButton;
-class UIEmptyFilePathSelector;
-
-/** Format combo data fields. */
-enum
-{
-    FormatData_Name            = Qt::UserRole + 1,
-    FormatData_ShortName       = Qt::UserRole + 2,
-    FormatData_IsItCloudFormat = Qt::UserRole + 3
-};
-
-/** Profile combo data fields. */
-enum
-{
-    ProfileData_Name = Qt::UserRole + 1
-};
-
-/** Namespace for 2nd basic page of the Export Appliance wizard. */
-namespace UIWizardExportAppPage2
-{
-    /** Populates formats. */
-    void populateFormats(QIComboBox *pCombo, bool fExportToOCIByDefault);
-    /** Populates MAC address policies. */
-    void populateMACAddressPolicies(QIComboBox *pCombo);
-
-    /** Returns current format of @a pCombo specified. */
-    QString format(QIComboBox *pCombo);
-    /** Returns whether format under certain @a iIndex is cloud one. */
-    bool isFormatCloudOne(QIComboBox *pCombo, int iIndex = -1);
-
-    /** Refresh stacked widget. */
-    void refreshStackedWidget(QStackedWidget *pStackedWidget,
-                              bool fIsFormatCloudOne);
-
-    /** Refresh file selector name. */
-    void refreshFileSelectorName(QString &strFileSelectorName,
-                                 const QStringList &machineNames,
-                                 const QString &strDefaultApplianceName,
-                                 bool fIsFormatCloudOne);
-    /** Refresh file selector extension. */
-    void refreshFileSelectorExtension(QString &strFileSelectorExt,
-                                      UIEmptyFilePathSelector *pFileSelector,
-                                      bool fIsFormatCloudOne);
-    /** Refresh file selector path. */
-    void refreshFileSelectorPath(UIEmptyFilePathSelector *pFileSelector,
-                                 const QString &strFileSelectorName,
-                                 const QString &strFileSelectorExt,
-                                 bool fIsFormatCloudOne);
-    /** Refresh Manifest check-box access. */
-    void refreshManifestCheckBoxAccess(QCheckBox *pCheckBox,
-                                       bool fIsFormatCloudOne);
-    /** Refresh Include ISOs check-box access. */
-    void refreshIncludeISOsCheckBoxAccess(QCheckBox *pCheckBox,
-                                          bool fIsFormatCloudOne);
-    /** Refresh local stuff. */
-    void refreshLocalStuff(CAppliance &comLocalAppliance,
-                           const QList<QUuid> &machineIDs,
-                           const QString &strUri);
-
-    /** Refresh profile combo. */
-    void refreshProfileCombo(QIComboBox *pCombo,
-                             const QString &strFormat,
-                             bool fIsFormatCloudOne);
-    /** Refresh cloud profile. */
-    void refreshCloudProfile(CCloudProfile &comCloudProfile,
-                             const QString &strShortProviderName,
-                             const QString &strProfileName,
-                             bool fIsFormatCloudOne);
-    /** Refresh cloud export mode. */
-    void refreshCloudExportMode(const QMap<CloudExportMode, QAbstractButton*> &radios,
-                                bool fIsFormatCloudOne);
-    /** Refresh cloud stuff. */
-    void refreshCloudStuff(CAppliance &comCloudAppliance,
-                           CCloudClient &comCloudClient,
-                           CVirtualSystemDescription &comCloudVsd,
-                           CVirtualSystemDescriptionForm &comCloudVsdExportForm,
-                           const CCloudProfile &comCloudProfile,
-                           const QList<QUuid> &machineIDs,
-                           const QString &strUri,
-                           const CloudExportMode enmCloudExportMode);
-
-    /** Returns current profile name of @a pCombo specified. */
-    QString profileName(QIComboBox *pCombo);
-    /** Returns current cloud export mode chosen in @a radioButtons specified. */
-    CloudExportMode cloudExportMode(const QMap<CloudExportMode, QAbstractButton*> &radioButtons);
-
-    /** Updates format combo tool-tips. */
-    void updateFormatComboToolTip(QIComboBox *pCombo);
-    /** Updates MAC address export policy combo tool-tips. */
-    void updateMACAddressExportPolicyComboToolTip(QIComboBox *pCombo);
-}
-
-/** UINativeWizardPage extension for 2nd basic page of the Export Appliance wizard,
-  * based on UIWizardExportAppPage2 namespace functions. */
-class UIWizardExportAppPageBasic2 : public UINativeWizardPage
-{
-    Q_OBJECT;
-
-public:
-
-    /** Constructs 2nd basic page. */
-    UIWizardExportAppPageBasic2(bool fExportToOCIByDefault);
-
-protected:
-
-    /** Returns wizard this page belongs to. */
-    UIWizardExportApp *wizard() const;
-
-    /** Handles translation event. */
-    virtual void retranslateUi() /* override final */;
-
-    /** Performs page initialization. */
-    virtual void initializePage() /* override final */;
-
-    /** Returns whether page is complete. */
-    virtual bool isComplete() const /* override final */;
-
-    /** Performs page validation. */
-    virtual bool validatePage() /* override final */;
-
-private slots:
-
-    /** Handles change in format combo-box. */
-    void sltHandleFormatComboChange();
-
-    /** Handles change in file-name selector. */
-    void sltHandleFileSelectorChange();
-
-    /** Handles change in MAC address export policy combo-box. */
-    void sltHandleMACAddressExportPolicyComboChange();
-
-    /** Handles change in manifest check-box. */
-    void sltHandleManifestCheckBoxChange();
-
-    /** Handles change in include ISOs check-box. */
-    void sltHandleIncludeISOsCheckBoxChange();
-
-    /** Handles change in profile combo-box. */
-    void sltHandleProfileComboChange();
-
-    /** Handles cloud export radio-button clicked. */
-    void sltHandleRadioButtonToggled(QAbstractButton *pButton, bool fToggled);
-
-    /** Handles profile tool-button click. */
-    void sltHandleProfileButtonClick();
-
-private:
-
-    /** Update local stuff. */
-    void updateLocalStuff();
-
-    /** Updates cloud stuff. */
-    void updateCloudStuff();
-
-    /** Holds whether default format should be Export to OCI. */
-    bool  m_fExportToOCIByDefault;
-
-    /** Holds the default appliance name. */
-    QString  m_strDefaultApplianceName;
-    /** Holds the file selector name. */
-    QString  m_strFileSelectorName;
-    /** Holds the file selector ext. */
-    QString  m_strFileSelectorExt;
-
-    /** Holds the Cloud Profile object instance. */
-    CCloudProfile  m_comCloudProfile;
-
-
-    /** Holds the format label instance. */
-    QIRichTextLabel *m_pLabelFormat;
-    /** Holds the settings label instance. */
-    QIRichTextLabel *m_pLabelSettings;
-
-    /** Holds the format layout. */
-    QGridLayout *m_pFormatLayout;
-    /** Holds the format combo-box label instance. */
-    QLabel      *m_pFormatComboBoxLabel;
-    /** Holds the format combo-box instance. */
-    QIComboBox  *m_pFormatComboBox;
-
-    /** Holds the settings widget 1 instance. */
-    QStackedWidget *m_pSettingsWidget1;
-
-    /** Holds the settings layout 1. */
-    QGridLayout             *m_pSettingsLayout1;
-    /** Holds the file selector label instance. */
-    QLabel                  *m_pFileSelectorLabel;
-    /** Holds the file selector instance. */
-    UIEmptyFilePathSelector *m_pFileSelector;
-    /** Holds the MAC address policy combo-box label instance. */
-    QLabel                  *m_pMACComboBoxLabel;
-    /** Holds the MAC address policy check-box instance. */
-    QIComboBox              *m_pMACComboBox;
-    /** Holds the additional label instance. */
-    QLabel                  *m_pAdditionalLabel;
-    /** Holds the manifest check-box instance. */
-    QCheckBox               *m_pManifestCheckbox;
-    /** Holds the include ISOs check-box instance. */
-    QCheckBox               *m_pIncludeISOsCheckbox;
-
-    /** Holds the settings layout 2. */
-    QGridLayout   *m_pSettingsLayout2;
-    /** Holds the profile label instance. */
-    QLabel        *m_pProfileLabel;
-    /** Holds the profile combo-box instance. */
-    QIComboBox    *m_pProfileComboBox;
-    /** Holds the profile management tool-button instance. */
-    QIToolButton  *m_pProfileToolButton;
-
-    /** Holds the export mode label instance. */
-    QLabel                                  *m_pExportModeLabel;
-    /** Holds the export mode button group instance. */
-    QButtonGroup                            *m_pExportModeButtonGroup;
-    /** Holds the map of export mode button instances. */
-    QMap<CloudExportMode, QAbstractButton*>  m_exportModeButtons;
-};
-
-#endif /* !FEQT_INCLUDED_SRC_wizards_exportappliance_UIWizardExportAppPageBasic2_h */
Index: unk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic3.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic3.cpp	(revision 91706)
+++ 	(revision )
@@ -1,278 +1,0 @@
-/* $Id$ */
-/** @file
- * VBox Qt GUI - UIWizardExportAppPageBasic3 class implementation.
- */
-
-/*
- * Copyright (C) 2009-2021 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- */
-
-/* Qt includes: */
-#include <QStackedWidget>
-#include <QVBoxLayout>
-
-/* GUI includes: */
-#include "QILabelSeparator.h"
-#include "QIRichTextLabel.h"
-#include "UIApplianceExportEditorWidget.h"
-#include "UICommon.h"
-#include "UIFormEditorWidget.h"
-#include "UIMessageCenter.h"
-#include "UIWizardExportApp.h"
-#include "UIWizardExportAppPageBasic3.h"
-
-/* COM includes: */
-#include "CMachine.h"
-#include "CVirtualSystemDescriptionForm.h"
-
-/* Namespaces: */
-using namespace UIWizardExportAppPage3;
-
-
-/*********************************************************************************************************************************
-*   Class UIWizardExportAppPage3 implementation.                                                                                 *
-*********************************************************************************************************************************/
-
-void UIWizardExportAppPage3::refreshStackedWidget(QStackedWidget *pStackedWidget,
-                                                  bool fIsFormatCloudOne)
-{
-    /* Update stack appearance according to chosen format: */
-    pStackedWidget->setCurrentIndex((int)fIsFormatCloudOne);
-}
-
-void UIWizardExportAppPage3::refreshApplianceSettingsWidget(UIApplianceExportEditorWidget *pApplianceWidget,
-                                                            const CAppliance &comAppliance,
-                                                            bool fIsFormatCloudOne)
-{
-    /* Nothing for cloud case? */
-    if (fIsFormatCloudOne)
-        return;
-
-    /* Sanity check: */
-    AssertReturnVoid(comAppliance.isNotNull());
-
-    /* Make sure the settings widget get the new appliance: */
-    pApplianceWidget->setAppliance(comAppliance);
-}
-
-void UIWizardExportAppPage3::refreshFormPropertiesTable(UIFormEditorWidget *pFormEditor,
-                                                        const CVirtualSystemDescriptionForm &comVsdForm,
-                                                        bool fIsFormatCloudOne)
-{
-    /* Nothing for local case? */
-    if (!fIsFormatCloudOne)
-        return;
-
-    /* Sanity check: */
-    AssertReturnVoid(comVsdForm.isNotNull());
-
-    /* Make sure the properties table get the new description form: */
-    pFormEditor->setVirtualSystemDescriptionForm(comVsdForm);
-}
-
-
-/*********************************************************************************************************************************
-*   Class UIWizardExportAppPageBasic3 implementation.                                                                            *
-*********************************************************************************************************************************/
-
-UIWizardExportAppPageBasic3::UIWizardExportAppPageBasic3()
-    : m_pLabel(0)
-    , m_pSettingsWidget2(0)
-    , m_pApplianceWidget(0)
-    , m_pFormEditor(0)
-    , m_fLaunching(false)
-{
-    /* Create main layout: */
-    QVBoxLayout *pMainLayout = new QVBoxLayout(this);
-    if (pMainLayout)
-    {
-        /* Create label: */
-        m_pLabel = new QIRichTextLabel(this);
-        if (m_pLabel)
-            pMainLayout->addWidget(m_pLabel);
-
-        /* Create settings widget 2: */
-        m_pSettingsWidget2 = new QStackedWidget(this);
-        if (m_pSettingsWidget2)
-        {
-            /* Create appliance widget container: */
-            QWidget *pApplianceWidgetCnt = new QWidget(this);
-            if (pApplianceWidgetCnt)
-            {
-                /* Create appliance widget layout: */
-                QVBoxLayout *pApplianceWidgetLayout = new QVBoxLayout(pApplianceWidgetCnt);
-                if (pApplianceWidgetLayout)
-                {
-                    pApplianceWidgetLayout->setContentsMargins(0, 0, 0, 0);
-
-                    /* Create appliance widget: */
-                    m_pApplianceWidget = new UIApplianceExportEditorWidget(pApplianceWidgetCnt);
-                    if (m_pApplianceWidget)
-                    {
-                        m_pApplianceWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding);
-                        pApplianceWidgetLayout->addWidget(m_pApplianceWidget);
-                    }
-                }
-
-                /* Add into layout: */
-                m_pSettingsWidget2->addWidget(pApplianceWidgetCnt);
-            }
-
-            /* Create form editor container: */
-            QWidget *pFormEditorCnt = new QWidget(this);
-            if (pFormEditorCnt)
-            {
-                /* Create form editor layout: */
-                QVBoxLayout *pFormEditorLayout = new QVBoxLayout(pFormEditorCnt);
-                if (pFormEditorLayout)
-                {
-                    pFormEditorLayout->setContentsMargins(0, 0, 0, 0);
-
-                    /* Create form editor widget: */
-                    m_pFormEditor = new UIFormEditorWidget(pFormEditorCnt);
-                    if (m_pFormEditor)
-                        pFormEditorLayout->addWidget(m_pFormEditor);
-                }
-
-                /* Add into layout: */
-                m_pSettingsWidget2->addWidget(pFormEditorCnt);
-            }
-
-            /* Add into layout: */
-            pMainLayout->addWidget(m_pSettingsWidget2);
-        }
-    }
-}
-
-UIWizardExportApp *UIWizardExportAppPageBasic3::wizard() const
-{
-    return qobject_cast<UIWizardExportApp*>(UINativeWizardPage::wizard());
-}
-
-void UIWizardExportAppPageBasic3::retranslateUi()
-{
-    /* Translate page: */
-    setTitle(UIWizardExportApp::tr("Virtual system settings"));
-
-    /* Translate label: */
-    if (wizard()->isFormatCloudOne())
-        m_pLabel->setText(UIWizardExportApp::tr("This is the descriptive information which will be used to determine settings "
-                                                "for a cloud storage your VM being exported to.  You can change it by double "
-                                                "clicking on individual lines."));
-    else
-        m_pLabel->setText(UIWizardExportApp::tr("This is the descriptive information which will be added to the virtual "
-                                                "appliance.  You can change it by double clicking on individual lines."));
-}
-
-void UIWizardExportAppPageBasic3::initializePage()
-{
-    /* Translate page: */
-    retranslateUi();
-
-    /* Refresh settings widget state: */
-    refreshStackedWidget(m_pSettingsWidget2, wizard()->isFormatCloudOne());
-    /* Refresh corresponding widgets: */
-    refreshApplianceSettingsWidget(m_pApplianceWidget, wizard()->localAppliance(), wizard()->isFormatCloudOne());
-    refreshFormPropertiesTable(m_pFormEditor, wizard()->vsdExportForm(), wizard()->isFormatCloudOne());
-
-    /* Choose initially focused widget: */
-    if (wizard()->isFormatCloudOne())
-        m_pFormEditor->setFocus();
-    else
-        m_pApplianceWidget->setFocus();
-}
-
-bool UIWizardExportAppPageBasic3::validatePage()
-{
-    /* Initial result: */
-    bool fResult = true;
-
-    /* Check whether there was cloud target selected: */
-    if (wizard()->isFormatCloudOne())
-    {
-        /* Make sure table has own data committed: */
-        m_pFormEditor->makeSureEditorDataCommitted();
-
-        /* Init VSD form: */
-        CVirtualSystemDescriptionForm comForm;
-        /* Check whether we have proper VSD form: */
-        if (!m_fLaunching)
-        {
-            /* We are going to upload image: */
-            comForm = wizard()->vsdExportForm();
-            fResult = comForm.isNotNull();
-        }
-        else
-        {
-            /* We are going to launch VM: */
-            comForm = wizard()->vsdLaunchForm();
-            fResult = comForm.isNotNull();
-        }
-        /* Give changed VSD back: */
-        if (fResult)
-        {
-            comForm.GetVirtualSystemDescription();
-            fResult = comForm.isOk();
-            if (!fResult)
-                msgCenter().cannotAcquireVirtualSystemDescriptionFormProperty(comForm);
-        }
-
-        /* Final stage? */
-        if (fResult)
-        {
-            if (!m_fLaunching)
-            {
-                /* For modes other than AskThenExport, try to export appliance first: */
-                if (wizard()->cloudExportMode() != CloudExportMode_AskThenExport)
-                    fResult = wizard()->exportAppliance();
-
-                /* For modes other than DoNotAsk, switch from uploading image to launching VM: */
-                if (   fResult
-                    && wizard()->cloudExportMode() != CloudExportMode_DoNotAsk)
-                {
-                    /* Invert flags: */
-                    fResult = false;
-                    m_fLaunching = true;
-
-                    /* Disable wizard buttons: */
-                    wizard()->disableButtons();
-
-                    /* Refresh corresponding widgets: */
-                    wizard()->createVsdLaunchForm();
-                    refreshFormPropertiesTable(m_pFormEditor, wizard()->vsdLaunchForm(), wizard()->isFormatCloudOne());
-                }
-            }
-            else
-            {
-                /* For AskThenExport mode, try to export appliance in the end: */
-                if (wizard()->cloudExportMode() == CloudExportMode_AskThenExport)
-                    fResult = wizard()->exportAppliance();
-
-                /* Try to create cloud VM: */
-                if (fResult)
-                    fResult = wizard()->createCloudVM();
-            }
-        }
-    }
-    /* Otherwise if there was local target selected: */
-    else
-    {
-        /* Prepare export: */
-        m_pApplianceWidget->prepareExport();
-
-        /* Try to export appliance: */
-        if (fResult)
-            fResult = wizard()->exportAppliance();
-    }
-
-    /* Return result: */
-    return fResult;
-}
Index: unk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic3.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic3.h	(revision 91706)
+++ 	(revision )
@@ -1,100 +1,0 @@
-/* $Id$ */
-/** @file
- * VBox Qt GUI - UIWizardExportAppPageBasic3 class declaration.
- */
-
-/*
- * Copyright (C) 2009-2021 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- */
-
-#ifndef FEQT_INCLUDED_SRC_wizards_exportappliance_UIWizardExportAppPageBasic3_h
-#define FEQT_INCLUDED_SRC_wizards_exportappliance_UIWizardExportAppPageBasic3_h
-#ifndef RT_WITHOUT_PRAGMA_ONCE
-# pragma once
-#endif
-
-/* Qt includes: */
-#include <QList>
-
-/* GUI includes: */
-#include "UINativeWizardPage.h"
-
-/* COM includes: */
-#include "COMEnums.h"
-#include "CAppliance.h"
-
-/* Forward declarations: */
-class QStackedWidget;
-class QIRichTextLabel;
-class UIApplianceExportEditorWidget;
-class UIFormEditorWidget;
-class UIWizardExportApp;
-
-/** Namespace for 3rd basic page of the Export Appliance wizard. */
-namespace UIWizardExportAppPage3
-{
-    /** Refresh stacked widget. */
-    void refreshStackedWidget(QStackedWidget *pStackedWidget,
-                              bool fIsFormatCloudOne);
-
-    /** Refreshes appliance settings widget. */
-    void refreshApplianceSettingsWidget(UIApplianceExportEditorWidget *pApplianceWidget,
-                                        const CAppliance &comAppliance,
-                                        bool fIsFormatCloudOne);
-    /** Refreshes form properties table. */
-    void refreshFormPropertiesTable(UIFormEditorWidget *pFormEditor,
-                                    const CVirtualSystemDescriptionForm &comVsdForm,
-                                    bool fIsFormatCloudOne);
-}
-
-/** UINativeWizardPage extension for 3rd basic page of the Export Appliance wizard,
-  * based on UIWizardExportAppPage3 namespace functions. */
-class UIWizardExportAppPageBasic3 : public UINativeWizardPage
-{
-    Q_OBJECT;
-
-public:
-
-    /** Constructs 3rd basic page. */
-    UIWizardExportAppPageBasic3();
-
-protected:
-
-    /** Returns wizard this page belongs to. */
-    UIWizardExportApp *wizard() const;
-
-    /** Handles translation event. */
-    virtual void retranslateUi() /* override final */;
-
-    /** Performs page initialization. */
-    virtual void initializePage() /* override final */;
-
-    /** Performs page validation. */
-    virtual bool validatePage() /* override final */;
-
-private:
-
-    /** Holds the label instance. */
-    QIRichTextLabel *m_pLabel;
-
-    /** Holds the settings widget 2 instance. */
-    QStackedWidget *m_pSettingsWidget2;
-
-    /** Holds the appliance widget reference. */
-    UIApplianceExportEditorWidget *m_pApplianceWidget;
-    /** Holds the Form Editor widget instance. */
-    UIFormEditorWidget            *m_pFormEditor;
-
-    /** Holds whether cloud exporting is at launching stage. */
-    bool  m_fLaunching;
-};
-
-#endif /* !FEQT_INCLUDED_SRC_wizards_exportappliance_UIWizardExportAppPageBasic3_h */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageExpert.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageExpert.cpp	(revision 91706)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageExpert.cpp	(revision 91707)
@@ -44,13 +44,13 @@
 #include "UIVirtualBoxManager.h"
 #include "UIWizardExportApp.h"
-#include "UIWizardExportAppPageBasic1.h"
-#include "UIWizardExportAppPageBasic2.h"
-#include "UIWizardExportAppPageBasic3.h"
 #include "UIWizardExportAppPageExpert.h"
+#include "UIWizardExportAppPageFormat.h"
+#include "UIWizardExportAppPageSettings.h"
+#include "UIWizardExportAppPageVMs.h"
 
 /* Namespaces: */
-using namespace UIWizardExportAppPage1;
-using namespace UIWizardExportAppPage2;
-using namespace UIWizardExportAppPage3;
+using namespace UIWizardExportAppFormat;
+using namespace UIWizardExportAppSettings;
+using namespace UIWizardExportAppVMs;
 
 
@@ -428,7 +428,7 @@
 
     /* Translate tool-box: */
-    m_pToolBox->setPageTitle(0, UIWizardExportApp::tr("Virtual &machines to export"));
-    m_pToolBox->setPageTitle(1, UIWizardExportApp::tr("Virtual &system settings"));
-    m_pToolBox->setPageTitle(2, UIWizardExportApp::tr("Appliance settings"));
+    m_pToolBox->setPageTitle(0, UIWizardExportApp::tr("Virtual &machines"));
+    m_pToolBox->setPageTitle(1, UIWizardExportApp::tr("Format &settings"));
+    m_pToolBox->setPageTitle(2, UIWizardExportApp::tr("&Appliance settings"));
 
     /* Translate File selector: */
@@ -700,6 +700,6 @@
 
     /* Refresh settings widget state: */
-    UIWizardExportAppPage2::refreshStackedWidget(m_pSettingsWidget1, wizard()->isFormatCloudOne());
-    UIWizardExportAppPage3::refreshStackedWidget(m_pSettingsWidget2, wizard()->isFormatCloudOne());
+    UIWizardExportAppFormat::refreshStackedWidget(m_pSettingsWidget1, wizard()->isFormatCloudOne());
+    UIWizardExportAppSettings::refreshStackedWidget(m_pSettingsWidget2, wizard()->isFormatCloudOne());
 
     /* Update export settings: */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageExpert.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageExpert.h	(revision 91706)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageExpert.h	(revision 91707)
@@ -51,5 +51,5 @@
 class UIWizardExportApp;
 
-/** UIWizardPage extension for UIWizardExportAppPage1, UIWizardExportAppPage2 and UIWizardExportAppPage3. */
+/** UIWizardPage extension for UIWizardExportAppVMs, UIWizardExportAppFormat and UIWizardExportAppSettings. */
 class UIWizardExportAppPageExpert : public UINativeWizardPage
 {
Index: /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageFormat.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageFormat.cpp	(revision 91707)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageFormat.cpp	(revision 91707)
@@ -0,0 +1,1181 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIWizardExportAppPageFormat class implementation.
+ */
+
+/*
+ * Copyright (C) 2009-2021 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+/* Qt includes: */
+#include <QButtonGroup>
+#include <QCheckBox>
+#include <QDir>
+#include <QGridLayout>
+#include <QLabel>
+#include <QRadioButton>
+#include <QStackedWidget>
+#include <QVBoxLayout>
+
+/* GUI includes: */
+#include "QIComboBox.h"
+#include "QIRichTextLabel.h"
+#include "QIToolButton.h"
+#include "UICloudNetworkingStuff.h"
+#include "UICommon.h"
+#include "UIEmptyFilePathSelector.h"
+#include "UIIconPool.h"
+#include "UIMessageCenter.h"
+#include "UIVirtualBoxEventHandler.h"
+#include "UIVirtualBoxManager.h"
+#include "UIWizardExportApp.h"
+#include "UIWizardExportAppPageFormat.h"
+
+/* COM includes: */
+#include "CMachine.h"
+#include "CSystemProperties.h"
+
+/* Namespaces: */
+using namespace UIWizardExportAppFormat;
+
+
+/*********************************************************************************************************************************
+*   Class UIWizardExportAppFormat implementation.                                                                                *
+*********************************************************************************************************************************/
+
+void UIWizardExportAppFormat::populateFormats(QIComboBox *pCombo, bool fExportToOCIByDefault)
+{
+    /* Sanity check: */
+    AssertPtrReturnVoid(pCombo);
+    /* We need top-level parent as well: */
+    QWidget *pParent = pCombo->window();
+    AssertPtrReturnVoid(pParent);
+
+    /* Remember current item data to be able to restore it: */
+    QString strOldData;
+    if (pCombo->currentIndex() != -1)
+        strOldData = pCombo->currentData(FormatData_ShortName).toString();
+    else
+    {
+        /* Otherwise "OCI" or "ovf-1.0" should be the default one: */
+        if (fExportToOCIByDefault)
+            strOldData = "OCI";
+        else
+            strOldData = "ovf-1.0";
+    }
+
+    /* Block signals while updating: */
+    pCombo->blockSignals(true);
+
+    /* Clear combo initially: */
+    pCombo->clear();
+
+    /* Compose hardcoded format list: */
+    QStringList formats;
+    formats << "ovf-0.9";
+    formats << "ovf-1.0";
+    formats << "ovf-2.0";
+    /* Add that list to combo: */
+    foreach (const QString &strShortName, formats)
+    {
+        /* Compose empty item, fill it's data: */
+        pCombo->addItem(QString());
+        pCombo->setItemData(pCombo->count() - 1, strShortName, FormatData_ShortName);
+    }
+
+    /* Iterate through existing providers: */
+    foreach (const CCloudProvider &comProvider, listCloudProviders(pParent))
+    {
+        /* Skip if we have nothing to populate (file missing?): */
+        if (comProvider.isNull())
+            continue;
+        /* Acquire provider name: */
+        QString strProviderName;
+        if (!cloudProviderName(comProvider, strProviderName, pParent))
+            continue;
+        /* Acquire provider short name: */
+        QString strProviderShortName;
+        if (!cloudProviderShortName(comProvider, strProviderShortName, pParent))
+            continue;
+
+        /* Compose empty item, fill it's data: */
+        pCombo->addItem(QString());
+        pCombo->setItemData(pCombo->count() - 1, strProviderName,      FormatData_Name);
+        pCombo->setItemData(pCombo->count() - 1, strProviderShortName, FormatData_ShortName);
+        pCombo->setItemData(pCombo->count() - 1, true,                 FormatData_IsItCloudFormat);
+    }
+
+    /* Set previous/default item if possible: */
+    int iNewIndex = -1;
+    if (   iNewIndex == -1
+        && !strOldData.isNull())
+        iNewIndex = pCombo->findData(strOldData, FormatData_ShortName);
+    if (   iNewIndex == -1
+        && pCombo->count() > 0)
+        iNewIndex = 0;
+    if (iNewIndex != -1)
+        pCombo->setCurrentIndex(iNewIndex);
+
+    /* Unblock signals after update: */
+    pCombo->blockSignals(false);
+}
+
+void UIWizardExportAppFormat::populateMACAddressPolicies(QIComboBox *pCombo)
+{
+    /* Sanity check: */
+    AssertPtrReturnVoid(pCombo);
+    /* We need top-level parent as well: */
+    QWidget *pParent = pCombo->window();
+    AssertPtrReturnVoid(pParent);
+
+    /* Map known export options to known MAC address export policies: */
+    QMap<KExportOptions, MACAddressExportPolicy> knownOptions;
+    knownOptions[KExportOptions_StripAllMACs] = MACAddressExportPolicy_StripAllMACs;
+    knownOptions[KExportOptions_StripAllNonNATMACs] = MACAddressExportPolicy_StripAllNonNATMACs;
+    /* Load currently supported export options: */
+    const QVector<KExportOptions> supportedOptions =
+        uiCommon().virtualBox().GetSystemProperties().GetSupportedExportOptions();
+    /* Check which of supported options/policies are known: */
+    QList<MACAddressExportPolicy> supportedPolicies;
+    foreach (const KExportOptions &enmOption, supportedOptions)
+        if (knownOptions.contains(enmOption))
+            supportedPolicies << knownOptions.value(enmOption);
+    /* Remember current item data to be able to restore it: */
+    MACAddressExportPolicy enmOldData = MACAddressExportPolicy_MAX;
+    if (pCombo->currentIndex() != -1)
+        enmOldData = pCombo->currentData().value<MACAddressExportPolicy>();
+    else
+    {
+        if (supportedPolicies.contains(MACAddressExportPolicy_StripAllNonNATMACs))
+            enmOldData = MACAddressExportPolicy_StripAllNonNATMACs;
+        else
+            enmOldData = MACAddressExportPolicy_KeepAllMACs;
+    }
+
+    /* Block signals while updating: */
+    pCombo->blockSignals(true);
+
+    /* Clear combo initially: */
+    pCombo->clear();
+
+    /* Add supported policies first: */
+    foreach (const MACAddressExportPolicy &enmPolicy, supportedPolicies)
+        pCombo->addItem(QString(), QVariant::fromValue(enmPolicy));
+
+    /* Add hardcoded policy finally: */
+    pCombo->addItem(QString(), QVariant::fromValue(MACAddressExportPolicy_KeepAllMACs));
+
+    /* Set previous/default item if possible: */
+    int iNewIndex = -1;
+    if (   iNewIndex == -1
+        && enmOldData != MACAddressExportPolicy_MAX)
+        iNewIndex = pCombo->findData(QVariant::fromValue(enmOldData));
+    if (   iNewIndex == -1
+        && pCombo->count() > 0)
+        iNewIndex = 0;
+    if (iNewIndex != -1)
+        pCombo->setCurrentIndex(iNewIndex);
+
+    /* Unblock signals after update: */
+    pCombo->blockSignals(false);
+}
+
+QString UIWizardExportAppFormat::format(QIComboBox *pCombo)
+{
+    /* Sanity check: */
+    AssertPtrReturn(pCombo, QString());
+
+    /* Give the actual result: */
+    return pCombo->currentData(FormatData_ShortName).toString();
+}
+
+bool UIWizardExportAppFormat::isFormatCloudOne(QIComboBox *pCombo, int iIndex /* = -1 */)
+{
+    /* Sanity check: */
+    AssertPtrReturn(pCombo, false);
+
+    /* Handle special case, -1 means "current one": */
+    if (iIndex == -1)
+        iIndex = pCombo->currentIndex();
+
+    /* Give the actual result: */
+    return pCombo->itemData(iIndex, FormatData_IsItCloudFormat).toBool();
+}
+
+void UIWizardExportAppFormat::refreshStackedWidget(QStackedWidget *pStackedWidget, bool fIsFormatCloudOne)
+{
+    /* Update stack appearance according to chosen format: */
+    pStackedWidget->setCurrentIndex((int)fIsFormatCloudOne);
+}
+
+void UIWizardExportAppFormat::refreshFileSelectorName(QString &strFileSelectorName,
+                                                      const QStringList &machineNames,
+                                                      const QString &strDefaultApplianceName,
+                                                      bool fIsFormatCloudOne)
+{
+    /* If format is cloud one: */
+    if (fIsFormatCloudOne)
+    {
+        /* We use no name: */
+        strFileSelectorName.clear();
+    }
+    /* If format is local one: */
+    else
+    {
+        /* If it's one VM only, we use the VM name as file-name: */
+        if (machineNames.size() == 1)
+            strFileSelectorName = machineNames.first();
+        /* Otherwise => we use the default file-name: */
+        else
+            strFileSelectorName = strDefaultApplianceName;
+    }
+}
+
+void UIWizardExportAppFormat::refreshFileSelectorExtension(QString &strFileSelectorExt,
+                                                           UIEmptyFilePathSelector *pFileSelector,
+                                                           bool fIsFormatCloudOne)
+{
+    /* If format is cloud one: */
+    if (fIsFormatCloudOne)
+    {
+        /* We use no extension: */
+        strFileSelectorExt.clear();
+
+        /* Update file chooser accordingly: */
+        pFileSelector->setFileFilters(QString());
+    }
+    /* If format is local one: */
+    else
+    {
+        /* We use the default (.ova) extension: */
+        strFileSelectorExt = ".ova";
+
+        /* Update file chooser accordingly: */
+        pFileSelector->setFileFilters(UIWizardExportApp::tr("Open Virtualization Format Archive (%1)").arg("*.ova") + ";;" +
+                                      UIWizardExportApp::tr("Open Virtualization Format (%1)").arg("*.ovf"));
+    }
+}
+
+void UIWizardExportAppFormat::refreshFileSelectorPath(UIEmptyFilePathSelector *pFileSelector,
+                                                      const QString &strFileSelectorName,
+                                                      const QString &strFileSelectorExt,
+                                                      bool fIsFormatCloudOne)
+{
+    /* If format is cloud one: */
+    if (fIsFormatCloudOne)
+    {
+        /* Clear file selector path: */
+        pFileSelector->setPath(QString());
+    }
+    /* If format is local one: */
+    else
+    {
+        /* Compose file selector path: */
+        const QString strPath = QDir::toNativeSeparators(QString("%1/%2")
+                                                         .arg(uiCommon().documentsPath())
+                                                         .arg(strFileSelectorName + strFileSelectorExt));
+        pFileSelector->setPath(strPath);
+    }
+}
+
+void UIWizardExportAppFormat::refreshManifestCheckBoxAccess(QCheckBox *pCheckBox,
+                                                            bool fIsFormatCloudOne)
+{
+    /* If format is cloud one: */
+    if (fIsFormatCloudOne)
+    {
+        /* Disable manifest check-box: */
+        pCheckBox->setChecked(false);
+        pCheckBox->setEnabled(false);
+    }
+    /* If format is local one: */
+    else
+    {
+        /* Enable and select manifest check-box: */
+        pCheckBox->setChecked(true);
+        pCheckBox->setEnabled(true);
+    }
+}
+
+void UIWizardExportAppFormat::refreshIncludeISOsCheckBoxAccess(QCheckBox *pCheckBox,
+                                                               bool fIsFormatCloudOne)
+{
+    /* If format is cloud one: */
+    if (fIsFormatCloudOne)
+    {
+        /* Disable include ISO check-box: */
+        pCheckBox->setChecked(false);
+        pCheckBox->setEnabled(false);
+    }
+    /* If format is local one: */
+    else
+    {
+        /* Enable include ISO check-box: */
+        pCheckBox->setEnabled(true);
+    }
+}
+
+void UIWizardExportAppFormat::refreshLocalStuff(CAppliance &comLocalAppliance,
+                                                const QList<QUuid> &machineIDs,
+                                                const QString &strUri)
+{
+    /* Clear stuff: */
+    comLocalAppliance = CAppliance();
+
+    /* Create appliance: */
+    CVirtualBox comVBox = uiCommon().virtualBox();
+    CAppliance comAppliance = comVBox.CreateAppliance();
+    if (!comVBox.isOk())
+    {
+        msgCenter().cannotCreateAppliance(comVBox);
+        return;
+    }
+
+    /* Remember appliance: */
+    comLocalAppliance = comAppliance;
+
+    /* Iterate over all the selected machine uuids: */
+    foreach (const QUuid &uMachineId, machineIDs)
+    {
+        /* Get the machine with the uMachineId: */
+        CVirtualBox comVBox = uiCommon().virtualBox();
+        CMachine comMachine = comVBox.FindMachine(uMachineId.toString());
+        if (!comVBox.isOk())
+            return msgCenter().cannotFindMachineById(comVBox, uMachineId);
+        /* Add the export description to our appliance object: */
+        CVirtualSystemDescription comVsd = comMachine.ExportTo(comLocalAppliance, strUri);
+        if (!comMachine.isOk())
+            return msgCenter().cannotExportAppliance(comMachine, comLocalAppliance.GetPath());
+        /* Add some additional fields the user may change: */
+        comVsd.AddDescription(KVirtualSystemDescriptionType_Product, "", "");
+        comVsd.AddDescription(KVirtualSystemDescriptionType_ProductUrl, "", "");
+        comVsd.AddDescription(KVirtualSystemDescriptionType_Vendor, "", "");
+        comVsd.AddDescription(KVirtualSystemDescriptionType_VendorUrl, "", "");
+        comVsd.AddDescription(KVirtualSystemDescriptionType_Version, "", "");
+        comVsd.AddDescription(KVirtualSystemDescriptionType_License, "", "");
+    }
+}
+
+void UIWizardExportAppFormat::refreshProfileCombo(QIComboBox *pCombo,
+                                                  const QString &strFormat,
+                                                  bool fIsFormatCloudOne)
+{
+    /* Sanity check: */
+    AssertPtrReturnVoid(pCombo);
+
+    /* If format is cloud one: */
+    if (fIsFormatCloudOne)
+    {
+        /* We need top-level parent as well: */
+        QWidget *pParent = pCombo->window();
+        AssertPtrReturnVoid(pParent);
+        /* Acquire provider: */
+        CCloudProvider comProvider = cloudProviderByShortName(strFormat, pParent);
+        AssertReturnVoid(comProvider.isNotNull());
+
+        /* Remember current item data to be able to restore it: */
+        QString strOldData;
+        if (pCombo->currentIndex() != -1)
+            strOldData = pCombo->currentData(ProfileData_Name).toString();
+
+        /* Block signals while updating: */
+        pCombo->blockSignals(true);
+
+        /* Clear combo initially: */
+        pCombo->clear();
+
+        /* Iterate through existing profile names: */
+        foreach (const CCloudProfile &comProfile, listCloudProfiles(comProvider, pParent))
+        {
+            /* Skip if we have nothing to populate (wtf happened?): */
+            if (comProfile.isNull())
+                continue;
+            /* Acquire profile name: */
+            QString strProfileName;
+            if (!cloudProfileName(comProfile, strProfileName, pParent))
+                continue;
+
+            /* Compose item, fill it's data: */
+            pCombo->addItem(strProfileName);
+            pCombo->setItemData(pCombo->count() - 1, strProfileName, ProfileData_Name);
+        }
+
+        /* Set previous/default item if possible: */
+        int iNewIndex = -1;
+        if (   iNewIndex == -1
+            && !strOldData.isNull())
+            iNewIndex = pCombo->findData(strOldData, ProfileData_Name);
+        if (   iNewIndex == -1
+            && pCombo->count() > 0)
+            iNewIndex = 0;
+        if (iNewIndex != -1)
+            pCombo->setCurrentIndex(iNewIndex);
+
+        /* Unblock signals after update: */
+        pCombo->blockSignals(false);
+    }
+    /* If format is local one: */
+    else
+    {
+        /* Block signals while updating: */
+        pCombo->blockSignals(true);
+
+        /* Clear combo: */
+        pCombo->clear();
+
+        /* Unblock signals after update: */
+        pCombo->blockSignals(false);
+    }
+}
+
+void UIWizardExportAppFormat::refreshCloudProfile(CCloudProfile &comCloudProfile,
+                                                  const QString &strShortProviderName,
+                                                  const QString &strProfileName,
+                                                  bool fIsFormatCloudOne)
+{
+    /* If format is cloud one: */
+    if (fIsFormatCloudOne)
+        comCloudProfile = cloudProfileByName(strShortProviderName, strProfileName);
+    /* If format is local one: */
+    else
+        comCloudProfile = CCloudProfile();
+}
+
+void UIWizardExportAppFormat::refreshCloudExportMode(const QMap<CloudExportMode, QAbstractButton*> &radios,
+                                                     bool fIsFormatCloudOne)
+{
+    /* If format is cloud one: */
+    if (fIsFormatCloudOne)
+    {
+        /* Check if something already chosen: */
+        bool fSomethingChosen = false;
+        foreach (QAbstractButton *pButton, radios.values())
+            if (pButton->isChecked())
+                fSomethingChosen = true;
+        /* Choose default cloud export option: */
+        if (!fSomethingChosen)
+            radios.value(CloudExportMode_ExportThenAsk)->setChecked(true);
+    }
+    /* If format is local one: */
+    else
+    {
+        /* Make sure nothing chosen: */
+        foreach (QAbstractButton *pButton, radios.values())
+            pButton->setChecked(false);
+    }
+}
+
+void UIWizardExportAppFormat::refreshCloudStuff(CAppliance &comCloudAppliance,
+                                                CCloudClient &comCloudClient,
+                                                CVirtualSystemDescription &comCloudVsd,
+                                                CVirtualSystemDescriptionForm &comCloudVsdExportForm,
+                                                const CCloudProfile &comCloudProfile,
+                                                const QList<QUuid> &machineIDs,
+                                                const QString &strUri,
+                                                const CloudExportMode enmCloudExportMode)
+{
+    /* Clear stuff: */
+    comCloudAppliance = CAppliance();
+    comCloudClient = CCloudClient();
+    comCloudVsd = CVirtualSystemDescription();
+    comCloudVsdExportForm = CVirtualSystemDescriptionForm();
+
+    /* Sanity check: */
+    if (comCloudProfile.isNull())
+        return;
+    if (machineIDs.isEmpty())
+        return;
+
+    /* Perform cloud export procedure for first uuid only: */
+    const QUuid uMachineId = machineIDs.first();
+
+    /* Get the machine with the uMachineId: */
+    CVirtualBox comVBox = uiCommon().virtualBox();
+    CMachine comMachine = comVBox.FindMachine(uMachineId.toString());
+    if (!comVBox.isOk())
+    {
+        msgCenter().cannotFindMachineById(comVBox, uMachineId);
+        return;
+    }
+
+    /* Create appliance: */
+    CAppliance comAppliance = comVBox.CreateAppliance();
+    if (!comVBox.isOk())
+    {
+        msgCenter().cannotCreateAppliance(comVBox);
+        return;
+    }
+
+    /* Remember appliance: */
+    comCloudAppliance = comAppliance;
+
+    /* Add the export virtual system description to our appliance object: */
+    CVirtualSystemDescription comVsd = comMachine.ExportTo(comCloudAppliance, strUri);
+    if (!comMachine.isOk())
+    {
+        msgCenter().cannotExportAppliance(comMachine, comCloudAppliance.GetPath());
+        return;
+    }
+
+    /* Remember description: */
+    comCloudVsd = comVsd;
+
+    /* Add Launch Instance flag to virtual system description: */
+    switch (enmCloudExportMode)
+    {
+        case CloudExportMode_AskThenExport:
+        case CloudExportMode_ExportThenAsk:
+            comCloudVsd.AddDescription(KVirtualSystemDescriptionType_CloudLaunchInstance, "true", QString());
+            break;
+        default:
+            comCloudVsd.AddDescription(KVirtualSystemDescriptionType_CloudLaunchInstance, "false", QString());
+            break;
+    }
+    if (!comCloudVsd.isOk())
+    {
+        msgCenter().cannotAddVirtualSystemDescriptionValue(comCloudVsd);
+        return;
+    }
+
+    /* Create Cloud Client: */
+    CCloudClient comClient = cloudClient(comCloudProfile);
+    if (comClient.isNull())
+        return;
+
+    /* Remember client: */
+    comCloudClient = comClient;
+
+    /* Read Cloud Client Export description form: */
+    CVirtualSystemDescriptionForm comVsdExportForm;
+    bool fResult = exportDescriptionForm(comCloudClient, comCloudVsd, comVsdExportForm);
+    if (!fResult)
+        return;
+
+    /* Remember export description form: */
+    comCloudVsdExportForm = comVsdExportForm;
+}
+
+QString UIWizardExportAppFormat::profileName(QIComboBox *pCombo)
+{
+    return pCombo->currentData(ProfileData_Name).toString();
+}
+
+void UIWizardExportAppFormat::updateFormatComboToolTip(QIComboBox *pCombo)
+{
+    AssertPtrReturnVoid(pCombo);
+    QString strCurrentToolTip;
+    if (pCombo->count() != 0)
+    {
+        strCurrentToolTip = pCombo->currentData(Qt::ToolTipRole).toString();
+        AssertMsg(!strCurrentToolTip.isEmpty(), ("Data not found!"));
+    }
+    pCombo->setToolTip(strCurrentToolTip);
+}
+
+void UIWizardExportAppFormat::updateMACAddressExportPolicyComboToolTip(QIComboBox *pCombo)
+{
+    AssertPtrReturnVoid(pCombo);
+    QString strCurrentToolTip;
+    if (pCombo->count() != 0)
+    {
+        strCurrentToolTip = pCombo->currentData(Qt::ToolTipRole).toString();
+        AssertMsg(!strCurrentToolTip.isEmpty(), ("Data not found!"));
+    }
+    pCombo->setToolTip(strCurrentToolTip);
+}
+
+
+/*********************************************************************************************************************************
+*   Class UIWizardExportAppPageFormat implementation.                                                                            *
+*********************************************************************************************************************************/
+
+UIWizardExportAppPageFormat::UIWizardExportAppPageFormat(bool fExportToOCIByDefault)
+    : m_fExportToOCIByDefault(fExportToOCIByDefault)
+    , m_pLabelFormat(0)
+    , m_pLabelSettings(0)
+    , m_pFormatLayout(0)
+    , m_pFormatComboBoxLabel(0)
+    , m_pFormatComboBox(0)
+    , m_pSettingsWidget1(0)
+    , m_pSettingsLayout1(0)
+    , m_pFileSelectorLabel(0)
+    , m_pFileSelector(0)
+    , m_pMACComboBoxLabel(0)
+    , m_pMACComboBox(0)
+    , m_pAdditionalLabel(0)
+    , m_pManifestCheckbox(0)
+    , m_pIncludeISOsCheckbox(0)
+    , m_pSettingsLayout2(0)
+    , m_pProfileLabel(0)
+    , m_pProfileComboBox(0)
+    , m_pProfileToolButton(0)
+    , m_pExportModeLabel(0)
+    , m_pExportModeButtonGroup(0)
+{
+    /* Create main layout: */
+    QVBoxLayout *pMainLayout = new QVBoxLayout(this);
+    if (pMainLayout)
+    {
+        /* Create format label: */
+        m_pLabelFormat = new QIRichTextLabel(this);
+        if (m_pLabelFormat)
+            pMainLayout->addWidget(m_pLabelFormat);
+
+        /* Create format layout: */
+        m_pFormatLayout = new QGridLayout;
+        if (m_pFormatLayout)
+        {
+#ifdef VBOX_WS_MAC
+            m_pFormatLayout->setContentsMargins(0, 10, 0, 10);
+            m_pFormatLayout->setSpacing(10);
+#else
+            m_pFormatLayout->setContentsMargins(0, qApp->style()->pixelMetric(QStyle::PM_LayoutTopMargin),
+                                                0, qApp->style()->pixelMetric(QStyle::PM_LayoutBottomMargin));
+#endif
+            m_pFormatLayout->setColumnStretch(0, 0);
+            m_pFormatLayout->setColumnStretch(1, 1);
+
+            /* Create format combo-box label: */
+            m_pFormatComboBoxLabel = new QLabel(this);
+            if (m_pFormatComboBoxLabel)
+            {
+                m_pFormatComboBoxLabel->setAlignment(Qt::AlignRight | Qt::AlignTrailing | Qt::AlignVCenter);
+                m_pFormatLayout->addWidget(m_pFormatComboBoxLabel, 0, 0);
+            }
+            /* Create format combo-box: */
+            m_pFormatComboBox = new QIComboBox(this);
+            if (m_pFormatComboBox)
+            {
+                m_pFormatComboBoxLabel->setBuddy(m_pFormatComboBox);
+                m_pFormatLayout->addWidget(m_pFormatComboBox, 0, 1);
+            }
+
+            /* Add into layout: */
+            pMainLayout->addLayout(m_pFormatLayout);
+        }
+
+        /* Create settings label: */
+        m_pLabelSettings = new QIRichTextLabel(this);
+        if (m_pLabelSettings)
+            pMainLayout->addWidget(m_pLabelSettings);
+
+        /* Create settings widget 1: */
+        m_pSettingsWidget1 = new QStackedWidget(this);
+        if (m_pSettingsWidget1)
+        {
+            /* Create settings pane 1: */
+            QWidget *pSettingsPane1 = new QWidget(m_pSettingsWidget1);
+            if (pSettingsPane1)
+            {
+                /* Create settings layout 1: */
+                m_pSettingsLayout1 = new QGridLayout(pSettingsPane1);
+                if (m_pSettingsLayout1)
+                {
+#ifdef VBOX_WS_MAC
+                    m_pSettingsLayout1->setContentsMargins(0, 10, 0, 10);
+                    m_pSettingsLayout1->setSpacing(10);
+#else
+                    m_pSettingsLayout1->setContentsMargins(0, qApp->style()->pixelMetric(QStyle::PM_LayoutTopMargin),
+                                                           0, qApp->style()->pixelMetric(QStyle::PM_LayoutBottomMargin));
+#endif
+                    m_pSettingsLayout1->setColumnStretch(0, 0);
+                    m_pSettingsLayout1->setColumnStretch(1, 1);
+
+                    /* Create file selector: */
+                    m_pFileSelector = new UIEmptyFilePathSelector(pSettingsPane1);
+                    if (m_pFileSelector)
+                    {
+                        m_pFileSelector->setMode(UIEmptyFilePathSelector::Mode_File_Save);
+                        m_pFileSelector->setEditable(true);
+                        m_pFileSelector->setButtonPosition(UIEmptyFilePathSelector::RightPosition);
+                        m_pFileSelector->setDefaultSaveExt("ova");
+                        m_pSettingsLayout1->addWidget(m_pFileSelector, 0, 1, 1, 2);
+                    }
+                    /* Create file selector label: */
+                    m_pFileSelectorLabel = new QLabel(pSettingsPane1);
+                    if (m_pFileSelectorLabel)
+                    {
+                        m_pFileSelectorLabel->setAlignment(Qt::AlignRight | Qt::AlignTrailing | Qt::AlignVCenter);
+                        m_pFileSelectorLabel->setBuddy(m_pFileSelector);
+                        m_pSettingsLayout1->addWidget(m_pFileSelectorLabel, 0, 0);
+                    }
+
+                    /* Create MAC policy combo-box: */
+                    m_pMACComboBox = new QIComboBox(pSettingsPane1);
+                    if (m_pMACComboBox)
+                        m_pSettingsLayout1->addWidget(m_pMACComboBox, 1, 1, 1, 2);
+                    /* Create format combo-box label: */
+                    m_pMACComboBoxLabel = new QLabel(pSettingsPane1);
+                    if (m_pMACComboBoxLabel)
+                    {
+                        m_pMACComboBoxLabel->setAlignment(Qt::AlignRight | Qt::AlignTrailing | Qt::AlignVCenter);
+                        m_pMACComboBoxLabel->setBuddy(m_pMACComboBox);
+                        m_pSettingsLayout1->addWidget(m_pMACComboBoxLabel, 1, 0);
+                    }
+
+                    /* Create advanced label: */
+                    m_pAdditionalLabel = new QLabel(pSettingsPane1);
+                    if (m_pAdditionalLabel)
+                    {
+                        m_pAdditionalLabel->setAlignment(Qt::AlignRight | Qt::AlignTrailing | Qt::AlignVCenter);
+                        m_pSettingsLayout1->addWidget(m_pAdditionalLabel, 2, 0);
+                    }
+                    /* Create manifest check-box: */
+                    m_pManifestCheckbox = new QCheckBox(pSettingsPane1);
+                    if (m_pManifestCheckbox)
+                        m_pSettingsLayout1->addWidget(m_pManifestCheckbox, 2, 1);
+                    /* Create include ISOs check-box: */
+                    m_pIncludeISOsCheckbox = new QCheckBox(pSettingsPane1);
+                    if (m_pIncludeISOsCheckbox)
+                        m_pSettingsLayout1->addWidget(m_pIncludeISOsCheckbox, 3, 1);
+
+                    /* Create placeholder: */
+                    QWidget *pPlaceholder = new QWidget(pSettingsPane1);
+                    if (pPlaceholder)
+                        m_pSettingsLayout1->addWidget(pPlaceholder, 4, 0, 1, 3);
+                }
+
+                /* Add into layout: */
+                m_pSettingsWidget1->addWidget(pSettingsPane1);
+            }
+
+            /* Create settings pane 2: */
+            QWidget *pSettingsPane2 = new QWidget(m_pSettingsWidget1);
+            if (pSettingsPane2)
+            {
+                /* Create settings layout 2: */
+                m_pSettingsLayout2 = new QGridLayout(pSettingsPane2);
+                if (m_pSettingsLayout2)
+                {
+#ifdef VBOX_WS_MAC
+                    m_pSettingsLayout2->setContentsMargins(0, 10, 0, 10);
+                    m_pSettingsLayout2->setSpacing(10);
+
+#else
+                    m_pSettingsLayout2->setContentsMargins(0, qApp->style()->pixelMetric(QStyle::PM_LayoutTopMargin),
+                                                           0, qApp->style()->pixelMetric(QStyle::PM_LayoutBottomMargin));
+#endif
+                    m_pSettingsLayout2->setColumnStretch(0, 0);
+                    m_pSettingsLayout2->setColumnStretch(1, 1);
+                    m_pSettingsLayout2->setRowStretch(4, 1);
+
+                    /* Create profile label: */
+                    m_pProfileLabel = new QLabel(pSettingsPane2);
+                    if (m_pProfileLabel)
+                    {
+                        m_pProfileLabel->setAlignment(Qt::AlignRight | Qt::AlignTrailing | Qt::AlignVCenter);
+                        m_pSettingsLayout2->addWidget(m_pProfileLabel, 0, 0);
+                    }
+                    /* Create sub-layout: */
+                    QHBoxLayout *pSubLayout = new QHBoxLayout;
+                    if (pSubLayout)
+                    {
+                        pSubLayout->setContentsMargins(0, 0, 0, 0);
+                        pSubLayout->setSpacing(1);
+
+                        /* Create profile combo-box: */
+                        m_pProfileComboBox = new QIComboBox(pSettingsPane2);
+                        if (m_pProfileComboBox)
+                        {
+                            m_pProfileLabel->setBuddy(m_pProfileComboBox);
+                            pSubLayout->addWidget(m_pProfileComboBox);
+                        }
+                        /* Create profile tool-button: */
+                        m_pProfileToolButton = new QIToolButton(pSettingsPane2);
+                        if (m_pProfileToolButton)
+                        {
+                            m_pProfileToolButton->setIcon(UIIconPool::iconSet(":/cloud_profile_manager_16px.png",
+                                                                              ":/cloud_profile_manager_disabled_16px.png"));
+                            pSubLayout->addWidget(m_pProfileToolButton);
+                        }
+
+                        /* Add into layout: */
+                        m_pSettingsLayout2->addLayout(pSubLayout, 0, 1);
+                    }
+
+                    /* Create profile label: */
+                    m_pExportModeLabel = new QLabel(pSettingsPane2);
+                    if (m_pExportModeLabel)
+                    {
+                        m_pExportModeLabel->setAlignment(Qt::AlignRight | Qt::AlignTrailing | Qt::AlignVCenter);
+                        m_pSettingsLayout2->addWidget(m_pExportModeLabel, 1, 0);
+                    }
+
+                    /* Create button-group: */
+                    m_pExportModeButtonGroup = new QButtonGroup(pSettingsPane2);
+                    if (m_pExportModeButtonGroup)
+                    {
+                        /* Create Do Not Ask button: */
+                        m_exportModeButtons[CloudExportMode_DoNotAsk] = new QRadioButton(pSettingsPane2);
+                        if (m_exportModeButtons.value(CloudExportMode_DoNotAsk))
+                        {
+                            m_pExportModeButtonGroup->addButton(m_exportModeButtons.value(CloudExportMode_DoNotAsk));
+                            m_pSettingsLayout2->addWidget(m_exportModeButtons.value(CloudExportMode_DoNotAsk), 1, 1);
+                        }
+                        /* Create Ask Then Export button: */
+                        m_exportModeButtons[CloudExportMode_AskThenExport] = new QRadioButton(pSettingsPane2);
+                        if (m_exportModeButtons.value(CloudExportMode_AskThenExport))
+                        {
+                            m_pExportModeButtonGroup->addButton(m_exportModeButtons.value(CloudExportMode_AskThenExport));
+                            m_pSettingsLayout2->addWidget(m_exportModeButtons.value(CloudExportMode_AskThenExport), 2, 1);
+                        }
+                        /* Create Export Then Ask button: */
+                        m_exportModeButtons[CloudExportMode_ExportThenAsk] = new QRadioButton(pSettingsPane2);
+                        if (m_exportModeButtons.value(CloudExportMode_ExportThenAsk))
+                        {
+                            m_pExportModeButtonGroup->addButton(m_exportModeButtons.value(CloudExportMode_ExportThenAsk));
+                            m_pSettingsLayout2->addWidget(m_exportModeButtons.value(CloudExportMode_ExportThenAsk), 3, 1);
+                        }
+                    }
+                }
+
+                /* Add into layout: */
+                m_pSettingsWidget1->addWidget(pSettingsPane2);
+            }
+
+            /* Add into layout: */
+            pMainLayout->addWidget(m_pSettingsWidget1);
+        }
+    }
+
+    /* Setup connections: */
+    connect(gVBoxEvents, &UIVirtualBoxEventHandler::sigCloudProfileRegistered,
+            this, &UIWizardExportAppPageFormat::sltHandleFormatComboChange);
+    connect(gVBoxEvents, &UIVirtualBoxEventHandler::sigCloudProfileChanged,
+            this, &UIWizardExportAppPageFormat::sltHandleFormatComboChange);
+    connect(m_pFileSelector, &UIEmptyFilePathSelector::pathChanged,
+            this, &UIWizardExportAppPageFormat::sltHandleFileSelectorChange);
+    connect(m_pFormatComboBox, static_cast<void(QIComboBox::*)(int)>(&QIComboBox::currentIndexChanged),
+            this, &UIWizardExportAppPageFormat::sltHandleFormatComboChange);
+    connect(m_pMACComboBox, static_cast<void(QIComboBox::*)(int)>(&QIComboBox::currentIndexChanged),
+            this, &UIWizardExportAppPageFormat::sltHandleMACAddressExportPolicyComboChange);
+    connect(m_pManifestCheckbox, &QCheckBox::stateChanged,
+            this, &UIWizardExportAppPageFormat::sltHandleManifestCheckBoxChange);
+    connect(m_pIncludeISOsCheckbox, &QCheckBox::stateChanged,
+            this, &UIWizardExportAppPageFormat::sltHandleIncludeISOsCheckBoxChange);
+    connect(m_pProfileComboBox, static_cast<void(QIComboBox::*)(int)>(&QIComboBox::currentIndexChanged),
+            this, &UIWizardExportAppPageFormat::sltHandleProfileComboChange);
+    connect(m_pExportModeButtonGroup, static_cast<void(QButtonGroup::*)(QAbstractButton*, bool)>(&QButtonGroup::buttonToggled),
+            this, &UIWizardExportAppPageFormat::sltHandleRadioButtonToggled);
+    connect(m_pProfileToolButton, &QIToolButton::clicked,
+            this, &UIWizardExportAppPageFormat::sltHandleProfileButtonClick);
+}
+
+UIWizardExportApp *UIWizardExportAppPageFormat::wizard() const
+{
+    return qobject_cast<UIWizardExportApp*>(UINativeWizardPage::wizard());
+}
+
+void UIWizardExportAppPageFormat::retranslateUi()
+{
+    /* Translate page: */
+    setTitle(UIWizardExportApp::tr("Format settings"));
+
+    /* Translate objects: */
+    m_strDefaultApplianceName = UIWizardExportApp::tr("Appliance");
+    refreshFileSelectorName(m_strFileSelectorName, wizard()->machineNames(), m_strDefaultApplianceName, wizard()->isFormatCloudOne());
+    refreshFileSelectorPath(m_pFileSelector, m_strFileSelectorName, m_strFileSelectorExt, wizard()->isFormatCloudOne());
+
+    /* Translate format label: */
+    m_pLabelFormat->setText(UIWizardExportApp::
+                            tr("<p>Please choose a format to export the virtual appliance to.</p>"
+                               "<p>The <b>Open Virtualization Format</b> supports only <b>ovf</b> or <b>ova</b> extensions. "
+                               "If you use the <b>ovf</b> extension, several files will be written separately. "
+                               "If you use the <b>ova</b> extension, all the files will be combined into one Open "
+                               "Virtualization Format archive.</p>"
+                               "<p>The <b>Oracle Cloud Infrastructure</b> format supports exporting to remote cloud servers only. "
+                               "Main virtual disk of each selected machine will be uploaded to remote server.</p>"));
+
+    /* Translate settings label: */
+    if (wizard()->isFormatCloudOne())
+        m_pLabelSettings->setText(UIWizardExportApp::
+                                  tr("<p>Please choose one of cloud service profiles you have registered to export virtual "
+                                     "machines to. It will be used to establish network connection required to upload your "
+                                     "virtual machine files to a remote cloud facility.</p>"));
+    else
+        m_pLabelSettings->setText(UIWizardExportApp::
+                                  tr("<p>Please choose a filename to export the virtual appliance to. Besides that you can "
+                                     "specify a certain amount of options which affects the size and content of resulting "
+                                     "archive.</p>"));
+
+    /* Translate file selector: */
+    m_pFileSelectorLabel->setText(UIWizardExportApp::tr("&File:"));
+    m_pFileSelector->setChooseButtonToolTip(UIWizardExportApp::tr("Choose a file to export the virtual appliance to..."));
+    m_pFileSelector->setFileDialogTitle(UIWizardExportApp::tr("Please choose a file to export the virtual appliance to"));
+
+    /* Translate hardcoded values of Format combo-box: */
+    m_pFormatComboBoxLabel->setText(UIWizardExportApp::tr("F&ormat:"));
+    m_pFormatComboBox->setItemText(0, UIWizardExportApp::tr("Open Virtualization Format 0.9"));
+    m_pFormatComboBox->setItemText(1, UIWizardExportApp::tr("Open Virtualization Format 1.0"));
+    m_pFormatComboBox->setItemText(2, UIWizardExportApp::tr("Open Virtualization Format 2.0"));
+    m_pFormatComboBox->setItemData(0, UIWizardExportApp::tr("Write in legacy OVF 0.9 format for compatibility "
+                                                            "with other virtualization products."), Qt::ToolTipRole);
+    m_pFormatComboBox->setItemData(1, UIWizardExportApp::tr("Write in standard OVF 1.0 format."), Qt::ToolTipRole);
+    m_pFormatComboBox->setItemData(2, UIWizardExportApp::tr("Write in new OVF 2.0 format."), Qt::ToolTipRole);
+    /* Translate received values of Format combo-box.
+     * We are enumerating starting from 0 for simplicity: */
+    for (int i = 0; i < m_pFormatComboBox->count(); ++i)
+        if (isFormatCloudOne(m_pFormatComboBox, i))
+        {
+            m_pFormatComboBox->setItemText(i, m_pFormatComboBox->itemData(i, FormatData_Name).toString());
+            m_pFormatComboBox->setItemData(i, UIWizardExportApp::tr("Export to cloud service provider."), Qt::ToolTipRole);
+        }
+
+    /* Translate MAC address policy combo-box: */
+    m_pMACComboBoxLabel->setText(UIWizardExportApp::tr("MAC Address &Policy:"));
+    for (int i = 0; i < m_pMACComboBox->count(); ++i)
+    {
+        const MACAddressExportPolicy enmPolicy = m_pMACComboBox->itemData(i).value<MACAddressExportPolicy>();
+        switch (enmPolicy)
+        {
+            case MACAddressExportPolicy_KeepAllMACs:
+            {
+                m_pMACComboBox->setItemText(i, UIWizardExportApp::tr("Include all network adapter MAC addresses"));
+                m_pMACComboBox->setItemData(i, UIWizardExportApp::tr("Include all network adapter MAC addresses in exported "
+                                                                     "appliance archive."), Qt::ToolTipRole);
+                break;
+            }
+            case MACAddressExportPolicy_StripAllNonNATMACs:
+            {
+                m_pMACComboBox->setItemText(i, UIWizardExportApp::tr("Include only NAT network adapter MAC addresses"));
+                m_pMACComboBox->setItemData(i, UIWizardExportApp::tr("Include only NAT network adapter MAC addresses in exported "
+                                                                     "appliance archive."), Qt::ToolTipRole);
+                break;
+            }
+            case MACAddressExportPolicy_StripAllMACs:
+            {
+                m_pMACComboBox->setItemText(i, UIWizardExportApp::tr("Strip all network adapter MAC addresses"));
+                m_pMACComboBox->setItemData(i, UIWizardExportApp::tr("Strip all network adapter MAC addresses from exported "
+                                                                     "appliance archive."), Qt::ToolTipRole);
+                break;
+            }
+            default:
+                break;
+        }
+    }
+
+    /* Translate addtional stuff: */
+    m_pAdditionalLabel->setText(UIWizardExportApp::tr("Additionally:"));
+    m_pManifestCheckbox->setToolTip(UIWizardExportApp::tr("Create a Manifest file for automatic data integrity checks on import."));
+    m_pManifestCheckbox->setText(UIWizardExportApp::tr("&Write Manifest file"));
+    m_pIncludeISOsCheckbox->setToolTip(UIWizardExportApp::tr("Include ISO image files into exported VM archive."));
+    m_pIncludeISOsCheckbox->setText(UIWizardExportApp::tr("&Include ISO image files"));
+
+    /* Translate profile stuff: */
+    m_pProfileLabel->setText(UIWizardExportApp::tr("&Profile:"));
+    m_pProfileToolButton->setToolTip(UIWizardExportApp::tr("Open Cloud Profile Manager..."));
+
+    /* Translate option label: */
+    m_pExportModeLabel->setText(UIWizardExportApp::tr("Machine Creation:"));
+    m_exportModeButtons.value(CloudExportMode_DoNotAsk)->setText(UIWizardExportApp::tr("Do not ask me about it, leave custom &image for future usage"));
+    m_exportModeButtons.value(CloudExportMode_AskThenExport)->setText(UIWizardExportApp::tr("Ask me about it &before exporting disk as custom image"));
+    m_exportModeButtons.value(CloudExportMode_ExportThenAsk)->setText(UIWizardExportApp::tr("Ask me about it &after exporting disk as custom image"));
+
+    /* Adjust label widths: */
+    QList<QWidget*> labels;
+    labels << m_pFormatComboBoxLabel;
+    labels << m_pFileSelectorLabel;
+    labels << m_pMACComboBoxLabel;
+    labels << m_pAdditionalLabel;
+    labels << m_pProfileLabel;
+    labels << m_pExportModeLabel;
+    int iMaxWidth = 0;
+    foreach (QWidget *pLabel, labels)
+        iMaxWidth = qMax(iMaxWidth, pLabel->minimumSizeHint().width());
+    m_pFormatLayout->setColumnMinimumWidth(0, iMaxWidth);
+    m_pSettingsLayout1->setColumnMinimumWidth(0, iMaxWidth);
+    m_pSettingsLayout2->setColumnMinimumWidth(0, iMaxWidth);
+
+    /* Update tool-tips: */
+    updateFormatComboToolTip(m_pFormatComboBox);
+    updateMACAddressExportPolicyComboToolTip(m_pMACComboBox);
+}
+
+void UIWizardExportAppPageFormat::initializePage()
+{
+    /* Populate formats: */
+    populateFormats(m_pFormatComboBox, m_fExportToOCIByDefault);
+    /* Populate MAC address policies: */
+    populateMACAddressPolicies(m_pMACComboBox);
+    /* Translate page: */
+    retranslateUi();
+
+    /* Choose initially focused widget: */
+    if (wizard()->isFormatCloudOne())
+        m_pProfileComboBox->setFocus();
+    else
+        m_pFileSelector->setFocus();
+
+    /* Fetch it, asynchronously: */
+    QMetaObject::invokeMethod(this, "sltHandleFormatComboChange", Qt::QueuedConnection);
+}
+
+bool UIWizardExportAppPageFormat::isComplete() const
+{
+    /* Initial result: */
+    bool fResult = true;
+
+    /* Check whether there was cloud target selected: */
+    if (wizard()->isFormatCloudOne())
+        fResult = m_comCloudProfile.isNotNull();
+    else
+        fResult = UICommon::hasAllowedExtension(wizard()->path().toLower(), OVFFileExts);
+
+    /* Return result: */
+    return fResult;
+}
+
+bool UIWizardExportAppPageFormat::validatePage()
+{
+    /* Initial result: */
+    bool fResult = true;
+
+    /* Check whether there was cloud target selected: */
+    if (wizard()->isFormatCloudOne())
+    {
+        /* Update cloud stuff: */
+        updateCloudStuff();
+        /* Which is required to continue to the next page: */
+        fResult =    wizard()->cloudAppliance().isNotNull()
+                  && wizard()->cloudClient().isNotNull()
+                  && wizard()->vsd().isNotNull()
+                  && wizard()->vsdExportForm().isNotNull();
+    }
+    else
+    {
+        /* Update local stuff: */
+        updateLocalStuff();
+        /* Which is required to continue to the next page: */
+        fResult = wizard()->localAppliance().isNotNull();
+    }
+
+    /* Return result: */
+    return fResult;
+}
+
+void UIWizardExportAppPageFormat::sltHandleFormatComboChange()
+{
+    /* Update combo tool-tip: */
+    updateFormatComboToolTip(m_pFormatComboBox);
+
+    /* Update wizard fields: */
+    wizard()->setFormat(format(m_pFormatComboBox));
+    wizard()->setFormatCloudOne(isFormatCloudOne(m_pFormatComboBox));
+
+    /* Refresh settings widget state: */
+    refreshStackedWidget(m_pSettingsWidget1, wizard()->isFormatCloudOne());
+
+    /* Update export settings: */
+    refreshFileSelectorExtension(m_strFileSelectorExt, m_pFileSelector, wizard()->isFormatCloudOne());
+    refreshFileSelectorPath(m_pFileSelector, m_strFileSelectorName, m_strFileSelectorExt, wizard()->isFormatCloudOne());
+    refreshManifestCheckBoxAccess(m_pManifestCheckbox, wizard()->isFormatCloudOne());
+    refreshIncludeISOsCheckBoxAccess(m_pIncludeISOsCheckbox, wizard()->isFormatCloudOne());
+    refreshProfileCombo(m_pProfileComboBox, wizard()->format(), wizard()->isFormatCloudOne());
+    refreshCloudExportMode(m_exportModeButtons, wizard()->isFormatCloudOne());
+
+    /* Update profile: */
+    sltHandleProfileComboChange();
+
+    /* Notify about changes: */
+    emit completeChanged();
+}
+
+void UIWizardExportAppPageFormat::sltHandleFileSelectorChange()
+{
+    /* Skip empty paths: */
+    if (m_pFileSelector->path().isEmpty())
+        return;
+
+    m_strFileSelectorName = QFileInfo(m_pFileSelector->path()).completeBaseName();
+    wizard()->setPath(m_pFileSelector->path());
+    emit completeChanged();
+}
+
+void UIWizardExportAppPageFormat::sltHandleMACAddressExportPolicyComboChange()
+{
+    updateMACAddressExportPolicyComboToolTip(m_pMACComboBox);
+    wizard()->setMACAddressExportPolicy(m_pMACComboBox->currentData().value<MACAddressExportPolicy>());
+    emit completeChanged();
+}
+
+void UIWizardExportAppPageFormat::sltHandleManifestCheckBoxChange()
+{
+    wizard()->setManifestSelected(m_pManifestCheckbox->isChecked());
+    emit completeChanged();
+}
+
+void UIWizardExportAppPageFormat::sltHandleIncludeISOsCheckBoxChange()
+{
+    wizard()->setIncludeISOsSelected(m_pIncludeISOsCheckbox->isChecked());
+    emit completeChanged();
+}
+
+void UIWizardExportAppPageFormat::sltHandleProfileComboChange()
+{
+    /* Update wizard fields: */
+    wizard()->setProfileName(profileName(m_pProfileComboBox));
+
+    /* Update export settings: */
+    refreshCloudProfile(m_comCloudProfile,
+                        wizard()->format(),
+                        wizard()->profileName(),
+                        wizard()->isFormatCloudOne());
+
+    /* Notify about changes: */
+    emit completeChanged();
+}
+
+void UIWizardExportAppPageFormat::sltHandleRadioButtonToggled(QAbstractButton *pButton, bool fToggled)
+{
+    /* Handle checked buttons only: */
+    if (!fToggled)
+        return;
+
+    /* Update cloud export mode field value: */
+    wizard()->setCloudExportMode(m_exportModeButtons.key(pButton));
+    emit completeChanged();
+}
+
+void UIWizardExportAppPageFormat::sltHandleProfileButtonClick()
+{
+    /* Open Cloud Profile Manager: */
+    if (gpManager)
+        gpManager->openCloudProfileManager();
+}
+
+void UIWizardExportAppPageFormat::updateLocalStuff()
+{
+    /* Create appliance: */
+    CAppliance comAppliance;
+    refreshLocalStuff(comAppliance, wizard()->machineIDs(), wizard()->uri());
+    wizard()->setLocalAppliance(comAppliance);
+}
+
+void UIWizardExportAppPageFormat::updateCloudStuff()
+{
+    /* Create appliance, client, VSD and VSD export form: */
+    CAppliance comAppliance;
+    CCloudClient comClient;
+    CVirtualSystemDescription comDescription;
+    CVirtualSystemDescriptionForm comForm;
+    refreshCloudStuff(comAppliance,
+                      comClient,
+                      comDescription,
+                      comForm,
+                      m_comCloudProfile,
+                      wizard()->machineIDs(),
+                      wizard()->uri(),
+                      wizard()->cloudExportMode());
+    wizard()->setCloudAppliance(comAppliance);
+    wizard()->setCloudClient(comClient);
+    wizard()->setVsd(comDescription);
+    wizard()->setVsdExportForm(comForm);
+}
Index: /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageFormat.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageFormat.h	(revision 91707)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageFormat.h	(revision 91707)
@@ -0,0 +1,262 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIWizardExportAppPageFormat class declaration.
+ */
+
+/*
+ * Copyright (C) 2009-2021 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifndef FEQT_INCLUDED_SRC_wizards_exportappliance_UIWizardExportAppPageFormat_h
+#define FEQT_INCLUDED_SRC_wizards_exportappliance_UIWizardExportAppPageFormat_h
+#ifndef RT_WITHOUT_PRAGMA_ONCE
+# pragma once
+#endif
+
+/* GUI includes: */
+#include "UINativeWizardPage.h"
+#include "UIWizardExportApp.h"
+
+/* COM includes: */
+#include "COMEnums.h"
+#include "CAppliance.h"
+#include "CCloudClient.h"
+#include "CCloudProfile.h"
+#include "CVirtualSystemDescription.h"
+#include "CVirtualSystemDescriptionForm.h"
+
+/* Forward declarations: */
+class QAbstractButton;
+class QButtonGroup;
+class QCheckBox;
+class QGridLayout;
+class QLabel;
+class QStackedWidget;
+class QIComboBox;
+class QIRichTextLabel;
+class QIToolButton;
+class UIEmptyFilePathSelector;
+
+/** Format combo data fields. */
+enum
+{
+    FormatData_Name            = Qt::UserRole + 1,
+    FormatData_ShortName       = Qt::UserRole + 2,
+    FormatData_IsItCloudFormat = Qt::UserRole + 3
+};
+
+/** Profile combo data fields. */
+enum
+{
+    ProfileData_Name = Qt::UserRole + 1
+};
+
+/** Namespace for Format page of the Export Appliance wizard. */
+namespace UIWizardExportAppFormat
+{
+    /** Populates formats. */
+    void populateFormats(QIComboBox *pCombo, bool fExportToOCIByDefault);
+    /** Populates MAC address policies. */
+    void populateMACAddressPolicies(QIComboBox *pCombo);
+
+    /** Returns current format of @a pCombo specified. */
+    QString format(QIComboBox *pCombo);
+    /** Returns whether format under certain @a iIndex is cloud one. */
+    bool isFormatCloudOne(QIComboBox *pCombo, int iIndex = -1);
+
+    /** Refresh stacked widget. */
+    void refreshStackedWidget(QStackedWidget *pStackedWidget,
+                              bool fIsFormatCloudOne);
+
+    /** Refresh file selector name. */
+    void refreshFileSelectorName(QString &strFileSelectorName,
+                                 const QStringList &machineNames,
+                                 const QString &strDefaultApplianceName,
+                                 bool fIsFormatCloudOne);
+    /** Refresh file selector extension. */
+    void refreshFileSelectorExtension(QString &strFileSelectorExt,
+                                      UIEmptyFilePathSelector *pFileSelector,
+                                      bool fIsFormatCloudOne);
+    /** Refresh file selector path. */
+    void refreshFileSelectorPath(UIEmptyFilePathSelector *pFileSelector,
+                                 const QString &strFileSelectorName,
+                                 const QString &strFileSelectorExt,
+                                 bool fIsFormatCloudOne);
+    /** Refresh Manifest check-box access. */
+    void refreshManifestCheckBoxAccess(QCheckBox *pCheckBox,
+                                       bool fIsFormatCloudOne);
+    /** Refresh Include ISOs check-box access. */
+    void refreshIncludeISOsCheckBoxAccess(QCheckBox *pCheckBox,
+                                          bool fIsFormatCloudOne);
+    /** Refresh local stuff. */
+    void refreshLocalStuff(CAppliance &comLocalAppliance,
+                           const QList<QUuid> &machineIDs,
+                           const QString &strUri);
+
+    /** Refresh profile combo. */
+    void refreshProfileCombo(QIComboBox *pCombo,
+                             const QString &strFormat,
+                             bool fIsFormatCloudOne);
+    /** Refresh cloud profile. */
+    void refreshCloudProfile(CCloudProfile &comCloudProfile,
+                             const QString &strShortProviderName,
+                             const QString &strProfileName,
+                             bool fIsFormatCloudOne);
+    /** Refresh cloud export mode. */
+    void refreshCloudExportMode(const QMap<CloudExportMode, QAbstractButton*> &radios,
+                                bool fIsFormatCloudOne);
+    /** Refresh cloud stuff. */
+    void refreshCloudStuff(CAppliance &comCloudAppliance,
+                           CCloudClient &comCloudClient,
+                           CVirtualSystemDescription &comCloudVsd,
+                           CVirtualSystemDescriptionForm &comCloudVsdExportForm,
+                           const CCloudProfile &comCloudProfile,
+                           const QList<QUuid> &machineIDs,
+                           const QString &strUri,
+                           const CloudExportMode enmCloudExportMode);
+
+    /** Returns current profile name of @a pCombo specified. */
+    QString profileName(QIComboBox *pCombo);
+    /** Returns current cloud export mode chosen in @a radioButtons specified. */
+    CloudExportMode cloudExportMode(const QMap<CloudExportMode, QAbstractButton*> &radioButtons);
+
+    /** Updates format combo tool-tips. */
+    void updateFormatComboToolTip(QIComboBox *pCombo);
+    /** Updates MAC address export policy combo tool-tips. */
+    void updateMACAddressExportPolicyComboToolTip(QIComboBox *pCombo);
+}
+
+/** UINativeWizardPage extension for Format page of the Export Appliance wizard,
+  * based on UIWizardExportAppFormat namespace functions. */
+class UIWizardExportAppPageFormat : public UINativeWizardPage
+{
+    Q_OBJECT;
+
+public:
+
+    /** Constructs Format page. */
+    UIWizardExportAppPageFormat(bool fExportToOCIByDefault);
+
+protected:
+
+    /** Returns wizard this page belongs to. */
+    UIWizardExportApp *wizard() const;
+
+    /** Handles translation event. */
+    virtual void retranslateUi() /* override final */;
+
+    /** Performs page initialization. */
+    virtual void initializePage() /* override final */;
+
+    /** Returns whether page is complete. */
+    virtual bool isComplete() const /* override final */;
+
+    /** Performs page validation. */
+    virtual bool validatePage() /* override final */;
+
+private slots:
+
+    /** Handles change in format combo-box. */
+    void sltHandleFormatComboChange();
+
+    /** Handles change in file-name selector. */
+    void sltHandleFileSelectorChange();
+
+    /** Handles change in MAC address export policy combo-box. */
+    void sltHandleMACAddressExportPolicyComboChange();
+
+    /** Handles change in manifest check-box. */
+    void sltHandleManifestCheckBoxChange();
+
+    /** Handles change in include ISOs check-box. */
+    void sltHandleIncludeISOsCheckBoxChange();
+
+    /** Handles change in profile combo-box. */
+    void sltHandleProfileComboChange();
+
+    /** Handles cloud export radio-button clicked. */
+    void sltHandleRadioButtonToggled(QAbstractButton *pButton, bool fToggled);
+
+    /** Handles profile tool-button click. */
+    void sltHandleProfileButtonClick();
+
+private:
+
+    /** Update local stuff. */
+    void updateLocalStuff();
+
+    /** Updates cloud stuff. */
+    void updateCloudStuff();
+
+    /** Holds whether default format should be Export to OCI. */
+    bool  m_fExportToOCIByDefault;
+
+    /** Holds the default appliance name. */
+    QString  m_strDefaultApplianceName;
+    /** Holds the file selector name. */
+    QString  m_strFileSelectorName;
+    /** Holds the file selector ext. */
+    QString  m_strFileSelectorExt;
+
+    /** Holds the Cloud Profile object instance. */
+    CCloudProfile  m_comCloudProfile;
+
+
+    /** Holds the format label instance. */
+    QIRichTextLabel *m_pLabelFormat;
+    /** Holds the settings label instance. */
+    QIRichTextLabel *m_pLabelSettings;
+
+    /** Holds the format layout. */
+    QGridLayout *m_pFormatLayout;
+    /** Holds the format combo-box label instance. */
+    QLabel      *m_pFormatComboBoxLabel;
+    /** Holds the format combo-box instance. */
+    QIComboBox  *m_pFormatComboBox;
+
+    /** Holds the settings widget 1 instance. */
+    QStackedWidget *m_pSettingsWidget1;
+
+    /** Holds the settings layout 1. */
+    QGridLayout             *m_pSettingsLayout1;
+    /** Holds the file selector label instance. */
+    QLabel                  *m_pFileSelectorLabel;
+    /** Holds the file selector instance. */
+    UIEmptyFilePathSelector *m_pFileSelector;
+    /** Holds the MAC address policy combo-box label instance. */
+    QLabel                  *m_pMACComboBoxLabel;
+    /** Holds the MAC address policy check-box instance. */
+    QIComboBox              *m_pMACComboBox;
+    /** Holds the additional label instance. */
+    QLabel                  *m_pAdditionalLabel;
+    /** Holds the manifest check-box instance. */
+    QCheckBox               *m_pManifestCheckbox;
+    /** Holds the include ISOs check-box instance. */
+    QCheckBox               *m_pIncludeISOsCheckbox;
+
+    /** Holds the settings layout 2. */
+    QGridLayout   *m_pSettingsLayout2;
+    /** Holds the profile label instance. */
+    QLabel        *m_pProfileLabel;
+    /** Holds the profile combo-box instance. */
+    QIComboBox    *m_pProfileComboBox;
+    /** Holds the profile management tool-button instance. */
+    QIToolButton  *m_pProfileToolButton;
+
+    /** Holds the export mode label instance. */
+    QLabel                                  *m_pExportModeLabel;
+    /** Holds the export mode button group instance. */
+    QButtonGroup                            *m_pExportModeButtonGroup;
+    /** Holds the map of export mode button instances. */
+    QMap<CloudExportMode, QAbstractButton*>  m_exportModeButtons;
+};
+
+#endif /* !FEQT_INCLUDED_SRC_wizards_exportappliance_UIWizardExportAppPageFormat_h */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageSettings.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageSettings.cpp	(revision 91707)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageSettings.cpp	(revision 91707)
@@ -0,0 +1,278 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIWizardExportAppPageSettings class implementation.
+ */
+
+/*
+ * Copyright (C) 2009-2021 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+/* Qt includes: */
+#include <QStackedWidget>
+#include <QVBoxLayout>
+
+/* GUI includes: */
+#include "QILabelSeparator.h"
+#include "QIRichTextLabel.h"
+#include "UIApplianceExportEditorWidget.h"
+#include "UICommon.h"
+#include "UIFormEditorWidget.h"
+#include "UIMessageCenter.h"
+#include "UIWizardExportApp.h"
+#include "UIWizardExportAppPageSettings.h"
+
+/* COM includes: */
+#include "CMachine.h"
+#include "CVirtualSystemDescriptionForm.h"
+
+/* Namespaces: */
+using namespace UIWizardExportAppSettings;
+
+
+/*********************************************************************************************************************************
+*   Class UIWizardExportAppSettings implementation.                                                                              *
+*********************************************************************************************************************************/
+
+void UIWizardExportAppSettings::refreshStackedWidget(QStackedWidget *pStackedWidget,
+                                                     bool fIsFormatCloudOne)
+{
+    /* Update stack appearance according to chosen format: */
+    pStackedWidget->setCurrentIndex((int)fIsFormatCloudOne);
+}
+
+void UIWizardExportAppSettings::refreshApplianceSettingsWidget(UIApplianceExportEditorWidget *pApplianceWidget,
+                                                               const CAppliance &comAppliance,
+                                                               bool fIsFormatCloudOne)
+{
+    /* Nothing for cloud case? */
+    if (fIsFormatCloudOne)
+        return;
+
+    /* Sanity check: */
+    AssertReturnVoid(comAppliance.isNotNull());
+
+    /* Make sure the settings widget get the new appliance: */
+    pApplianceWidget->setAppliance(comAppliance);
+}
+
+void UIWizardExportAppSettings::refreshFormPropertiesTable(UIFormEditorWidget *pFormEditor,
+                                                           const CVirtualSystemDescriptionForm &comVsdForm,
+                                                           bool fIsFormatCloudOne)
+{
+    /* Nothing for local case? */
+    if (!fIsFormatCloudOne)
+        return;
+
+    /* Sanity check: */
+    AssertReturnVoid(comVsdForm.isNotNull());
+
+    /* Make sure the properties table get the new description form: */
+    pFormEditor->setVirtualSystemDescriptionForm(comVsdForm);
+}
+
+
+/*********************************************************************************************************************************
+*   Class UIWizardExportAppPageSettings implementation.                                                                          *
+*********************************************************************************************************************************/
+
+UIWizardExportAppPageSettings::UIWizardExportAppPageSettings()
+    : m_pLabel(0)
+    , m_pSettingsWidget2(0)
+    , m_pApplianceWidget(0)
+    , m_pFormEditor(0)
+    , m_fLaunching(false)
+{
+    /* Create main layout: */
+    QVBoxLayout *pMainLayout = new QVBoxLayout(this);
+    if (pMainLayout)
+    {
+        /* Create label: */
+        m_pLabel = new QIRichTextLabel(this);
+        if (m_pLabel)
+            pMainLayout->addWidget(m_pLabel);
+
+        /* Create settings widget 2: */
+        m_pSettingsWidget2 = new QStackedWidget(this);
+        if (m_pSettingsWidget2)
+        {
+            /* Create appliance widget container: */
+            QWidget *pApplianceWidgetCnt = new QWidget(this);
+            if (pApplianceWidgetCnt)
+            {
+                /* Create appliance widget layout: */
+                QVBoxLayout *pApplianceWidgetLayout = new QVBoxLayout(pApplianceWidgetCnt);
+                if (pApplianceWidgetLayout)
+                {
+                    pApplianceWidgetLayout->setContentsMargins(0, 0, 0, 0);
+
+                    /* Create appliance widget: */
+                    m_pApplianceWidget = new UIApplianceExportEditorWidget(pApplianceWidgetCnt);
+                    if (m_pApplianceWidget)
+                    {
+                        m_pApplianceWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding);
+                        pApplianceWidgetLayout->addWidget(m_pApplianceWidget);
+                    }
+                }
+
+                /* Add into layout: */
+                m_pSettingsWidget2->addWidget(pApplianceWidgetCnt);
+            }
+
+            /* Create form editor container: */
+            QWidget *pFormEditorCnt = new QWidget(this);
+            if (pFormEditorCnt)
+            {
+                /* Create form editor layout: */
+                QVBoxLayout *pFormEditorLayout = new QVBoxLayout(pFormEditorCnt);
+                if (pFormEditorLayout)
+                {
+                    pFormEditorLayout->setContentsMargins(0, 0, 0, 0);
+
+                    /* Create form editor widget: */
+                    m_pFormEditor = new UIFormEditorWidget(pFormEditorCnt);
+                    if (m_pFormEditor)
+                        pFormEditorLayout->addWidget(m_pFormEditor);
+                }
+
+                /* Add into layout: */
+                m_pSettingsWidget2->addWidget(pFormEditorCnt);
+            }
+
+            /* Add into layout: */
+            pMainLayout->addWidget(m_pSettingsWidget2);
+        }
+    }
+}
+
+UIWizardExportApp *UIWizardExportAppPageSettings::wizard() const
+{
+    return qobject_cast<UIWizardExportApp*>(UINativeWizardPage::wizard());
+}
+
+void UIWizardExportAppPageSettings::retranslateUi()
+{
+    /* Translate page: */
+    setTitle(UIWizardExportApp::tr("Appliance settings"));
+
+    /* Translate label: */
+    if (wizard()->isFormatCloudOne())
+        m_pLabel->setText(UIWizardExportApp::tr("This is the descriptive information which will be used to determine settings "
+                                                "for a cloud storage your VM being exported to.  You can change it by double "
+                                                "clicking on individual lines."));
+    else
+        m_pLabel->setText(UIWizardExportApp::tr("This is the descriptive information which will be added to the virtual "
+                                                "appliance.  You can change it by double clicking on individual lines."));
+}
+
+void UIWizardExportAppPageSettings::initializePage()
+{
+    /* Translate page: */
+    retranslateUi();
+
+    /* Refresh settings widget state: */
+    refreshStackedWidget(m_pSettingsWidget2, wizard()->isFormatCloudOne());
+    /* Refresh corresponding widgets: */
+    refreshApplianceSettingsWidget(m_pApplianceWidget, wizard()->localAppliance(), wizard()->isFormatCloudOne());
+    refreshFormPropertiesTable(m_pFormEditor, wizard()->vsdExportForm(), wizard()->isFormatCloudOne());
+
+    /* Choose initially focused widget: */
+    if (wizard()->isFormatCloudOne())
+        m_pFormEditor->setFocus();
+    else
+        m_pApplianceWidget->setFocus();
+}
+
+bool UIWizardExportAppPageSettings::validatePage()
+{
+    /* Initial result: */
+    bool fResult = true;
+
+    /* Check whether there was cloud target selected: */
+    if (wizard()->isFormatCloudOne())
+    {
+        /* Make sure table has own data committed: */
+        m_pFormEditor->makeSureEditorDataCommitted();
+
+        /* Init VSD form: */
+        CVirtualSystemDescriptionForm comForm;
+        /* Check whether we have proper VSD form: */
+        if (!m_fLaunching)
+        {
+            /* We are going to upload image: */
+            comForm = wizard()->vsdExportForm();
+            fResult = comForm.isNotNull();
+        }
+        else
+        {
+            /* We are going to launch VM: */
+            comForm = wizard()->vsdLaunchForm();
+            fResult = comForm.isNotNull();
+        }
+        /* Give changed VSD back: */
+        if (fResult)
+        {
+            comForm.GetVirtualSystemDescription();
+            fResult = comForm.isOk();
+            if (!fResult)
+                msgCenter().cannotAcquireVirtualSystemDescriptionFormProperty(comForm);
+        }
+
+        /* Final stage? */
+        if (fResult)
+        {
+            if (!m_fLaunching)
+            {
+                /* For modes other than AskThenExport, try to export appliance first: */
+                if (wizard()->cloudExportMode() != CloudExportMode_AskThenExport)
+                    fResult = wizard()->exportAppliance();
+
+                /* For modes other than DoNotAsk, switch from uploading image to launching VM: */
+                if (   fResult
+                    && wizard()->cloudExportMode() != CloudExportMode_DoNotAsk)
+                {
+                    /* Invert flags: */
+                    fResult = false;
+                    m_fLaunching = true;
+
+                    /* Disable wizard buttons: */
+                    wizard()->disableButtons();
+
+                    /* Refresh corresponding widgets: */
+                    wizard()->createVsdLaunchForm();
+                    refreshFormPropertiesTable(m_pFormEditor, wizard()->vsdLaunchForm(), wizard()->isFormatCloudOne());
+                }
+            }
+            else
+            {
+                /* For AskThenExport mode, try to export appliance in the end: */
+                if (wizard()->cloudExportMode() == CloudExportMode_AskThenExport)
+                    fResult = wizard()->exportAppliance();
+
+                /* Try to create cloud VM: */
+                if (fResult)
+                    fResult = wizard()->createCloudVM();
+            }
+        }
+    }
+    /* Otherwise if there was local target selected: */
+    else
+    {
+        /* Prepare export: */
+        m_pApplianceWidget->prepareExport();
+
+        /* Try to export appliance: */
+        if (fResult)
+            fResult = wizard()->exportAppliance();
+    }
+
+    /* Return result: */
+    return fResult;
+}
Index: /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageSettings.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageSettings.h	(revision 91707)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageSettings.h	(revision 91707)
@@ -0,0 +1,100 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIWizardExportAppPageSettings class declaration.
+ */
+
+/*
+ * Copyright (C) 2009-2021 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifndef FEQT_INCLUDED_SRC_wizards_exportappliance_UIWizardExportAppPageSettings_h
+#define FEQT_INCLUDED_SRC_wizards_exportappliance_UIWizardExportAppPageSettings_h
+#ifndef RT_WITHOUT_PRAGMA_ONCE
+# pragma once
+#endif
+
+/* Qt includes: */
+#include <QList>
+
+/* GUI includes: */
+#include "UINativeWizardPage.h"
+
+/* COM includes: */
+#include "COMEnums.h"
+#include "CAppliance.h"
+
+/* Forward declarations: */
+class QStackedWidget;
+class QIRichTextLabel;
+class UIApplianceExportEditorWidget;
+class UIFormEditorWidget;
+class UIWizardExportApp;
+
+/** Namespace for Settings page of the Export Appliance wizard. */
+namespace UIWizardExportAppSettings
+{
+    /** Refresh stacked widget. */
+    void refreshStackedWidget(QStackedWidget *pStackedWidget,
+                              bool fIsFormatCloudOne);
+
+    /** Refreshes appliance settings widget. */
+    void refreshApplianceSettingsWidget(UIApplianceExportEditorWidget *pApplianceWidget,
+                                        const CAppliance &comAppliance,
+                                        bool fIsFormatCloudOne);
+    /** Refreshes form properties table. */
+    void refreshFormPropertiesTable(UIFormEditorWidget *pFormEditor,
+                                    const CVirtualSystemDescriptionForm &comVsdForm,
+                                    bool fIsFormatCloudOne);
+}
+
+/** UINativeWizardPage extension for Settings page of the Export Appliance wizard,
+  * based on UIWizardExportAppSettings namespace functions. */
+class UIWizardExportAppPageSettings : public UINativeWizardPage
+{
+    Q_OBJECT;
+
+public:
+
+    /** Constructs Settings page. */
+    UIWizardExportAppPageSettings();
+
+protected:
+
+    /** Returns wizard this page belongs to. */
+    UIWizardExportApp *wizard() const;
+
+    /** Handles translation event. */
+    virtual void retranslateUi() /* override final */;
+
+    /** Performs page initialization. */
+    virtual void initializePage() /* override final */;
+
+    /** Performs page validation. */
+    virtual bool validatePage() /* override final */;
+
+private:
+
+    /** Holds the label instance. */
+    QIRichTextLabel *m_pLabel;
+
+    /** Holds the settings widget 2 instance. */
+    QStackedWidget *m_pSettingsWidget2;
+
+    /** Holds the appliance widget reference. */
+    UIApplianceExportEditorWidget *m_pApplianceWidget;
+    /** Holds the Form Editor widget instance. */
+    UIFormEditorWidget            *m_pFormEditor;
+
+    /** Holds whether cloud exporting is at launching stage. */
+    bool  m_fLaunching;
+};
+
+#endif /* !FEQT_INCLUDED_SRC_wizards_exportappliance_UIWizardExportAppPageSettings_h */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageVMs.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageVMs.cpp	(revision 91707)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageVMs.cpp	(revision 91707)
@@ -0,0 +1,252 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIWizardExportAppPageVMs class implementation.
+ */
+
+/*
+ * Copyright (C) 2009-2021 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+/* Qt includes: */
+#include <QListWidget>
+#include <QVBoxLayout>
+
+/* GUI includes: */
+#include "QIRichTextLabel.h"
+#include "UICommon.h"
+#include "UIIconPool.h"
+#include "UIMessageCenter.h"
+#include "UIWizardExportApp.h"
+#include "UIWizardExportAppPageVMs.h"
+
+/* COM includes: */
+#include "CMachine.h"
+
+/* Namespaces: */
+using namespace UIWizardExportAppVMs;
+
+
+/** QListWidgetItem subclass for Export Appliance wizard VM list. */
+class UIVMListWidgetItem : public QListWidgetItem
+{
+public:
+
+    /** Constructs VM list item passing @a pixIcon, @a strText and @a pParent to the base-class.
+      * @param  strUuid       Brings the machine ID.
+      * @param  fInSaveState  Brings whether machine is in Saved state. */
+    UIVMListWidgetItem(QPixmap &pixIcon, QString &strText, QUuid uUuid, bool fInSaveState, QListWidget *pParent)
+        : QListWidgetItem(pixIcon, strText, pParent)
+        , m_uUuid(uUuid)
+        , m_fInSaveState(fInSaveState)
+    {}
+
+    /** Returns whether this item is less than @a other. */
+    bool operator<(const QListWidgetItem &other) const
+    {
+        return text().toLower() < other.text().toLower();
+    }
+
+    /** Returns the machine ID. */
+    QUuid uuid() const { return m_uUuid; }
+    /** Returns whether machine is in Saved state. */
+    bool isInSaveState() const { return m_fInSaveState; }
+
+private:
+
+    /** Holds the machine ID. */
+    QUuid  m_uUuid;
+    /** Holds whether machine is in Saved state. */
+    bool   m_fInSaveState;
+};
+
+
+/*********************************************************************************************************************************
+*   Class UIWizardExportAppVMs implementation.                                                                                   *
+*********************************************************************************************************************************/
+
+void UIWizardExportAppVMs::populateVMItems(QListWidget *pVMSelector, const QStringList &selectedVMNames)
+{
+    /* Add all VM items into VM selector: */
+    foreach (const CMachine &comMachine, uiCommon().virtualBox().GetMachines())
+    {
+        QPixmap pixIcon;
+        QString strName;
+        QUuid uUuid;
+        bool fInSaveState = false;
+        bool fEnabled = false;
+        const int iIconMetric = QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize);
+        if (comMachine.GetAccessible())
+        {
+            pixIcon = generalIconPool().userMachinePixmapDefault(comMachine);
+            if (pixIcon.isNull())
+                pixIcon = generalIconPool().guestOSTypePixmapDefault(comMachine.GetOSTypeId());
+            strName = comMachine.GetName();
+            uUuid = comMachine.GetId();
+            fEnabled = comMachine.GetSessionState() == KSessionState_Unlocked;
+            fInSaveState = comMachine.GetState() == KMachineState_Saved || comMachine.GetState() == KMachineState_AbortedSaved;
+        }
+        else
+        {
+            QFileInfo fi(comMachine.GetSettingsFilePath());
+            strName = UICommon::hasAllowedExtension(fi.completeSuffix(), VBoxFileExts) ? fi.completeBaseName() : fi.fileName();
+            pixIcon = QPixmap(":/os_other.png").scaled(iIconMetric, iIconMetric, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
+        }
+        QListWidgetItem *pItem = new UIVMListWidgetItem(pixIcon, strName, uUuid, fInSaveState, pVMSelector);
+        if (!fEnabled)
+            pItem->setFlags(Qt::ItemFlags());
+        pVMSelector->addItem(pItem);
+    }
+    pVMSelector->sortItems();
+
+    /* Choose initially selected items (if passed): */
+    foreach (const QString &strSelectedVMName, selectedVMNames)
+    {
+        const QList<QListWidgetItem*> list = pVMSelector->findItems(strSelectedVMName, Qt::MatchExactly);
+        if (list.size() > 0)
+        {
+            if (pVMSelector->selectedItems().isEmpty())
+                pVMSelector->setCurrentItem(list.first());
+            else
+                list.first()->setSelected(true);
+        }
+    }
+}
+
+void UIWizardExportAppVMs::refreshSavedMachines(QStringList &savedMachines, QListWidget *pVMSelector)
+{
+    savedMachines.clear();
+    foreach (QListWidgetItem *pItem, pVMSelector->selectedItems())
+        if (static_cast<UIVMListWidgetItem*>(pItem)->isInSaveState())
+            savedMachines << pItem->text();
+}
+
+QStringList UIWizardExportAppVMs::machineNames(QListWidget *pVMSelector)
+{
+    /* Prepare list: */
+    QStringList names;
+    /* Iterate over all the selected items: */
+    foreach (QListWidgetItem *pItem, pVMSelector->selectedItems())
+        names << pItem->text();
+    /* Return result list: */
+    return names;
+}
+
+QList<QUuid> UIWizardExportAppVMs::machineIDs(QListWidget *pVMSelector)
+{
+    /* Prepare list: */
+    QList<QUuid> ids;
+    /* Iterate over all the selected items: */
+    foreach (QListWidgetItem *pItem, pVMSelector->selectedItems())
+        ids.append(static_cast<UIVMListWidgetItem*>(pItem)->uuid());
+    /* Return result list: */
+    return ids;
+}
+
+
+/*********************************************************************************************************************************
+*   Class UIWizardExportAppPageVMs implementation.                                                                               *
+*********************************************************************************************************************************/
+
+UIWizardExportAppPageVMs::UIWizardExportAppPageVMs(const QStringList &selectedVMNames, bool fFastTravelToNextPage)
+    : m_selectedVMNames(selectedVMNames)
+    , m_fFastTravelToNextPage(fFastTravelToNextPage)
+    , m_pLabelMain(0)
+    , m_pVMSelector(0)
+{
+    /* Prepare main layout: */
+    QVBoxLayout *pLayoutMain = new QVBoxLayout(this);
+    if (pLayoutMain)
+    {
+        /* Prepare main label: */
+        m_pLabelMain = new QIRichTextLabel(this);
+        if (m_pLabelMain)
+            pLayoutMain->addWidget(m_pLabelMain);
+
+        /* Prepare VM selector: */
+        m_pVMSelector = new QListWidget(this);
+        if (m_pVMSelector)
+        {
+            m_pVMSelector->setAlternatingRowColors(true);
+            m_pVMSelector->setSelectionMode(QAbstractItemView::ExtendedSelection);
+            pLayoutMain->addWidget(m_pVMSelector);
+        }
+    }
+
+    /* Setup connections: */
+    connect(m_pVMSelector, &QListWidget::itemSelectionChanged,
+            this, &UIWizardExportAppPageVMs::sltHandleVMItemSelectionChanged);
+}
+
+UIWizardExportApp *UIWizardExportAppPageVMs::wizard() const
+{
+    return qobject_cast<UIWizardExportApp*>(UINativeWizardPage::wizard());
+}
+
+void UIWizardExportAppPageVMs::retranslateUi()
+{
+    /* Translate page: */
+    setTitle(UIWizardExportApp::tr("Virtual machines"));
+
+    /* Translate widgets: */
+    m_pLabelMain->setText(UIWizardExportApp::tr("<p>Please select the virtual machines that should be added to the appliance. "
+                                                "You can select more than one. Please note that these machines have to be "
+                                                "turned off before they can be exported.</p>"));
+}
+
+void UIWizardExportAppPageVMs::initializePage()
+{
+    /* Populate VM items: */
+    populateVMItems(m_pVMSelector, m_selectedVMNames);
+    /* Translate page: */
+    retranslateUi();
+
+    /* Now, when we are ready, we can
+     * fast traver to page 2 if requested: */
+    if (m_fFastTravelToNextPage)
+        wizard()->goForward();
+}
+
+bool UIWizardExportAppPageVMs::isComplete() const
+{
+    /* Initial result: */
+    bool fResult = true;
+
+    /* There should be at least one VM selected: */
+    fResult = wizard()->machineNames().size() > 0;
+
+    /* Return result: */
+    return fResult;
+}
+
+bool UIWizardExportAppPageVMs::validatePage()
+{
+    /* Initial result: */
+    bool fResult = true;
+
+    /* Ask user about machines which are in Saved state currently: */
+    QStringList savedMachines;
+    refreshSavedMachines(savedMachines, m_pVMSelector);
+    if (!savedMachines.isEmpty())
+        fResult = msgCenter().confirmExportMachinesInSaveState(savedMachines, this);
+
+    /* Return result: */
+    return fResult;
+}
+
+void UIWizardExportAppPageVMs::sltHandleVMItemSelectionChanged()
+{
+    /* Update wizard fields: */
+    wizard()->setMachineNames(machineNames(m_pVMSelector));
+    wizard()->setMachineIDs(machineIDs(m_pVMSelector));
+
+    /* Notify about changes: */
+    emit completeChanged();
+}
Index: /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageVMs.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageVMs.h	(revision 91707)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageVMs.h	(revision 91707)
@@ -0,0 +1,99 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIWizardExportAppPageVMs class declaration.
+ */
+
+/*
+ * Copyright (C) 2009-2021 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifndef FEQT_INCLUDED_SRC_wizards_exportappliance_UIWizardExportAppPageVMs_h
+#define FEQT_INCLUDED_SRC_wizards_exportappliance_UIWizardExportAppPageVMs_h
+#ifndef RT_WITHOUT_PRAGMA_ONCE
+# pragma once
+#endif
+
+/* Qt includes */
+#include <QUuid>
+
+/* GUI includes: */
+#include "UINativeWizardPage.h"
+
+/* Forward declarations: */
+class QListWidget;
+class QIRichTextLabel;
+class UIWizardExportApp;
+
+/** Namespace for VMs page of the Export Appliance wizard. */
+namespace UIWizardExportAppVMs
+{
+    /** Populates @a pVMSelector with items on the basis of passed @a selectedVMNames. */
+    void populateVMItems(QListWidget *pVMSelector, const QStringList &selectedVMNames);
+
+    /** Refresh a list of saved machines selected in @a pVMSelector. */
+    void refreshSavedMachines(QStringList &savedMachines, QListWidget *pVMSelector);
+
+    /** Returns a list of machine names selected in @a pVMSelector. */
+    QStringList machineNames(QListWidget *pVMSelector);
+    /** Returns a list of machine IDs selected in @a pVMSelector. */
+    QList<QUuid> machineIDs(QListWidget *pVMSelector);
+}
+
+/** UINativeWizardPage extension for VMs page of the Export Appliance wizard,
+  * based on UIWizardExportAppVMs namespace functions. */
+class UIWizardExportAppPageVMs : public UINativeWizardPage
+{
+    Q_OBJECT;
+
+public:
+
+    /** Constructs VMs page.
+      * @param  selectedVMNames        Brings the list of selected VM names.
+      * @param  fFastTravelToNextPage  Brings whether we should fast-travel to next page. */
+    UIWizardExportAppPageVMs(const QStringList &selectedVMNames, bool fFastTravelToNextPage);
+
+protected:
+
+    /** Returns wizard this page belongs to. */
+    UIWizardExportApp *wizard() const;
+
+    /** Handles translation event. */
+    virtual void retranslateUi() /* override final */;
+
+    /** Performs page initialization. */
+    virtual void initializePage() /* override final */;
+
+    /** Returns whether page is complete. */
+    virtual bool isComplete() const /* override final */;
+
+    /** Performs page validation. */
+    virtual bool validatePage() /* override final */;
+
+private slots:
+
+    /** Handles VM item selection change. */
+    void sltHandleVMItemSelectionChanged();
+
+private:
+
+    /** Holds the list of selected VM names. */
+    const QStringList  m_selectedVMNames;
+    /** Holds whether we should fast travel to next page. */
+    bool               m_fFastTravelToNextPage;
+
+    /** Holds the main label instance. */
+    QIRichTextLabel *m_pLabelMain;
+
+    /** Holds the VM selector instance. */
+    QListWidget *m_pVMSelector;
+};
+
+#endif /* !FEQT_INCLUDED_SRC_wizards_exportappliance_UIWizardExportAppPageVMs_h */
