VirtualBox

Changeset 91152 in vbox


Ignore:
Timestamp:
Sep 8, 2021 1:23:54 PM (4 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
146806
Message:

FE/Qt: bugref:9996. More work on the new vm wizard summary page.

Location:
trunk/src/VBox/Frontends/VirtualBox
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk

    r91106 r91152  
    977977        src/widgets/graphics/UIGraphicsScrollBar.cpp \
    978978        src/wizards/editors/UIUserNamePasswordEditor.cpp \
    979         src/wizards/importappliance/UIWizardImportApp.cpp
    980 
     979        src/wizards/importappliance/UIWizardImportApp.cpp \
     980        src/wizards/newvm/UIWizardNewVMSummaryPage.cpp
    981981
    982982#
  • trunk/src/VBox/Frontends/VirtualBox/src/settings/editors/UINameAndSystemEditor.cpp

    r91125 r91152  
    132132}
    133133
    134 QString UINameAndSystemEditor::image() const
     134QString UINameAndSystemEditor::ISOImagePath() const
    135135{
    136136    if (!m_pImageSelector)
  • trunk/src/VBox/Frontends/VirtualBox/src/settings/editors/UINameAndSystemEditor.h

    r90236 r91152  
    106106
    107107    /** Returns image string selected by the user. */
    108     QString image() const;
     108    QString ISOImagePath() const;
    109109
    110110    /** Defines the VM OS @a strTypeId and @a strFamilyId if passed. */
  • trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMExpertPage.cpp

    r91106 r91152  
    870870{
    871871    AssertReturnVoid(m_pSkipUnattendedCheckBox && m_pNameAndSystemEditor);
    872     const QString &strPath = m_pNameAndSystemEditor->image();
     872    const QString &strPath = m_pNameAndSystemEditor->ISOImagePath();
    873873    if (strPath.isNull() || strPath.isEmpty())
    874874    {
  • trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMHardwarePage.h

    r91059 r91152  
    5151    void prepare();
    5252    void createConnections();
    53     void retranslateUi();
    54     void initializePage();
    55     bool isComplete() const;
     53    virtual void retranslateUi() /* override final */;
     54    virtual void initializePage() /* override final */;
     55    virtual bool isComplete() const /* override final */;
    5656
    5757    /** @name Widgets
  • trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMNameOSTypePage.cpp

    r91059 r91152  
    303303    if (!pNameAndSystemEditor)
    304304        return false;
    305     const QString &strPath = pNameAndSystemEditor->image();
     305    const QString &strPath = pNameAndSystemEditor->ISOImagePath();
    306306    if (strPath.isNull() || strPath.isEmpty())
    307307        return true;
     
    523523    if (m_pNameAndSystemEditor)
    524524    {
    525         const QString &strPath = m_pNameAndSystemEditor->image();
     525        const QString &strPath = m_pNameAndSystemEditor->ISOImagePath();
    526526        m_pSkipUnattendedCheckBox->setEnabled(!strPath.isNull() && !strPath.isEmpty());
    527527    }
     
    532532    if (!m_pNameAndSystemEditor)
    533533        return false;
    534     const QString &strPath = m_pNameAndSystemEditor->image();
     534    const QString &strPath = m_pNameAndSystemEditor->ISOImagePath();
    535535    if (strPath.isNull() || strPath.isEmpty())
    536536        return false;
  • trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMSummaryPage.cpp

    r91108 r91152  
    1717
    1818/* Qt includes: */
    19 #include <QButtonGroup>
    20 #include <QCheckBox>
    21 #include <QLabel>
    22 #include <QRadioButton>
     19#include <QHeaderView>
     20#include <QList>
     21#include <QFileInfo>
    2322#include <QVBoxLayout>
    2423
    2524/* GUI includes: */
    2625#include "QIRichTextLabel.h"
    27 #include "QIToolButton.h"
     26#include "QITreeView.h"
    2827#include "UIIconPool.h"
    29 #include "UIMediaComboBox.h"
    30 #include "UIMediumSelector.h"
    31 #include "UIMediumSizeEditor.h"
    3228#include "UIMessageCenter.h"
    33 #include "UICommon.h"
    3429#include "UIWizardNewVMSummaryPage.h"
    3530#include "UIWizardDiskEditors.h"
    3631#include "UIWizardNewVM.h"
    3732
    38 /* COM includes: */
    39 #include "COMEnums.h"
    40 #include "CGuestOSType.h"
    41 #include "CSystemProperties.h"
    42 
     33/*********************************************************************************************************************************
     34*   UIWizardNewVMSummaryItem definition.                                                                                  *
     35*********************************************************************************************************************************/
     36
     37class UIWizardNewVMSummaryItem : public QITreeViewItem
     38{
     39    Q_OBJECT;
     40
     41public:
     42
     43    UIWizardNewVMSummaryItem(QITreeView *pParentTree, const QString &strText,
     44                             const QVariant &data = QVariant(), const QIcon &icon = QIcon());
     45
     46    virtual UIWizardNewVMSummaryItem *childItem(int iIndex) const /* override final */;
     47    virtual int childCount() const /* override final */;
     48    virtual QString text() const /* override final */;
     49    const QVariant &data() const;
     50    const QIcon &icon() const;
     51
     52    /** Returns the index of this item within its parent's children list. */
     53    int row() const;
     54    int childIndex(const UIWizardNewVMSummaryItem *pChild) const;
     55    int columnCount() const;
     56
     57
     58    UIWizardNewVMSummaryItem *addChild(const QString &strText,
     59                                       const QVariant &data = QVariant(), const QIcon &icon = QIcon());
     60
     61
     62    bool isSectionTitle() const;
     63    void setIsSectionTitle(bool fIsSectionTitle);
     64
     65private:
     66
     67    UIWizardNewVMSummaryItem(UIWizardNewVMSummaryItem *pParentItem, const QString &strText,
     68                             const QVariant &data = QVariant(), const QIcon &icon = QIcon());
     69
     70    UIWizardNewVMSummaryItem *m_pParentItem;
     71    QString m_strText;
     72    QVariant m_data;
     73    QIcon m_icon;
     74    QList<UIWizardNewVMSummaryItem*> m_childList;
     75    bool m_fIsSectionTitle;
     76};
     77
     78/*********************************************************************************************************************************
     79*   UIWizardNewVMSummaryModel definition.                                                                                  *
     80*********************************************************************************************************************************/
     81
     82class UIWizardNewVMSummaryModel : public QAbstractItemModel
     83{
     84    Q_OBJECT;
     85
     86public:
     87
     88    UIWizardNewVMSummaryModel(QITreeView *pParentTree);
     89
     90    virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const /* override final */;
     91
     92    QModelIndex index(int row, int column,
     93                      const QModelIndex &parent = QModelIndex()) const  /* override final */;
     94    QModelIndex parent(const QModelIndex &index) const  /* override final */;
     95    int rowCount(const QModelIndex &parent = QModelIndex()) const  /* override final */;
     96    int columnCount(const QModelIndex &parent = QModelIndex()) const  /* override final */;
     97
     98    void populateData(UIWizardNewVM *pWizard);
     99
     100private:
     101
     102    UIWizardNewVMSummaryItem *m_pRootItem;
     103
     104};
     105
     106/*********************************************************************************************************************************
     107*   UIWizardNewVMSummaryItem implementation.                                                                                  *
     108*********************************************************************************************************************************/
     109
     110
     111UIWizardNewVMSummaryItem::UIWizardNewVMSummaryItem(QITreeView *pParentTree, const QString &strText,
     112                                                   const QVariant &data /* = QVariant() */, const QIcon &icon /* = QIcon() */)
     113    : QITreeViewItem(pParentTree)
     114    , m_strText(strText)
     115    , m_data(data)
     116    , m_icon(icon)
     117    , m_fIsSectionTitle(false)
     118{
     119}
     120
     121UIWizardNewVMSummaryItem::UIWizardNewVMSummaryItem(UIWizardNewVMSummaryItem *pParentItem, const QString &strText,
     122                                                   const QVariant &data /* = QVariant() */, const QIcon &icon /* = QIcon() */)
     123    : QITreeViewItem(pParentItem)
     124    , m_strText(strText)
     125    , m_data(data)
     126    , m_icon(icon)
     127    , m_fIsSectionTitle(false)
     128{
     129}
     130
     131UIWizardNewVMSummaryItem *UIWizardNewVMSummaryItem::childItem(int iIndex) const
     132{
     133    if (iIndex >= m_childList.size())
     134        return 0;
     135    return m_childList[iIndex];
     136}
     137
     138int UIWizardNewVMSummaryItem::childIndex(const UIWizardNewVMSummaryItem *pChild) const
     139{
     140    if (!pChild)
     141        return 0;
     142    return m_childList.indexOf(const_cast<UIWizardNewVMSummaryItem*>(pChild));
     143}
     144
     145int UIWizardNewVMSummaryItem::row() const
     146{
     147    UIWizardNewVMSummaryItem *pParent = qobject_cast<UIWizardNewVMSummaryItem*>(parentItem());
     148    if (!pParent)
     149        return 0;
     150    return pParent->childIndex(this);
     151}
     152
     153
     154int UIWizardNewVMSummaryItem::childCount() const
     155{
     156    return m_childList.size();
     157}
     158
     159
     160QString UIWizardNewVMSummaryItem::text() const
     161{
     162    return m_strText;
     163}
     164
     165const QVariant &UIWizardNewVMSummaryItem::data() const
     166{
     167    return m_data;
     168}
     169
     170const QIcon &UIWizardNewVMSummaryItem::icon() const
     171{
     172    return m_icon;
     173}
     174
     175int UIWizardNewVMSummaryItem::columnCount() const
     176{
     177    if (m_data.isValid())
     178        return 2;
     179    return 1;
     180}
     181
     182UIWizardNewVMSummaryItem *UIWizardNewVMSummaryItem::addChild(const QString &strText, const QVariant &data /* = QVariant() */, const QIcon &icon /* = QIcon() */)
     183{
     184    UIWizardNewVMSummaryItem *pNewItem = new UIWizardNewVMSummaryItem(this, strText, data, icon);
     185    m_childList << pNewItem;
     186    return pNewItem;
     187}
     188
     189void UIWizardNewVMSummaryItem::setIsSectionTitle(bool fIsSectionTitle)
     190{
     191    m_fIsSectionTitle = fIsSectionTitle;
     192}
     193
     194bool UIWizardNewVMSummaryItem::isSectionTitle() const
     195{
     196    return m_fIsSectionTitle;
     197}
     198
     199
     200/*********************************************************************************************************************************
     201*   UIWizardNewVMSummaryModel implementation.                                                                                  *
     202*********************************************************************************************************************************/
     203
     204UIWizardNewVMSummaryModel::UIWizardNewVMSummaryModel(QITreeView *pParentTree)
     205    : QAbstractItemModel(pParentTree)
     206    , m_pRootItem(0)
     207{
     208}
     209
     210QVariant UIWizardNewVMSummaryModel::data(const QModelIndex &index, int role /* = Qt::DisplayRole */) const
     211{
     212    if (!index.isValid())
     213        return QVariant();
     214    UIWizardNewVMSummaryItem *pItem = static_cast<UIWizardNewVMSummaryItem*>(index.internalPointer());
     215    if (!pItem)
     216        return QVariant();
     217    if (role == Qt::DisplayRole)
     218    {
     219        switch (index.column())
     220        {
     221            case 0:
     222                return pItem->text();
     223                break;
     224            case 1:
     225                return pItem->data();
     226                break;
     227            default:
     228                break;
     229        }
     230    }
     231    else if (role == Qt::DecorationRole)
     232    {
     233        if (index.column() == 0 && !pItem->icon().isNull())
     234            return pItem->icon();
     235    }
     236    else if (role == Qt::FontRole)
     237    {
     238        UIWizardNewVMSummaryItem *pItem = static_cast<UIWizardNewVMSummaryItem*>(index.internalPointer());
     239        if (pItem && pItem->isSectionTitle())
     240        {
     241            QFont font = qApp->font();
     242            font.setBold(true);
     243            return font;
     244        }
     245    }
     246    return QVariant();
     247}
     248
     249QModelIndex UIWizardNewVMSummaryModel::index(int row, int column, const QModelIndex &parent /* = QModelIndex() */) const
     250{
     251     if (!hasIndex(row, column, parent))
     252          return QModelIndex();
     253
     254     UIWizardNewVMSummaryItem *pParentItem;
     255
     256     if (!parent.isValid())
     257         pParentItem = m_pRootItem;
     258     else
     259         pParentItem = static_cast<UIWizardNewVMSummaryItem*>(parent.internalPointer());
     260
     261     UIWizardNewVMSummaryItem *pChildItem = pParentItem->childItem(row);
     262     if (pChildItem)
     263         return createIndex(row, column, pChildItem);
     264     else
     265         return QModelIndex();
     266}
     267
     268QModelIndex UIWizardNewVMSummaryModel::parent(const QModelIndex &index) const
     269{
     270    if (!index.isValid())
     271        return QModelIndex();
     272
     273    UIWizardNewVMSummaryItem *pChildItem = static_cast<UIWizardNewVMSummaryItem*>(index.internalPointer());
     274    if (!pChildItem)
     275        return QModelIndex();
     276
     277    UIWizardNewVMSummaryItem *pParentItem = static_cast<UIWizardNewVMSummaryItem*>(pChildItem->parentItem());
     278
     279    if (pParentItem == m_pRootItem)
     280        return QModelIndex();
     281
     282    return createIndex(pParentItem->row(), 0, pParentItem);
     283}
     284
     285int UIWizardNewVMSummaryModel::rowCount(const QModelIndex &parent /* = QModelIndex() */) const
     286{
     287    if (parent.column() > 0)
     288        return 0;
     289    UIWizardNewVMSummaryItem *pItem = 0;
     290    if (!parent.isValid())
     291        pItem = m_pRootItem;
     292    else
     293        pItem = static_cast<UIWizardNewVMSummaryItem*>(parent.internalPointer());
     294
     295    if (pItem)
     296        return pItem->childCount();
     297    return 0;
     298}
     299
     300int UIWizardNewVMSummaryModel::columnCount(const QModelIndex &parentIndex /* = QModelIndex() */) const
     301{
     302    return 2;
     303    AssertReturn(m_pRootItem, 0);
     304    if (parentIndex.isValid())
     305    {
     306        UIWizardNewVMSummaryItem *pParent = static_cast<UIWizardNewVMSummaryItem*>(parentIndex.internalPointer());
     307        // if (pParent && pParent->childItem(0))
     308        // {
     309        //     printf("sasadasd %d\n", pParent->childItem(0)->columnCount());
     310        //     return pParent->childItem(0)->columnCount();
     311        // }
     312        if (pParent)
     313            return pParent->columnCount();
     314
     315    }
     316    return m_pRootItem->columnCount();
     317}
     318
     319void UIWizardNewVMSummaryModel::populateData(UIWizardNewVM *pWizard)
     320{
     321    QITreeView *pParentTree = qobject_cast<QITreeView*>(QObject::parent());
     322
     323    AssertReturnVoid(pWizard && pParentTree);
     324    if (m_pRootItem)
     325        delete m_pRootItem;
     326    m_pRootItem = new UIWizardNewVMSummaryItem(pParentTree, "root");
     327
     328    UIWizardNewVMSummaryItem *pNameRoot = m_pRootItem->addChild(UIWizardNewVM::tr("Machine Name and OS Type"));
     329    pNameRoot->setIsSectionTitle(true);
     330
     331    /* Name and OS Type page stuff: */
     332    pNameRoot->addChild(UIWizardNewVM::tr("Machine Name"), pWizard->machineBaseName(), UIIconPool::iconSet(":/name_16px.png"));
     333    pNameRoot->addChild(UIWizardNewVM::tr("Machine Folder"), pWizard->machineFolder(), UIIconPool::iconSet(":/name_16px.png"));
     334    pNameRoot->addChild(UIWizardNewVM::tr("ISO Image"), pWizard->ISOFilePath(), UIIconPool::iconSet(":/cd_16px.png"));
     335    pNameRoot->addChild(UIWizardNewVM::tr("Guest OS Type"), pWizard->guestOSType().GetDescription(), UIIconPool::iconSet(":/system_type_16px.png"));
     336
     337    const QString &ISOPath = pWizard->ISOFilePath();
     338    if (!ISOPath.isNull() && !ISOPath.isEmpty())
     339        pNameRoot->addChild(UIWizardNewVM::tr("Skip Unattended Install"), pWizard->skipUnattendedInstall(),
     340                            UIIconPool::iconSet(":/extension_pack_install_16px.png"));
     341
     342
     343    /* Unattended install related info: */
     344    if (pWizard->isUnattendedEnabled())
     345    {
     346        UIWizardNewVMSummaryItem *pUnattendedRoot = m_pRootItem->addChild(UIWizardNewVM::tr("Unattended Install"));
     347        pUnattendedRoot->setIsSectionTitle(true);
     348        pUnattendedRoot->addChild(UIWizardNewVM::tr("Username"), pWizard->userName(),
     349                                  UIIconPool::iconSet(":/extension_pack_install_16px.png"));
     350        pUnattendedRoot->addChild(UIWizardNewVM::tr("Product Key"), pWizard->installGuestAdditions(),
     351                                  UIIconPool::iconSet(":/extension_pack_install_16px.png"));
     352        pUnattendedRoot->addChild(UIWizardNewVM::tr("Hostname/Domain Name"), pWizard->hostnameDomainName(),
     353                                  UIIconPool::iconSet(":/extension_pack_install_16px.png"));
     354        pUnattendedRoot->addChild(UIWizardNewVM::tr("Install in Background"), pWizard->startHeadless(),
     355                                  UIIconPool::iconSet(":/extension_pack_install_16px.png"));
     356        pUnattendedRoot->addChild(UIWizardNewVM::tr("Install Guest Additions"), pWizard->installGuestAdditions(),
     357                                  UIIconPool::iconSet(":/extension_pack_install_16px.png"));
     358        if (pWizard->installGuestAdditions())
     359            pUnattendedRoot->addChild(UIWizardNewVM::tr("Guest Additions ISO"), pWizard->guestAdditionsISOPath(),
     360                                      UIIconPool::iconSet(":/extension_pack_install_16px.png"));
     361    }
     362
     363
     364    // UIWizardNewVMSummaryItem *pHardwareRoot = new UIWizardNewVMSummaryItem(m_pRootItem, UIWizardNewVM::tr("Hardware"));
     365    // UIWizardNewVMSummaryItem *pDiskRoot = new UIWizardNewVMSummaryItem(m_pRootItem, UIWizardNewVM::tr("Disk"));
     366    // Q_UNUSED(pHardwareRoot);
     367    // Q_UNUSED(pDiskRoot);
     368
     369}
     370
     371/*********************************************************************************************************************************
     372*   UIWizardNewVMSummaryPage implementation.                                                                                     *
     373*********************************************************************************************************************************/
    43374
    44375UIWizardNewVMSummaryPage::UIWizardNewVMSummaryPage()
    45376    : m_pLabel(0)
     377    , m_pTree(0)
    46378{
    47379    prepare();
     
    56388    pMainLayout->addWidget(m_pLabel);
    57389
    58     pMainLayout->addStretch();
     390    m_pTree = new QITreeView;
     391    QString sty("QTreeView::branch {"
     392                "background: palette(base);"
     393                "}");
     394
     395    if (m_pTree)
     396    {
     397        //m_pTree->setStyleSheet(sty);
     398        m_pTree->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::MinimumExpanding);
     399        m_pTree->setAlternatingRowColors(true);
     400        m_pModel = new UIWizardNewVMSummaryModel(m_pTree);
     401        m_pTree->setModel(m_pModel);
     402        pMainLayout->addWidget(m_pTree);
     403    }
     404
     405    //pMainLayout->addStretch();
    59406
    60407    createConnections();
     
    73420{
    74421    retranslateUi();
    75 
     422    UIWizardNewVM *pWizard = wizardWindow<UIWizardNewVM>();
     423    AssertReturnVoid(pWizard && m_pModel);
     424    if (m_pModel)
     425        m_pModel->populateData(pWizard);
     426    if (m_pTree)
     427    {
     428        m_pTree->expandToDepth(4);
     429        m_pTree->header()->setSectionResizeMode(QHeaderView::ResizeToContents);
     430    }
    76431}
    77432
    78433bool UIWizardNewVMSummaryPage::isComplete() const
    79434{
    80 
    81435    return true;
    82436}
     
    132486    return fResult;
    133487}
     488
     489
     490#include "UIWizardNewVMSummaryPage.moc"
  • trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMSummaryPage.h

    r91106 r91152  
    2222#endif
    2323
    24 /* Qt includes: */
    25 #include <QSet>
    26 
    2724/* GUI includes: */
    28 #include "QIFileDialog.h"
    2925#include "UINativeWizardPage.h"
    3026
    31 /* COM includes: */
    32 #include "COMEnums.h"
    33 #include "CMedium.h"
    34 
    3527/* Forward declarations: */
    36 class QButtonGroup;
    37 class QCheckBox;
    38 class QRadioButton;
    39 class QLabel;
    4028class QIRichTextLabel;
    41 class QIToolButton;
    42 class UIMediaComboBox;
    43 class UIMediumSizeEditor;
    44 
     29class QITreeView;
     30class UIWizardNewVMSummaryModel;
    4531
    4632class UIWizardNewVMSummaryPage : public UINativeWizardPage
     
    5238    UIWizardNewVMSummaryPage();
    5339
    54 protected:
    55 
    56 
    57 private slots:
    58 
    59 
    6040private:
    6141
    6242    void prepare();
    6343    void createConnections();
    64 
    65 
    6644    virtual void retranslateUi() /* override final */;
    6745    virtual void initializePage() /* override final */;
    6846    virtual bool isComplete() const /* override final */;
    6947    virtual bool validatePage() /* override final */;
    70 
    71 
    72 
    7348    /** @name Widgets
    7449     * @{ */
    7550       QIRichTextLabel *m_pLabel;
     51       QITreeView *m_pTree;
    7652    /** @} */
    77 
    78 
     53    UIWizardNewVMSummaryModel *m_pModel;
    7954};
    8055
Note: See TracChangeset for help on using the changeset viewer.

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