Changeset 90074 in vbox
- Timestamp:
- Jul 7, 2021 10:06:10 AM (4 years ago)
- Location:
- trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvm
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVM.h
r90073 r90074 62 62 63 63 64 65 66 enum SelectedDiskSource67 {68 SelectedDiskSource_Empty = 0,69 SelectedDiskSource_New,70 SelectedDiskSource_Existing,71 SelectedDiskSource_Max72 };73 74 Q_DECLARE_METATYPE(SelectedDiskSource);75 76 64 /** New Virtual Machine wizard: */ 77 65 class UIWizardNewVM : public UINativeWizard -
trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMDiskPageBasic.cpp
r90003 r90074 19 19 #include <QButtonGroup> 20 20 #include <QCheckBox> 21 #include <QDir> 21 22 #include <QGridLayout> 22 23 #include <QGroupBox> … … 42 43 #include "CSystemProperties.h" 43 44 44 // UIWizardNewVMDiskPage::UIWizardNewVMDiskPage() 45 // : m_fRecommendedNoDisk(false) 46 // , m_enmSelectedDiskSource(SelectedDiskSource_New) 47 // { 48 // } 49 50 // SelectedDiskSource UIWizardNewVMDiskPage::selectedDiskSource() const 51 // { 52 // return m_enmSelectedDiskSource; 53 // } 54 55 // void UIWizardNewVMDiskPage::setSelectedDiskSource(SelectedDiskSource enmSelectedDiskSource) 56 // { 57 // m_enmSelectedDiskSource = enmSelectedDiskSource; 58 // } 59 60 // void UIWizardNewVMDiskPage::getWithFileOpenDialog() 61 // { 62 // QUuid uMediumId; 63 // int returnCode = uiCommon().openMediumSelectorDialog(thisImp(), UIMediumDeviceType_HardDisk, 64 // uMediumId, 65 // fieldImp("machineFolder").toString(), 66 // fieldImp("machineBaseName").toString(), 67 // fieldImp("type").value<CGuestOSType>().GetId(), 68 // false /* don't show/enable the create action: */); 69 // if (returnCode == static_cast<int>(UIMediumSelector::ReturnCode_Accepted) && !uMediumId.isNull()) 70 // { 71 // m_pDiskSelector->setCurrentItem(uMediumId); 72 // m_pDiskSelector->setFocus(); 73 // } 74 // } 75 76 // void UIWizardNewVMDiskPage::setEnableDiskSelectionWidgets(bool fEnabled) 77 // { 78 // if (!m_pDiskSelector || !m_pDiskSelectionButton) 79 // return; 80 81 // m_pDiskSelector->setEnabled(fEnabled); 82 // m_pDiskSelectionButton->setEnabled(fEnabled); 83 // } 45 QString UIWizardNewVMDiskPage::defaultExtension(const CMediumFormat &mediumFormatRef) 46 { 47 if (!mediumFormatRef.isNull()) 48 { 49 /* Load extension / device list: */ 50 QVector<QString> fileExtensions; 51 QVector<KDeviceType> deviceTypes; 52 CMediumFormat mediumFormat(mediumFormatRef); 53 mediumFormat.DescribeFileExtensions(fileExtensions, deviceTypes); 54 for (int i = 0; i < fileExtensions.size(); ++i) 55 if (deviceTypes[i] == KDeviceType_HardDisk) 56 return fileExtensions[i].toLower(); 57 } 58 AssertMsgFailed(("Extension can't be NULL!\n")); 59 return QString(); 60 } 61 62 QString UIWizardNewVMDiskPage::toFileName(const QString &strName, const QString &strExtension) 63 { 64 /* Convert passed name to native separators (it can be full, actually): */ 65 QString strFileName = QDir::toNativeSeparators(strName); 66 67 /* Remove all trailing dots to avoid multiple dots before extension: */ 68 int iLen; 69 while (iLen = strFileName.length(), iLen > 0 && strFileName[iLen - 1] == '.') 70 strFileName.truncate(iLen - 1); 71 72 /* Add passed extension if its not done yet: */ 73 if (QFileInfo(strFileName).suffix().toLower() != strExtension) 74 strFileName += QString(".%1").arg(strExtension); 75 76 /* Return result: */ 77 return strFileName; 78 } 79 80 QString UIWizardNewVMDiskPage::absoluteFilePath(const QString &strFileName, const QString &strPath) 81 { 82 /* Wrap file-info around received file name: */ 83 QFileInfo fileInfo(strFileName); 84 /* If path-info is relative or there is no path-info at all: */ 85 if (fileInfo.fileName() == strFileName || fileInfo.isRelative()) 86 { 87 /* Resolve path on the basis of path we have: */ 88 fileInfo = QFileInfo(strPath, strFileName); 89 } 90 /* Return full absolute hard disk file path: */ 91 return QDir::toNativeSeparators(fileInfo.absoluteFilePath()); 92 } 93 94 QUuid UIWizardNewVMDiskPage::getWithFileOpenDialog(const QString &strOSTypeID, 95 const QString &strMachineFolder, 96 const QString &strMachineBaseName, 97 QWidget *pCaller) 98 { 99 QUuid uMediumId; 100 int returnCode = uiCommon().openMediumSelectorDialog(pCaller, UIMediumDeviceType_HardDisk, 101 uMediumId, 102 strMachineFolder, 103 strMachineBaseName, 104 strOSTypeID, 105 false /* don't show/enable the create action: */); 106 if (returnCode != static_cast<int>(UIMediumSelector::ReturnCode_Accepted)) 107 return QUuid(); 108 return uMediumId; 109 } 110 84 111 85 112 // QWidget *UIWizardNewVMDiskPage::createNewDiskWidgets() … … 88 115 // } 89 116 117 // registerField("mediumFormat", this, "mediumFormat"); 118 // registerField("mediumVariant" /* KMediumVariant */, this, "mediumVariant"); 119 // registerField("mediumPath", this, "mediumPath"); 120 // registerField("mediumSize", this, "mediumSize"); 90 121 91 122 UIWizardNewVMDiskPageBasic::UIWizardNewVMDiskPageBasic() … … 105 136 , m_pFixedCheckBox(0) 106 137 , m_pSplitBox(0) 107 , m_fUserSetSize(false) 138 , m_enmSelectedDiskSource(SelectedDiskSource_New) 139 , m_fRecommendedNoDisk(false) 108 140 { 109 141 prepare(); … … 111 143 // qRegisterMetaType<SelectedDiskSource>(); 112 144 113 / / /* We do not have any UI elements for HDD format selection since we default to VDI in case of guided wizard mode: */114 //bool fFoundVDI = false;115 //CSystemProperties properties = uiCommon().virtualBox().GetSystemProperties();116 //const QVector<CMediumFormat> &formats = properties.GetMediumFormats();117 //foreach (const CMediumFormat &format, formats)118 //{119 //if (format.GetName() == "VDI")120 //{121 //m_mediumFormat = format;122 //fFoundVDI = true;123 //}124 //}125 //if (!fFoundVDI)126 //AssertMsgFailed(("No medium format corresponding to VDI could be found!"));127 128 // m_strDefaultExtension =defaultExtension(m_mediumFormat);129 130 / / /* Since the medium format is static we can decide widget visibility here: */131 //setWidgetVisibility(m_mediumFormat);145 /* We do not have any UI elements for HDD format selection since we default to VDI in case of guided wizard mode: */ 146 bool fFoundVDI = false; 147 CSystemProperties properties = uiCommon().virtualBox().GetSystemProperties(); 148 const QVector<CMediumFormat> &formats = properties.GetMediumFormats(); 149 foreach (const CMediumFormat &format, formats) 150 { 151 if (format.GetName() == "VDI") 152 { 153 m_mediumFormat = format; 154 fFoundVDI = true; 155 } 156 } 157 if (!fFoundVDI) 158 AssertMsgFailed(("No medium format corresponding to VDI could be found!")); 159 160 m_strDefaultExtension = UIWizardNewVMDiskPage::defaultExtension(m_mediumFormat); 161 162 /* Since the medium format is static we can decide widget visibility here: */ 163 setWidgetVisibility(m_mediumFormat); 132 164 } 133 165 … … 139 171 QString UIWizardNewVMDiskPageBasic::mediumPath() const 140 172 { 141 return QString();//absoluteFilePath(toFileName(m_strDefaultName, m_strDefaultExtension), m_strDefaultPath); 173 return UIWizardNewVMDiskPage::absoluteFilePath(UIWizardNewVMDiskPage::toFileName(m_strDefaultName, 174 m_strDefaultExtension), m_strDefaultPath); 142 175 } 143 176 … … 151 184 152 185 pMainLayout->addStretch(); 153 //setEnableDiskSelectionWidgets(m_enmSelectedDiskSource == SelectedDiskSource_Existing);154 //setEnableNewDiskWidgets(m_enmSelectedDiskSource == SelectedDiskSource_New);186 setEnableDiskSelectionWidgets(m_enmSelectedDiskSource == SelectedDiskSource_Existing); 187 setEnableNewDiskWidgets(m_enmSelectedDiskSource == SelectedDiskSource_New); 155 188 156 189 createConnections(); … … 222 255 void UIWizardNewVMDiskPageBasic::sltSelectedDiskSourceChanged() 223 256 { 224 //if (!m_pDiskSourceButtonGroup)225 //return;226 227 //if (m_pDiskSourceButtonGroup->checkedButton() == m_pDiskEmpty)228 // setSelectedDiskSource(SelectedDiskSource_Empty);229 //else if (m_pDiskSourceButtonGroup->checkedButton() == m_pDiskExisting)230 //{231 // setSelectedDiskSource(SelectedDiskSource_Existing);232 //setVirtualDiskFromDiskCombo();233 //}234 //else235 // setSelectedDiskSource(SelectedDiskSource_New);236 237 //setEnableDiskSelectionWidgets(m_enmSelectedDiskSource == SelectedDiskSource_Existing);238 //setEnableNewDiskWidgets(m_enmSelectedDiskSource == SelectedDiskSource_New);239 240 //completeChanged();257 if (!m_pDiskSourceButtonGroup) 258 return; 259 260 if (m_pDiskSourceButtonGroup->checkedButton() == m_pDiskEmpty) 261 m_enmSelectedDiskSource = SelectedDiskSource_Empty; 262 else if (m_pDiskSourceButtonGroup->checkedButton() == m_pDiskExisting) 263 { 264 m_enmSelectedDiskSource = SelectedDiskSource_Existing; 265 setVirtualDiskFromDiskCombo(); 266 } 267 else 268 m_enmSelectedDiskSource = SelectedDiskSource_New; 269 270 setEnableDiskSelectionWidgets(m_enmSelectedDiskSource == SelectedDiskSource_Existing); 271 setEnableNewDiskWidgets(m_enmSelectedDiskSource == SelectedDiskSource_New); 272 273 emit completeChanged(); 241 274 } 242 275 … … 250 283 void UIWizardNewVMDiskPageBasic::sltGetWithFileOpenDialog() 251 284 { 252 //getWithFileOpenDialog(); 285 UIWizardNewVM *pWizard = qobject_cast<UIWizardNewVM*>(wizard()); 286 AssertReturnVoid(pWizard); 287 const CGuestOSType &comOSType = pWizard->guestOSType(); 288 AssertReturnVoid(!comOSType.isNull()); 289 QUuid uMediumId = UIWizardNewVMDiskPage::getWithFileOpenDialog(comOSType.GetId(), 290 pWizard->machineFolder(), 291 pWizard->machineBaseName(), 292 this); 293 if (!uMediumId.isNull()) 294 { 295 m_pDiskSelector->setCurrentItem(uMediumId); 296 m_pDiskSelector->setFocus(); 297 } 253 298 } 254 299 … … 257 302 setTitle(UIWizardNewVM::tr("Virtual Hard disk")); 258 303 259 // QString strRecommendedHDD = field("type").value<CGuestOSType>().isNull() ? QString() :260 // UICommon::formatSize(field("type").value<CGuestOSType>().GetRecommendedHDD());261 304 if (m_pLabel) 262 305 m_pLabel->setText(UIWizardNewVM::tr("<p>If you wish you can add a virtual hard disk to the new machine. " … … 308 351 void UIWizardNewVMDiskPageBasic::initializePage() 309 352 { 310 // retranslateUi(); 311 312 // if (!field("type").canConvert<CGuestOSType>()) 313 // return; 314 315 // CGuestOSType type = field("type").value<CGuestOSType>(); 316 317 // if (type.GetRecommendedHDD() != 0) 318 // { 319 // if (m_pDiskNew) 320 // { 321 // m_pDiskNew->setFocus(); 322 // m_pDiskNew->setChecked(true); 323 // } 324 // setSelectedDiskSource(SelectedDiskSource_New); 325 // m_fRecommendedNoDisk = false; 326 // } 327 // else 328 // { 329 // if (m_pDiskEmpty) 330 // { 331 // m_pDiskEmpty->setFocus(); 332 // m_pDiskEmpty->setChecked(true); 333 // } 334 // setSelectedDiskSource(SelectedDiskSource_Empty); 335 // m_fRecommendedNoDisk = true; 336 // } 337 // if (m_pDiskSelector) 338 // m_pDiskSelector->setCurrentIndex(0); 339 // setEnableDiskSelectionWidgets(m_enmSelectedDiskSource == SelectedDiskSource_Existing); 340 // setEnableNewDiskWidgets(m_enmSelectedDiskSource == SelectedDiskSource_New); 341 342 // /* We set the medium name and path according to machine name/path and do let user change these in the guided mode: */ 343 // QString strDefaultName = fieldImp("machineBaseName").toString(); 344 // m_strDefaultName = strDefaultName.isEmpty() ? QString("NewVirtualDisk1") : strDefaultName; 345 // m_strDefaultPath = fieldImp("machineFolder").toString(); 346 // /* Set the recommended disk size if user has already not done so: */ 347 // if (m_pMediumSizeEditor && !m_fUserSetSize) 348 // { 349 // m_pMediumSizeEditor->blockSignals(true); 350 // setMediumSize(fieldImp("type").value<CGuestOSType>().GetRecommendedHDD()); 351 // m_pMediumSizeEditor->blockSignals(false); 352 // } 353 retranslateUi(); 354 355 UIWizardNewVM *pWizard = qobject_cast<UIWizardNewVM*>(wizard()); 356 AssertReturnVoid(pWizard); 357 358 LONG64 iRecommendedSize = 0; 359 CGuestOSType type = pWizard->guestOSType(); 360 if (!type.isNull()) 361 { 362 iRecommendedSize = type.GetRecommendedHDD(); 363 if (iRecommendedSize != 0) 364 { 365 if (m_pDiskNew) 366 { 367 m_pDiskNew->setFocus(); 368 m_pDiskNew->setChecked(true); 369 } 370 m_enmSelectedDiskSource = SelectedDiskSource_New; 371 m_fRecommendedNoDisk = false; 372 } 373 else 374 { 375 if (m_pDiskEmpty) 376 { 377 m_pDiskEmpty->setFocus(); 378 m_pDiskEmpty->setChecked(true); 379 } 380 m_enmSelectedDiskSource = SelectedDiskSource_Empty; 381 m_fRecommendedNoDisk = true; 382 } 383 } 384 385 if (m_pDiskSelector) 386 m_pDiskSelector->setCurrentIndex(0); 387 setEnableDiskSelectionWidgets(m_enmSelectedDiskSource == SelectedDiskSource_Existing); 388 setEnableNewDiskWidgets(m_enmSelectedDiskSource == SelectedDiskSource_New); 389 390 /* We set the medium name and path according to machine name/path and do not allow user change these in the guided mode: */ 391 const QString &strDefaultName = pWizard->machineBaseName(); 392 m_strDefaultName = strDefaultName.isEmpty() ? QString("NewVirtualDisk1") : strDefaultName; 393 m_strDefaultPath = pWizard->machineFolder(); 394 /* Set the recommended disk size if user has already not done so: */ 395 if (m_pMediumSizeEditor && !m_userModifiedParameters.contains("MediumSize")) 396 { 397 m_pMediumSizeEditor->blockSignals(true); 398 m_pMediumSizeEditor->setMediumSize(iRecommendedSize); 399 m_pMediumSizeEditor->blockSignals(false); 400 } 353 401 } 354 402 … … 437 485 void UIWizardNewVMDiskPageBasic::sltHandleSizeEditorChange() 438 486 { 439 m_ fUserSetSize = true;487 m_userModifiedParameters << "MediumSize"; 440 488 } 441 489 442 490 void UIWizardNewVMDiskPageBasic::setEnableNewDiskWidgets(bool fEnable) 443 491 { 444 Q_UNUSED(fEnable); 445 // if (m_pMediumSizeEditor) 446 // m_pMediumSizeEditor->setEnabled(fEnable); 447 // if (m_pMediumSizeEditorLabel) 448 // m_pMediumSizeEditorLabel->setEnabled(fEnable); 449 // if (m_pFixedCheckBox) 450 // m_pFixedCheckBox->setEnabled(fEnable); 492 if (m_pMediumSizeEditor) 493 m_pMediumSizeEditor->setEnabled(fEnable); 494 if (m_pMediumSizeEditorLabel) 495 m_pMediumSizeEditorLabel->setEnabled(fEnable); 496 if (m_pFixedCheckBox) 497 m_pFixedCheckBox->setEnabled(fEnable); 451 498 } 452 499 453 500 void UIWizardNewVMDiskPageBasic::setVirtualDiskFromDiskCombo() 454 501 { 455 //AssertReturnVoid(m_pDiskSelector);456 // UIWizardNewVM *pWizard = wizardImp();457 //AssertReturnVoid(pWizard);458 //pWizard->setVirtualDisk(m_pDiskSelector->id());502 AssertReturnVoid(m_pDiskSelector); 503 UIWizardNewVM *pWizard = qobject_cast<UIWizardNewVM*>(wizard()); 504 AssertReturnVoid(pWizard); 505 pWizard->setVirtualDisk(m_pDiskSelector->id()); 459 506 } 460 507 … … 528 575 return pContainerWidget; 529 576 } 577 578 void UIWizardNewVMDiskPageBasic::setEnableDiskSelectionWidgets(bool fEnabled) 579 { 580 if (!m_pDiskSelector || !m_pDiskSelectionButton) 581 return; 582 583 m_pDiskSelector->setEnabled(fEnabled); 584 m_pDiskSelectionButton->setEnabled(fEnabled); 585 } 586 587 void UIWizardNewVMDiskPageBasic::setWidgetVisibility(CMediumFormat &mediumFormat) 588 { 589 ULONG uCapabilities = 0; 590 QVector<KMediumFormatCapabilities> capabilities; 591 capabilities = mediumFormat.GetCapabilities(); 592 for (int i = 0; i < capabilities.size(); i++) 593 uCapabilities |= capabilities[i]; 594 595 bool fIsCreateDynamicPossible = uCapabilities & KMediumFormatCapabilities_CreateDynamic; 596 bool fIsCreateFixedPossible = uCapabilities & KMediumFormatCapabilities_CreateFixed; 597 bool fIsCreateSplitPossible = uCapabilities & KMediumFormatCapabilities_CreateSplit2G; 598 if (m_pFixedCheckBox) 599 { 600 if (!fIsCreateDynamicPossible) 601 { 602 m_pFixedCheckBox->setChecked(true); 603 m_pFixedCheckBox->setEnabled(false); 604 } 605 if (!fIsCreateFixedPossible) 606 { 607 m_pFixedCheckBox->setChecked(false); 608 m_pFixedCheckBox->setEnabled(false); 609 } 610 } 611 if (m_pDynamicLabel) 612 m_pDynamicLabel->setHidden(!fIsCreateDynamicPossible); 613 if (m_pFixedLabel) 614 m_pFixedLabel->setHidden(!fIsCreateFixedPossible); 615 if (m_pFixedCheckBox) 616 m_pFixedCheckBox->setHidden(!fIsCreateFixedPossible); 617 if (m_pSplitLabel) 618 m_pSplitLabel->setHidden(!fIsCreateSplitPossible); 619 if (m_pSplitBox) 620 m_pSplitBox->setHidden(!fIsCreateSplitPossible); 621 } -
trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMDiskPageBasic.h
r90003 r90074 24 24 /* Qt includes: */ 25 25 #include <QVariant> 26 #include <QSet> 26 27 27 28 /* GUI includes: */ … … 43 44 class UIMediaComboBox; 44 45 46 enum SelectedDiskSource 47 { 48 SelectedDiskSource_Empty = 0, 49 SelectedDiskSource_New, 50 SelectedDiskSource_Existing, 51 SelectedDiskSource_Max 52 }; 45 53 46 // class UIWizardNewVMDiskPage : public UIWizardPageBase 47 // { 48 49 // public: 50 51 52 // protected: 53 54 // UIWizardNewVMDiskPage(); 54 namespace UIWizardNewVMDiskPage 55 { 56 QString defaultExtension(const CMediumFormat &mediumFormatRef); 57 QString toFileName(const QString &strName, const QString &strExtension); 58 QUuid getWithFileOpenDialog(const QString &strOSTypeID, 59 const QString &strMachineFolder, 60 const QString &strMachineBaseName, 61 QWidget *pCaller); 62 QString absoluteFilePath(const QString &strFileName, const QString &strPath); 63 } 55 64 56 65 // SelectedDiskSource selectedDiskSource() const; 57 66 // void setSelectedDiskSource(SelectedDiskSource enmSelectedDiskSource); 58 67 // bool getWithNewVirtualDiskWizard(); 59 60 68 // virtual QWidget *createDiskWidgets(); 61 69 // virtual QWidget *createNewDiskWidgets(); 62 70 // void getWithFileOpenDialog(); 63 71 // void retranslateWidgets(); 64 65 72 // void setEnableDiskSelectionWidgets(bool fEnable); 66 // bool m_fRecommendedNoDisk;67 68 // SelectedDiskSource m_enmSelectedDiskSource;69 // };70 73 71 74 class UIWizardNewVMDiskPageBasic : public UINativeWizardPage … … 96 99 void createConnections(); 97 100 QWidget *createNewDiskWidgets(); 98 void retranslateUi();99 void initializePage();100 101 void cleanupPage(); 101 102 void setEnableNewDiskWidgets(bool fEnable); … … 103 104 QWidget *createDiskWidgets(); 104 105 QWidget *createMediumVariantWidgets(bool fWithLabels); 105 bool isComplete() const; 106 virtual bool validatePage() /* override */; 106 107 virtual void retranslateUi() /* override final */; 108 virtual void initializePage() /* override final */; 109 virtual bool isComplete() const /* override final */; 110 virtual bool validatePage() /* override final */; 111 112 void setEnableDiskSelectionWidgets(bool fEnabled); 113 void setWidgetVisibility(CMediumFormat &mediumFormat); 107 114 108 115 /** @name Widgets … … 125 132 /** @} */ 126 133 127 /** This is set to true when user manually set the size. */128 bool m_fUserSetSize;129 134 /** For guided new vm wizard VDI is the only format. Thus we have no UI item for it. */ 130 135 CMediumFormat m_mediumFormat; 136 SelectedDiskSource m_enmSelectedDiskSource; 137 bool m_fRecommendedNoDisk; 138 QString m_strDefaultName; 139 QString m_strDefaultPath; 140 QString m_strDefaultExtension; 141 QSet<QString> m_userModifiedParameters; 131 142 }; 132 143 -
trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageExpert.cpp
r90003 r90074 72 72 /* Register classes: */ 73 73 qRegisterMetaType<CMedium>(); 74 qRegisterMetaType<SelectedDiskSource>();74 //qRegisterMetaType<SelectedDiskSource>(); 75 75 76 76 /* Register fields: */
Note:
See TracChangeset
for help on using the changeset viewer.