VirtualBox

Ignore:
Timestamp:
Aug 20, 2021 3:20:36 PM (3 years ago)
Author:
vboxsync
Message:

FE/Qt: bugref:9996. Medium size and path parameter of the clone vd wizard.

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMediumDetailsWidget.cpp

    r82968 r90761  
    465465
    466466                /* Create size editor: */
    467                 m_pEditorSize = new UIMediumSizeEditor;
     467                m_pEditorSize = new UIMediumSizeEditor(0 /* parent */);
    468468                AssertPtrReturnVoid(m_pEditorSize);
    469469                {
  • trunk/src/VBox/Frontends/VirtualBox/src/widgets/UIMediumSizeEditor.cpp

    r82968 r90761  
    3434const qulonglong UIMediumSizeEditor::m_uSectorSize = 512;
    3535
    36 UIMediumSizeEditor::UIMediumSizeEditor(QWidget *pParent /* = 0 */)
     36UIMediumSizeEditor::UIMediumSizeEditor(QWidget *pParent, qulonglong uMinimumSize /* = _4M */)
    3737    : QIWithRetranslateUI<QWidget>(pParent)
    38     , m_uSizeMin(_4M)
     38    , m_uSizeMin(uMinimumSize)
    3939    , m_uSizeMax(uiCommon().virtualBox().GetSystemProperties().GetInfoVDSize())
    4040    , m_iSliderScale(calculateSliderScale(m_uSizeMax))
  • trunk/src/VBox/Frontends/VirtualBox/src/widgets/UIMediumSizeEditor.h

    r82968 r90761  
    5151
    5252    /** Constructs medium size editor passing @a pParent to the base-class. */
    53     UIMediumSizeEditor(QWidget *pParent = 0);
     53    UIMediumSizeEditor(QWidget *pParent = 0, qulonglong uMinimumSize = _4M);
    5454
    5555    /** Returns the medium size. */
  • trunk/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVD.cpp

    r90755 r90761  
    3434    : UINativeWizard(pParent, WizardType_CloneVD)
    3535    , m_comSourceVirtualDisk(comSourceVirtualDisk)
    36     , m_enmSourceVirtualDiskDeviceType(m_comSourceVirtualDisk.GetDeviceType())
     36    , m_enmDeviceType(m_comSourceVirtualDisk.GetDeviceType())
    3737    , m_iMediumVariantPageIndex(-1)
    3838{
     
    4444    setPixmapName(":/wizard_new_harddisk_bg.png");
    4545#endif /* VBOX_WS_MAC */
     46}
     47
     48KDeviceType UIWizardCloneVD::deviceType() const
     49{
     50    return m_enmDeviceType;
    4651}
    4752
     
    6166
    6267    // /* Create new virtual disk image: */
    63     // CMedium comVirtualDisk = comVBox.CreateMedium(comMediumFormat.GetName(), strMediumPath, KAccessMode_ReadWrite, m_enmSourceVirtualDiskDeviceType);
     68    // CMedium comVirtualDisk = comVBox.CreateMedium(comMediumFormat.GetName(), strMediumPath, KAccessMode_ReadWrite, m_enmDeviceType);
    6469    // if (!comVBox.isOk())
    6570    // {
     
    104109        case WizardMode_Expert:
    105110        {
    106             addPage(new UIWizardCloneVDPageBasic1(m_enmSourceVirtualDiskDeviceType));
    107             m_iMediumVariantPageIndex = addPage(new UIWizardCloneVDPageBasic2(m_enmSourceVirtualDiskDeviceType));
    108             addPage(new UIWizardCloneVDPageBasic3);
     111            addPage(new UIWizardCloneVDPageBasic1(m_enmDeviceType));
     112            m_iMediumVariantPageIndex = addPage(new UIWizardCloneVDPageBasic2(m_enmDeviceType));
     113            addPage(new UIWizardCloneVDPageBasic3(sourceDiskLogicalSize()));
    109114            break;
    110115        }
    111116        // case WizardMode_Expert:
    112117        // {
    113         //     setPage(PageExpert, new UIWizardCloneVDPageExpert(m_enmSourceVirtualDiskDeviceType));
     118        //     setPage(PageExpert, new UIWizardCloneVDPageExpert(m_enmDeviceType));
    114119        //     break;
    115120        // }
     
    144149}
    145150
     151qulonglong UIWizardCloneVD::mediumSize() const
     152{
     153    return m_uMediumSize;
     154}
     155
     156void UIWizardCloneVD::setMediumSize(qulonglong uMediumSize)
     157{
     158    m_uMediumSize = uMediumSize;
     159}
     160
     161const QString &UIWizardCloneVD::mediumPath() const
     162{
     163    return m_strMediumPath;
     164}
     165
     166void UIWizardCloneVD::setMediumPath(const QString &strPath)
     167{
     168    m_strMediumPath = strPath;
     169}
     170
     171qulonglong UIWizardCloneVD::sourceDiskLogicalSize() const
     172{
     173    if (m_comSourceVirtualDisk.isNull())
     174        return 0;
     175    return m_comSourceVirtualDisk.GetLogicalSize();
     176}
     177
     178QString UIWizardCloneVD::sourceDiskFilePath() const
     179{
     180    if (m_comSourceVirtualDisk.isNull())
     181        return QString();
     182    return m_comSourceVirtualDisk.GetLocation();
     183}
     184
     185QString UIWizardCloneVD::sourceDiskName() const
     186{
     187    if (m_comSourceVirtualDisk.isNull())
     188        return QString();
     189    return m_comSourceVirtualDisk.GetName();
     190}
     191
    146192void UIWizardCloneVD::setMediumVariantPageVisibility()
    147193{
  • trunk/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVD.h

    r90755 r90761  
    4545
    4646    /** Returns the source virtual-disk device type. */
    47     KDeviceType sourceVirtualDiskDeviceType() const { return m_enmSourceVirtualDiskDeviceType; }
     47    KDeviceType deviceType() const;
    4848
    4949    /** Makes a copy of source virtual-disk. */
     
    5555    qulonglong mediumVariant() const;
    5656    void setMediumVariant(qulonglong uMediumVariant);
     57
     58    qulonglong mediumSize() const;
     59    void setMediumSize(qulonglong uMediumSize);
     60
     61    const QString &mediumPath() const;
     62    void setMediumPath(const QString &strPath);
     63
     64    qulonglong sourceDiskLogicalSize() const;
     65    QString sourceDiskFilePath() const;
     66    QString sourceDiskName() const;
    5767
    5868protected:
     
    7282
    7383    /** Holds the source virtual-disk device type. */
    74     KDeviceType m_enmSourceVirtualDiskDeviceType;
     84    KDeviceType m_enmDeviceType;
    7585    int m_iMediumVariantPageIndex;
     86    qulonglong m_uMediumSize;
     87    QString m_strMediumPath;
    7688};
    7789
  • trunk/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageBasic3.cpp

    r90756 r90761  
    164164// }
    165165
    166 UIWizardCloneVDPageBasic3::UIWizardCloneVDPageBasic3()
     166UIWizardCloneVDPageBasic3::UIWizardCloneVDPageBasic3(qulonglong uSourceDiskLogicaSize)
    167167    : m_pMediumSizePathGroupBox(0)
    168168{
    169     prepare();
    170 }
    171 
    172 void UIWizardCloneVDPageBasic3::prepare()
     169    prepare(uSourceDiskLogicaSize);
     170}
     171
     172void UIWizardCloneVDPageBasic3::prepare(qulonglong uSourceDiskLogicaSize)
    173173{
    174174    QVBoxLayout *pMainLayout = new QVBoxLayout(this);
    175175
    176     m_pMediumSizePathGroupBox = new UIMediumSizeAndPathGroupBox(false /* expert mode */, 0);
     176    m_pMediumSizePathGroupBox = new UIMediumSizeAndPathGroupBox(false /* expert mode */, 0 /* parent */, uSourceDiskLogicaSize);
    177177    if (m_pMediumSizePathGroupBox)
    178178        pMainLayout->addWidget(m_pMediumSizePathGroupBox);
     
    180180    pMainLayout->addStretch();
    181181
    182     // connect(m_pDestinationDiskEditor, &QLineEdit::textChanged,    this, &UIWizardCloneVDPageBasic3::completeChanged);
    183     // connect(m_pDestinationDiskOpenButton, &QIToolButton::clicked, this, &UIWizardCloneVDPageBasic3::sltSelectLocationButtonClicked);
     182    connect(m_pMediumSizePathGroupBox, &UIMediumSizeAndPathGroupBox::sigMediumLocationButtonClicked,
     183            this, &UIWizardCloneVDPageBasic3::sltSelectLocationButtonClicked);
     184    connect(m_pMediumSizePathGroupBox, &UIMediumSizeAndPathGroupBox::sigMediumPathChanged,
     185            this, &UIWizardCloneVDPageBasic3::sltMediumPathChanged);
    184186
    185187    retranslateUi();
    186 }
    187 
    188 void UIWizardCloneVDPageBasic3::sltSelectLocationButtonClicked()
    189 {
    190     /* Call to base-class: */
    191     //onSelectLocationButtonClicked();
    192188}
    193189
     
    200196void UIWizardCloneVDPageBasic3::initializePage()
    201197{
    202     // /* Translate page: */
    203     // retranslateUi();
    204 
    205     // UIWizardCloneVD *pWizard = qobject_cast<UIWizardCloneVD*>(wizardImp());
    206     // if (!pWizard)
    207     //     return;
    208     // const CMedium &comMedium = pWizard->sourceVirtualDisk();
    209 
    210     // /* Get source virtual-disk file-information: */
    211     // QFileInfo sourceFileInfo(comMedium.GetLocation());
    212     // /* Get default path for virtual-disk copy: */
    213     // m_strDefaultPath = sourceFileInfo.absolutePath();
    214     // /* Get default extension for virtual-disk copy: */
    215     // acquireExtensions(field("mediumFormat").value<CMediumFormat>(),
    216     //                   static_cast<UIWizardCloneVD*>(wizardImp())->sourceVirtualDiskDeviceType(),
    217     //                   m_aAllowedExtensions, m_strDefaultExtension);
    218     // /* Compose default-name for virtual-disk copy: */
    219     // QString strMediumName = UIWizardCloneVD::tr("%1_copy", "copied virtual disk image name").arg(sourceFileInfo.completeBaseName());
    220     // /* Set default-name as text for location editor: */
    221     // m_pDestinationDiskEditor->setText(strMediumName);
     198    AssertReturnVoid(cloneWizard() && m_pMediumSizePathGroupBox);
     199    /* Translate page: */
     200    retranslateUi();
     201    UIWizardCloneVD *pWizard = cloneWizard();
     202    m_pMediumSizePathGroupBox->blockSignals(true);
     203
     204    /* Initialize medium size widget and wizard's medium size parameter: */
     205    if (!m_userModifiedParameters.contains("MediumSize"))
     206    {
     207        m_pMediumSizePathGroupBox->setMediumSize(pWizard->sourceDiskLogicalSize());
     208        pWizard->setMediumSize(m_pMediumSizePathGroupBox->mediumSize());
     209    }
     210
     211    if (!m_userModifiedParameters.contains("MediumPath"))
     212    {
     213        const CMediumFormat comMediumFormat = pWizard->mediumFormat();
     214        AssertReturnVoid(!comMediumFormat.isNull());
     215        QString strExtension = UIDiskFormatsGroupBox::defaultExtension(comMediumFormat, KDeviceType_HardDisk);
     216        QString strSourceDiskPath = QDir::toNativeSeparators(QFileInfo(pWizard->sourceDiskFilePath()).absolutePath());
     217        /* Disk name without the format extension: */
     218        QString strDiskName = QString("%1_%2").arg(QFileInfo(pWizard->sourceDiskName()).completeBaseName()).arg(tr("copy"));
     219
     220        QString strMediumFilePath =
     221            UIDiskEditorGroupBox::constructMediumFilePath(UIDiskVariantGroupBox::appendExtension(strDiskName,
     222                                                                                                 strExtension), strSourceDiskPath);
     223        m_pMediumSizePathGroupBox->setMediumPath(strMediumFilePath);
     224        pWizard->setMediumPath(strMediumFilePath);
     225    }
     226    m_pMediumSizePathGroupBox->blockSignals(false);
    222227}
    223228
     
    255260    return fResult;
    256261}
     262
     263UIWizardCloneVD *UIWizardCloneVDPageBasic3::cloneWizard() const
     264{
     265    return qobject_cast<UIWizardCloneVD*>(wizard());
     266}
     267
     268void UIWizardCloneVDPageBasic3::sltSelectLocationButtonClicked()
     269{
     270    UIWizardCloneVD *pWizard = cloneWizard();
     271    AssertReturnVoid(pWizard);
     272    CMediumFormat comMediumFormat(pWizard->mediumFormat());
     273    QString strSelectedPath =
     274        UIDiskEditorGroupBox::openFileDialogForDiskFile(pWizard->mediumPath(), comMediumFormat, pWizard);
     275
     276    if (strSelectedPath.isEmpty())
     277        return;
     278    QString strMediumPath =
     279        UIDiskEditorGroupBox::appendExtension(strSelectedPath,
     280                                              UIDiskFormatsGroupBox::defaultExtension(pWizard->mediumFormat(), KDeviceType_HardDisk));
     281    QFileInfo mediumPath(strMediumPath);
     282    m_pMediumSizePathGroupBox->setMediumPath(QDir::toNativeSeparators(mediumPath.absoluteFilePath()));
     283}
     284
     285void UIWizardCloneVDPageBasic3::sltMediumPathChanged(const QString &strPath)
     286{
     287    UIWizardCloneVD *pWizard = cloneWizard();
     288    AssertReturnVoid(pWizard);
     289    m_userModifiedParameters << "MediumPath";
     290    QString strMediumPath =
     291        UIDiskEditorGroupBox::appendExtension(strPath,
     292                                              UIDiskFormatsGroupBox::defaultExtension(pWizard->mediumFormat(), pWizard->deviceType()));
     293    pWizard->setMediumPath(strMediumPath);
     294    emit completeChanged();
     295}
  • trunk/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageBasic3.h

    r90756 r90761  
    2424/* Qt includes: */
    2525#include <QVariant>
     26#include <QSet>
    2627
    2728/* GUI includes: */
     
    3435class QIRichTextLabel;
    3536class UIMediumSizeAndPathGroupBox;
     37class UIWizardCloneVD;
    3638
    3739// /** 4th page of the Clone Virtual Disk Image wizard (base part): */
     
    8385
    8486    /** Constructs basic page. */
    85     UIWizardCloneVDPageBasic3();
     87    UIWizardCloneVDPageBasic3(qulonglong uSourceDiskLogicaSize);
    8688
    8789private slots:
     
    8991    /** Handles command to open target disk. */
    9092    void sltSelectLocationButtonClicked();
     93    void sltMediumPathChanged(const QString &strPath);
    9194
    9295private:
     
    9497    /** Handles translation event. */
    9598    virtual void retranslateUi() /* override */;
    96     void prepare();
     99    void prepare(qulonglong uSourceDiskLogicaSize);
    97100
    98101    /** Prepares the page. */
     
    104107    /** Returns whether the page is valid. */
    105108    virtual bool validatePage() /* override */;
     109    UIWizardCloneVD *cloneWizard() const;
     110
    106111
    107112    UIMediumSizeAndPathGroupBox *m_pMediumSizePathGroupBox;
     113
     114    QSet<QString> m_userModifiedParameters;
    108115};
    109116
  • trunk/src/VBox/Frontends/VirtualBox/src/wizards/editors/UIWizardDiskEditors.cpp

    r90755 r90761  
    113113}
    114114
     115/* static */
     116QString UIDiskEditorGroupBox::openFileDialogForDiskFile(const QString &strInitialPath, CMediumFormat &comMediumFormat, QWidget *pParent)
     117{
     118    QString strChosenFilePath;
     119    QFileInfo initialPath(strInitialPath);
     120    QDir folder = initialPath.path();
     121    QString strFileName = initialPath.fileName();
     122
     123    // /* Set the first parent folder that exists as the current: */
     124    while (!folder.exists() && !folder.isRoot())
     125    {
     126        QFileInfo folderInfo(folder.absolutePath());
     127        if (folder == QDir(folderInfo.absolutePath()))
     128            break;
     129        folder = folderInfo.absolutePath();
     130    }
     131    AssertReturn(folder.exists() && !folder.isRoot(), strChosenFilePath);
     132
     133    QVector<QString> fileExtensions;
     134    QVector<KDeviceType> deviceTypes;
     135    comMediumFormat.DescribeFileExtensions(fileExtensions, deviceTypes);
     136    QStringList validExtensionList;
     137    for (int i = 0; i < fileExtensions.size(); ++i)
     138        if (deviceTypes[i] == KDeviceType_HardDisk)
     139            validExtensionList << QString("*.%1").arg(fileExtensions[i]);
     140    /* Compose full filter list: */
     141    QString strBackendsList = QString("%1 (%2)").arg(comMediumFormat.GetName()).arg(validExtensionList.join(" "));
     142
     143    strChosenFilePath = QIFileDialog::getSaveFileName(folder.absoluteFilePath(strFileName),
     144                                                              strBackendsList, pParent,
     145                                                              UICommon::tr("Please choose a location for new virtual hard disk file"));
     146    return strChosenFilePath;
     147}
    115148
    116149
     
    447480*********************************************************************************************************************************/
    448481
    449 UIMediumSizeAndPathGroupBox::UIMediumSizeAndPathGroupBox(bool fExpertMode, QWidget *pParent /* = 0 */)
     482UIMediumSizeAndPathGroupBox::UIMediumSizeAndPathGroupBox(bool fExpertMode, QWidget *pParent, qulonglong uMinimumMediumSize)
    450483    : UIDiskEditorGroupBox(fExpertMode, pParent)
    451484    , m_pLocationEditor(0)
     
    455488    , m_pSizeLabel(0)
    456489{
    457     prepare();
    458 }
    459 
    460 void UIMediumSizeAndPathGroupBox::prepare()
     490    prepare(uMinimumMediumSize);
     491}
     492
     493void UIMediumSizeAndPathGroupBox::prepare(qulonglong uMinimumMediumSize)
    461494{
    462495    QVBoxLayout *pMainLayout = new QVBoxLayout(this);
     
    478511    if (!m_fExpertMode)
    479512        m_pSizeLabel = new QIRichTextLabel;
    480     m_pMediumSizeEditor = new UIMediumSizeEditor;
     513    m_pMediumSizeEditor = new UIMediumSizeEditor(0 /* parent */, uMinimumMediumSize);
    481514
    482515    /* Add widgets to main layout: */
  • trunk/src/VBox/Frontends/VirtualBox/src/wizards/editors/UIWizardDiskEditors.h

    r90755 r90761  
    6262    static QString constructMediumFilePath(const QString &strFileName, const QString &strPath);
    6363    static bool checkFATSizeLimitation(const qulonglong uVariant, const QString &strMediumPath, const qulonglong uSize);
     64    static QString openFileDialogForDiskFile(const QString &strInitialPath, CMediumFormat &comMediumFormat, QWidget *pParent);
    6465
    6566protected:
     
    149150public:
    150151
    151     UIMediumSizeAndPathGroupBox(bool fExpertMode, QWidget *pParent = 0);
     152    UIMediumSizeAndPathGroupBox(bool fExpertMode, QWidget *pParent, qulonglong uMinimumMediumSize);
    152153    QString mediumPath() const;
    153154    void setMediumPath(const QString &strMediumPath);
     
    159160private:
    160161
    161     void prepare();
     162    void prepare(qulonglong uMinimumMediumSize);
    162163    virtual void retranslateUi() /* override final */;
    163164    static QString stripFormatExtension(const QString &strFileName,
  • trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageExpert.cpp

    r90748 r90761  
    6464{
    6565    QGridLayout *pMainLayout = new QGridLayout(this);
    66     m_pSizeAndPathGroup = new UIMediumSizeAndPathGroupBox(true /* fExpertMode */, 0);
     66    m_pSizeAndPathGroup = new UIMediumSizeAndPathGroupBox(true /* fExpertMode */, 0 /* parent */, _4M /* minimum size */);
    6767    m_pFormatGroup = new UIDiskFormatsGroupBox(true /* fExpertMode */, KDeviceType_HardDisk, 0);
    6868    m_pVariantGroup = new UIDiskVariantGroupBox(true /* fExpertMode */, 0);
  • trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageSizeLocation.cpp

    r90748 r90761  
    3131#include "CSystemProperties.h"
    3232
    33 
    3433QString UIWizardNewVDSizeLocation::selectNewMediumLocation(UIWizardNewVD *pWizard)
    3534{
     
    8584    QVBoxLayout *pMainLayout = new QVBoxLayout(this);
    8685    AssertReturnVoid(pMainLayout);
    87     m_pMediumSizePathGroup = new UIMediumSizeAndPathGroupBox(false /* fExpertMode */, 0);
     86    m_pMediumSizePathGroup = new UIMediumSizeAndPathGroupBox(false /* fExpertMode */, 0 /* parent */, _4M /* minimum size */);
    8887    connect(m_pMediumSizePathGroup, &UIMediumSizeAndPathGroupBox::sigMediumSizeChanged,
    8988            this, &UIWizardNewVDPageSizeLocation::sltMediumSizeChanged);
  • trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageExpert.cpp

    r90748 r90761  
    453453    QGridLayout *pDiskContainerLayout = new QGridLayout(pNewDiskContainerWidget);
    454454
    455     m_pSizeAndLocationGroup = new UIMediumSizeAndPathGroupBox(true, 0);
     455    m_pSizeAndLocationGroup = new UIMediumSizeAndPathGroupBox(true, 0 /* parent */, _4M /* minimum size */);
    456456    pDiskContainerLayout->addWidget(m_pSizeAndLocationGroup, 0, 0, 2, 2);
    457457    m_pFormatButtonGroup = new UIDiskFormatsGroupBox(true, KDeviceType_HardDisk, 0);
Note: See TracChangeset for help on using the changeset viewer.

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