VirtualBox

source: vbox/trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVD.cpp@ 96828

Last change on this file since 96828 was 96828, checked in by vboxsync, 2 years ago

FE/Qt: bugref:9831. Some more updates on help keywords.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 7.5 KB
Line 
1/* $Id: UIWizardNewVD.cpp 96828 2022-09-22 13:25:53Z vboxsync $ */
2/** @file
3 * VBox Qt GUI - UIWizardNewVD class implementation.
4 */
5
6/*
7 * Copyright (C) 2006-2022 Oracle and/or its affiliates.
8 *
9 * This file is part of VirtualBox base platform packages, as
10 * available from https://www.virtualbox.org.
11 *
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation, in version 3 of the
15 * License.
16 *
17 * This program is distributed in the hope that it will be useful, but
18 * WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, see <https://www.gnu.org/licenses>.
24 *
25 * SPDX-License-Identifier: GPL-3.0-only
26 */
27
28/* GUI includes: */
29#include "UICommon.h"
30#include "UIModalWindowManager.h"
31#include "UINotificationCenter.h"
32#include "UIWizardNewVD.h"
33#include "UIWizardNewVDFileTypePage.h"
34#include "UIWizardNewVDVariantPage.h"
35#include "UIWizardNewVDSizeLocationPage.h"
36#include "UIWizardNewVDExpertPage.h"
37
38UIWizardNewVD::UIWizardNewVD(QWidget *pParent,
39 const QString &strDefaultName,
40 const QString &strDefaultPath,
41 qulonglong uDefaultSize,
42 WizardMode mode)
43 : UINativeWizard(pParent, WizardType_NewVD, mode, "create-virtual-hard-disk-image" /* help keyword */)
44 , m_strDefaultName(strDefaultName)
45 , m_strDefaultPath(strDefaultPath)
46 , m_uDefaultSize(uDefaultSize)
47 , m_iMediumVariantPageIndex(-1)
48{
49#ifndef VBOX_WS_MAC
50 /* Assign watermark: */
51 setPixmapName(":/wizard_new_harddisk.png");
52#else /* VBOX_WS_MAC */
53 /* Assign background image: */
54 setPixmapName(":/wizard_new_harddisk_bg.png");
55#endif /* VBOX_WS_MAC */
56}
57
58qulonglong UIWizardNewVD::mediumVariant() const
59{
60 return m_uMediumVariant;
61}
62
63void UIWizardNewVD::setMediumVariant(qulonglong uMediumVariant)
64{
65 m_uMediumVariant = uMediumVariant;
66}
67
68const CMediumFormat &UIWizardNewVD::mediumFormat()
69{
70 return m_comMediumFormat;
71}
72
73void UIWizardNewVD::setMediumFormat(const CMediumFormat &mediumFormat)
74{
75 m_comMediumFormat = mediumFormat;
76 if (mode() == WizardMode_Basic)
77 setMediumVariantPageVisibility();
78}
79
80const QString &UIWizardNewVD::mediumPath() const
81{
82 return m_strMediumPath;
83}
84
85void UIWizardNewVD::setMediumPath(const QString &strMediumPath)
86{
87 m_strMediumPath = strMediumPath;
88}
89
90qulonglong UIWizardNewVD::mediumSize() const
91{
92 return m_uMediumSize;
93}
94
95void UIWizardNewVD::setMediumSize(qulonglong uMediumSize)
96{
97 m_uMediumSize = uMediumSize;
98}
99
100QUuid UIWizardNewVD::mediumId() const
101{
102 return m_uMediumId;
103}
104
105void UIWizardNewVD::populatePages()
106{
107 switch (mode())
108 {
109 case WizardMode_Basic:
110 {
111 addPage(new UIWizardNewVDFileTypePage);
112 m_iMediumVariantPageIndex = addPage(new UIWizardNewVDVariantPage);
113 addPage(new UIWizardNewVDSizeLocationPage(m_strDefaultName, m_strDefaultPath, m_uDefaultSize));
114 break;
115 }
116 case WizardMode_Expert:
117 {
118 addPage(new UIWizardNewVDExpertPage(m_strDefaultName, m_strDefaultPath, m_uDefaultSize));
119 break;
120 }
121 default:
122 {
123 AssertMsgFailed(("Invalid mode: %d", mode()));
124 break;
125 }
126 }
127}
128
129bool UIWizardNewVD::createVirtualDisk()
130{
131 AssertReturn(!m_strMediumPath.isNull(), false);
132 AssertReturn(m_uMediumSize > 0, false);
133
134 /* Get VBox object: */
135 CVirtualBox comVBox = uiCommon().virtualBox();
136
137 /* Create new virtual disk image: */
138 CMedium comVirtualDisk = comVBox.CreateMedium(m_comMediumFormat.GetName(),
139 m_strMediumPath, KAccessMode_ReadWrite, KDeviceType_HardDisk);
140 if (!comVBox.isOk())
141 {
142 UINotificationMessage::cannotCreateMediumStorage(comVBox, m_strMediumPath, notificationCenter());
143 return false;
144 }
145
146 /* Compose medium-variant: */
147 QVector<KMediumVariant> variants(sizeof(qulonglong) * 8);
148 for (int i = 0; i < variants.size(); ++i)
149 {
150 qulonglong temp = m_uMediumVariant;
151 temp &= Q_UINT64_C(1) << i;
152 variants[i] = (KMediumVariant)temp;
153 }
154
155 UINotificationProgressMediumCreate *pNotification = new UINotificationProgressMediumCreate(comVirtualDisk,
156 m_uMediumSize,
157 variants);
158 connect(pNotification, &UINotificationProgressMediumCreate::sigMediumCreated,
159 &uiCommon(), &UICommon::sltHandleMediumCreated);
160
161 m_uMediumId = comVirtualDisk.GetId();
162
163 gpNotificationCenter->append(pNotification);
164
165 /* Positive: */
166 return true;
167}
168
169/* static */
170QUuid UIWizardNewVD::createVDWithWizard(QWidget *pParent,
171 const QString &strMachineFolder /* = QString() */,
172 const QString &strMachineName /* = QString() */,
173 const QString &strMachineGuestOSTypeId /* = QString() */)
174{
175 /* Initialize variables: */
176 QString strDefaultFolder = strMachineFolder;
177 if (strDefaultFolder.isEmpty())
178 strDefaultFolder = uiCommon().defaultFolderPathForType(UIMediumDeviceType_HardDisk);
179
180 /* In case we dont have a 'guest os type id' default back to 'Other': */
181 const CGuestOSType comGuestOSType = uiCommon().virtualBox().GetGuestOSType( !strMachineGuestOSTypeId.isEmpty()
182 ? strMachineGuestOSTypeId
183 : "Other");
184 const QString strDiskName = uiCommon().findUniqueFileName(strDefaultFolder, !strMachineName.isEmpty()
185 ? strMachineName
186 : "NewVirtualDisk");
187
188 /* Show New VD wizard: */
189 UISafePointerWizardNewVD pWizard = new UIWizardNewVD(pParent,
190 strDiskName,
191 strDefaultFolder,
192 comGuestOSType.GetRecommendedHDD());
193 if (!pWizard)
194 return QUuid();
195 QWidget *pDialogParent = windowManager().realParentWindow(pParent);
196 windowManager().registerNewParent(pWizard, pDialogParent);
197 QUuid mediumId = pWizard->mediumId();
198 pWizard->exec();
199 delete pWizard;
200 return mediumId;
201}
202
203void UIWizardNewVD::retranslateUi()
204{
205 UINativeWizard::retranslateUi();
206 setWindowTitle(tr("Create Virtual Hard Disk"));
207}
208
209void UIWizardNewVD::setMediumVariantPageVisibility()
210{
211 AssertReturnVoid(!m_comMediumFormat.isNull());
212 ULONG uCapabilities = 0;
213 QVector<KMediumFormatCapabilities> capabilities;
214 capabilities = m_comMediumFormat.GetCapabilities();
215 for (int i = 0; i < capabilities.size(); i++)
216 uCapabilities |= capabilities[i];
217
218 int cTest = 0;
219 if (uCapabilities & KMediumFormatCapabilities_CreateDynamic)
220 ++cTest;
221 if (uCapabilities & KMediumFormatCapabilities_CreateFixed)
222 ++cTest;
223 if (uCapabilities & KMediumFormatCapabilities_CreateSplit2G)
224 ++cTest;
225 setPageVisible(m_iMediumVariantPageIndex, cTest > 1);
226}
Note: See TracBrowser for help on using the repository browser.

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