VirtualBox

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

Last change on this file was 103961, checked in by vboxsync, 3 months ago

FE/Qt. bugref:10622. Using new UITranslationEventListener in wizard class hierarchy.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 7.7 KB
Line 
1/* $Id: UIWizardNewVD.cpp 103961 2024-03-20 14:34:36Z vboxsync $ */
2/** @file
3 * VBox Qt GUI - UIWizardNewVD class implementation.
4 */
5
6/*
7 * Copyright (C) 2006-2023 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 "UIGlobalSession.h"
31#include "UIModalWindowManager.h"
32#include "UINotificationCenter.h"
33#include "UIWizardNewVD.h"
34#include "UIWizardNewVDFileTypePage.h"
35#include "UIWizardNewVDVariantPage.h"
36#include "UIWizardNewVDSizeLocationPage.h"
37#include "UIWizardNewVDExpertPage.h"
38
39/* COM includes: */
40#include "CGuestOSType.h"
41
42UIWizardNewVD::UIWizardNewVD(QWidget *pParent,
43 const QString &strDefaultName,
44 const QString &strDefaultPath,
45 qulonglong uDefaultSize)
46 : UINativeWizard(pParent, WizardType_NewVD, WizardMode_Auto, "create-virtual-hard-disk-image" /* help keyword */)
47 , m_strDefaultName(strDefaultName)
48 , m_strDefaultPath(strDefaultPath)
49 , m_uDefaultSize(uDefaultSize)
50 , m_iMediumVariantPageIndex(-1)
51{
52#ifndef VBOX_WS_MAC
53 /* Assign watermark: */
54 setPixmapName(":/wizard_new_harddisk.png");
55#else /* VBOX_WS_MAC */
56 /* Assign background image: */
57 setPixmapName(":/wizard_new_harddisk_bg.png");
58#endif /* VBOX_WS_MAC */
59}
60
61qulonglong UIWizardNewVD::mediumVariant() const
62{
63 return m_uMediumVariant;
64}
65
66void UIWizardNewVD::setMediumVariant(qulonglong uMediumVariant)
67{
68 m_uMediumVariant = uMediumVariant;
69}
70
71const CMediumFormat &UIWizardNewVD::mediumFormat()
72{
73 return m_comMediumFormat;
74}
75
76void UIWizardNewVD::setMediumFormat(const CMediumFormat &mediumFormat)
77{
78 m_comMediumFormat = mediumFormat;
79 if (mode() == WizardMode_Basic)
80 setMediumVariantPageVisibility();
81}
82
83const QString &UIWizardNewVD::mediumPath() const
84{
85 return m_strMediumPath;
86}
87
88void UIWizardNewVD::setMediumPath(const QString &strMediumPath)
89{
90 m_strMediumPath = strMediumPath;
91}
92
93qulonglong UIWizardNewVD::mediumSize() const
94{
95 return m_uMediumSize;
96}
97
98void UIWizardNewVD::setMediumSize(qulonglong uMediumSize)
99{
100 m_uMediumSize = uMediumSize;
101}
102
103QUuid UIWizardNewVD::mediumId() const
104{
105 return m_uMediumId;
106}
107
108void UIWizardNewVD::populatePages()
109{
110 switch (mode())
111 {
112 case WizardMode_Basic:
113 {
114 addPage(new UIWizardNewVDFileTypePage);
115 m_iMediumVariantPageIndex = addPage(new UIWizardNewVDVariantPage);
116 addPage(new UIWizardNewVDSizeLocationPage(m_strDefaultName, m_strDefaultPath, m_uDefaultSize));
117 break;
118 }
119 case WizardMode_Expert:
120 {
121 addPage(new UIWizardNewVDExpertPage(m_strDefaultName, m_strDefaultPath, m_uDefaultSize));
122 break;
123 }
124 default:
125 {
126 AssertMsgFailed(("Invalid mode: %d", mode()));
127 break;
128 }
129 }
130}
131
132bool UIWizardNewVD::createVirtualDisk()
133{
134 AssertReturn(!m_strMediumPath.isNull(), false);
135 AssertReturn(m_uMediumSize > 0, false);
136
137 /* Get VBox object: */
138 CVirtualBox comVBox = gpGlobalSession->virtualBox();
139
140 /* Create new virtual disk image: */
141 CMedium comVirtualDisk = comVBox.CreateMedium(m_comMediumFormat.GetName(),
142 m_strMediumPath, KAccessMode_ReadWrite, KDeviceType_HardDisk);
143 if (!comVBox.isOk())
144 {
145 UINotificationMessage::cannotCreateMediumStorage(comVBox, m_strMediumPath, notificationCenter());
146 return false;
147 }
148
149 /* Compose medium-variant: */
150 QVector<KMediumVariant> variants(sizeof(qulonglong) * 8);
151 for (int i = 0; i < variants.size(); ++i)
152 {
153 qulonglong temp = m_uMediumVariant;
154 temp &= Q_UINT64_C(1) << i;
155 variants[i] = (KMediumVariant)temp;
156 }
157
158 UINotificationProgressMediumCreate *pNotification = new UINotificationProgressMediumCreate(comVirtualDisk,
159 m_uMediumSize,
160 variants);
161 connect(pNotification, &UINotificationProgressMediumCreate::sigMediumCreated,
162 &uiCommon(), &UICommon::sltHandleMediumCreated);
163
164 m_uMediumId = comVirtualDisk.GetId();
165
166 gpNotificationCenter->append(pNotification);
167
168 /* Positive: */
169 return true;
170}
171
172/* static */
173QUuid UIWizardNewVD::createVDWithWizard(QWidget *pParent,
174 const QString &strMachineFolder /* = QString() */,
175 const QString &strMachineName /* = QString() */,
176 const QString &strMachineGuestOSTypeId /* = QString() */)
177{
178 /* Default path: */
179 const QString strDefaultPath = !strMachineFolder.isEmpty()
180 ? strMachineFolder
181 : uiCommon().defaultFolderPathForType(UIMediumDeviceType_HardDisk);
182
183 /* Default name: */
184 const QString strDiskName = uiCommon().findUniqueFileName(strDefaultPath,
185 !strMachineName.isEmpty()
186 ? strMachineName
187 : "NewVirtualDisk");
188
189 /* Default size: */
190 const CGuestOSType comGuestOSType = gpGlobalSession->virtualBox().GetGuestOSType( !strMachineGuestOSTypeId.isEmpty()
191 ? strMachineGuestOSTypeId
192 : "Other");
193 const qulonglong uDefaultSize = comGuestOSType.GetRecommendedHDD();
194
195 /* Show New VD wizard the safe way: */
196 QWidget *pRealParent = windowManager().realParentWindow(pParent);
197 UISafePointerWizardNewVD pWizard = new UIWizardNewVD(pRealParent,
198 strDiskName,
199 strDefaultPath,
200 uDefaultSize);
201 if (!pWizard)
202 return QUuid();
203 windowManager().registerNewParent(pWizard, pRealParent);
204 pWizard->exec();
205 const QUuid uMediumId = pWizard->mediumId();
206 delete pWizard;
207 return uMediumId;
208}
209
210void UIWizardNewVD::sltRetranslateUI()
211{
212 UINativeWizard::sltRetranslateUI();
213 setWindowTitle(tr("Create Virtual Hard Disk"));
214}
215
216void UIWizardNewVD::setMediumVariantPageVisibility()
217{
218 AssertReturnVoid(!m_comMediumFormat.isNull());
219 ULONG uCapabilities = 0;
220 QVector<KMediumFormatCapabilities> capabilities;
221 capabilities = m_comMediumFormat.GetCapabilities();
222 for (int i = 0; i < capabilities.size(); i++)
223 uCapabilities |= capabilities[i];
224
225 int cTest = 0;
226 if (uCapabilities & KMediumFormatCapabilities_CreateDynamic)
227 ++cTest;
228 if (uCapabilities & KMediumFormatCapabilities_CreateFixed)
229 ++cTest;
230 if (uCapabilities & KMediumFormatCapabilities_CreateSplit2G)
231 ++cTest;
232 setPageVisible(m_iMediumVariantPageIndex, cTest > 1);
233}
Note: See TracBrowser for help on using the repository browser.

© 2023 Oracle
ContactPrivacy policyTerms of Use