VirtualBox

Changeset 84955 in vbox


Ignore:
Timestamp:
Jun 25, 2020 2:40:53 PM (5 years ago)
Author:
vboxsync
Message:

FE/Qt: bugref:9515. Adding hostname and os type detection.

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/UIVirtualBoxManager.cpp

    r84906 r84955  
    616616        unattendedInstallData.m_strUserName = comUnattendedInstaller.GetUser();
    617617        unattendedInstallData.m_strPassword = comUnattendedInstaller.GetPassword();
     618        unattendedInstallData.m_strHostname = comUnattendedInstaller.GetHostname();
    618619
    619620        pWizard->setDefaultUnattendedInstallData(unattendedInstallData);
     
    18961897    comUnattendedInstaller.SetUser(unattendedData.m_strUserName);
    18971898    comUnattendedInstaller.SetPassword(unattendedData.m_strPassword);
     1899    comUnattendedInstaller.SetHostname(unattendedData.m_strHostname);
    18981900    comUnattendedInstaller.Prepare();
    18991901    checkUnattendedInstallError(comUnattendedInstaller);
  • trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVM.cpp

    r84915 r84955  
    7676        case WizardMode_Basic:
    7777        {
    78             setPage(PageUnattended, new UIWizardNewVMPageBasicUnattended);
     78            UIWizardNewVMPageBasicUnattended *pUnattendedPage =
     79                new UIWizardNewVMPageBasicUnattended;
     80            connect(pUnattendedPage, &UIWizardNewVMPageBasicUnattended::sigDetectedOSTypeChanged,
     81                    this, &UIWizardNewVM::sltHandleDetectedOSTypeChange);
     82            setPage(PageUnattended, pUnattendedPage);
    7983            setPage(PageNameType, new UIWizardNewVMPageBasicNameType(m_strGroup));
    8084            setPage(PageInstallSetup, new UIWizardNewVMPageBasicInstallSetup);
     
    382386}
    383387
     388QString UIWizardNewVM::getStringFieldValue(const QString &strFieldName) const
     389{
     390    QVariant fieldValue = field(strFieldName);
     391    if (!fieldValue.isNull() && fieldValue.isValid() && fieldValue.canConvert(QMetaType::QString))
     392        return fieldValue.toString();
     393    return QString();
     394}
     395
    384396void UIWizardNewVM::sltHandleWizardCancel()
    385397{
     
    407419}
    408420
     421void UIWizardNewVM::sltHandleDetectedOSTypeChange()
     422{
     423    UIWizardNewVMPageBasicNameType *pPage = qobject_cast<UIWizardNewVMPageBasicNameType*>(page(PageNameType));
     424    if (!pPage)
     425        return;
     426    pPage->setTypeByISODetectedOSType(getStringFieldValue("detectedOSTypeId"));
     427}
     428
    409429void UIWizardNewVM::retranslateUi()
    410430{
     
    493513const UIUnattendedInstallData &UIWizardNewVM::unattendedInstallData() const
    494514{
    495     QVariant fieldValue = field("ISOFilePath");
    496     if (!fieldValue.isNull() && fieldValue.isValid() && fieldValue.canConvert(QMetaType::QString))
    497         m_unattendedInstallData.m_strISOPath = fieldValue.toString();
    498 
    499     fieldValue = field("isUnattendedEnabled");
     515    m_unattendedInstallData.m_strISOPath = getStringFieldValue("ISOFilePath");
     516    m_unattendedInstallData.m_strUserName = getStringFieldValue("userName");
     517    m_unattendedInstallData.m_strHostname = getStringFieldValue("hostname");
     518    m_unattendedInstallData.m_strPassword = getStringFieldValue("password");
     519    m_unattendedInstallData.m_strDetectedOSTypeId = getStringFieldValue("detectedOSTypeId");
     520    m_unattendedInstallData.m_strDetectedOSVersion = getStringFieldValue("detectedOSVersion");
     521    m_unattendedInstallData.m_strDetectedOSFlavor = getStringFieldValue("detectedOSFlavor");
     522    m_unattendedInstallData.m_strDetectedOSLanguages = getStringFieldValue("detectedOSLanguages");
     523    m_unattendedInstallData.m_strDetectedOSHints = getStringFieldValue("detectedOSHints");
     524
     525
     526    QVariant fieldValue = field("isUnattendedEnabled");
    500527    if (!fieldValue.isNull() && fieldValue.isValid() && fieldValue.canConvert(QMetaType::Bool))
    501528        m_unattendedInstallData.m_fUnattendedEnabled = fieldValue.toBool();
     
    504531    if (!fieldValue.isNull() && fieldValue.isValid() && fieldValue.canConvert(QMetaType::Bool))
    505532        m_unattendedInstallData.m_fStartHeadless = fieldValue.toBool();
    506 
    507     fieldValue = field("userName");
    508     if (!fieldValue.isNull() && fieldValue.isValid() && fieldValue.canConvert(QMetaType::QString))
    509         m_unattendedInstallData.m_strUserName = fieldValue.toString();
    510 
    511     fieldValue = field("password");
    512     if (!fieldValue.isNull() && fieldValue.isValid() && fieldValue.canConvert(QMetaType::QString))
    513         m_unattendedInstallData.m_strPassword = fieldValue.toString();
    514533
    515534    m_unattendedInstallData.m_uMachineUid = createdMachineId();
  • trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVM.h

    r84915 r84955  
    3636    QUuid m_uMachineUid;
    3737    QString m_strISOPath;
     38    QString m_strGAIOSPath;
    3839    bool m_fStartHeadless;
    3940    QString m_strUserName;
    4041    QString m_strPassword;
     42    QString m_strHostname;
     43    QString m_strDetectedOSTypeId;
     44    QString m_strDetectedOSVersion;
     45    QString m_strDetectedOSFlavor;
     46    QString m_strDetectedOSLanguages;
     47    QString m_strDetectedOSHints;
    4148};
    4249
     
    8693    bool attachDefaultDevices(const CGuestOSType &comGuestType);
    8794
     95    QString getStringFieldValue(const QString &strFieldName) const;
     96
    8897    /* Who will be able to create virtual-machine: */
    8998    friend class UIWizardNewVMPageBasicDisk;
     
    93102
    94103    void sltHandleWizardCancel();
     104    void sltHandleDetectedOSTypeChange();
    95105
    96106private:
  • trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageBasicInstallSetup.cpp

    r84918 r84955  
    1717
    1818/* Qt includes: */
     19#include <QComboBox>
     20#include <QCompleter>
    1921#include <QIntValidator>
    20 #include <QVBoxLayout>
    2122#include <QGridLayout>
    2223#include <QSpacerItem>
    2324#include <QLabel>
     25#include <QSortFilterProxyModel>
    2426#include <QSpinBox>
     27#include <QStringListModel>
    2528#include <QStyle>
    2629#include <QToolButton>
     30#include <QVBoxLayout>
    2731
    2832/* GUI includes: */
     
    184188    if (!pLineEdit)
    185189        return;
    186     pLayout->addWidget(pLineEdit, iRow, 1, 1, 1);
     190    pLayout->addWidget(pLineEdit, iRow, 1, 1, 3);
    187191
    188192    pLabel->setBuddy(pLineEdit);
     
    207211{
    208212    QGridLayout *pMainLayout = new QGridLayout;
     213    pMainLayout->setContentsMargins(0, 0, 0, 0);
    209214    if (!pMainLayout)
    210215        return;
     
    236241UIWizardNewVMPageInstallSetup::UIWizardNewVMPageInstallSetup()
    237242    : m_pUserNamePasswordEditor(0)
     243    , m_pHostnameLineEdit(0)
     244    , m_pHostnameLabel(0)
    238245{
    239246}
     
    253260}
    254261
     262QString UIWizardNewVMPageInstallSetup::hostname() const
     263{
     264    if (m_pHostnameLineEdit)
     265        return m_pHostnameLineEdit->text();
     266    return QString();
     267}
    255268
    256269UIWizardNewVMPageBasicInstallSetup::UIWizardNewVMPageBasicInstallSetup()
     
    261274    {
    262275        m_pLabel = new QIRichTextLabel(this);
    263         QGridLayout *pMemoryLayout = new QGridLayout;
     276        QGridLayout *pGridLayout = new QGridLayout;
    264277        {
    265278            m_pUserNamePasswordEditor = new UIUserNamePasswordEditor;
    266             pMemoryLayout->addWidget(m_pUserNamePasswordEditor, 0, 0);
     279            pGridLayout->addWidget(m_pUserNamePasswordEditor, 0, 0, 3, 4);
    267280            connect(m_pUserNamePasswordEditor, &UIUserNamePasswordEditor::sigSomeTextChanged,
    268281                    this, &UIWizardNewVMPageBasicInstallSetup::completeChanged);
     282            m_pHostnameLabel = new QLabel;
     283            m_pHostnameLineEdit = new QLineEdit;
     284            pGridLayout->addWidget(m_pHostnameLabel, 3, 0, 1, 1, Qt::AlignRight);
     285            pGridLayout->addWidget(m_pHostnameLineEdit, 3, 1, 1, 3);
    269286        }
    270287        if (m_pLabel)
    271288            pMainLayout->addWidget(m_pLabel);
    272         pMainLayout->addLayout(pMemoryLayout);
     289        pMainLayout->addLayout(pGridLayout);
    273290        pMainLayout->addStretch();
    274291    }
    275 
    276292
    277293    /* Register fields: */
    278294    registerField("userName", this, "userName");
    279295    registerField("password", this, "password");
     296    registerField("hostname", this, "hostname");
    280297}
    281298
     
    283300{
    284301    /* Initialize the widget data: */
    285 
    286302    if (m_pUserNamePasswordEditor)
    287303    {
     
    289305        m_pUserNamePasswordEditor->setPassword(unattendedInstallData.m_strPassword);
    290306    }
     307    if (m_pHostnameLineEdit)
     308        m_pHostnameLineEdit->setText(unattendedInstallData.m_strHostname);
    291309}
    292310
     
    294312{
    295313    /* Translate page: */
    296     setTitle(UIWizardNewVM::tr("User Name/Password and Time Zone Selection"));
     314    setTitle(UIWizardNewVM::tr("User Name/Password and Hostname Settings"));
    297315
    298316    /* Translate widgets: */
    299317    if (m_pLabel)
    300         m_pLabel->setText(UIWizardNewVM::tr("<p>Here you can specify the user name/password and time zone. "
     318        m_pLabel->setText(UIWizardNewVM::tr("<p>Here you can specify the user name/password and hostname. "
    301319                                            "The values you enter here will be used during the unattended install.</p>"));
     320    if (m_pHostnameLabel)
     321        m_pHostnameLabel->setText(UIWizardNewVM::tr("Hostname:"));
    302322}
    303323
     
    306326    /* Translate page: */
    307327    retranslateUi();
    308 
    309     /* Get recommended 'ram' field value: */
    310     // CGuestOSType type = field("type").value<CGuestOSType>();
    311     // m_pBaseMemoryEditor->setValue(type.GetRecommendedRAM());
    312     // m_pVirtualCPUEditor->setValue(1);
    313 
    314     // /* 'Ram' field should have focus initially: */
    315     // m_pBaseMemoryEditor->setFocus();
    316328}
    317329
  • trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageBasicInstallSetup.h

    r84918 r84955  
    2424/* Qt includes: */
    2525#include <QLineEdit>
     26#include <QStringList>
    2627#include <QWidget>
    2728
     
    121122    UIWizardNewVMPageInstallSetup();
    122123
    123     QString userName() const;
    124     QString password() const;
     124    /** @name Property getters
     125      * @{ */
     126        QString userName() const;
     127        QString password() const;
     128        QString hostname() const;
     129    /** @} */
    125130
    126131protected:
     
    128133    /* Widgets: */
    129134    UIUserNamePasswordEditor *m_pUserNamePasswordEditor;
     135    QLineEdit *m_pHostnameLineEdit;
     136    QLabel  *m_pHostnameLabel;
    130137};
    131138
     
    136143    Q_PROPERTY(QString userName READ userName);
    137144    Q_PROPERTY(QString password READ password);
     145    Q_PROPERTY(QString hostname READ hostname);
    138146
    139147public:
  • trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageBasicNameType.cpp

    r84918 r84955  
    353353}
    354354
     355void UIWizardNewVMPageBasicNameType::setTypeByISODetectedOSType(const QString &strDetectedOSType)
     356{
     357    if (!strDetectedOSType.isEmpty())
     358        onNameChanged(strDetectedOSType);
     359}
     360
     361
    355362void UIWizardNewVMPageBasicNameType::sltNameChanged(const QString &strNewName)
    356363{
  • trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageBasicNameType.h

    r84917 r84955  
    9494    UIWizardNewVMPageBasicNameType(const QString &strGroup);
    9595    virtual int nextId() const /* override */;
     96    void setTypeByISODetectedOSType(const QString &strDetectedOSType);
    9697
    9798protected:
  • trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageBasicUnattended.cpp

    r84917 r84955  
    3636#include "CHost.h"
    3737#include "CSystemProperties.h"
    38 
     38#include "CUnattended.h"
    3939
    4040UIWizardNewVMPageUnattended::UIWizardNewVMPageUnattended()
    4141    : m_pUnattendedCheckBox(0)
    4242    , m_pStartHeadlessCheckBox(0)
     43    , m_pISOSelectorLabel(0)
     44    , m_pStatusLabel(0)
    4345    , m_pISOFilePathSelector(0)
     46    , m_ISOError(ISOError_NoFileName)
    4447{
    4548}
     
    6467        return false;
    6568    return m_pStartHeadlessCheckBox->isChecked();
     69}
     70
     71const QString &UIWizardNewVMPageUnattended::detectedOSTypeId() const
     72{
     73    return m_strDetectedOSTypeId;
     74}
     75
     76const QString &UIWizardNewVMPageUnattended::detectedOSVersion() const
     77{
     78    return m_strDetectedOSVersion;
     79}
     80
     81const QString &UIWizardNewVMPageUnattended::detectedOSFlavor() const
     82{
     83    return m_strDetectedOSFlavor;
     84}
     85
     86const QString &UIWizardNewVMPageUnattended::detectedOSLanguages() const
     87{
     88    return m_strDetectedOSLanguages;
     89}
     90
     91const QString &UIWizardNewVMPageUnattended::detectedOSHints() const
     92{
     93    return m_strDetectedOSHints;
     94}
     95
     96bool UIWizardNewVMPageUnattended::determineOSType(const QString &strISOPath)
     97{
     98    QFileInfo isoFileInfo(strISOPath);
     99    if (!isoFileInfo.exists())
     100    {
     101        m_ISOError = ISOError_DontExists;
     102        m_strDetectedOSTypeId.clear();
     103        m_strDetectedOSVersion.clear();
     104        m_strDetectedOSFlavor.clear();
     105        m_strDetectedOSLanguages.clear();
     106        m_strDetectedOSHints.clear();
     107        updateStatusLabel();
     108        return false;
     109    }
     110
     111    CUnattended comUnatteded = uiCommon().virtualBox().CreateUnattendedInstaller();
     112    comUnatteded.SetIsoPath(strISOPath);
     113    comUnatteded.DetectIsoOS();
     114
     115    m_strDetectedOSTypeId = comUnatteded.GetDetectedOSTypeId();
     116    m_strDetectedOSVersion = comUnatteded.GetDetectedOSVersion();
     117    m_strDetectedOSFlavor = comUnatteded.GetDetectedOSFlavor();
     118    m_strDetectedOSLanguages = comUnatteded.GetDetectedOSLanguages();
     119    m_strDetectedOSHints = comUnatteded.GetDetectedOSHints();
     120
     121    updateStatusLabel();
     122    return true;
     123}
     124
     125void UIWizardNewVMPageUnattended::updateStatusLabel()
     126{
     127    if (m_pStatusLabel)
     128    {
     129        m_pStatusLabel->setText(QString("<b>%1:</b> %2<br/><b>%3:</b> %4<br/><b>%5</b>: %6")
     130                                .arg(UIWizardNewVM::tr("Detected OS Type")).arg(m_strDetectedOSTypeId)
     131                                .arg(UIWizardNewVM::tr("Detected OS Version")).arg(m_strDetectedOSVersion)
     132                                .arg(UIWizardNewVM::tr("Detected OS Flavor")).arg(m_strDetectedOSFlavor));
     133    }
    66134}
    67135
     
    90158        }
    91159        m_pStartHeadlessCheckBox = new QCheckBox;
    92         {
    93             m_pStartHeadlessCheckBox->setEnabled(false);
    94         }
     160        m_pStartHeadlessCheckBox->setEnabled(false);
     161        m_pStatusLabel = new QLabel;
     162        m_pStatusLabel->setEnabled(false);
    95163        pMainLayout->addWidget(m_pLabel);
    96164
     
    100168        pISOSelectorLayout->addWidget(m_pISOFilePathSelector, 1, 2, 1, 4);
    101169        pISOSelectorLayout->addWidget(m_pStartHeadlessCheckBox, 2, 2, 1, 5);
     170        pISOSelectorLayout->addWidget(m_pStatusLabel, 3, 2, 1, 5);
    102171
    103172        pMainLayout->addLayout(pISOSelectorLayout);
     
    110179    registerField("isUnattendedEnabled", this, "isUnattendedEnabled");
    111180    registerField("startHeadless", this, "startHeadless");
     181    registerField("startHeadless", this, "startHeadless");
     182    registerField("detectedOSTypeId", this, "detectedOSTypeId");
     183    registerField("detectedOSVersion", this, "detectedOSVersion");
     184    registerField("detectedOSFlavor", this, "detectedOSFlavor");
     185    registerField("detectedOSLanguages", this, "detectedOSLanguages");
     186    registerField("detectedOSHints", this, "detectedOSHints");
     187
     188
    112189}
    113190
     
    126203    if (m_pStartHeadlessCheckBox)
    127204        m_pStartHeadlessCheckBox->setEnabled(fEnabled);
     205    if (m_pStatusLabel)
     206        m_pStatusLabel->setEnabled(fEnabled);
    128207    emit completeChanged();
    129208}
     
    131210void UIWizardNewVMPageBasicUnattended::sltPathChanged(const QString &strPath)
    132211{
    133     Q_UNUSED(strPath);
     212    determineOSType(strPath);
    134213    emit completeChanged();
    135214}
     
    145224                                        "installed after this window is closed. "));
    146225    m_pUnattendedCheckBox->setText(UIWizardNewVM::tr("Enable unattended guest OS Install"));
    147     m_pISOSelectorLabel->setText(UIWizardNewVM::tr("ISO:"));
     226    m_pISOSelectorLabel->setText(UIWizardNewVM::tr("Installation medium:"));
    148227    if (m_pStartHeadlessCheckBox)
    149228    {
     
    151230        m_pStartHeadlessCheckBox->setToolTip(UIWizardNewVM::tr("When checked the unattended will start the virtual machine headless"));
    152231    }
     232    m_pISOFilePathSelector->setToolTip(UIWizardNewVM::tr("Please select an installation medium (ISO file) "
     233                                                         "for the unattended guest OS install"));
     234    updateStatusLabel();
    153235}
    154236
     
    181263    return checkISOFile();
    182264}
     265
     266void UIWizardNewVMPageBasicUnattended::updateStatusLabel()
     267{
     268    UIWizardNewVMPageUnattended::updateStatusLabel();
     269    emit sigDetectedOSTypeChanged();
     270}
  • trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageBasicUnattended.h

    r84917 r84955  
    3737protected:
    3838
    39     /* Constructor: */
     39    enum ISOError
     40    {
     41        ISOError_NoError,
     42        ISOError_NoFileName,
     43        ISOError_DontExists,
     44        ISOError_NotReadable,
     45        ISOError_Max
     46    };
     47
    4048    UIWizardNewVMPageUnattended();
     49    bool determineOSType(const QString &strISOPath);
     50    virtual void updateStatusLabel();
    4151
    42     QString ISOFilePath() const;
    43     bool isUnattendedEnabled() const;
    44     bool startHeadless() const;
     52    /** @name Property getters
     53      * @{ */
     54        QString ISOFilePath() const;
     55        bool isUnattendedEnabled() const;
     56        bool startHeadless() const;
     57        const QString &detectedOSTypeId() const;
     58        const QString &detectedOSVersion() const;
     59        const QString &detectedOSFlavor() const;
     60        const QString &detectedOSLanguages() const;
     61        const QString &detectedOSHints() const;
     62    /** @} */
    4563
    4664    QCheckBox *m_pUnattendedCheckBox;
    4765    QCheckBox *m_pStartHeadlessCheckBox;
    4866    QLabel *m_pISOSelectorLabel;
     67    QLabel *m_pStatusLabel;
    4968    UIFilePathSelector *m_pISOFilePathSelector;
     69    ISOError m_ISOError;
    5070
    5171private:
     72
     73    QString m_strDetectedOSTypeId;
     74    QString m_strDetectedOSVersion;
     75    QString m_strDetectedOSFlavor;
     76    QString m_strDetectedOSLanguages;
     77    QString m_strDetectedOSHints;
    5278
    5379    friend class UIWizardNewVM;
     
    6187    Q_PROPERTY(bool isUnattendedEnabled READ isUnattendedEnabled);
    6288    Q_PROPERTY(bool startHeadless READ startHeadless);
     89    Q_PROPERTY(QString detectedOSTypeId READ detectedOSTypeId);
     90    Q_PROPERTY(QString detectedOSVersion READ detectedOSVersion);
     91    Q_PROPERTY(QString detectedOSFlavor READ detectedOSFlavor);
     92    Q_PROPERTY(QString detectedOSLanguages READ detectedOSLanguages);
     93    Q_PROPERTY(QString detectedOSHints READ detectedOSHints);
     94
     95signals:
     96
     97    void sigDetectedOSTypeChanged();
    6398
    6499public:
     
    72107    /* Wrapper to access 'this' from base part: */
    73108    UIWizardPage* thisImp() { return this; }
     109    virtual void updateStatusLabel();
    74110
    75111private slots:
Note: See TracChangeset for help on using the changeset viewer.

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