VirtualBox

Changeset 38102 in vbox for trunk/src/VBox/Frontends


Ignore:
Timestamp:
Jul 21, 2011 4:06:30 PM (14 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
73052
Message:

FE/Qt4: linked clone support

Location:
trunk/src/VBox/Frontends/VirtualBox
Files:
1 added
3 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/VBoxUI.pro

    r37544 r38102  
    5151    src/wizards/clonevm/UICloneVMWizardPage1.ui \
    5252    src/wizards/clonevm/UICloneVMWizardPage2.ui \
     53    src/wizards/clonevm/UICloneVMWizardPage3.ui \
    5354    src/wizards/newvm/UINewVMWzdPage1.ui \
    5455    src/wizards/newvm/UINewVMWzdPage2.ui \
  • trunk/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UICloneVMWizard.cpp

    r38099 r38102  
    3131#include "iprt/path.h"
    3232
    33 UICloneVMWizard::UICloneVMWizard(QWidget *pParent, CMachine machine, bool fShowChildsOption /* = true */)
     33UICloneVMWizard::UICloneVMWizard(QWidget *pParent, CMachine machine, CSnapshot snapshot /* = CSnapshot() */)
    3434    : QIWizard(pParent)
    3535    , m_machine(machine)
    3636{
    3737    /* Create & add pages: */
    38     addPage(new UICloneVMWizardPage1(machine.GetName()));
     38    setPage(PageIntro, new UICloneVMWizardPage1(machine.GetName()));
     39    /* If we are having a snapshot we can show the "Linked" option. */
     40    if (!snapshot.isNull())
     41        setPage(PageType, new UICloneVMWizardPage2());
    3942    /* If the machine has no snapshots, we don't bother the user about options
    4043     * for it. */
    4144    if (machine.GetSnapshotCount() > 0)
    42         addPage(new UICloneVMWizardPage2(fShowChildsOption));
     45        setPage(PageMode, new UICloneVMWizardPage3(snapshot.isNull() ? false : snapshot.GetChildrenCount() > 0));
    4346
    4447    /* Translate wizard: */
     
    6972}
    7073
    71 bool UICloneVMWizard::createClone(const QString &strName, KCloneMode mode, bool fReinitMACs)
     74bool UICloneVMWizard::createClone(const QString &strName, KCloneMode mode, bool fReinitMACs, bool fLinked /* = false */)
    7275{
    7376    CVirtualBox vbox = vboxGlobal().virtualBox();
     
    8689    if (!fReinitMACs)
    8790        options.append(KCloneOptions_KeepAllMACs);
     91    /* Linked clones requested? */
     92    if (fLinked)
     93        options.append(KCloneOptions_Link);
    8894
    8995    /* Start cloning. */
     
    192198}
    193199
    194 UICloneVMWizardPage2::UICloneVMWizardPage2(bool fShowChildsOption /* = true */)
    195   : m_fShowChildsOption(fShowChildsOption)
     200UICloneVMWizardPage2::UICloneVMWizardPage2()
    196201{
    197202    /* Decorate page: */
    198203    Ui::UICloneVMWizardPage2::setupUi(this);
    199204
     205    QButtonGroup *pButtonGroup = new QButtonGroup(this);
     206    pButtonGroup->addButton(m_pFullCloneRadio);
     207    pButtonGroup->addButton(m_pLinkedCloneRadio);
     208
     209    connect(pButtonGroup, SIGNAL(buttonClicked(QAbstractButton *)),
     210            this, SLOT(buttonClicked(QAbstractButton *)));
     211}
     212
     213void UICloneVMWizardPage2::buttonClicked(QAbstractButton *pButton)
     214{
     215    setFinalPage(pButton != m_pFullCloneRadio);
     216}
     217
     218void UICloneVMWizardPage2::retranslateUi()
     219{
     220    /* Translate uic generated strings: */
     221    Ui::UICloneVMWizardPage2::retranslateUi(this);
     222
     223    /* Set 'Page2' page title: */
     224    setTitle(tr("Cloning Configuration"));
     225}
     226
     227void UICloneVMWizardPage2::initializePage()
     228{
     229    /* Retranslate page: */
     230    retranslateUi();
     231}
     232
     233int UICloneVMWizardPage2::nextId() const
     234{
     235    return m_pFullCloneRadio->isChecked() ? UICloneVMWizard::PageMode : -1;
     236}
     237
     238bool UICloneVMWizardPage2::validatePage()
     239{
     240    if (isFinalPage())
     241    {
     242        /* Start performing long-time operation: */
     243        startProcessing();
     244        /* Try to create the clone: */
     245        QString strName = field("cloneName").toString();
     246        bool fReinitMACs = field("reinitMACs").toBool();
     247        bool fResult = static_cast<UICloneVMWizard*>(wizard())->createClone(strName, KCloneMode_MachineState, fReinitMACs, true);
     248        /* Finish performing long-time operation: */
     249        endProcessing();
     250        /* Return operation result: */
     251        return fResult;
     252    }
     253    else
     254        return true;
     255}
     256
     257UICloneVMWizardPage3::UICloneVMWizardPage3(bool fShowChildsOption /* = true */)
     258  : m_fShowChildsOption(fShowChildsOption)
     259{
     260    /* Decorate page: */
     261    Ui::UICloneVMWizardPage3::setupUi(this);
     262
    200263    if (!fShowChildsOption)
    201264       m_pMachineAndChildsRadio->hide();
    202265}
    203266
    204 void UICloneVMWizardPage2::retranslateUi()
     267void UICloneVMWizardPage3::retranslateUi()
    205268{
    206269    /* Translate uic generated strings: */
    207     Ui::UICloneVMWizardPage2::retranslateUi(this);
    208 
    209     /* Set 'Page2' page title: */
     270    Ui::UICloneVMWizardPage3::retranslateUi(this);
     271
     272    /* Set 'Page3' page title: */
    210273    setTitle(tr("Cloning Configuration"));
    211274
     
    227290}
    228291
    229 void UICloneVMWizardPage2::initializePage()
     292void UICloneVMWizardPage3::initializePage()
    230293{
    231294    /* Retranslate page: */
     
    233296}
    234297
    235 bool UICloneVMWizardPage2::validatePage()
     298bool UICloneVMWizardPage3::validatePage()
    236299{
    237300    /* Start performing long-time operation: */
     
    247310}
    248311
    249 KCloneMode UICloneVMWizardPage2::cloneMode() const
     312KCloneMode UICloneVMWizardPage3::cloneMode() const
    250313{
    251314    if (m_pMachineRadio->isChecked())
     
    256319}
    257320
    258 void UICloneVMWizardPage2::setCloneMode(KCloneMode mode)
     321void UICloneVMWizardPage3::setCloneMode(KCloneMode mode)
    259322{
    260323    switch(mode)
  • trunk/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UICloneVMWizard.h

    r37899 r38102  
    2727#include "UICloneVMWizardPage1.gen.h"
    2828#include "UICloneVMWizardPage2.gen.h"
     29#include "UICloneVMWizardPage3.gen.h"
    2930
    3031/* Clone vm wizard class: */
     
    3536public:
    3637
     38    enum
     39    {
     40        PageIntro,
     41        PageType,
     42        PageMode
     43    };
     44
    3745    /* Constructor: */
    38     UICloneVMWizard(QWidget *pParent, CMachine machine, bool fShowChildsOption = true);
     46    UICloneVMWizard(QWidget *pParent, CMachine machine, CSnapshot snapshot = CSnapshot());
    3947
    40     bool createClone(const QString &strName, KCloneMode mode, bool fReinitMACs);
     48    bool createClone(const QString &strName, KCloneMode mode, bool fReinitMACs, bool fLinked = false);
    4149
    4250private:
     
    108116{
    109117    Q_OBJECT;
     118
     119public:
     120
     121    /* Constructor: */
     122    UICloneVMWizardPage2();
     123    int nextId() const;
     124
     125protected:
     126
     127    /* Translation stuff: */
     128    void retranslateUi();
     129
     130    /* Prepare page: */
     131    void initializePage();
     132
     133    bool validatePage();
     134
     135private slots:
     136
     137    void buttonClicked(QAbstractButton *pButton);
     138};
     139
     140/* Page3 of the new clonevm wizard: */
     141class UICloneVMWizardPage3 : public UICloneVMWizardPage, public Ui::UICloneVMWizardPage3
     142{
     143    Q_OBJECT;
    110144    Q_PROPERTY(KCloneMode cloneMode READ cloneMode WRITE setCloneMode);
    111145
     
    113147
    114148    /* Constructor: */
    115     UICloneVMWizardPage2(bool fShowChildsOption = true);
     149    UICloneVMWizardPage3(bool fShowChildsOption = true);
    116150
    117151protected:
  • trunk/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UICloneVMWizardPage3.ui

    r38089 r38102  
    1414     hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
    1515 </comment>
    16  <class>UICloneVMWizardPage2</class>
    17  <widget class="QWidget" name="UICloneVMWizardPage2">
     16 <class>UICloneVMWizardPage3</class>
     17 <widget class="QWidget" name="UICloneVMWizardPage3">
    1818  <property name="geometry">
    1919   <rect>
Note: See TracChangeset for help on using the changeset viewer.

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