VirtualBox

Changeset 1381 in vbox


Ignore:
Timestamp:
Mar 9, 2007 4:20:08 PM (18 years ago)
Author:
vboxsync
Message:

Enumeration mechanism updated with vdi-children enumeration.

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/include/VBoxGlobal.h

    r1370 r1381  
    338338    bool startMachine (const QUuid &id);
    339339
     340    void addMediaToList (const CUnknown&, VBoxDefs::DiskType);
     341
    340342    void startEnumeratingMedia();
    341343
  • trunk/src/VBox/Frontends/VirtualBox/src/VBoxGlobal.cpp

    r1370 r1381  
    11471147
    11481148/**
     1149 *  Appends media_list with passed disk & it's children
     1150 */
     1151void VBoxGlobal::addMediaToList (const CUnknown &aDisk,
     1152                                 VBoxDefs::DiskType aType)
     1153{
     1154    VBoxMedia media (aDisk, aType, VBoxMedia::Unknown);
     1155    media_list += media;
     1156    /* appending all vdi children */
     1157    if (aType == VBoxDefs::HD)
     1158    {
     1159        CHardDisk hd = aDisk;
     1160        CHardDiskEnumerator enumerator = hd.GetChildren().Enumerate();
     1161        while (enumerator.HasMore())
     1162        {
     1163            CHardDisk subHd = enumerator.GetNext();
     1164            addMediaToList (CUnknown (subHd), VBoxDefs::HD);
     1165        }
     1166    }
     1167}
     1168
     1169/**
    11491170 *  Starts a thread that asynchronously enumerates all currently registered
    11501171 *  media, checks for its accessibility and posts VBoxEnumerateMediaEvent
     
    11681189        return;
    11691190
    1170     /* composes a list of all currently known media */
     1191    /* composes a list of all currently known media & their children */
    11711192    media_list.clear();
    11721193    {
    11731194        CHardDiskEnumerator enHD = vbox.GetHardDisks().Enumerate();
    11741195        while (enHD.HasMore())
    1175         {
    1176             CHardDisk hd = enHD.GetNext();
    1177             media_list += VBoxMedia (CUnknown (hd), VBoxDefs::HD, VBoxMedia::Unknown);
    1178         }
     1196            addMediaToList (CUnknown (enHD.GetNext()), VBoxDefs::HD);
     1197
    11791198        CDVDImageEnumerator enCD = vbox.GetDVDImages().Enumerate();
    11801199        while (enCD.HasMore())
    1181         {
    1182             CDVDImage cd = enCD.GetNext();
    1183             media_list += VBoxMedia (CUnknown (cd), VBoxDefs::CD, VBoxMedia::Unknown);
    1184         }
     1200            addMediaToList (CUnknown (enCD.GetNext()), VBoxDefs::CD);
     1201
    11851202        CFloppyImageEnumerator enFD = vbox.GetFloppyImages().Enumerate();
    11861203        while (enFD.HasMore())
    1187         {
    1188             CFloppyImage fd = enFD.GetNext();
    1189             media_list += VBoxMedia (CUnknown (fd), VBoxDefs::FD, VBoxMedia::Unknown);
    1190         }
     1204            addMediaToList (CUnknown (enFD.GetNext()), VBoxDefs::FD);
    11911205    }
    11921206
     
    12201234                        CHardDisk hd = media.disk;
    12211235                        media.status =
    1222                             hd.GetAllAccessible() == TRUE ? VBoxMedia::Ok :
     1236                            hd.GetAccessible() == TRUE ? VBoxMedia::Ok :
    12231237                            hd.isOk() ? VBoxMedia::Inaccessible :
    12241238                            VBoxMedia::Error;
  • trunk/src/VBox/Frontends/VirtualBox/src/VBoxMediaComboBox.cpp

    r868 r1381  
    137137    {
    138138        case VBoxDefs::HD:
    139             processHdMedia (aMedia);
     139        {
     140            /* ignoring non-root disks */
     141            CHardDisk hd = aMedia.disk;
     142            if (hd.GetParent().isNull())
     143                processHdMedia (aMedia);
    140144            break;
     145        }
    141146        case VBoxDefs::CD:
    142147            processCdMedia (aMedia);
  • trunk/src/VBox/Frontends/VirtualBox/ui/VBoxDiskImageManagerDlg.ui

    r1298 r1381  
    617617    <function access="private">updateCdItem( DiskImageItem*, const VBoxMedia &amp; )</function>
    618618    <function access="private">updateFdItem( DiskImageItem*, const VBoxMedia &amp; )</function>
    619     <function access="private" returnType="DiskImageItem*">createHdItem( QListView*, DiskImageItem*, const VBoxMedia &amp; )</function>
    620     <function access="private" returnType="DiskImageItem*">createCdItem( QListView*, DiskImageItem*, const VBoxMedia &amp; )</function>
    621     <function access="private" returnType="DiskImageItem*">createFdItem( QListView*, DiskImageItem*, const VBoxMedia &amp; )</function>
    622     <function access="private">createHdChildren( DiskImageItem*, const VBoxMedia &amp; )</function>
     619    <function access="private" returnType="DiskImageItem*">createHdItem( QListView*, const VBoxMedia &amp; )</function>
     620    <function access="private" returnType="DiskImageItem*">createCdItem( QListView*, const VBoxMedia &amp; )</function>
     621    <function access="private" returnType="DiskImageItem*">createFdItem( QListView*, const VBoxMedia &amp; )</function>
    623622    <function access="protected">showEvent( QShowEvent * )</function>
    624623    <function access="protected">resizeEvent( QResizeEvent* )</function>
  • trunk/src/VBox/Frontends/VirtualBox/ui/VBoxDiskImageManagerDlg.ui.h

    r1351 r1381  
    3535public:
    3636
     37    enum { TypeId = 1001 };
     38
    3739    DiskImageItem (DiskImageItem *parent) :
    3840        QListViewItem (parent), mStatus (VBoxMedia::Unknown) {}
     
    9092    }
    9193
    92     int rtti() const { return 1001; }
     94    int rtti() const { return TypeId; }
    9395
    9496    int compare (QListViewItem *aItem, int aColumn, bool aAscending) const
     
    110112    {
    111113        return (QListViewItem::nextSibling() &&
    112                 QListViewItem::nextSibling()->rtti() == 1001) ?
     114                QListViewItem::nextSibling()->rtti() == DiskImageItem::TypeId) ?
    113115                static_cast<DiskImageItem*> (QListViewItem::nextSibling()) : 0;
    114116    }
     
    140142
    141143    VBoxMedia::Status mStatus;
     144};
     145
     146
     147class DiskImageItemIterator : public QListViewItemIterator
     148{
     149public:
     150
     151    DiskImageItemIterator (QListView* aList)
     152        : QListViewItemIterator (aList) {}
     153
     154    DiskImageItem* operator*()
     155    {
     156        QListViewItem *item = QListViewItemIterator::operator*();
     157        return item && item->rtti() == DiskImageItem::TypeId ?
     158            static_cast<DiskImageItem*> (item) : 0;
     159    }
     160
     161    DiskImageItemIterator& operator++()
     162    {
     163        return (DiskImageItemIterator&) QListViewItemIterator::operator++();
     164    }
    142165};
    143166
     
    464487    switch (aItem->rtti())
    465488    {
    466         case 1001:
     489        case DiskImageItem::TypeId:
    467490            tip = static_cast<DiskImageItem*> (aItem)->getToolTip();
    468491            break;
     
    768791    DiskImageItem *item = 0;
    769792
    770     if (aList)
     793    if (aRoot)
     794        item = new DiskImageItem (aRoot);
     795    else if (aList)
    771796        item = new DiskImageItem (aList);
    772     else if (aRoot)
    773         item = new DiskImageItem (aRoot);
    774797    else
    775798        Assert (0);
     
    10581081                                            const VBoxMedia &aMedia)
    10591082{
     1083    if (!aItem) return;
    10601084    CHardDisk hd = aMedia.disk;
    10611085    VBoxMedia::Status status = aMedia.status;
     
    11051129                                            const VBoxMedia &aMedia)
    11061130{
     1131    if (!aItem) return;
    11071132    CDVDImage cd = aMedia.disk;
    11081133    VBoxMedia::Status status = aMedia.status;
     
    11301155                                            const VBoxMedia &aMedia)
    11311156{
     1157    if (!aItem) return;
    11321158    CFloppyImage fd = aMedia.disk;
    11331159    VBoxMedia::Status status = aMedia.status;
     
    11531179
    11541180
    1155 DiskImageItem* VBoxDiskImageManagerDlg::createHdItem (QListView       *aList,
    1156                                                       DiskImageItem   *aRoot,
     1181DiskImageItem* VBoxDiskImageManagerDlg::createHdItem (QListView *aList,
    11571182                                                      const VBoxMedia &aMedia)
    11581183{
    1159     DiskImageItem *item = createImageNode (aList, aRoot);
     1184    CHardDisk hd = aMedia.disk;
     1185    QUuid rootId = hd.GetParent().isNull() ? QUuid() : hd.GetParent().GetId();
     1186    DiskImageItem *root = searchItem (aList, rootId);
     1187    DiskImageItem *item = createImageNode (aList, root);
    11601188    updateHdItem (item, aMedia);
    1161     createHdChildren (item, aMedia);
    11621189    return item;
    11631190}
    11641191
    1165 DiskImageItem* VBoxDiskImageManagerDlg::createCdItem (QListView       *aList,
    1166                                                       DiskImageItem   *aRoot,
     1192DiskImageItem* VBoxDiskImageManagerDlg::createCdItem (QListView *aList,
    11671193                                                      const VBoxMedia &aMedia)
    11681194{
    1169     DiskImageItem *item = createImageNode (aList, aRoot);
     1195    DiskImageItem *item = createImageNode (aList, 0);
    11701196    updateCdItem (item, aMedia);
    11711197    return item;
    11721198}
    11731199
    1174 DiskImageItem* VBoxDiskImageManagerDlg::createFdItem (QListView       *aList,
    1175                                                       DiskImageItem   *aRoot,
     1200DiskImageItem* VBoxDiskImageManagerDlg::createFdItem (QListView *aList,
    11761201                                                      const VBoxMedia &aMedia)
    11771202{
    1178     DiskImageItem *item = createImageNode (aList, aRoot);
     1203    DiskImageItem *item = createImageNode (aList, 0);
    11791204    updateFdItem (item, aMedia);
    11801205    return item;
    1181 }
    1182 
    1183 void VBoxDiskImageManagerDlg::createHdChildren (DiskImageItem   *aRoot,
    1184                                                 const VBoxMedia &aMedia)
    1185 {
    1186     CHardDisk hd = aMedia.disk;
    1187     CHardDiskEnumerator enumerator = hd.GetChildren().Enumerate();
    1188     while (enumerator.HasMore())
    1189     {
    1190         CHardDisk subHd = enumerator.GetNext();
    1191         VBoxMedia::Status status =
    1192             subHd.GetAccessible() == TRUE ? VBoxMedia::Ok :
    1193             subHd.isOk() ? VBoxMedia::Inaccessible :
    1194             VBoxMedia::Error;
    1195         createHdItem (0, aRoot, VBoxMedia (CUnknown (subHd), VBoxDefs::HD, status));
    1196     }
    11971206}
    11981207
     
    12221231                                                    const QUuid &aId)
    12231232{
    1224     DiskImageItem *item = 0, *iterator = 0;
    1225     if (aList->firstChild() && aList->firstChild()->rtti() == 1001)
    1226         iterator = static_cast<DiskImageItem*>(aList->firstChild());
    1227     while (iterator)
    1228     {
    1229         if (iterator->getUuid() == aId)
    1230             item = iterator;
    1231         iterator = iterator->nextSibling();
    1232     }
    1233     return item;
     1233    if (aId.isNull()) return 0;
     1234    DiskImageItemIterator iterator (aList);
     1235    while (*iterator)
     1236    {
     1237        if ((*iterator)->getUuid() == aId)
     1238            return *iterator;
     1239        ++iterator;
     1240    }
     1241    return 0;
    12341242}
    12351243
     
    13831391    {
    13841392        case VBoxDefs::HD:
    1385             item = createHdItem (hdsView, 0, aMedia);
     1393            item = createHdItem (hdsView, aMedia);
    13861394            if (item->getUuid() == hdSelectedId)
    13871395            {
     
    13911399            break;
    13921400        case VBoxDefs::CD:
    1393             item = createCdItem (cdsView, 0, aMedia);
     1401            item = createCdItem (cdsView, aMedia);
    13941402            if (item->getUuid() == cdSelectedId)
    13951403            {
     
    13991407            break;
    14001408        case VBoxDefs::FD:
    1401             item = createFdItem (fdsView, 0, aMedia);
     1409            item = createFdItem (fdsView, aMedia);
    14021410            if (item->getUuid() == fdSelectedId)
    14031411            {
     
    14321440            CHardDisk hd = aMedia.disk;
    14331441            item = searchItem (hdsView, hd.GetId());
    1434             if (item)
    1435                 updateHdItem (item, aMedia);
     1442            updateHdItem (item, aMedia);
    14361443            break;
    14371444        }
     
    14401447            CDVDImage cd = aMedia.disk;
    14411448            item = searchItem (cdsView, cd.GetId());
    1442             if (item)
    1443                 updateCdItem (item, aMedia);
     1449            updateCdItem (item, aMedia);
    14441450            break;
    14451451        }
     
    14481454            CFloppyImage fd = aMedia.disk;
    14491455            item = searchItem (fdsView, fd.GetId());
    1450             if (item)
    1451                 updateFdItem (item, aMedia);
     1456            updateFdItem (item, aMedia);
    14521457            break;
    14531458        }
     
    15311536
    15321537    item = hdsView->currentItem();
    1533     di = (item && item->rtti() == 1001) ? static_cast <DiskImageItem *> (item) : 0;
     1538    di = (item && item->rtti() == DiskImageItem::TypeId) ?
     1539        static_cast <DiskImageItem *> (item) : 0;
    15341540    hdSelectedId = di ? di->getUuid() : QString::null;
    15351541
    15361542    item = cdsView->currentItem();
    1537     di = (item && item->rtti() == 1001) ? static_cast <DiskImageItem *> (item) : 0;
     1543    di = (item && item->rtti() == DiskImageItem::TypeId) ?
     1544        static_cast <DiskImageItem *> (item) : 0;
    15381545    cdSelectedId = di ? di->getUuid() : QString::null;
    15391546
    15401547    item = fdsView->currentItem();
    1541     di = (item && item->rtti() == 1001) ? static_cast <DiskImageItem *> (item) : 0;
     1548    di = (item && item->rtti() == DiskImageItem::TypeId) ?
     1549        static_cast <DiskImageItem *> (item) : 0;
    15421550    fdSelectedId = di ? di->getUuid() : QString::null;
    15431551
     
    16561664void VBoxDiskImageManagerDlg::processCurrentChanged (QListViewItem *aItem)
    16571665{
    1658     DiskImageItem *item = aItem && aItem->rtti() == 1001 ?
     1666    DiskImageItem *item = aItem && aItem->rtti() == DiskImageItem::TypeId ?
    16591667        static_cast<DiskImageItem*> (aItem) : 0;
    16601668
     
    17491757    QListView *currentList = getCurrentListView();
    17501758    DiskImageItem *item =
    1751         currentList->currentItem() && currentList->currentItem()->rtti() == 1001 ?
     1759        currentList->currentItem() &&
     1760        currentList->currentItem()->rtti() == DiskImageItem::TypeId ?
    17521761        static_cast <DiskImageItem*> (currentList->currentItem()) : 0;
    17531762
     
    18061815    QListView *currentList = getCurrentListView();
    18071816    DiskImageItem *item =
    1808         currentList->currentItem() && currentList->currentItem()->rtti() == 1001 ?
     1817        currentList->currentItem() &&
     1818        currentList->currentItem()->rtti() == DiskImageItem::TypeId ?
    18091819        static_cast<DiskImageItem*> (currentList->currentItem()) : 0;
    18101820    AssertMsg (item, ("Current item must not be null"));
     
    18631873    QListView *currentList = getCurrentListView();
    18641874    DiskImageItem *item =
    1865         currentList->currentItem() && currentList->currentItem()->rtti() == 1001 ?
     1875        currentList->currentItem() &&
     1876        currentList->currentItem()->rtti() == DiskImageItem::TypeId ?
    18661877        static_cast<DiskImageItem*> (currentList->currentItem()) : 0;
    18671878    AssertMsg (item, ("Current item must not be null"));
     
    19962007    QUuid uuid;
    19972008
    1998     if ( currentList->selectedItem() &&
    1999          currentList->selectedItem()->rtti() == 1001 )
     2009    if (currentList->selectedItem() &&
     2010        currentList->selectedItem()->rtti() == DiskImageItem::TypeId)
    20002011        uuid = QUuid (static_cast<DiskImageItem *>(currentList->selectedItem())
    20012012                      ->getUuid());
     
    20102021    QString path;
    20112022
    2012     if ( currentList->selectedItem() && currentList->selectedItem()->rtti() == 1001 )
     2023    if (currentList->selectedItem() &&
     2024        currentList->selectedItem()->rtti() == DiskImageItem::TypeId )
    20132025        path = static_cast<DiskImageItem*> (currentList->selectedItem())
    20142026               ->getPath().stripWhiteSpace();
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