- Timestamp:
- Aug 19, 2021 2:36:02 PM (3 years ago)
- Location:
- trunk/src/VBox/Frontends/VirtualBox/src
- Files:
-
- 18 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMediumManager.cpp
r90564 r90748 475 475 /* Show Clone VD wizard: */ 476 476 UIMedium medium = pMediumItem->medium(); 477 UISafePointerWizard pWizard = new UIWizardCloneVD(currentTreeWidget(), medium.medium()); 478 pWizard->prepare(); 477 QPointer<UINativeWizard> pWizard = new UIWizardCloneVD(currentTreeWidget(), medium.medium()); 479 478 pWizard->exec(); 480 479 -
trunk/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVD.cpp
r90564 r90748 32 32 33 33 UIWizardCloneVD::UIWizardCloneVD(QWidget *pParent, const CMedium &comSourceVirtualDisk) 34 : UI Wizard(pParent, WizardType_CloneVD)34 : UINativeWizard(pParent, WizardType_CloneVD) 35 35 , m_comSourceVirtualDisk(comSourceVirtualDisk) 36 36 , m_enmSourceVirtualDiskDeviceType(m_comSourceVirtualDisk.GetDeviceType()) … … 38 38 #ifndef VBOX_WS_MAC 39 39 /* Assign watermark: */ 40 assignWatermark(":/wizard_new_harddisk.png");40 setPixmapName(":/wizard_new_harddisk.png"); 41 41 #else /* VBOX_WS_MAC */ 42 42 /* Assign background image: */ 43 assignBackground(":/wizard_new_harddisk_bg.png");43 setPixmapName(":/wizard_new_harddisk_bg.png"); 44 44 #endif /* VBOX_WS_MAC */ 45 45 } … … 48 48 { 49 49 /* Gather attributes: */ 50 const CMediumFormat comMediumFormat = field("mediumFormat").value<CMediumFormat>();51 const qulonglong uVariant = field("mediumVariant").toULongLong();52 const QString strMediumPath = field("mediumPath").toString();53 const qulonglong uSize = field("mediumSize").toULongLong();54 / * Check attributes: */55 AssertReturn(!strMediumPath.isNull(), false);56 AssertReturn(uSize > 0, false);50 // const CMediumFormat comMediumFormat = field("mediumFormat").value<CMediumFormat>(); 51 // const qulonglong uVariant = field("mediumVariant").toULongLong(); 52 // const QString strMediumPath = field("mediumPath").toString(); 53 // const qulonglong uSize = field("mediumSize").toULongLong(); 54 // /* Check attributes: */ 55 // AssertReturn(!strMediumPath.isNull(), false); 56 // AssertReturn(uSize > 0, false); 57 57 58 / * Get VBox object: */59 CVirtualBox comVBox = uiCommon().virtualBox();58 // /* Get VBox object: */ 59 // CVirtualBox comVBox = uiCommon().virtualBox(); 60 60 61 / * Create new virtual disk image: */62 CMedium comVirtualDisk = comVBox.CreateMedium(comMediumFormat.GetName(), strMediumPath, KAccessMode_ReadWrite, m_enmSourceVirtualDiskDeviceType);63 if (!comVBox.isOk())64 {65 msgCenter().cannotCreateMediumStorage(comVBox, strMediumPath, this);66 return false;67 }61 // /* Create new virtual disk image: */ 62 // CMedium comVirtualDisk = comVBox.CreateMedium(comMediumFormat.GetName(), strMediumPath, KAccessMode_ReadWrite, m_enmSourceVirtualDiskDeviceType); 63 // if (!comVBox.isOk()) 64 // { 65 // msgCenter().cannotCreateMediumStorage(comVBox, strMediumPath, this); 66 // return false; 67 // } 68 68 69 / * Compose medium-variant: */70 QVector<KMediumVariant> variants(sizeof(qulonglong) * 8);71 for (int i = 0; i < variants.size(); ++i)72 {73 qulonglong temp = uVariant;74 temp &= Q_UINT64_C(1) << i;75 variants[i] = (KMediumVariant)temp;76 }69 // /* Compose medium-variant: */ 70 // QVector<KMediumVariant> variants(sizeof(qulonglong) * 8); 71 // for (int i = 0; i < variants.size(); ++i) 72 // { 73 // qulonglong temp = uVariant; 74 // temp &= Q_UINT64_C(1) << i; 75 // variants[i] = (KMediumVariant)temp; 76 // } 77 77 78 / * Copy medium: */79 UINotificationProgressMediumCopy *pNotification = new UINotificationProgressMediumCopy(m_comSourceVirtualDisk,80 comVirtualDisk,81 variants);82 connect(pNotification, &UINotificationProgressMediumCopy::sigMediumCopied,83 &uiCommon(), &UICommon::sltHandleMediumCreated);84 gpNotificationCenter->append(pNotification);78 // /* Copy medium: */ 79 // UINotificationProgressMediumCopy *pNotification = new UINotificationProgressMediumCopy(m_comSourceVirtualDisk, 80 // comVirtualDisk, 81 // variants); 82 // connect(pNotification, &UINotificationProgressMediumCopy::sigMediumCopied, 83 // &uiCommon(), &UICommon::sltHandleMediumCreated); 84 // gpNotificationCenter->append(pNotification); 85 85 86 86 /* Positive: */ … … 90 90 void UIWizardCloneVD::retranslateUi() 91 91 { 92 /* Call to base-class: */93 UIWizard::retranslateUi();94 95 92 /* Translate wizard: */ 96 93 setWindowTitle(tr("Copy Virtual Disk Image")); 97 setButtonText(QWizard::FinishButton, tr("Copy"));94 UINativeWizard::retranslateUi(); 98 95 } 99 96 100 void UIWizardCloneVD::p repare()97 void UIWizardCloneVD::populatePages() 101 98 { 102 99 /* Create corresponding pages: */ … … 104 101 { 105 102 case WizardMode_Basic: 103 case WizardMode_Expert: 106 104 { 107 setPage(Page1,new UIWizardCloneVDPageBasic1(m_enmSourceVirtualDiskDeviceType));108 setPage(Page2,new UIWizardCloneVDPageBasic2(m_enmSourceVirtualDiskDeviceType));109 setPage(Page3,new UIWizardCloneVDPageBasic3);105 addPage(new UIWizardCloneVDPageBasic1(m_enmSourceVirtualDiskDeviceType)); 106 addPage(new UIWizardCloneVDPageBasic2(m_enmSourceVirtualDiskDeviceType)); 107 addPage(new UIWizardCloneVDPageBasic3); 110 108 break; 111 109 } 112 case WizardMode_Expert:113 {114 setPage(PageExpert, new UIWizardCloneVDPageExpert(m_enmSourceVirtualDiskDeviceType));115 break;116 }110 // case WizardMode_Expert: 111 // { 112 // setPage(PageExpert, new UIWizardCloneVDPageExpert(m_enmSourceVirtualDiskDeviceType)); 113 // break; 114 // } 117 115 default: 118 116 { … … 121 119 } 122 120 } 123 /* Call to base-class: */124 UIWizard::prepare();125 121 } -
trunk/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVD.h
r90271 r90748 23 23 24 24 /* GUI includes: */ 25 #include "UI Wizard.h"25 #include "UINativeWizard.h" 26 26 27 27 /* COM includes: */ … … 31 31 32 32 /** UIWizard subclass to clone virtual disk image files. */ 33 class UIWizardCloneVD : public UI Wizard33 class UIWizardCloneVD : public UINativeWizard 34 34 { 35 35 Q_OBJECT; 36 36 37 37 public: 38 39 /** Basic Page IDs. */40 enum41 {42 Page1,43 Page2,44 Page345 };46 47 /** Expert Page IDs. */48 enum49 {50 PageExpert51 };52 38 53 39 /** Constructs wizard to clone @a comSourceVirtualDisk passing @a pParent to the base-class. */ … … 63 49 bool copyVirtualDisk(); 64 50 51 protected: 52 53 virtual void populatePages() /* final override */; 54 65 55 private: 66 56 67 57 /** Handles translation event. */ 68 58 virtual void retranslateUi() /* override */; 69 70 /** Prepares all. */71 virtual void prepare() /* override */;72 59 73 60 /** Holds the source virtual disk wrapper. */ -
trunk/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageBasic1.cpp
r82968 r90748 25 25 #include "UIWizardCloneVDPageBasic1.h" 26 26 #include "UIWizardCloneVD.h" 27 #include "UIWizardDiskEditors.h" 27 28 #include "UICommon.h" 28 29 #include "QIRichTextLabel.h" … … 32 33 33 34 34 UIWizardCloneVDPage1::UIWizardCloneVDPage1() 35 { 36 } 37 38 void UIWizardCloneVDPage1::addFormatButton(QWidget *pParent, QVBoxLayout *pFormatLayout, KDeviceType enmDeviceType, CMediumFormat comMediumFormat, bool fPreferred /* = false */) 39 { 40 /* Check that medium format supports creation: */ 41 ULONG uFormatCapabilities = 0; 42 QVector<KMediumFormatCapabilities> capabilities; 43 capabilities = comMediumFormat.GetCapabilities(); 44 for (int i = 0; i < capabilities.size(); i++) 45 uFormatCapabilities |= capabilities[i]; 46 47 if (!(uFormatCapabilities & KMediumFormatCapabilities_CreateFixed || 48 uFormatCapabilities & KMediumFormatCapabilities_CreateDynamic)) 49 return; 50 51 /* Check that medium format supports creation of virtual disk images: */ 52 QVector<QString> fileExtensions; 53 QVector<KDeviceType> deviceTypes; 54 comMediumFormat.DescribeFileExtensions(fileExtensions, deviceTypes); 55 if (!deviceTypes.contains(enmDeviceType)) 56 return; 57 58 /* Create/add corresponding radio-button: */ 59 QRadioButton *pFormatButton = new QRadioButton(pParent); 60 AssertPtrReturnVoid(pFormatButton); 35 // UIWizardCloneVDPage1::UIWizardCloneVDPage1() 36 // { 37 // } 38 39 // void UIWizardCloneVDPage1::addFormatButton(QWidget *pParent, QVBoxLayout *pFormatLayout, KDeviceType enmDeviceType, CMediumFormat comMediumFormat, bool fPreferred /* = false */) 40 // { 41 // /* Check that medium format supports creation: */ 42 // ULONG uFormatCapabilities = 0; 43 // QVector<KMediumFormatCapabilities> capabilities; 44 // capabilities = comMediumFormat.GetCapabilities(); 45 // for (int i = 0; i < capabilities.size(); i++) 46 // uFormatCapabilities |= capabilities[i]; 47 48 // if (!(uFormatCapabilities & KMediumFormatCapabilities_CreateFixed || 49 // uFormatCapabilities & KMediumFormatCapabilities_CreateDynamic)) 50 // return; 51 52 // /* Check that medium format supports creation of virtual disk images: */ 53 // QVector<QString> fileExtensions; 54 // QVector<KDeviceType> deviceTypes; 55 // comMediumFormat.DescribeFileExtensions(fileExtensions, deviceTypes); 56 // if (!deviceTypes.contains(enmDeviceType)) 57 // return; 58 59 // /* Create/add corresponding radio-button: */ 60 // QRadioButton *pFormatButton = new QRadioButton(pParent); 61 // AssertPtrReturnVoid(pFormatButton); 62 // { 63 // /* Make the preferred button font bold: */ 64 // if (fPreferred) 65 // { 66 // QFont font = pFormatButton->font(); 67 // font.setBold(true); 68 // pFormatButton->setFont(font); 69 // } 70 // pFormatLayout->addWidget(pFormatButton); 71 // m_formats << comMediumFormat; 72 // m_formatNames << comMediumFormat.GetName(); 73 // m_pFormatButtonGroup->addButton(pFormatButton, m_formatNames.size() - 1); 74 // } 75 // } 76 77 // CMediumFormat UIWizardCloneVDPage1::mediumFormat() const 78 // { 79 // return m_pFormatButtonGroup->checkedButton() ? m_formats[m_pFormatButtonGroup->checkedId()] : CMediumFormat(); 80 // } 81 82 // void UIWizardCloneVDPage1::setMediumFormat(const CMediumFormat &comMediumFormat) 83 // { 84 // int iPosition = m_formats.indexOf(comMediumFormat); 85 // if (iPosition >= 0) 86 // { 87 // m_pFormatButtonGroup->button(iPosition)->click(); 88 // m_pFormatButtonGroup->button(iPosition)->setFocus(); 89 // } 90 // } 91 92 UIWizardCloneVDPageBasic1::UIWizardCloneVDPageBasic1(KDeviceType enmDeviceType) 93 : m_pLabel(0) 94 , m_pFormatGroupBox(0) 95 { 96 prepare(enmDeviceType); 97 // /* Create widgets: */ 98 // QVBoxLayout *pMainLayout = new QVBoxLayout(this); 99 // { 100 101 // QVBoxLayout *pFormatLayout = new QVBoxLayout; 102 // { 103 // m_pFormatButtonGroup = new QButtonGroup(this); 104 // { 105 // /* Enumerate medium formats in special order: */ 106 // CSystemProperties properties = uiCommon().virtualBox().GetSystemProperties(); 107 // const QVector<CMediumFormat> &formats = properties.GetMediumFormats(); 108 // QMap<QString, CMediumFormat> vdi, preferred, others; 109 // foreach (const CMediumFormat &format, formats) 110 // { 111 // /* VDI goes first: */ 112 // if (format.GetName() == "VDI") 113 // vdi[format.GetId()] = format; 114 // else 115 // { 116 // const QVector<KMediumFormatCapabilities> &capabilities = format.GetCapabilities(); 117 // /* Then preferred: */ 118 // if (capabilities.contains(KMediumFormatCapabilities_Preferred)) 119 // preferred[format.GetId()] = format; 120 // /* Then others: */ 121 // else 122 // others[format.GetId()] = format; 123 // } 124 // } 125 126 // /* Create buttons for VDI and preferred: */ 127 // foreach (const QString &strId, vdi.keys()) 128 // addFormatButton(this, pFormatLayout, enmDeviceType, vdi.value(strId)); 129 // foreach (const QString &strId, preferred.keys()) 130 // addFormatButton(this, pFormatLayout, enmDeviceType, preferred.value(strId)); 131 // if (enmDeviceType == KDeviceType_DVD || enmDeviceType == KDeviceType_Floppy) 132 // foreach (const QString &strId, others.keys()) 133 // addFormatButton(this, pFormatLayout, enmDeviceType, others.value(strId)); 134 135 // if (!m_pFormatButtonGroup->buttons().isEmpty()) 136 // { 137 // m_pFormatButtonGroup->button(0)->click(); 138 // m_pFormatButtonGroup->button(0)->setFocus(); 139 // } 140 // } 141 // } 142 // pMainLayout->addWidget(m_pLabel); 143 // pMainLayout->addLayout(pFormatLayout); 144 // pMainLayout->addStretch(); 145 // } 146 147 // /* Setup connections: */ 148 // connect(m_pFormatButtonGroup, static_cast<void(QButtonGroup::*)(QAbstractButton*)>(&QButtonGroup::buttonClicked), 149 // this, &UIWizardCloneVDPageBasic1::completeChanged); 150 } 151 152 void UIWizardCloneVDPageBasic1::prepare(KDeviceType enmDeviceType) 153 { 154 QVBoxLayout *pMainLayout = new QVBoxLayout(this); 155 m_pLabel = new QIRichTextLabel(this); 156 if (m_pLabel) 157 pMainLayout->addWidget(m_pLabel); 158 m_pFormatGroupBox = new UIDiskFormatsGroupBox(false /* expert mode */, enmDeviceType, 0); 159 if (m_pFormatGroupBox) 61 160 { 62 /* Make the preferred button font bold: */ 63 if (fPreferred) 64 { 65 QFont font = pFormatButton->font(); 66 font.setBold(true); 67 pFormatButton->setFont(font); 68 } 69 pFormatLayout->addWidget(pFormatButton); 70 m_formats << comMediumFormat; 71 m_formatNames << comMediumFormat.GetName(); 72 m_pFormatButtonGroup->addButton(pFormatButton, m_formatNames.size() - 1); 161 pMainLayout->addWidget(m_pFormatGroupBox); 162 // connect(m_pFormatButtonGroup, &UIDiskFormatsGroupBox::sigMediumFormatChanged, 163 // this, &UIWizardCloneVDPageBasic1::sltMediumFormatChanged); 73 164 } 74 } 75 76 CMediumFormat UIWizardCloneVDPage1::mediumFormat() const 77 { 78 return m_pFormatButtonGroup->checkedButton() ? m_formats[m_pFormatButtonGroup->checkedId()] : CMediumFormat(); 79 } 80 81 void UIWizardCloneVDPage1::setMediumFormat(const CMediumFormat &comMediumFormat) 82 { 83 int iPosition = m_formats.indexOf(comMediumFormat); 84 if (iPosition >= 0) 85 { 86 m_pFormatButtonGroup->button(iPosition)->click(); 87 m_pFormatButtonGroup->button(iPosition)->setFocus(); 88 } 89 } 90 91 UIWizardCloneVDPageBasic1::UIWizardCloneVDPageBasic1(KDeviceType enmDeviceType) 92 { 93 /* Create widgets: */ 94 QVBoxLayout *pMainLayout = new QVBoxLayout(this); 95 { 96 m_pLabel = new QIRichTextLabel(this); 97 QVBoxLayout *pFormatLayout = new QVBoxLayout; 98 { 99 m_pFormatButtonGroup = new QButtonGroup(this); 100 { 101 /* Enumerate medium formats in special order: */ 102 CSystemProperties properties = uiCommon().virtualBox().GetSystemProperties(); 103 const QVector<CMediumFormat> &formats = properties.GetMediumFormats(); 104 QMap<QString, CMediumFormat> vdi, preferred, others; 105 foreach (const CMediumFormat &format, formats) 106 { 107 /* VDI goes first: */ 108 if (format.GetName() == "VDI") 109 vdi[format.GetId()] = format; 110 else 111 { 112 const QVector<KMediumFormatCapabilities> &capabilities = format.GetCapabilities(); 113 /* Then preferred: */ 114 if (capabilities.contains(KMediumFormatCapabilities_Preferred)) 115 preferred[format.GetId()] = format; 116 /* Then others: */ 117 else 118 others[format.GetId()] = format; 119 } 120 } 121 122 /* Create buttons for VDI and preferred: */ 123 foreach (const QString &strId, vdi.keys()) 124 addFormatButton(this, pFormatLayout, enmDeviceType, vdi.value(strId)); 125 foreach (const QString &strId, preferred.keys()) 126 addFormatButton(this, pFormatLayout, enmDeviceType, preferred.value(strId)); 127 if (enmDeviceType == KDeviceType_DVD || enmDeviceType == KDeviceType_Floppy) 128 foreach (const QString &strId, others.keys()) 129 addFormatButton(this, pFormatLayout, enmDeviceType, others.value(strId)); 130 131 if (!m_pFormatButtonGroup->buttons().isEmpty()) 132 { 133 m_pFormatButtonGroup->button(0)->click(); 134 m_pFormatButtonGroup->button(0)->setFocus(); 135 } 136 } 137 } 138 pMainLayout->addWidget(m_pLabel); 139 pMainLayout->addLayout(pFormatLayout); 140 pMainLayout->addStretch(); 141 } 142 143 /* Setup connections: */ 144 connect(m_pFormatButtonGroup, static_cast<void(QButtonGroup::*)(QAbstractButton*)>(&QButtonGroup::buttonClicked), 145 this, &UIWizardCloneVDPageBasic1::completeChanged); 146 147 /* Register classes: */ 148 qRegisterMetaType<CMediumFormat>(); 149 /* Register fields: */ 150 registerField("mediumFormat", this, "mediumFormat"); 165 pMainLayout->addStretch(); 166 retranslateUi(); 151 167 } 152 168 … … 160 176 "for the new virtual disk image. If you do not need to use it " 161 177 "with other virtualization software you can leave this setting unchanged.")); 162 QList<QAbstractButton*> buttons = m_pFormatButtonGroup->buttons();163 for (int i = 0; i < buttons.size(); ++i)164 {165 QAbstractButton *pButton = buttons[i];166 UIMediumFormat enmFormat = gpConverter->fromInternalString<UIMediumFormat>(m_formatNames[m_pFormatButtonGroup->id(pButton)]);167 pButton->setText(gpConverter->toString(enmFormat));168 }178 // QList<QAbstractButton*> buttons = m_pFormatButtonGroup->buttons(); 179 // for (int i = 0; i < buttons.size(); ++i) 180 // { 181 // QAbstractButton *pButton = buttons[i]; 182 // UIMediumFormat enmFormat = gpConverter->fromInternalString<UIMediumFormat>(m_formatNames[m_pFormatButtonGroup->id(pButton)]); 183 // pButton->setText(gpConverter->toString(enmFormat)); 184 // } 169 185 } 170 186 … … 178 194 { 179 195 /* Make sure medium format is correct: */ 180 return !mediumFormat().isNull(); 181 } 182 183 int UIWizardCloneVDPageBasic1::nextId() const 184 { 185 /* Show variant page only if there is something to show: */ 186 CMediumFormat mf = mediumFormat(); 187 if (mf.isNull()) 188 { 189 AssertMsgFailed(("No medium format set!")); 190 } 191 else 192 { 193 ULONG uCapabilities = 0; 194 QVector<KMediumFormatCapabilities> capabilities; 195 capabilities = mf.GetCapabilities(); 196 for (int i = 0; i < capabilities.size(); i++) 197 uCapabilities |= capabilities[i]; 198 199 int cTest = 0; 200 if (uCapabilities & KMediumFormatCapabilities_CreateDynamic) 201 ++cTest; 202 if (uCapabilities & KMediumFormatCapabilities_CreateFixed) 203 ++cTest; 204 if (uCapabilities & KMediumFormatCapabilities_CreateSplit2G) 205 ++cTest; 206 if (cTest > 1) 207 return UIWizardCloneVD::Page3; 208 } 209 /* Skip otherwise: */ 210 return UIWizardCloneVD::Page3; 211 } 196 //return !mediumFormat().isNull(); 197 return true; 198 } 199 200 // int UIWizardCloneVDPageBasic1::nextId() const 201 // { 202 // /* Show variant page only if there is something to show: */ 203 // CMediumFormat mf = mediumFormat(); 204 // if (mf.isNull()) 205 // { 206 // AssertMsgFailed(("No medium format set!")); 207 // } 208 // else 209 // { 210 // ULONG uCapabilities = 0; 211 // QVector<KMediumFormatCapabilities> capabilities; 212 // capabilities = mf.GetCapabilities(); 213 // for (int i = 0; i < capabilities.size(); i++) 214 // uCapabilities |= capabilities[i]; 215 216 // int cTest = 0; 217 // if (uCapabilities & KMediumFormatCapabilities_CreateDynamic) 218 // ++cTest; 219 // if (uCapabilities & KMediumFormatCapabilities_CreateFixed) 220 // ++cTest; 221 // if (uCapabilities & KMediumFormatCapabilities_CreateSplit2G) 222 // ++cTest; 223 // if (cTest > 1) 224 // return UIWizardCloneVD::Page3; 225 // } 226 // /* Skip otherwise: */ 227 // return UIWizardCloneVD::Page3; 228 // } -
trunk/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageBasic1.h
r82968 r90748 23 23 24 24 /* GUI includes: */ 25 #include "UI WizardPage.h"25 #include "UINativeWizardPage.h" 26 26 27 27 /* COM includes: */ … … 30 30 31 31 /* Forward declarations: */ 32 class QVBoxLayout;33 class QButtonGroup;34 class QRadioButton;35 32 class QIRichTextLabel; 33 class UIDiskFormatsGroupBox; 36 34 37 35 38 / ** 1st page of the Clone Virtual Disk Image wizard (base part): */39 class UIWizardCloneVDPage1 : public UIWizardPageBase40 {41 protected:36 // /** 1st page of the Clone Virtual Disk Image wizard (base part): */ 37 // class UIWizardCloneVDPage1 : public UIWizardPageBase 38 // { 39 // protected: 42 40 43 /** Constructs page basis. */44 UIWizardCloneVDPage1();41 // /** Constructs page basis. */ 42 // UIWizardCloneVDPage1(); 45 43 46 /** Adds format button.47 * @param pParent Brings the parent to add button to.48 * @param pFormatsLayout Brings the layout to insert button to.49 * @param enmDeviceType Brings the device type all buttons should be restricted to.50 * @param comMediumFormat Brings the medium format object to acquire format from.51 * @param fPreferred Brings whether curretn format is preferred or not. */52 void addFormatButton(QWidget *pParent,53 QVBoxLayout *pFormatsLayout,54 KDeviceType enmDeviceType,55 CMediumFormat comMediumFormat,56 bool fPreferred = false);44 // /** Adds format button. 45 // * @param pParent Brings the parent to add button to. 46 // * @param pFormatsLayout Brings the layout to insert button to. 47 // * @param enmDeviceType Brings the device type all buttons should be restricted to. 48 // * @param comMediumFormat Brings the medium format object to acquire format from. 49 // * @param fPreferred Brings whether curretn format is preferred or not. */ 50 // void addFormatButton(QWidget *pParent, 51 // QVBoxLayout *pFormatsLayout, 52 // KDeviceType enmDeviceType, 53 // CMediumFormat comMediumFormat, 54 // bool fPreferred = false); 57 55 58 /** Returns 'mediumFormat' field value. */59 CMediumFormat mediumFormat() const;60 /** Defines 'mediumFormat' field value. */61 void setMediumFormat(const CMediumFormat &comMediumFormat);56 // /** Returns 'mediumFormat' field value. */ 57 // CMediumFormat mediumFormat() const; 58 // /** Defines 'mediumFormat' field value. */ 59 // void setMediumFormat(const CMediumFormat &comMediumFormat); 62 60 63 /** Holds the format button-group instance. */64 QButtonGroup *m_pFormatButtonGroup;65 /** Holds the format description list. */66 QList<CMediumFormat> m_formats;67 /** Holds the format name list. */68 QStringList m_formatNames;69 };61 // /** Holds the format button-group instance. */ 62 // QButtonGroup *m_pFormatButtonGroup; 63 // /** Holds the format description list. */ 64 // QList<CMediumFormat> m_formats; 65 // /** Holds the format name list. */ 66 // QStringList m_formatNames; 67 // }; 70 68 71 69 72 70 /** 2nd page of the Clone Virtual Disk Image wizard (basic extension): */ 73 class UIWizardCloneVDPageBasic1 : public UI WizardPage, public UIWizardCloneVDPage171 class UIWizardCloneVDPageBasic1 : public UINativeWizardPage 74 72 { 75 73 Q_OBJECT; 76 Q_PROPERTY(CMediumFormat mediumFormat READ mediumFormat WRITE setMediumFormat);77 74 78 75 public: … … 86 83 /** Handles translation event. */ 87 84 virtual void retranslateUi() /* override */; 85 void prepare(KDeviceType enmDeviceType); 88 86 89 87 /** Prepares the page. */ … … 93 91 virtual bool isComplete() const /* override */; 94 92 95 /** Returns the ID of the next page to traverse to. */96 virtual int nextId() const /* override */;97 98 93 /** Holds the description label instance. */ 99 94 QIRichTextLabel *m_pLabel; 95 UIDiskFormatsGroupBox *m_pFormatGroupBox; 100 96 }; 101 97 -
trunk/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageBasic2.cpp
r82968 r90748 31 31 32 32 33 UIWizardCloneVDPage2::UIWizardCloneVDPage2() 33 // UIWizardCloneVDPage2::UIWizardCloneVDPage2() 34 // { 35 // } 36 37 // qulonglong UIWizardCloneVDPage2::mediumVariant() const 38 // { 39 // /* Initial value: */ 40 // qulonglong uMediumVariant = (qulonglong)KMediumVariant_Max; 41 42 // /* Exclusive options: */ 43 // if (m_pDynamicalButton->isChecked()) 44 // uMediumVariant = (qulonglong)KMediumVariant_Standard; 45 // else if (m_pFixedButton->isChecked()) 46 // uMediumVariant = (qulonglong)KMediumVariant_Fixed; 47 48 // /* Additional options: */ 49 // if (m_pSplitBox->isChecked()) 50 // uMediumVariant |= (qulonglong)KMediumVariant_VmdkSplit2G; 51 52 // /* Return options: */ 53 // return uMediumVariant; 54 // } 55 56 // void UIWizardCloneVDPage2::setMediumVariant(qulonglong uMediumVariant) 57 // { 58 // /* Exclusive options: */ 59 // if (uMediumVariant & (qulonglong)KMediumVariant_Fixed) 60 // { 61 // m_pFixedButton->click(); 62 // m_pFixedButton->setFocus(); 63 // } 64 // else 65 // { 66 // m_pDynamicalButton->click(); 67 // m_pDynamicalButton->setFocus(); 68 // } 69 70 // /* Additional options: */ 71 // m_pSplitBox->setChecked(uMediumVariant & (qulonglong)KMediumVariant_VmdkSplit2G); 72 // } 73 74 UIWizardCloneVDPageBasic2::UIWizardCloneVDPageBasic2(KDeviceType /*enmDeviceType*/) 34 75 { 76 prepare(); 77 /* Create widgets: */ 78 // QVBoxLayout *pMainLayout = new QVBoxLayout(this); 79 // { 80 // m_pDescriptionLabel = new QIRichTextLabel(this); 81 // m_pDynamicLabel = new QIRichTextLabel(this); 82 // m_pFixedLabel = new QIRichTextLabel(this); 83 // m_pSplitLabel = new QIRichTextLabel(this); 84 // QVBoxLayout *pVariantLayout = new QVBoxLayout; 85 // { 86 // m_pVariantButtonGroup = new QButtonGroup(this); 87 // { 88 // m_pDynamicalButton = new QRadioButton(this); 89 // if (enmDeviceType == KDeviceType_HardDisk) 90 // { 91 // m_pDynamicalButton->click(); 92 // m_pDynamicalButton->setFocus(); 93 // } 94 // m_pFixedButton = new QRadioButton(this); 95 // if ( enmDeviceType == KDeviceType_DVD 96 // || enmDeviceType == KDeviceType_Floppy) 97 // { 98 // m_pFixedButton->click(); 99 // m_pFixedButton->setFocus(); 100 // } 101 // m_pVariantButtonGroup->addButton(m_pDynamicalButton, 0); 102 // m_pVariantButtonGroup->addButton(m_pFixedButton, 1); 103 // } 104 // m_pSplitBox = new QCheckBox(this); 105 // pVariantLayout->addWidget(m_pDynamicalButton); 106 // pVariantLayout->addWidget(m_pFixedButton); 107 // pVariantLayout->addWidget(m_pSplitBox); 108 // } 109 // pMainLayout->addWidget(m_pDescriptionLabel); 110 // pMainLayout->addWidget(m_pDynamicLabel); 111 // pMainLayout->addWidget(m_pFixedLabel); 112 // pMainLayout->addWidget(m_pSplitLabel); 113 // pMainLayout->addLayout(pVariantLayout); 114 // pMainLayout->addStretch(); 115 // } 116 117 // /* Setup connections: */ 118 // connect(m_pVariantButtonGroup, static_cast<void(QButtonGroup::*)(QAbstractButton*)>(&QButtonGroup::buttonClicked), 119 // this, &UIWizardCloneVDPageBasic2::completeChanged); 120 // connect(m_pSplitBox, &QCheckBox::stateChanged, 121 // this, &UIWizardCloneVDPageBasic2::completeChanged); 35 122 } 36 123 37 qulonglong UIWizardCloneVDPage2::mediumVariant() const 124 void UIWizardCloneVDPageBasic2::prepare() 38 125 { 39 /* Initial value: */ 40 qulonglong uMediumVariant = (qulonglong)KMediumVariant_Max; 41 42 /* Exclusive options: */ 43 if (m_pDynamicalButton->isChecked()) 44 uMediumVariant = (qulonglong)KMediumVariant_Standard; 45 else if (m_pFixedButton->isChecked()) 46 uMediumVariant = (qulonglong)KMediumVariant_Fixed; 47 48 /* Additional options: */ 49 if (m_pSplitBox->isChecked()) 50 uMediumVariant |= (qulonglong)KMediumVariant_VmdkSplit2G; 51 52 /* Return options: */ 53 return uMediumVariant; 126 QVBoxLayout *pMainLayout = new QVBoxLayout(this); 127 Q_UNUSED(pMainLayout); 54 128 } 55 129 56 void UIWizardCloneVDPage2::setMediumVariant(qulonglong uMediumVariant)57 {58 /* Exclusive options: */59 if (uMediumVariant & (qulonglong)KMediumVariant_Fixed)60 {61 m_pFixedButton->click();62 m_pFixedButton->setFocus();63 }64 else65 {66 m_pDynamicalButton->click();67 m_pDynamicalButton->setFocus();68 }69 70 /* Additional options: */71 m_pSplitBox->setChecked(uMediumVariant & (qulonglong)KMediumVariant_VmdkSplit2G);72 }73 74 UIWizardCloneVDPageBasic2::UIWizardCloneVDPageBasic2(KDeviceType enmDeviceType)75 {76 /* Create widgets: */77 QVBoxLayout *pMainLayout = new QVBoxLayout(this);78 {79 m_pDescriptionLabel = new QIRichTextLabel(this);80 m_pDynamicLabel = new QIRichTextLabel(this);81 m_pFixedLabel = new QIRichTextLabel(this);82 m_pSplitLabel = new QIRichTextLabel(this);83 QVBoxLayout *pVariantLayout = new QVBoxLayout;84 {85 m_pVariantButtonGroup = new QButtonGroup(this);86 {87 m_pDynamicalButton = new QRadioButton(this);88 if (enmDeviceType == KDeviceType_HardDisk)89 {90 m_pDynamicalButton->click();91 m_pDynamicalButton->setFocus();92 }93 m_pFixedButton = new QRadioButton(this);94 if ( enmDeviceType == KDeviceType_DVD95 || enmDeviceType == KDeviceType_Floppy)96 {97 m_pFixedButton->click();98 m_pFixedButton->setFocus();99 }100 m_pVariantButtonGroup->addButton(m_pDynamicalButton, 0);101 m_pVariantButtonGroup->addButton(m_pFixedButton, 1);102 }103 m_pSplitBox = new QCheckBox(this);104 pVariantLayout->addWidget(m_pDynamicalButton);105 pVariantLayout->addWidget(m_pFixedButton);106 pVariantLayout->addWidget(m_pSplitBox);107 }108 pMainLayout->addWidget(m_pDescriptionLabel);109 pMainLayout->addWidget(m_pDynamicLabel);110 pMainLayout->addWidget(m_pFixedLabel);111 pMainLayout->addWidget(m_pSplitLabel);112 pMainLayout->addLayout(pVariantLayout);113 pMainLayout->addStretch();114 }115 116 /* Setup connections: */117 connect(m_pVariantButtonGroup, static_cast<void(QButtonGroup::*)(QAbstractButton*)>(&QButtonGroup::buttonClicked),118 this, &UIWizardCloneVDPageBasic2::completeChanged);119 connect(m_pSplitBox, &QCheckBox::stateChanged,120 this, &UIWizardCloneVDPageBasic2::completeChanged);121 122 /* Register fields: */123 registerField("mediumVariant", this, "mediumVariant");124 }125 130 126 131 void UIWizardCloneVDPageBasic2::retranslateUi() … … 129 134 setTitle(UIWizardCloneVD::tr("Storage on physical hard disk")); 130 135 131 /* Translate widgets: */132 m_pDescriptionLabel->setText(UIWizardCloneVD::tr("Please choose whether the new virtual disk image file should grow as it is used "133 "(dynamically allocated) or if it should be created at its maximum size (fixed size)."));134 m_pDynamicLabel->setText(UIWizardCloneVD::tr("<p>A <b>dynamically allocated</b> disk image file will only use space "135 "on your physical hard disk as it fills up (up to a maximum <b>fixed size</b>), "136 "although it will not shrink again automatically when space on it is freed.</p>"));137 m_pFixedLabel->setText(UIWizardCloneVD::tr("<p>A <b>fixed size</b> disk image file may take longer to create on some "138 "systems but is often faster to use.</p>"));139 m_pSplitLabel->setText(UIWizardCloneVD::tr("<p>You can also choose to <b>split</b> the disk image file into several files "140 "of up to two gigabytes each. This is mainly useful if you wish to store the "141 "virtual machine on removable USB devices or old systems, some of which cannot "142 "handle very large files."));143 m_pDynamicalButton->setText(UIWizardCloneVD::tr("&Dynamically allocated"));144 m_pFixedButton->setText(UIWizardCloneVD::tr("&Fixed size"));145 m_pSplitBox->setText(UIWizardCloneVD::tr("&Split into files of less than 2GB"));136 // /* Translate widgets: */ 137 // m_pDescriptionLabel->setText(UIWizardCloneVD::tr("Please choose whether the new virtual disk image file should grow as it is used " 138 // "(dynamically allocated) or if it should be created at its maximum size (fixed size).")); 139 // m_pDynamicLabel->setText(UIWizardCloneVD::tr("<p>A <b>dynamically allocated</b> disk image file will only use space " 140 // "on your physical hard disk as it fills up (up to a maximum <b>fixed size</b>), " 141 // "although it will not shrink again automatically when space on it is freed.</p>")); 142 // m_pFixedLabel->setText(UIWizardCloneVD::tr("<p>A <b>fixed size</b> disk image file may take longer to create on some " 143 // "systems but is often faster to use.</p>")); 144 // m_pSplitLabel->setText(UIWizardCloneVD::tr("<p>You can also choose to <b>split</b> the disk image file into several files " 145 // "of up to two gigabytes each. This is mainly useful if you wish to store the " 146 // "virtual machine on removable USB devices or old systems, some of which cannot " 147 // "handle very large files.")); 148 // m_pDynamicalButton->setText(UIWizardCloneVD::tr("&Dynamically allocated")); 149 // m_pFixedButton->setText(UIWizardCloneVD::tr("&Fixed size")); 150 // m_pSplitBox->setText(UIWizardCloneVD::tr("&Split into files of less than 2GB")); 146 151 } 147 152 … … 151 156 retranslateUi(); 152 157 153 / * Setup visibility: */154 CMediumFormat mediumFormat = field("mediumFormat").value<CMediumFormat>();155 ULONG uCapabilities = 0;156 QVector<KMediumFormatCapabilities> capabilities;157 capabilities = mediumFormat.GetCapabilities();158 for (int i = 0; i < capabilities.size(); i++)159 uCapabilities |= capabilities[i];158 // /* Setup visibility: */ 159 // CMediumFormat mediumFormat = field("mediumFormat").value<CMediumFormat>(); 160 // ULONG uCapabilities = 0; 161 // QVector<KMediumFormatCapabilities> capabilities; 162 // capabilities = mediumFormat.GetCapabilities(); 163 // for (int i = 0; i < capabilities.size(); i++) 164 // uCapabilities |= capabilities[i]; 160 165 161 bool fIsCreateDynamicPossible = uCapabilities & KMediumFormatCapabilities_CreateDynamic;162 bool fIsCreateFixedPossible = uCapabilities & KMediumFormatCapabilities_CreateFixed;163 bool fIsCreateSplitPossible = uCapabilities & KMediumFormatCapabilities_CreateSplit2G;164 m_pDynamicLabel->setHidden(!fIsCreateDynamicPossible);165 m_pDynamicalButton->setHidden(!fIsCreateDynamicPossible);166 m_pFixedLabel->setHidden(!fIsCreateFixedPossible);167 m_pFixedButton->setHidden(!fIsCreateFixedPossible);168 m_pSplitLabel->setHidden(!fIsCreateSplitPossible);169 m_pSplitBox->setHidden(!fIsCreateSplitPossible);166 // bool fIsCreateDynamicPossible = uCapabilities & KMediumFormatCapabilities_CreateDynamic; 167 // bool fIsCreateFixedPossible = uCapabilities & KMediumFormatCapabilities_CreateFixed; 168 // bool fIsCreateSplitPossible = uCapabilities & KMediumFormatCapabilities_CreateSplit2G; 169 // m_pDynamicLabel->setHidden(!fIsCreateDynamicPossible); 170 // m_pDynamicalButton->setHidden(!fIsCreateDynamicPossible); 171 // m_pFixedLabel->setHidden(!fIsCreateFixedPossible); 172 // m_pFixedButton->setHidden(!fIsCreateFixedPossible); 173 // m_pSplitLabel->setHidden(!fIsCreateSplitPossible); 174 // m_pSplitBox->setHidden(!fIsCreateSplitPossible); 170 175 } 171 176 172 177 bool UIWizardCloneVDPageBasic2::isComplete() const 173 178 { 174 /* Make sure medium variant is correct: */ 175 return mediumVariant() != (qulonglong)KMediumVariant_Max; 179 return true; 180 // /* Make sure medium variant is correct: */ 181 // return mediumVariant() != (qulonglong)KMediumVariant_Max; 176 182 } -
trunk/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageBasic2.h
r82968 r90748 23 23 24 24 /* GUI includes: */ 25 #include "UI WizardPage.h"25 #include "UINativeWizardPage.h" 26 26 27 27 /* COM includes: */ … … 35 35 36 36 37 / ** 3rd page of the Clone Virtual Disk Image wizard (base part): */38 class UIWizardCloneVDPage2 : public UIWizardPageBase39 {40 protected:37 // /** 3rd page of the Clone Virtual Disk Image wizard (base part): */ 38 // class UIWizardCloneVDPage2 : public UIWizardPageBase 39 // { 40 // protected: 41 41 42 /** Constructs page basis. */43 UIWizardCloneVDPage2();42 // /** Constructs page basis. */ 43 // UIWizardCloneVDPage2(); 44 44 45 /** Returns 'mediumVariant' field value. */46 qulonglong mediumVariant() const;47 /** Defines 'mediumVariant' field value. */48 void setMediumVariant(qulonglong uMediumVariant);45 // /** Returns 'mediumVariant' field value. */ 46 // qulonglong mediumVariant() const; 47 // /** Defines 'mediumVariant' field value. */ 48 // void setMediumVariant(qulonglong uMediumVariant); 49 49 50 /** Holds the variant button-group instance. */51 QButtonGroup *m_pVariantButtonGroup;52 /** Holds the 'Dynamical' button instance. */53 QRadioButton *m_pDynamicalButton;54 /** Holds the 'Fixed' button instance. */55 QRadioButton *m_pFixedButton;56 /** Holds the 'Split to 2GB files' check-box instance. */57 QCheckBox *m_pSplitBox;58 };50 // /** Holds the variant button-group instance. */ 51 // QButtonGroup *m_pVariantButtonGroup; 52 // /** Holds the 'Dynamical' button instance. */ 53 // QRadioButton *m_pDynamicalButton; 54 // /** Holds the 'Fixed' button instance. */ 55 // QRadioButton *m_pFixedButton; 56 // /** Holds the 'Split to 2GB files' check-box instance. */ 57 // QCheckBox *m_pSplitBox; 58 // }; 59 59 60 60 61 /** 3rd page of the Clone Virtual Disk Image wizard (basic extension): */ 62 class UIWizardCloneVDPageBasic2 : public UIWizardPage, public UIWizardCloneVDPage2 61 class UIWizardCloneVDPageBasic2 : public UINativeWizardPage 63 62 { 64 63 Q_OBJECT; 65 Q_PROPERTY(qulonglong mediumVariant READ mediumVariant WRITE setMediumVariant);66 64 67 65 public: … … 74 72 /** Handles translation event. */ 75 73 virtual void retranslateUi() /* override */; 74 void prepare(); 76 75 77 76 /** Prepares the page. */ -
trunk/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageBasic3.cpp
r82968 r90748 36 36 37 37 38 UIWizardCloneVDPage3::UIWizardCloneVDPage3() 39 { 40 } 41 42 void UIWizardCloneVDPage3::onSelectLocationButtonClicked() 43 { 44 /* Get current folder and filename: */ 45 QFileInfo fullFilePath(mediumPath()); 46 QDir folder = fullFilePath.path(); 47 QString strFileName = fullFilePath.fileName(); 48 49 /* Set the first parent folder that exists as the current: */ 50 while (!folder.exists() && !folder.isRoot()) 51 { 52 QFileInfo folderInfo(folder.absolutePath()); 53 if (folder == QDir(folderInfo.absolutePath())) 54 break; 55 folder = folderInfo.absolutePath(); 56 } 57 58 /* But if it doesn't exists at all: */ 59 if (!folder.exists() || folder.isRoot()) 60 { 61 /* Use recommended one folder: */ 62 QFileInfo defaultFilePath(absoluteFilePath(strFileName, m_strDefaultPath)); 63 folder = defaultFilePath.path(); 64 } 65 66 /* Prepare backends list: */ 67 QVector<QString> fileExtensions; 68 QVector<KDeviceType> deviceTypes; 69 CMediumFormat mediumFormat = fieldImp("mediumFormat").value<CMediumFormat>(); 70 mediumFormat.DescribeFileExtensions(fileExtensions, deviceTypes); 71 QStringList validExtensionList; 72 for (int i = 0; i < fileExtensions.size(); ++i) 73 if (deviceTypes[i] == static_cast<UIWizardCloneVD*>(wizardImp())->sourceVirtualDiskDeviceType()) 74 validExtensionList << QString("*.%1").arg(fileExtensions[i]); 75 /* Compose full filter list: */ 76 QString strBackendsList = QString("%1 (%2)").arg(mediumFormat.GetName()).arg(validExtensionList.join(" ")); 77 78 /* Open corresponding file-dialog: */ 79 QString strChosenFilePath = QIFileDialog::getSaveFileName(folder.absoluteFilePath(strFileName), 80 strBackendsList, thisImp(), 81 UIWizardCloneVD::tr("Please choose a location for new virtual disk image file")); 82 83 /* If there was something really chosen: */ 84 if (!strChosenFilePath.isEmpty()) 85 { 86 /* If valid file extension is missed, append it: */ 87 if (QFileInfo(strChosenFilePath).suffix().isEmpty()) 88 strChosenFilePath += QString(".%1").arg(m_strDefaultExtension); 89 m_pDestinationDiskEditor->setText(QDir::toNativeSeparators(strChosenFilePath)); 90 m_pDestinationDiskEditor->selectAll(); 91 m_pDestinationDiskEditor->setFocus(); 92 } 93 } 94 95 /* static */ 96 QString UIWizardCloneVDPage3::toFileName(const QString &strName, const QString &strExtension) 97 { 98 /* Convert passed name to native separators (it can be full, actually): */ 99 QString strFileName = QDir::toNativeSeparators(strName); 100 101 /* Remove all trailing dots to avoid multiple dots before extension: */ 102 int iLen; 103 while (iLen = strFileName.length(), iLen > 0 && strFileName[iLen - 1] == '.') 104 strFileName.truncate(iLen - 1); 105 106 /* Add passed extension if its not done yet: */ 107 if (QFileInfo(strFileName).suffix().toLower() != strExtension) 108 strFileName += QString(".%1").arg(strExtension); 109 110 /* Return result: */ 111 return strFileName; 112 } 113 114 /* static */ 115 QString UIWizardCloneVDPage3::absoluteFilePath(const QString &strFileName, const QString &strDefaultPath) 116 { 117 /* Wrap file-info around received file name: */ 118 QFileInfo fileInfo(strFileName); 119 /* If path-info is relative or there is no path-info at all: */ 120 if (fileInfo.fileName() == strFileName || fileInfo.isRelative()) 121 { 122 /* Resolve path on the basis of default path we have: */ 123 fileInfo = QFileInfo(strDefaultPath, strFileName); 124 } 125 /* Return full absolute disk image file path: */ 126 return QDir::toNativeSeparators(fileInfo.absoluteFilePath()); 127 } 128 129 /* static */ 130 void UIWizardCloneVDPage3::acquireExtensions(const CMediumFormat &comMediumFormat, KDeviceType enmDeviceType, 131 QStringList &aAllowedExtensions, QString &strDefaultExtension) 132 { 133 /* Load extension / device list: */ 134 QVector<QString> fileExtensions; 135 QVector<KDeviceType> deviceTypes; 136 CMediumFormat mediumFormat(comMediumFormat); 137 mediumFormat.DescribeFileExtensions(fileExtensions, deviceTypes); 138 for (int i = 0; i < fileExtensions.size(); ++i) 139 if (deviceTypes[i] == enmDeviceType) 140 aAllowedExtensions << fileExtensions[i].toLower(); 141 AssertReturnVoid(!aAllowedExtensions.isEmpty()); 142 strDefaultExtension = aAllowedExtensions.first(); 143 } 144 145 QString UIWizardCloneVDPage3::mediumPath() const 146 { 147 /* Acquire chosen file path, and what is important user suffix: */ 148 const QString strChosenFilePath = m_pDestinationDiskEditor->text(); 149 QString strSuffix = QFileInfo(strChosenFilePath).suffix().toLower(); 150 /* If there is no suffix of it's not allowed: */ 151 if ( strSuffix.isEmpty() 152 || !m_aAllowedExtensions.contains(strSuffix)) 153 strSuffix = m_strDefaultExtension; 154 /* Compose full file path finally: */ 155 return absoluteFilePath(toFileName(m_pDestinationDiskEditor->text(), strSuffix), m_strDefaultPath); 156 } 157 158 qulonglong UIWizardCloneVDPage3::mediumSize() 159 { 160 UIWizardCloneVD *pWizard = qobject_cast<UIWizardCloneVD*>(wizardImp()); 161 if (!pWizard) 162 return 0; 163 const CMedium &sourceVirtualDisk = pWizard->sourceVirtualDisk(); 164 return sourceVirtualDisk.isNull() ? 0 : sourceVirtualDisk.GetLogicalSize(); 165 } 38 // UIWizardCloneVDPage3::UIWizardCloneVDPage3() 39 // { 40 // } 41 42 // void UIWizardCloneVDPage3::onSelectLocationButtonClicked() 43 // { 44 // // /* Get current folder and filename: */ 45 // // QFileInfo fullFilePath(mediumPath()); 46 // // QDir folder = fullFilePath.path(); 47 // // QString strFileName = fullFilePath.fileName(); 48 49 // // /* Set the first parent folder that exists as the current: */ 50 // // while (!folder.exists() && !folder.isRoot()) 51 // // { 52 // // QFileInfo folderInfo(folder.absolutePath()); 53 // // if (folder == QDir(folderInfo.absolutePath())) 54 // // break; 55 // // folder = folderInfo.absolutePath(); 56 // // } 57 58 // // /* But if it doesn't exists at all: */ 59 // // if (!folder.exists() || folder.isRoot()) 60 // // { 61 // // /* Use recommended one folder: */ 62 // // QFileInfo defaultFilePath(absoluteFilePath(strFileName, m_strDefaultPath)); 63 // // folder = defaultFilePath.path(); 64 // // } 65 66 // // /* Prepare backends list: */ 67 // // QVector<QString> fileExtensions; 68 // // QVector<KDeviceType> deviceTypes; 69 // // CMediumFormat mediumFormat = fieldImp("mediumFormat").value<CMediumFormat>(); 70 // // mediumFormat.DescribeFileExtensions(fileExtensions, deviceTypes); 71 // // QStringList validExtensionList; 72 // // for (int i = 0; i < fileExtensions.size(); ++i) 73 // // if (deviceTypes[i] == static_cast<UIWizardCloneVD*>(wizardImp())->sourceVirtualDiskDeviceType()) 74 // // validExtensionList << QString("*.%1").arg(fileExtensions[i]); 75 // // /* Compose full filter list: */ 76 // // QString strBackendsList = QString("%1 (%2)").arg(mediumFormat.GetName()).arg(validExtensionList.join(" ")); 77 78 // // /* Open corresponding file-dialog: */ 79 // // QString strChosenFilePath = QIFileDialog::getSaveFileName(folder.absoluteFilePath(strFileName), 80 // // strBackendsList, thisImp(), 81 // // UIWizardCloneVD::tr("Please choose a location for new virtual disk image file")); 82 83 // // /* If there was something really chosen: */ 84 // // if (!strChosenFilePath.isEmpty()) 85 // // { 86 // // /* If valid file extension is missed, append it: */ 87 // // if (QFileInfo(strChosenFilePath).suffix().isEmpty()) 88 // // strChosenFilePath += QString(".%1").arg(m_strDefaultExtension); 89 // // m_pDestinationDiskEditor->setText(QDir::toNativeSeparators(strChosenFilePath)); 90 // // m_pDestinationDiskEditor->selectAll(); 91 // // m_pDestinationDiskEditor->setFocus(); 92 // // } 93 // } 94 95 // /* static */ 96 // QString UIWizardCloneVDPage3::toFileName(const QString &strName, const QString &strExtension) 97 // { 98 // /* Convert passed name to native separators (it can be full, actually): */ 99 // QString strFileName = QDir::toNativeSeparators(strName); 100 101 // /* Remove all trailing dots to avoid multiple dots before extension: */ 102 // int iLen; 103 // while (iLen = strFileName.length(), iLen > 0 && strFileName[iLen - 1] == '.') 104 // strFileName.truncate(iLen - 1); 105 106 // /* Add passed extension if its not done yet: */ 107 // if (QFileInfo(strFileName).suffix().toLower() != strExtension) 108 // strFileName += QString(".%1").arg(strExtension); 109 110 // /* Return result: */ 111 // return strFileName; 112 // } 113 114 // /* static */ 115 // QString UIWizardCloneVDPage3::absoluteFilePath(const QString &strFileName, const QString &strDefaultPath) 116 // { 117 // /* Wrap file-info around received file name: */ 118 // QFileInfo fileInfo(strFileName); 119 // /* If path-info is relative or there is no path-info at all: */ 120 // if (fileInfo.fileName() == strFileName || fileInfo.isRelative()) 121 // { 122 // /* Resolve path on the basis of default path we have: */ 123 // fileInfo = QFileInfo(strDefaultPath, strFileName); 124 // } 125 // /* Return full absolute disk image file path: */ 126 // return QDir::toNativeSeparators(fileInfo.absoluteFilePath()); 127 // } 128 129 // /* static */ 130 // void UIWizardCloneVDPage3::acquireExtensions(const CMediumFormat &comMediumFormat, KDeviceType enmDeviceType, 131 // QStringList &aAllowedExtensions, QString &strDefaultExtension) 132 // { 133 // /* Load extension / device list: */ 134 // QVector<QString> fileExtensions; 135 // QVector<KDeviceType> deviceTypes; 136 // CMediumFormat mediumFormat(comMediumFormat); 137 // mediumFormat.DescribeFileExtensions(fileExtensions, deviceTypes); 138 // for (int i = 0; i < fileExtensions.size(); ++i) 139 // if (deviceTypes[i] == enmDeviceType) 140 // aAllowedExtensions << fileExtensions[i].toLower(); 141 // AssertReturnVoid(!aAllowedExtensions.isEmpty()); 142 // strDefaultExtension = aAllowedExtensions.first(); 143 // } 144 145 // QString UIWizardCloneVDPage3::mediumPath() const 146 // { 147 // /* Acquire chosen file path, and what is important user suffix: */ 148 // const QString strChosenFilePath = m_pDestinationDiskEditor->text(); 149 // QString strSuffix = QFileInfo(strChosenFilePath).suffix().toLower(); 150 // /* If there is no suffix of it's not allowed: */ 151 // if ( strSuffix.isEmpty() 152 // || !m_aAllowedExtensions.contains(strSuffix)) 153 // strSuffix = m_strDefaultExtension; 154 // /* Compose full file path finally: */ 155 // return absoluteFilePath(toFileName(m_pDestinationDiskEditor->text(), strSuffix), m_strDefaultPath); 156 // } 157 158 // qulonglong UIWizardCloneVDPage3::mediumSize() 159 // { 160 // // UIWizardCloneVD *pWizard = qobject_cast<UIWizardCloneVD*>(wizardImp()); 161 // // if (!pWizard) 162 // // return 0; 163 // // const CMedium &sourceVirtualDisk = pWizard->sourceVirtualDisk(); 164 // // return sourceVirtualDisk.isNull() ? 0 : sourceVirtualDisk.GetLogicalSize(); 165 // return 0; 166 // } 166 167 167 168 UIWizardCloneVDPageBasic3::UIWizardCloneVDPageBasic3() 168 169 { 169 /* Create widgets: */ 170 prepare(); 171 // /* Create widgets: */ 172 // QVBoxLayout *pMainLayout = new QVBoxLayout(this); 173 // { 174 // m_pLabel = new QIRichTextLabel(this); 175 // QHBoxLayout *pLocationLayout = new QHBoxLayout; 176 // { 177 // m_pDestinationDiskEditor = new QLineEdit(this); 178 // m_pDestinationDiskOpenButton = new QIToolButton(this); 179 // { 180 // m_pDestinationDiskOpenButton->setAutoRaise(true); 181 // m_pDestinationDiskOpenButton->setIcon(UIIconPool::iconSet(":/select_file_16px.png", "select_file_disabled_16px.png")); 182 // } 183 // pLocationLayout->addWidget(m_pDestinationDiskEditor); 184 // pLocationLayout->addWidget(m_pDestinationDiskOpenButton); 185 // } 186 // pMainLayout->addWidget(m_pLabel); 187 // pMainLayout->addLayout(pLocationLayout); 188 // pMainLayout->addStretch(); 189 // } 190 191 // /* Setup page connections: */ 192 // connect(m_pDestinationDiskEditor, &QLineEdit::textChanged, this, &UIWizardCloneVDPageBasic3::completeChanged); 193 // connect(m_pDestinationDiskOpenButton, &QIToolButton::clicked, this, &UIWizardCloneVDPageBasic3::sltSelectLocationButtonClicked); 194 } 195 196 void UIWizardCloneVDPageBasic3::prepare() 197 { 170 198 QVBoxLayout *pMainLayout = new QVBoxLayout(this); 171 { 172 m_pLabel = new QIRichTextLabel(this); 173 QHBoxLayout *pLocationLayout = new QHBoxLayout; 174 { 175 m_pDestinationDiskEditor = new QLineEdit(this); 176 m_pDestinationDiskOpenButton = new QIToolButton(this); 177 { 178 m_pDestinationDiskOpenButton->setAutoRaise(true); 179 m_pDestinationDiskOpenButton->setIcon(UIIconPool::iconSet(":/select_file_16px.png", "select_file_disabled_16px.png")); 180 } 181 pLocationLayout->addWidget(m_pDestinationDiskEditor); 182 pLocationLayout->addWidget(m_pDestinationDiskOpenButton); 183 } 184 pMainLayout->addWidget(m_pLabel); 185 pMainLayout->addLayout(pLocationLayout); 186 pMainLayout->addStretch(); 187 } 188 189 /* Setup page connections: */ 190 connect(m_pDestinationDiskEditor, &QLineEdit::textChanged, this, &UIWizardCloneVDPageBasic3::completeChanged); 191 connect(m_pDestinationDiskOpenButton, &QIToolButton::clicked, this, &UIWizardCloneVDPageBasic3::sltSelectLocationButtonClicked); 192 193 /* Register fields: */ 194 registerField("mediumPath", this, "mediumPath"); 195 registerField("mediumSize", this, "mediumSize"); 199 Q_UNUSED(pMainLayout); 196 200 } 197 201 … … 199 203 { 200 204 /* Call to base-class: */ 201 onSelectLocationButtonClicked();205 //onSelectLocationButtonClicked(); 202 206 } 203 207 … … 207 211 setTitle(UIWizardCloneVD::tr("New disk image to create")); 208 212 209 / * Translate widgets: */210 m_pLabel->setText(UIWizardCloneVD::tr("Please type the name of the new virtual disk image file into the box below or "211 "click on the folder icon to select a different folder to create the file in."));212 m_pDestinationDiskOpenButton->setToolTip(UIWizardCloneVD::tr("Choose a location for new virtual disk image file..."));213 // /* Translate widgets: */ 214 // m_pLabel->setText(UIWizardCloneVD::tr("Please type the name of the new virtual disk image file into the box below or " 215 // "click on the folder icon to select a different folder to create the file in.")); 216 // m_pDestinationDiskOpenButton->setToolTip(UIWizardCloneVD::tr("Choose a location for new virtual disk image file...")); 213 217 } 214 218 215 219 void UIWizardCloneVDPageBasic3::initializePage() 216 220 { 217 / * Translate page: */218 retranslateUi();219 220 UIWizardCloneVD *pWizard = qobject_cast<UIWizardCloneVD*>(wizardImp());221 if (!pWizard)222 return;223 const CMedium &comMedium = pWizard->sourceVirtualDisk();224 225 / * Get source virtual-disk file-information: */226 QFileInfo sourceFileInfo(comMedium.GetLocation());227 / * Get default path for virtual-disk copy: */228 m_strDefaultPath = sourceFileInfo.absolutePath();229 / * Get default extension for virtual-disk copy: */230 acquireExtensions(field("mediumFormat").value<CMediumFormat>(),231 static_cast<UIWizardCloneVD*>(wizardImp())->sourceVirtualDiskDeviceType(),232 m_aAllowedExtensions, m_strDefaultExtension);233 / * Compose default-name for virtual-disk copy: */234 QString strMediumName = UIWizardCloneVD::tr("%1_copy", "copied virtual disk image name").arg(sourceFileInfo.completeBaseName());235 / * Set default-name as text for location editor: */236 m_pDestinationDiskEditor->setText(strMediumName);221 // /* Translate page: */ 222 // retranslateUi(); 223 224 // UIWizardCloneVD *pWizard = qobject_cast<UIWizardCloneVD*>(wizardImp()); 225 // if (!pWizard) 226 // return; 227 // const CMedium &comMedium = pWizard->sourceVirtualDisk(); 228 229 // /* Get source virtual-disk file-information: */ 230 // QFileInfo sourceFileInfo(comMedium.GetLocation()); 231 // /* Get default path for virtual-disk copy: */ 232 // m_strDefaultPath = sourceFileInfo.absolutePath(); 233 // /* Get default extension for virtual-disk copy: */ 234 // acquireExtensions(field("mediumFormat").value<CMediumFormat>(), 235 // static_cast<UIWizardCloneVD*>(wizardImp())->sourceVirtualDiskDeviceType(), 236 // m_aAllowedExtensions, m_strDefaultExtension); 237 // /* Compose default-name for virtual-disk copy: */ 238 // QString strMediumName = UIWizardCloneVD::tr("%1_copy", "copied virtual disk image name").arg(sourceFileInfo.completeBaseName()); 239 // /* Set default-name as text for location editor: */ 240 // m_pDestinationDiskEditor->setText(strMediumName); 237 241 } 238 242 … … 240 244 { 241 245 /* Make sure current name is not empty: */ 242 return !m_pDestinationDiskEditor->text().trimmed().isEmpty(); 246 /*return !m_pDestinationDiskEditor->text().trimmed().isEmpty();*/ 247 return true; 243 248 } 244 249 … … 248 253 bool fResult = true; 249 254 250 / * Make sure such file doesn't exists already: */251 QString strMediumPath(mediumPath());252 fResult = !QFileInfo(strMediumPath).exists();253 if (!fResult)254 msgCenter().cannotOverwriteHardDiskStorage(strMediumPath, this);255 256 if (fResult)257 {258 /* Lock finish button: */259 startProcessing();260 261 /* Try to copy virtual disk image file: */262 fResult = qobject_cast<UIWizardCloneVD*>(wizard())->copyVirtualDisk();263 264 /* Unlock finish button: */265 endProcessing();266 }255 // /* Make sure such file doesn't exists already: */ 256 // QString strMediumPath(mediumPath()); 257 // fResult = !QFileInfo(strMediumPath).exists(); 258 // if (!fResult) 259 // msgCenter().cannotOverwriteHardDiskStorage(strMediumPath, this); 260 261 // if (fResult) 262 // { 263 // /* Lock finish button: */ 264 // startProcessing(); 265 266 // /* Try to copy virtual disk image file: */ 267 // fResult = qobject_cast<UIWizardCloneVD*>(wizard())->copyVirtualDisk(); 268 269 // /* Unlock finish button: */ 270 // endProcessing(); 271 // } 267 272 268 273 /* Return result: */ -
trunk/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageBasic3.h
r82968 r90748 26 26 27 27 /* GUI includes: */ 28 #include "UI WizardPage.h"28 #include "UINativeWizardPage.h" 29 29 30 30 /* COM includes: */ … … 38 38 39 39 40 / ** 4th page of the Clone Virtual Disk Image wizard (base part): */41 class UIWizardCloneVDPage3 : public UIWizardPageBase42 {43 protected:40 // /** 4th page of the Clone Virtual Disk Image wizard (base part): */ 41 // class UIWizardCloneVDPage3 : public UIWizardPageBase 42 // { 43 // protected: 44 44 45 /** Constructs page basis. */46 UIWizardCloneVDPage3();45 // /** Constructs page basis. */ 46 // UIWizardCloneVDPage3(); 47 47 48 /** Handles command to open target disk. */49 void onSelectLocationButtonClicked();48 // /** Handles command to open target disk. */ 49 // void onSelectLocationButtonClicked(); 50 50 51 /** Helps to compose full file name on the basis of incoming @a strName and @a strExtension. */52 static QString toFileName(const QString &strName, const QString &strExtension);53 /** Converts the @a strFileName to absolute one if necessary using @a strDefaultPath as advice. */54 static QString absoluteFilePath(const QString &strFileName, const QString &strDefaultPath);55 /** Acquires the list of @a aAllowedExtensions and @a strDefaultExtension56 * on the basis of incoming @a comMediumFormat and @a enmDeviceType. */57 static void acquireExtensions(const CMediumFormat &comMediumFormat, KDeviceType enmDeviceType,58 QStringList &aAllowedExtensions, QString &strDefaultExtension);51 // /** Helps to compose full file name on the basis of incoming @a strName and @a strExtension. */ 52 // static QString toFileName(const QString &strName, const QString &strExtension); 53 // /** Converts the @a strFileName to absolute one if necessary using @a strDefaultPath as advice. */ 54 // static QString absoluteFilePath(const QString &strFileName, const QString &strDefaultPath); 55 // /** Acquires the list of @a aAllowedExtensions and @a strDefaultExtension 56 // * on the basis of incoming @a comMediumFormat and @a enmDeviceType. */ 57 // static void acquireExtensions(const CMediumFormat &comMediumFormat, KDeviceType enmDeviceType, 58 // QStringList &aAllowedExtensions, QString &strDefaultExtension); 59 59 60 /** Returns 'mediumPath' field value. */61 QString mediumPath() const;60 // /** Returns 'mediumPath' field value. */ 61 // QString mediumPath() const; 62 62 63 /** Returns 'mediumSize' field value. */64 qulonglong mediumSize();63 // /** Returns 'mediumSize' field value. */ 64 // qulonglong mediumSize(); 65 65 66 /** Holds the default path. */67 QString m_strDefaultPath;68 /** Holds the default extension. */69 QString m_strDefaultExtension;70 /** Holds the allowed extensions. */71 QStringList m_aAllowedExtensions;66 // /** Holds the default path. */ 67 // QString m_strDefaultPath; 68 // /** Holds the default extension. */ 69 // QString m_strDefaultExtension; 70 // /** Holds the allowed extensions. */ 71 // QStringList m_aAllowedExtensions; 72 72 73 /** Holds the target disk path editor instance. */74 QLineEdit *m_pDestinationDiskEditor;75 /** Holds the open-target-disk button instance. */76 QIToolButton *m_pDestinationDiskOpenButton;77 };73 // /** Holds the target disk path editor instance. */ 74 // QLineEdit *m_pDestinationDiskEditor; 75 // /** Holds the open-target-disk button instance. */ 76 // QIToolButton *m_pDestinationDiskOpenButton; 77 // }; 78 78 79 79 80 / ** 4th page of the Clone Virtual Disk Image wizard (basic extension): */81 class UIWizardCloneVDPageBasic3 : public UI WizardPage, public UIWizardCloneVDPage380 // /** 4th page of the Clone Virtual Disk Image wizard (basic extension): */ 81 class UIWizardCloneVDPageBasic3 : public UINativeWizardPage 82 82 { 83 83 Q_OBJECT; 84 Q_PROPERTY(QString mediumPath READ mediumPath);85 Q_PROPERTY(qulonglong mediumSize READ mediumSize);86 84 87 85 public: … … 89 87 /** Constructs basic page. */ 90 88 UIWizardCloneVDPageBasic3(); 91 92 protected:93 94 /** Allows to access 'wizard()' from base part. */95 UIWizard *wizardImp() const { return wizard(); }96 /** Allows to access 'this' from base part. */97 UIWizardPage* thisImp() { return this; }98 /** Allows to access 'field()' from base part. */99 QVariant fieldImp(const QString &strFieldName) const { return UIWizardPage::field(strFieldName); }100 89 101 90 private slots: … … 108 97 /** Handles translation event. */ 109 98 virtual void retranslateUi() /* override */; 99 void prepare(); 110 100 111 101 /** Prepares the page. */ -
trunk/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageExpert.cpp
r82968 r90748 40 40 41 41 42 UIWizardCloneVDPageExpert::UIWizardCloneVDPageExpert(KDeviceType enmDeviceType) 43 { 44 /* Create widgets: */ 45 QGridLayout *pMainLayout = new QGridLayout(this); 46 { 47 m_pDestinationCnt = new QGroupBox(this); 48 { 49 m_pDestinationCnt->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed); 50 QHBoxLayout *pLocationCntLayout = new QHBoxLayout(m_pDestinationCnt); 51 { 52 m_pDestinationDiskEditor = new QLineEdit(m_pDestinationCnt); 53 m_pDestinationDiskOpenButton = new QIToolButton(m_pDestinationCnt); 54 { 55 m_pDestinationDiskOpenButton->setAutoRaise(true); 56 m_pDestinationDiskOpenButton->setIcon(UIIconPool::iconSet(":/select_file_16px.png", "select_file_disabled_16px.png")); 57 } 58 } 59 pLocationCntLayout->addWidget(m_pDestinationDiskEditor); 60 pLocationCntLayout->addWidget(m_pDestinationDiskOpenButton); 61 } 62 m_pFormatCnt = new QGroupBox(this); 63 { 64 m_pFormatCnt->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed); 65 QVBoxLayout *pFormatCntLayout = new QVBoxLayout(m_pFormatCnt); 66 { 67 m_pFormatButtonGroup = new QButtonGroup(m_pFormatCnt); 68 { 69 /* Enumerate medium formats in special order: */ 70 CSystemProperties properties = uiCommon().virtualBox().GetSystemProperties(); 71 const QVector<CMediumFormat> &formats = properties.GetMediumFormats(); 72 QMap<QString, CMediumFormat> vdi, preferred, others; 73 foreach (const CMediumFormat &format, formats) 74 { 75 /* VDI goes first: */ 76 if (format.GetName() == "VDI") 77 vdi[format.GetId()] = format; 78 else 79 { 80 const QVector<KMediumFormatCapabilities> &capabilities = format.GetCapabilities(); 81 /* Then goes preferred: */ 82 if (capabilities.contains(KMediumFormatCapabilities_Preferred)) 83 preferred[format.GetId()] = format; 84 /* Then others: */ 85 else 86 others[format.GetId()] = format; 87 } 88 } 89 90 /* Create buttons for VDI, preferred and others: */ 91 foreach (const QString &strId, vdi.keys()) 92 addFormatButton(this, pFormatCntLayout, enmDeviceType, vdi.value(strId), true); 93 foreach (const QString &strId, preferred.keys()) 94 addFormatButton(this, pFormatCntLayout, enmDeviceType, preferred.value(strId), true); 95 foreach (const QString &strId, others.keys()) 96 addFormatButton(this, pFormatCntLayout, enmDeviceType, others.value(strId)); 97 98 if (!m_pFormatButtonGroup->buttons().isEmpty()) 99 { 100 m_pFormatButtonGroup->button(0)->click(); 101 m_pFormatButtonGroup->button(0)->setFocus(); 102 } 103 } 104 } 105 } 106 m_pVariantCnt = new QGroupBox(this); 107 { 108 m_pVariantCnt->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed); 109 QVBoxLayout *pVariantCntLayout = new QVBoxLayout(m_pVariantCnt); 110 { 111 m_pVariantButtonGroup = new QButtonGroup(m_pVariantCnt); 112 { 113 m_pDynamicalButton = new QRadioButton(m_pVariantCnt); 114 if (enmDeviceType == KDeviceType_HardDisk) 115 { 116 m_pDynamicalButton->click(); 117 m_pDynamicalButton->setFocus(); 118 } 119 m_pFixedButton = new QRadioButton(m_pVariantCnt); 120 if ( enmDeviceType == KDeviceType_DVD 121 || enmDeviceType == KDeviceType_Floppy) 122 { 123 m_pFixedButton->click(); 124 m_pFixedButton->setFocus(); 125 } 126 m_pVariantButtonGroup->addButton(m_pDynamicalButton, 0); 127 m_pVariantButtonGroup->addButton(m_pFixedButton, 1); 128 } 129 m_pSplitBox = new QCheckBox(m_pVariantCnt); 130 pVariantCntLayout->addWidget(m_pDynamicalButton); 131 pVariantCntLayout->addWidget(m_pFixedButton); 132 pVariantCntLayout->addWidget(m_pSplitBox); 133 } 134 } 135 pMainLayout->addWidget(m_pDestinationCnt, 1, 0, 1, 2); 136 pMainLayout->addWidget(m_pFormatCnt, 2, 0, Qt::AlignTop); 137 pMainLayout->addWidget(m_pVariantCnt, 2, 1, Qt::AlignTop); 138 } 139 140 /* Setup connections: */ 141 connect(m_pFormatButtonGroup, static_cast<void(QButtonGroup::*)(QAbstractButton*)>(&QButtonGroup::buttonClicked), 142 this, &UIWizardCloneVDPageExpert::sltMediumFormatChanged); 143 connect(m_pVariantButtonGroup, static_cast<void(QButtonGroup::*)(QAbstractButton*)>(&QButtonGroup::buttonClicked), 144 this, &UIWizardCloneVDPageExpert::completeChanged); 145 connect(m_pSplitBox, &QCheckBox::stateChanged, 146 this, &UIWizardCloneVDPageExpert::completeChanged); 147 connect(m_pDestinationDiskEditor, &QLineEdit::textChanged, 148 this, &UIWizardCloneVDPageExpert::completeChanged); 149 connect(m_pDestinationDiskOpenButton, &QIToolButton::clicked, 150 this, &UIWizardCloneVDPageExpert::sltSelectLocationButtonClicked); 151 152 /* Register classes: */ 153 qRegisterMetaType<CMedium>(); 154 qRegisterMetaType<CMediumFormat>(); 155 /* Register fields: */ 156 registerField("mediumFormat", this, "mediumFormat"); 157 registerField("mediumVariant", this, "mediumVariant"); 158 registerField("mediumPath", this, "mediumPath"); 159 registerField("mediumSize", this, "mediumSize"); 42 UIWizardCloneVDPageExpert::UIWizardCloneVDPageExpert(KDeviceType /*enmDeviceType*/) 43 { 44 // /* Create widgets: */ 45 // QGridLayout *pMainLayout = new QGridLayout(this); 46 // { 47 // m_pDestinationCnt = new QGroupBox(this); 48 // { 49 // m_pDestinationCnt->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed); 50 // QHBoxLayout *pLocationCntLayout = new QHBoxLayout(m_pDestinationCnt); 51 // { 52 // m_pDestinationDiskEditor = new QLineEdit(m_pDestinationCnt); 53 // m_pDestinationDiskOpenButton = new QIToolButton(m_pDestinationCnt); 54 // { 55 // m_pDestinationDiskOpenButton->setAutoRaise(true); 56 // m_pDestinationDiskOpenButton->setIcon(UIIconPool::iconSet(":/select_file_16px.png", "select_file_disabled_16px.png")); 57 // } 58 // } 59 // pLocationCntLayout->addWidget(m_pDestinationDiskEditor); 60 // pLocationCntLayout->addWidget(m_pDestinationDiskOpenButton); 61 // } 62 // m_pFormatCnt = new QGroupBox(this); 63 // { 64 // m_pFormatCnt->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed); 65 // QVBoxLayout *pFormatCntLayout = new QVBoxLayout(m_pFormatCnt); 66 // { 67 // m_pFormatButtonGroup = new QButtonGroup(m_pFormatCnt); 68 // { 69 // /* Enumerate medium formats in special order: */ 70 // CSystemProperties properties = uiCommon().virtualBox().GetSystemProperties(); 71 // const QVector<CMediumFormat> &formats = properties.GetMediumFormats(); 72 // QMap<QString, CMediumFormat> vdi, preferred, others; 73 // foreach (const CMediumFormat &format, formats) 74 // { 75 // /* VDI goes first: */ 76 // if (format.GetName() == "VDI") 77 // vdi[format.GetId()] = format; 78 // else 79 // { 80 // const QVector<KMediumFormatCapabilities> &capabilities = format.GetCapabilities(); 81 // /* Then goes preferred: */ 82 // if (capabilities.contains(KMediumFormatCapabilities_Preferred)) 83 // preferred[format.GetId()] = format; 84 // /* Then others: */ 85 // else 86 // others[format.GetId()] = format; 87 // } 88 // } 89 90 // /* Create buttons for VDI, preferred and others: */ 91 // foreach (const QString &strId, vdi.keys()) 92 // addFormatButton(this, pFormatCntLayout, enmDeviceType, vdi.value(strId), true); 93 // foreach (const QString &strId, preferred.keys()) 94 // addFormatButton(this, pFormatCntLayout, enmDeviceType, preferred.value(strId), true); 95 // foreach (const QString &strId, others.keys()) 96 // addFormatButton(this, pFormatCntLayout, enmDeviceType, others.value(strId)); 97 98 // if (!m_pFormatButtonGroup->buttons().isEmpty()) 99 // { 100 // m_pFormatButtonGroup->button(0)->click(); 101 // m_pFormatButtonGroup->button(0)->setFocus(); 102 // } 103 // } 104 // } 105 // } 106 // m_pVariantCnt = new QGroupBox(this); 107 // { 108 // m_pVariantCnt->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed); 109 // QVBoxLayout *pVariantCntLayout = new QVBoxLayout(m_pVariantCnt); 110 // { 111 // m_pVariantButtonGroup = new QButtonGroup(m_pVariantCnt); 112 // { 113 // m_pDynamicalButton = new QRadioButton(m_pVariantCnt); 114 // if (enmDeviceType == KDeviceType_HardDisk) 115 // { 116 // m_pDynamicalButton->click(); 117 // m_pDynamicalButton->setFocus(); 118 // } 119 // m_pFixedButton = new QRadioButton(m_pVariantCnt); 120 // if ( enmDeviceType == KDeviceType_DVD 121 // || enmDeviceType == KDeviceType_Floppy) 122 // { 123 // m_pFixedButton->click(); 124 // m_pFixedButton->setFocus(); 125 // } 126 // m_pVariantButtonGroup->addButton(m_pDynamicalButton, 0); 127 // m_pVariantButtonGroup->addButton(m_pFixedButton, 1); 128 // } 129 // m_pSplitBox = new QCheckBox(m_pVariantCnt); 130 // pVariantCntLayout->addWidget(m_pDynamicalButton); 131 // pVariantCntLayout->addWidget(m_pFixedButton); 132 // pVariantCntLayout->addWidget(m_pSplitBox); 133 // } 134 // } 135 // pMainLayout->addWidget(m_pDestinationCnt, 1, 0, 1, 2); 136 // pMainLayout->addWidget(m_pFormatCnt, 2, 0, Qt::AlignTop); 137 // pMainLayout->addWidget(m_pVariantCnt, 2, 1, Qt::AlignTop); 138 // } 139 140 // /* Setup connections: */ 141 // connect(m_pFormatButtonGroup, static_cast<void(QButtonGroup::*)(QAbstractButton*)>(&QButtonGroup::buttonClicked), 142 // this, &UIWizardCloneVDPageExpert::sltMediumFormatChanged); 143 // connect(m_pVariantButtonGroup, static_cast<void(QButtonGroup::*)(QAbstractButton*)>(&QButtonGroup::buttonClicked), 144 // this, &UIWizardCloneVDPageExpert::completeChanged); 145 // connect(m_pSplitBox, &QCheckBox::stateChanged, 146 // this, &UIWizardCloneVDPageExpert::completeChanged); 147 // connect(m_pDestinationDiskEditor, &QLineEdit::textChanged, 148 // this, &UIWizardCloneVDPageExpert::completeChanged); 149 // connect(m_pDestinationDiskOpenButton, &QIToolButton::clicked, 150 // this, &UIWizardCloneVDPageExpert::sltSelectLocationButtonClicked); 160 151 } 161 152 162 153 void UIWizardCloneVDPageExpert::setTargetLocation() 163 154 { 164 UIWizardCloneVD *pWizard = qobject_cast<UIWizardCloneVD*>(wizard());165 if (!pWizard)166 return;167 / * Get source virtual-disk file-information: */168 QFileInfo sourceFileInfo(pWizard->sourceVirtualDisk().GetLocation());169 / * Get default path for virtual-disk copy: */170 m_strDefaultPath = sourceFileInfo.absolutePath();171 / * Compose name for virtual-disk copy: */172 QString strMediumName = UIWizardCloneVD::tr("%1_copy", "copied virtual disk image name").arg(sourceFileInfo.baseName());173 / * Set text to location editor: */174 m_pDestinationDiskEditor->setText(strMediumName);175 176 / * Broadcast complete-change: */177 emit completeChanged();155 // UIWizardCloneVD *pWizard = qobject_cast<UIWizardCloneVD*>(wizard()); 156 // if (!pWizard) 157 // return; 158 // /* Get source virtual-disk file-information: */ 159 // QFileInfo sourceFileInfo(pWizard->sourceVirtualDisk().GetLocation()); 160 // /* Get default path for virtual-disk copy: */ 161 // m_strDefaultPath = sourceFileInfo.absolutePath(); 162 // /* Compose name for virtual-disk copy: */ 163 // QString strMediumName = UIWizardCloneVD::tr("%1_copy", "copied virtual disk image name").arg(sourceFileInfo.baseName()); 164 // /* Set text to location editor: */ 165 // m_pDestinationDiskEditor->setText(strMediumName); 166 167 // /* Broadcast complete-change: */ 168 // emit completeChanged(); 178 169 } 179 170 180 171 void UIWizardCloneVDPageExpert::sltMediumFormatChanged() 181 172 { 182 / * Get medium format: */183 CMediumFormat mf = mediumFormat();184 if (mf.isNull())185 {186 AssertMsgFailed(("No medium format set!"));187 return;188 }189 190 / * Enable/disable widgets: */191 ULONG uCapabilities = 0;192 QVector<KMediumFormatCapabilities> capabilities;193 capabilities = mf.GetCapabilities();194 for (int i = 0; i < capabilities.size(); i++)195 uCapabilities |= capabilities[i];196 197 bool fIsCreateDynamicPossible = uCapabilities & KMediumFormatCapabilities_CreateDynamic;198 bool fIsCreateFixedPossible = uCapabilities & KMediumFormatCapabilities_CreateFixed;199 bool fIsCreateSplitPossible = uCapabilities & KMediumFormatCapabilities_CreateSplit2G;200 m_pDynamicalButton->setEnabled(fIsCreateDynamicPossible);201 m_pFixedButton->setEnabled(fIsCreateFixedPossible);202 m_pSplitBox->setEnabled(fIsCreateSplitPossible);203 204 / * Compose virtual-disk extension: */205 acquireExtensions(mf, static_cast<UIWizardCloneVD*>(wizardImp())->sourceVirtualDiskDeviceType(),206 m_aAllowedExtensions, m_strDefaultExtension);207 208 / * Broadcast complete-change: */209 emit completeChanged();173 // /* Get medium format: */ 174 // CMediumFormat mf = mediumFormat(); 175 // if (mf.isNull()) 176 // { 177 // AssertMsgFailed(("No medium format set!")); 178 // return; 179 // } 180 181 // /* Enable/disable widgets: */ 182 // ULONG uCapabilities = 0; 183 // QVector<KMediumFormatCapabilities> capabilities; 184 // capabilities = mf.GetCapabilities(); 185 // for (int i = 0; i < capabilities.size(); i++) 186 // uCapabilities |= capabilities[i]; 187 188 // bool fIsCreateDynamicPossible = uCapabilities & KMediumFormatCapabilities_CreateDynamic; 189 // bool fIsCreateFixedPossible = uCapabilities & KMediumFormatCapabilities_CreateFixed; 190 // bool fIsCreateSplitPossible = uCapabilities & KMediumFormatCapabilities_CreateSplit2G; 191 // m_pDynamicalButton->setEnabled(fIsCreateDynamicPossible); 192 // m_pFixedButton->setEnabled(fIsCreateFixedPossible); 193 // m_pSplitBox->setEnabled(fIsCreateSplitPossible); 194 195 // /* Compose virtual-disk extension: */ 196 // acquireExtensions(mf, static_cast<UIWizardCloneVD*>(wizardImp())->sourceVirtualDiskDeviceType(), 197 // m_aAllowedExtensions, m_strDefaultExtension); 198 199 // /* Broadcast complete-change: */ 200 // emit completeChanged(); 210 201 } 211 202 … … 213 204 { 214 205 /* Call to base-class: */ 215 onSelectLocationButtonClicked();206 //onSelectLocationButtonClicked(); 216 207 } 217 208 … … 219 210 { 220 211 /* Translate widgets: */ 221 m_pDestinationCnt->setTitle(UIWizardCloneVD::tr("&New disk image to create"));222 m_pDestinationDiskOpenButton->setToolTip(UIWizardCloneVD::tr("Choose a location for new virtual disk image file..."));223 m_pFormatCnt->setTitle(UIWizardCloneVD::tr("Disk image file &type"));224 QList<QAbstractButton*> buttons = m_pFormatButtonGroup->buttons();225 for (int i = 0; i < buttons.size(); ++i)226 {227 QAbstractButton *pButton = buttons[i];228 UIMediumFormat enmFormat = gpConverter->fromInternalString<UIMediumFormat>(m_formatNames[m_pFormatButtonGroup->id(pButton)]);229 pButton->setText(gpConverter->toString(enmFormat));230 }231 m_pVariantCnt->setTitle(UIWizardCloneVD::tr("Storage on physical hard disk"));232 m_pDynamicalButton->setText(UIWizardCloneVD::tr("&Dynamically allocated"));233 m_pFixedButton->setText(UIWizardCloneVD::tr("&Fixed size"));234 m_pSplitBox->setText(UIWizardCloneVD::tr("&Split into files of less than 2GB"));212 // m_pDestinationCnt->setTitle(UIWizardCloneVD::tr("&New disk image to create")); 213 // m_pDestinationDiskOpenButton->setToolTip(UIWizardCloneVD::tr("Choose a location for new virtual disk image file...")); 214 // m_pFormatCnt->setTitle(UIWizardCloneVD::tr("Disk image file &type")); 215 // QList<QAbstractButton*> buttons = m_pFormatButtonGroup->buttons(); 216 // for (int i = 0; i < buttons.size(); ++i) 217 // { 218 // QAbstractButton *pButton = buttons[i]; 219 // UIMediumFormat enmFormat = gpConverter->fromInternalString<UIMediumFormat>(m_formatNames[m_pFormatButtonGroup->id(pButton)]); 220 // pButton->setText(gpConverter->toString(enmFormat)); 221 // } 222 // m_pVariantCnt->setTitle(UIWizardCloneVD::tr("Storage on physical hard disk")); 223 // m_pDynamicalButton->setText(UIWizardCloneVD::tr("&Dynamically allocated")); 224 // m_pFixedButton->setText(UIWizardCloneVD::tr("&Fixed size")); 225 // m_pSplitBox->setText(UIWizardCloneVD::tr("&Split into files of less than 2GB")); 235 226 } 236 227 … … 246 237 bool UIWizardCloneVDPageExpert::isComplete() const 247 238 { 248 UIWizardCloneVD *pWizard = qobject_cast<UIWizardCloneVD*>(wizard()); 249 if (!pWizard) 250 return false; 251 /* Check what source virtual-disk feats the rules, 252 * medium format/variant is correct, 253 * current name is not empty: */ 254 return !pWizard->sourceVirtualDisk().isNull() && 255 !mediumFormat().isNull() && 256 mediumVariant() != (qulonglong)KMediumVariant_Max && 257 !m_pDestinationDiskEditor->text().trimmed().isEmpty(); 239 // UIWizardCloneVD *pWizard = qobject_cast<UIWizardCloneVD*>(wizard()); 240 // if (!pWizard) 241 // return false; 242 // /* Check what source virtual-disk feats the rules, 243 // * medium format/variant is correct, 244 // * current name is not empty: */ 245 // return !pWizard->sourceVirtualDisk().isNull() && 246 // !mediumFormat().isNull() && 247 // mediumVariant() != (qulonglong)KMediumVariant_Max && 248 // !m_pDestinationDiskEditor->text().trimmed().isEmpty(); 249 return true; 258 250 } 259 251 … … 263 255 bool fResult = true; 264 256 265 / * Lock finish button: */266 startProcessing();267 268 / * Make sure such virtual-disk doesn't exists: */269 QString strMediumPath(mediumPath());270 fResult = !QFileInfo(strMediumPath).exists();271 if (!fResult)272 msgCenter().cannotOverwriteHardDiskStorage(strMediumPath, this);273 274 / * Try to copy virtual-disk: */275 if (fResult)276 fResult = qobject_cast<UIWizardCloneVD*>(wizard())->copyVirtualDisk();277 278 / * Unlock finish button: */279 endProcessing();257 // /* Lock finish button: */ 258 // startProcessing(); 259 260 // /* Make sure such virtual-disk doesn't exists: */ 261 // QString strMediumPath(mediumPath()); 262 // fResult = !QFileInfo(strMediumPath).exists(); 263 // if (!fResult) 264 // msgCenter().cannotOverwriteHardDiskStorage(strMediumPath, this); 265 266 // /* Try to copy virtual-disk: */ 267 // if (fResult) 268 // fResult = qobject_cast<UIWizardCloneVD*>(wizard())->copyVirtualDisk(); 269 270 // /* Unlock finish button: */ 271 // endProcessing(); 280 272 281 273 /* Return result: */ -
trunk/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageExpert.h
r82968 r90748 23 23 24 24 /* GUI includes: */ 25 #include "UIWizardCloneVDPageBasic1.h" 26 #include "UIWizardCloneVDPageBasic2.h" 25 #include "UINativeWizardPage.h" 27 26 #include "UIWizardCloneVDPageBasic3.h" 28 27 … … 32 31 33 32 /** Expert page of the Clone Virtual Disk Image wizard: */ 34 class UIWizardCloneVDPageExpert : public UIWizardPage, 35 public UIWizardCloneVDPage1, 36 public UIWizardCloneVDPage2, 37 public UIWizardCloneVDPage3 33 class UIWizardCloneVDPageExpert : public UINativeWizardPage 38 34 { 39 35 Q_OBJECT; 40 Q_PROPERTY(CMediumFormat mediumFormat READ mediumFormat WRITE setMediumFormat);41 Q_PROPERTY(qulonglong mediumVariant READ mediumVariant WRITE setMediumVariant);42 Q_PROPERTY(QString mediumPath READ mediumPath);43 Q_PROPERTY(qulonglong mediumSize READ mediumSize);44 36 45 37 public: … … 49 41 * @param enmDeviceType Brings the device type to limit format to. */ 50 42 UIWizardCloneVDPageExpert(KDeviceType enmDeviceType); 51 52 protected:53 54 /** Allows to access 'wizard()' from base part. */55 UIWizard *wizardImp() const { return wizard(); }56 /** Allows to access 'this' from base part. */57 UIWizardPage* thisImp() { return this; }58 /** Allows to access 'field()' from base part. */59 QVariant fieldImp(const QString &strFieldName) const { return UIWizardPage::field(strFieldName); }60 43 61 44 private slots: -
trunk/src/VBox/Frontends/VirtualBox/src/wizards/editors/UIWizardDiskEditors.cpp
r90576 r90748 93 93 94 94 /* static */ 95 QString UIDiskEditorGroupBox::defaultExtensionForMediumFormat(const CMediumFormat &mediumFormatRef)96 {97 if (!mediumFormatRef.isNull())98 {99 /* Load extension / device list: */100 QVector<QString> fileExtensions;101 QVector<KDeviceType> deviceTypes;102 CMediumFormat mediumFormat(mediumFormatRef);103 mediumFormat.DescribeFileExtensions(fileExtensions, deviceTypes);104 for (int i = 0; i < fileExtensions.size(); ++i)105 if (deviceTypes[i] == KDeviceType_HardDisk)106 return fileExtensions[i].toLower();107 }108 AssertMsgFailed(("Extension can't be NULL!\n"));109 return QString();110 }111 112 /* static */113 95 bool UIDiskEditorGroupBox::checkFATSizeLimitation(const qulonglong uVariant, const QString &strMediumPath, const qulonglong uSize) 114 96 { … … 137 119 *********************************************************************************************************************************/ 138 120 139 UIDiskFormatsGroupBox::UIDiskFormatsGroupBox(bool fExpertMode, QWidget *pParent /* = 0 */)121 UIDiskFormatsGroupBox::UIDiskFormatsGroupBox(bool fExpertMode, KDeviceType enmDeviceType, QWidget *pParent /* = 0 */) 140 122 : UIDiskEditorGroupBox(fExpertMode, pParent) 141 123 , m_pFormatButtonGroup(0) 142 124 { 143 prepare( );125 prepare(enmDeviceType); 144 126 } 145 127 … … 164 146 } 165 147 166 void UIDiskFormatsGroupBox::prepare( )148 void UIDiskFormatsGroupBox::prepare(KDeviceType enmDeviceType) 167 149 { 168 150 QVBoxLayout *pContainerLayout = new QVBoxLayout(this); … … 193 175 /* Create buttons for VDI, preferred and others: */ 194 176 foreach (const QString &strId, vdi.keys()) 195 addFormatButton(pContainerLayout, vdi.value(strId), true);177 addFormatButton(pContainerLayout, vdi.value(strId), enmDeviceType, true); 196 178 foreach (const QString &strId, preferred.keys()) 197 addFormatButton(pContainerLayout, preferred.value(strId), true);198 199 if (m_fExpertMode )179 addFormatButton(pContainerLayout, preferred.value(strId), enmDeviceType, true); 180 181 if (m_fExpertMode || enmDeviceType == KDeviceType_DVD || enmDeviceType == KDeviceType_Floppy) 200 182 { 201 183 foreach (const QString &strId, others.keys()) 202 addFormatButton(pContainerLayout, others.value(strId) );184 addFormatButton(pContainerLayout, others.value(strId), enmDeviceType); 203 185 } 204 186 … … 230 212 } 231 213 232 void UIDiskFormatsGroupBox::addFormatButton(QVBoxLayout *pFormatLayout, CMediumFormat medFormat, bool fPreferred /* = false */) 214 void UIDiskFormatsGroupBox::addFormatButton(QVBoxLayout *pFormatLayout, CMediumFormat medFormat, 215 KDeviceType enmDeviceType, bool fPreferred /* = false */) 233 216 { 234 217 /* Check that medium format supports creation: */ … … 247 230 QVector<KDeviceType> deviceTypes; 248 231 medFormat.DescribeFileExtensions(fileExtensions, deviceTypes); 249 if (!deviceTypes.contains( KDeviceType_HardDisk))232 if (!deviceTypes.contains(enmDeviceType)) 250 233 return; 251 234 … … 265 248 m_formatNames << medFormat.GetName(); 266 249 m_pFormatButtonGroup->addButton(pFormatButton, m_formatNames.size() - 1); 267 m_formatExtensions << defaultExtension(medFormat );250 m_formatExtensions << defaultExtension(medFormat, enmDeviceType); 268 251 } 269 252 } … … 275 258 276 259 /* static */ 277 QString UIDiskFormatsGroupBox::defaultExtension(const CMediumFormat &mediumFormatRef )260 QString UIDiskFormatsGroupBox::defaultExtension(const CMediumFormat &mediumFormatRef, KDeviceType enmDeviceType) 278 261 { 279 262 if (!mediumFormatRef.isNull()) … … 285 268 mediumFormat.DescribeFileExtensions(fileExtensions, deviceTypes); 286 269 for (int i = 0; i < fileExtensions.size(); ++i) 287 if (deviceTypes[i] == KDeviceType_HardDisk)270 if (deviceTypes[i] == enmDeviceType) 288 271 return fileExtensions[i].toLower(); 289 272 } … … 544 527 } 545 528 546 void UIMediumSizeAndPathGroupBox::updateMediumPath(const CMediumFormat &mediumFormat, const QStringList &formatExtensions) 529 void UIMediumSizeAndPathGroupBox::updateMediumPath(const CMediumFormat &mediumFormat, const QStringList &formatExtensions, 530 KDeviceType enmDeviceType) 547 531 { 548 532 /* Compose virtual-disk extension: */ 549 QString strDefaultExtension = UIDiskFormatsGroupBox::defaultExtension(mediumFormat );533 QString strDefaultExtension = UIDiskFormatsGroupBox::defaultExtension(mediumFormat, enmDeviceType); 550 534 /* Update m_pLocationEditor's text if necessary: */ 551 535 if (!m_pLocationEditor->text().isEmpty() && !strDefaultExtension.isEmpty()) -
trunk/src/VBox/Frontends/VirtualBox/src/wizards/editors/UIWizardDiskEditors.h
r90401 r90748 60 60 static QString appendExtension(const QString &strName, const QString &strExtension); 61 61 static QString constructMediumFilePath(const QString &strFileName, const QString &strPath); 62 static QString defaultExtensionForMediumFormat(const CMediumFormat &mediumFormatRef);63 62 static bool checkFATSizeLimitation(const qulonglong uVariant, const QString &strMediumPath, const qulonglong uSize); 64 63 … … 78 77 public: 79 78 80 UIDiskFormatsGroupBox(bool fExpertMode, QWidget *pParent = 0);79 UIDiskFormatsGroupBox(bool fExpertMode, KDeviceType enmDeviceType, QWidget *pParent = 0); 81 80 CMediumFormat mediumFormat() const; 82 81 void setMediumFormat(const CMediumFormat &mediumFormat); 83 82 const CMediumFormat &VDIMediumFormat() const; 84 83 const QStringList formatExtensions() const; 85 static QString defaultExtension(const CMediumFormat &mediumFormatRef );84 static QString defaultExtension(const CMediumFormat &mediumFormatRef, KDeviceType enmDeviceType); 86 85 87 86 private: 88 87 89 void prepare( );90 void addFormatButton(QVBoxLayout *pFormatLayout, CMediumFormat medFormat, bool fPreferred = false);88 void prepare(KDeviceType enmDeviceType); 89 void addFormatButton(QVBoxLayout *pFormatLayout, CMediumFormat medFormat, KDeviceType enmDeviceType, bool fPreferred = false); 91 90 92 91 virtual void retranslateUi() /* override final */; … … 152 151 QString mediumPath() const; 153 152 void setMediumPath(const QString &strMediumPath); 154 void updateMediumPath(const CMediumFormat &mediumFormat, const QStringList &formatExtensions); 153 /** Checks if the file extension is correct. Fixs it if necessary. */ 154 void updateMediumPath(const CMediumFormat &mediumFormat, const QStringList &formatExtensions, KDeviceType enmDeviceType); 155 155 qulonglong mediumSize() const; 156 156 void setMediumSize(qulonglong uSize); -
trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageExpert.cpp
r90576 r90748 65 65 QGridLayout *pMainLayout = new QGridLayout(this); 66 66 m_pSizeAndPathGroup = new UIMediumSizeAndPathGroupBox(true /* fExpertMode */, 0); 67 m_pFormatGroup = new UIDiskFormatsGroupBox(true /* fExpertMode */, 0);67 m_pFormatGroup = new UIDiskFormatsGroupBox(true /* fExpertMode */, KDeviceType_HardDisk, 0); 68 68 m_pVariantGroup = new UIDiskVariantGroupBox(true /* fExpertMode */, 0); 69 69 … … 98 98 QString strMediumPath = 99 99 UIDiskEditorGroupBox::appendExtension(strPath, 100 UIDisk EditorGroupBox::defaultExtensionForMediumFormat(pWizard->mediumFormat()));100 UIDiskFormatsGroupBox::defaultExtension(pWizard->mediumFormat(), KDeviceType_HardDisk)); 101 101 newVDWizardPropertySet(MediumPath, strMediumPath); 102 102 emit completeChanged(); … … 126 126 QString strMediumPath = 127 127 UIDiskEditorGroupBox::appendExtension(strSelectedPath, 128 UIDisk EditorGroupBox::defaultExtensionForMediumFormat(pWizard->mediumFormat()));128 UIDiskFormatsGroupBox::defaultExtension(pWizard->mediumFormat(), KDeviceType_HardDisk)); 129 129 QFileInfo mediumPath(strMediumPath); 130 130 m_pSizeAndPathGroup->setMediumPath(QDir::toNativeSeparators(mediumPath.absoluteFilePath())); … … 144 144 newVDWizardPropertySet(MediumFormat, comMediumFormat); 145 145 146 QString strExtension = UIDisk EditorGroupBox::defaultExtensionForMediumFormat(comMediumFormat);146 QString strExtension = UIDiskFormatsGroupBox::defaultExtension(comMediumFormat, KDeviceType_HardDisk); 147 147 QString strMediumFilePath = 148 148 UIDiskEditorGroupBox::constructMediumFilePath(UIDiskVariantGroupBox::appendExtension(m_strDefaultName, … … 223 223 224 224 m_pSizeAndPathGroup->blockSignals(true); 225 m_pSizeAndPathGroup->updateMediumPath(comMediumFormat, m_pFormatGroup->formatExtensions() );225 m_pSizeAndPathGroup->updateMediumPath(comMediumFormat, m_pFormatGroup->formatExtensions(), KDeviceType_HardDisk); 226 226 m_pSizeAndPathGroup->blockSignals(false); 227 227 /* Update the wizard parameters explicitly since we blocked th signals: */ -
trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageFileType.cpp
r90430 r90748 39 39 m_pLabel = new QIRichTextLabel(this); 40 40 pMainLayout->addWidget(m_pLabel); 41 m_pFormatButtonGroup = new UIDiskFormatsGroupBox(false, 0);41 m_pFormatButtonGroup = new UIDiskFormatsGroupBox(false, KDeviceType_HardDisk, 0); 42 42 pMainLayout->addWidget(m_pFormatButtonGroup, false); 43 43 -
trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageSizeLocation.cpp
r90576 r90748 107 107 QString strMediumPath = 108 108 UIDiskEditorGroupBox::appendExtension(strSelectedPath, 109 UIDisk EditorGroupBox::defaultExtensionForMediumFormat(pWizard->mediumFormat()));109 UIDiskFormatsGroupBox::defaultExtension(pWizard->mediumFormat(), KDeviceType_HardDisk)); 110 110 QFileInfo mediumPath(strMediumPath); 111 111 m_pMediumSizePathGroup->setMediumPath(QDir::toNativeSeparators(mediumPath.absoluteFilePath())); … … 126 126 QString strMediumPath = 127 127 UIDiskEditorGroupBox::appendExtension(strPath, 128 UIDisk EditorGroupBox::defaultExtensionForMediumFormat(pWizard->mediumFormat()));128 UIDiskFormatsGroupBox::defaultExtension(pWizard->mediumFormat(), KDeviceType_HardDisk)); 129 129 newVDWizardPropertySet(MediumPath, strMediumPath); 130 130 emit completeChanged(); … … 145 145 const CMediumFormat comMediumFormat = pWizard->mediumFormat(); 146 146 AssertReturnVoid(!comMediumFormat.isNull()); 147 QString strExtension = UIDisk EditorGroupBox::defaultExtensionForMediumFormat(comMediumFormat);147 QString strExtension = UIDiskFormatsGroupBox::defaultExtension(comMediumFormat, KDeviceType_HardDisk); 148 148 QString strMediumFilePath = 149 149 UIDiskEditorGroupBox::constructMediumFilePath(UIDiskVariantGroupBox::appendExtension(m_strDefaultName, -
trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMDiskPageBasic.cpp
r90427 r90748 334 334 setWidgetVisibility(pWizard->mediumFormat()); 335 335 } 336 QString strDefaultExtension = UIDisk EditorGroupBox::defaultExtensionForMediumFormat(pWizard->mediumFormat());336 QString strDefaultExtension = UIDiskFormatsGroupBox::defaultExtension(pWizard->mediumFormat(), KDeviceType_HardDisk); 337 337 338 338 /* We set the medium name and path according to machine name/path and do not allow user change these in the guided mode: */ -
trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageExpert.cpp
r90413 r90748 455 455 m_pSizeAndLocationGroup = new UIMediumSizeAndPathGroupBox(true, 0); 456 456 pDiskContainerLayout->addWidget(m_pSizeAndLocationGroup, 0, 0, 2, 2); 457 m_pFormatButtonGroup = new UIDiskFormatsGroupBox(true, 0);457 m_pFormatButtonGroup = new UIDiskFormatsGroupBox(true, KDeviceType_HardDisk, 0); 458 458 pDiskContainerLayout->addWidget(m_pFormatButtonGroup, 2, 0, 4, 1); 459 459 m_pDiskVariantGroupBox = new UIDiskVariantGroupBox(true, 0); … … 697 697 QString strMediumPath = 698 698 UIDiskEditorGroupBox::appendExtension(strSelectedPath, 699 UIDisk EditorGroupBox::defaultExtensionForMediumFormat(pWizard->mediumFormat()));699 UIDiskFormatsGroupBox::defaultExtension(pWizard->mediumFormat(), KDeviceType_HardDisk)); 700 700 QFileInfo mediumPath(strMediumPath); 701 701 m_pSizeAndLocationGroup->setMediumPath(QDir::toNativeSeparators(mediumPath.absoluteFilePath())); … … 801 801 strMediumPath = uiCommon().virtualBox().GetSystemProperties().GetDefaultMachineFolder(); 802 802 } 803 QString strExtension = UIDisk EditorGroupBox::defaultExtensionForMediumFormat(pWizard->mediumFormat());803 QString strExtension = UIDiskFormatsGroupBox::defaultExtension(pWizard->mediumFormat(), KDeviceType_HardDisk); 804 804 if (m_pSizeAndLocationGroup) 805 805 { … … 827 827 828 828 m_pSizeAndLocationGroup->blockSignals(true); 829 m_pSizeAndLocationGroup->updateMediumPath(comMediumFormat, m_pFormatButtonGroup->formatExtensions() );829 m_pSizeAndLocationGroup->updateMediumPath(comMediumFormat, m_pFormatButtonGroup->formatExtensions(), KDeviceType_HardDisk); 830 830 m_pSizeAndLocationGroup->blockSignals(false); 831 831 /* Update the wizard parameters explicitly since we blocked th signals: */
Note:
See TracChangeset
for help on using the changeset viewer.