VirtualBox

Changeset 5247 in vbox


Ignore:
Timestamp:
Oct 11, 2007 6:59:17 PM (17 years ago)
Author:
vboxsync
Message:

2410: VBoxSVC crash when CD/DVD image removed (deregistered) from snapshot:

Added CD|FD snapshot usage info in VDM.
Release button restricted for images used in some snapshot of some VM.

Location:
trunk/src/VBox/Frontends/VirtualBox/ui
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/ui/VBoxDiskImageManagerDlg.ui

    r5194 r5247  
    599599    <function specifier="static" access="private" returnType="QString">getDVDImageUsage( const QUuid &amp; id )</function>
    600600    <function specifier="static" access="private" returnType="QString">getFloppyImageUsage( const QUuid &amp; id )</function>
     601    <function specifier="static" access="private">sourceSnapshotsCD( const QUuid &amp; aImageId, const CSnapshot &amp; aSnapshot, QString &amp; aUsage )</function>
     602    <function specifier="static" access="private">sourceSnapshotsFD( const QUuid &amp; aImageId, const CSnapshot &amp; aSnapshot, QString &amp; aUsage )</function>
    601603    <function access="private" returnType="bool">checkImage( DiskImageItem* item )</function>
    602604    <function access="private">releaseDisk( QUuid machineId, QUuid itemId, VBoxDefs::DiskType diskType )</function>
  • trunk/src/VBox/Frontends/VirtualBox/ui/VBoxDiskImageManagerDlg.ui.h

    r4071 r5247  
    874874        if (usage)
    875875            usage += ", ";
    876         usage += vbox.GetMachine (QUuid (*it)).GetName();
     876        CMachine machine = vbox.GetMachine (QUuid (*it));
     877        usage += machine.GetName();
     878
     879        QString snapshots;
     880        sourceSnapshotsCD (aId, machine.GetSnapshot (QUuid()), snapshots);
     881        if (!snapshots.isEmpty())
     882            usage += QString (" (%1)").arg (snapshots);
    877883    }
    878884
     
    888894            else
    889895                usage += "[";
    890             usage += vbox.GetMachine (QUuid (*it)).GetName() + "]";
     896            CMachine machine = vbox.GetMachine (QUuid (*it));
     897            usage += machine.GetName() + "]";
     898
     899            QString snapshots;
     900            sourceSnapshotsCD (aId, machine.GetSnapshot (QUuid()), snapshots);
     901            if (!snapshots.isEmpty())
     902                usage += QString (" (%1)").arg (snapshots);
    891903        }
    892904    }
     
    912924        if (usage)
    913925            usage += ", ";
    914         usage += vbox.GetMachine (QUuid (*it)).GetName();
     926        CMachine machine = vbox.GetMachine (QUuid (*it));
     927        usage += machine.GetName();
     928
     929        QString snapshots;
     930        sourceSnapshotsFD (aId, machine.GetSnapshot (QUuid()), snapshots);
     931        if (!snapshots.isEmpty())
     932            usage += QString (" (%1)").arg (snapshots);
    915933    }
    916934
     
    926944            else
    927945                usage += "[";
    928             usage += vbox.GetMachine (QUuid (*it)).GetName() + "]";
     946            CMachine machine = vbox.GetMachine (QUuid (*it));
     947            usage += machine.GetName() + "]";
     948
     949            QString snapshots;
     950            sourceSnapshotsFD (aId, machine.GetSnapshot (QUuid()), snapshots);
     951            if (!snapshots.isEmpty())
     952                usage += QString (" (%1)").arg (snapshots);
    929953        }
    930954    }
    931955
    932956    return usage;
     957}
     958
     959
     960void VBoxDiskImageManagerDlg::sourceSnapshotsCD (const QUuid &aImageId,
     961                                                 const CSnapshot &aSnapshot,
     962                                                 QString &aUsage)
     963{
     964    if (aSnapshot.isNull())
     965        return;
     966
     967    if (!aSnapshot.GetMachine().GetDVDDrive().GetImage().isNull() &&
     968        aSnapshot.GetMachine().GetDVDDrive().GetImage().GetId() == aImageId)
     969    {
     970        if (aUsage)
     971            aUsage += ", ";
     972        aUsage += aSnapshot.GetName();
     973    }
     974
     975    CSnapshotEnumerator en = aSnapshot.GetChildren().Enumerate();
     976    while (en.HasMore())
     977        sourceSnapshotsCD (aImageId, en.GetNext(), aUsage);
     978}
     979
     980void VBoxDiskImageManagerDlg::sourceSnapshotsFD (const QUuid &aImageId,
     981                                                 const CSnapshot &aSnapshot,
     982                                                 QString &aUsage)
     983{
     984    if (aSnapshot.isNull())
     985        return;
     986
     987    if (!aSnapshot.GetMachine().GetFloppyDrive().GetImage().isNull() &&
     988        aSnapshot.GetMachine().GetFloppyDrive().GetImage().GetId() == aImageId)
     989    {
     990        if (aUsage)
     991            aUsage += ", ";
     992        aUsage += aSnapshot.GetName();
     993    }
     994
     995    CSnapshotEnumerator en = aSnapshot.GetChildren().Enumerate();
     996    while (en.HasMore())
     997        sourceSnapshotsFD (aImageId, en.GetNext(), aUsage);
    933998}
    934999
     
    17451810                          !item->firstChild() && !item->getPath().isNull();
    17461811    bool releaseEnabled = item && !item->getUsage().isNull() &&
    1747                           checkImage (item) &&
    1748                           !item->parent() && !item->firstChild() &&
    1749                           item->getSnapshotName().isNull();
     1812        item->getUsage().find (QRegExp ("\\([\\s\\S]+\\)")) == -1 &&
     1813        checkImage (item) &&
     1814        !item->parent() && !item->firstChild() &&
     1815        item->getSnapshotName().isNull();
    17501816    bool newEnabled     = notInEnum &&
    17511817                          getCurrentListView() == hdsView ? true : false;
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