VirtualBox

Ignore:
Timestamp:
Feb 2, 2007 4:44:41 PM (18 years ago)
Author:
vboxsync
Message:

FE/Qt: Fixed retaining the current list position in the VDM dialog after doing media refresh.

File:
1 edited

Legend:

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

    r548 r563  
    146146
    147147
    148 void VBoxDiskImageManagerDlg::showModeless (const VBoxMediaList *list /* = NULL */)
     148void VBoxDiskImageManagerDlg::showModeless (bool aRefresh /* = true */)
    149149{
    150150    if (!mModelessDialog)
     
    155155                                         WType_TopLevel | WDestructiveClose);
    156156        mModelessDialog->setup (VBoxDefs::HD | VBoxDefs::CD | VBoxDefs::FD,
    157                                 false, NULL, list);
     157                                false, NULL, aRefresh);
    158158
    159159        /* listen to events that may change the media status and refresh
     
    12111211
    12121212void VBoxDiskImageManagerDlg::setup (int aType, bool aDoSelect,
    1213                                      const QUuid *aTargetVMId,
    1214                                      const VBoxMediaList *mediaList,
    1215                                      CMachine machine)
     1213                                     const QUuid *aTargetVMId /* = NULL */,
     1214                                     bool aRefresh /* = true */,
     1215                                     CMachine machine /* = NULL */)
    12161216{
    12171217    cmachine = machine;
     
    12511251             this, SLOT (mediaRemoved (VBoxDefs::DiskType, const QUuid &)));
    12521252
    1253     /* insert already enumerated media */
    1254     VBoxMediaList list = mediaList ?
    1255         *mediaList : vboxGlobal().currentMediaList();
     1253    if (aRefresh && !vboxGlobal().isMediaEnumerationStarted())
     1254    {
     1255        vboxGlobal().startEnumeratingMedia();
     1256    }
     1257    else
     1258    {   
     1259        /* insert already enumerated media */
     1260        const VBoxMediaList &list = vboxGlobal().currentMediaList();
     1261        prepareToRefresh (list.size());
     1262        VBoxMediaList::const_iterator it;
     1263        int index = 0;
     1264        for (it = list.begin(); it != list.end(); ++ it)
     1265        {
     1266            mediaAdded (*it);
     1267            if ((*it).status != VBoxMedia::Unknown)
     1268                mProgressBar->setProgress (++ index);
     1269        }
     1270
     1271        /* select first child */
     1272        setCurrentItem (hdsView, hdsView->firstChild());
     1273        setCurrentItem (cdsView, cdsView->firstChild());
     1274        setCurrentItem (fdsView, fdsView->firstChild());
     1275       
     1276        /* emulate the finished signal to reuse the code */
     1277        if (!vboxGlobal().isMediaEnumerationStarted())
     1278            mediaEnumFinished (list);
     1279    }
     1280}
     1281
     1282
     1283void VBoxDiskImageManagerDlg::mediaEnumStarted()
     1284{
     1285    /* load current media list */
     1286    const VBoxMediaList &list = vboxGlobal().currentMediaList();
    12561287    prepareToRefresh (list.size());
    1257     VBoxMediaList::const_iterator it;
    1258     int index = 0;
    1259     for (it = list.begin(); it != list.end(); ++ it)
    1260     {
    1261         mediaAdded (*it);
    1262         if ((*it).status != VBoxMedia::Unknown)
    1263             mProgressBar->setProgress (index ++);
    1264     }
    1265     /* select first child */
    1266     setCurrentItem (hdsView, hdsView->firstChild());
    1267     setCurrentItem (cdsView, cdsView->firstChild());
    1268     setCurrentItem (fdsView, fdsView->firstChild());
    1269 
    1270     if (mediaList)
    1271     {
    1272         mediaEnumFinished (list);
    1273     }
    1274     else
    1275     {
    1276         /* only start enumerating media if we haven't been supplied a list
    1277          * (it's ok if the enumeration has been already started, nothing will
    1278          * happen) */
    1279         vboxGlobal().startEnumeratingMedia();
    1280     }
    1281 }
    1282 
    1283 
    1284 void VBoxDiskImageManagerDlg::mediaEnumStarted()
    1285 {
    1286     VBoxMediaList list = vboxGlobal().currentMediaList();
    1287     prepareToRefresh (list.size());
    1288     /* clearing lists */
    1289     hdsView->clear(), cdsView->clear(), fdsView->clear();
    1290     /* load current media list */
    12911288    VBoxMediaList::const_iterator it;
    12921289    for (it = list.begin(); it != list.end(); ++ it)
    12931290        mediaAdded (*it);
    12941291    /* select first child */
    1295     if (!hdsView->isSelected (hdsView->currentItem()))
     1292    if (!hdsView->currentItem())
    12961293        setCurrentItem (hdsView, hdsView->firstChild());
    1297     if (!cdsView->isSelected (cdsView->currentItem()))
     1294    if (!cdsView->currentItem())
    12981295        setCurrentItem (cdsView, cdsView->firstChild());
    1299     if (!fdsView->isSelected (fdsView->currentItem()))
     1296    if (!fdsView->currentItem())
    13001297        setCurrentItem (fdsView, fdsView->firstChild());
    13011298
     
    13071304{
    13081305    mediaUpdated (aMedia);
     1306    Assert (aMedia.status != VBoxMedia::Unknown);
    13091307    if (aMedia.status != VBoxMedia::Unknown)
    1310         mProgressBar->setProgress (aIndex);
     1308        mProgressBar->setProgress (aIndex + 1);
    13111309}
    13121310
     
    13181316    imRefreshAction->setEnabled (true);
    13191317    unsetCursor();
     1318
     1319    /* adjust columns (it is strange to repeat but it works) */
     1320
     1321    hdsView->adjustColumn (1);
     1322    hdsView->adjustColumn (2);
     1323    hdsView->adjustColumn (1);
     1324
     1325    cdsView->adjustColumn (1);
     1326    cdsView->adjustColumn (2);
     1327    cdsView->adjustColumn (1);
     1328   
     1329    fdsView->adjustColumn (1);
     1330    fdsView->adjustColumn (2);
     1331    fdsView->adjustColumn (1);
    13201332
    13211333    processCurrentChanged();
     
    14501462    imRefreshAction->setEnabled (false);
    14511463    setCursor (QCursor (BusyCursor));
     1464
     1465    /* store the current list selections */
     1466   
     1467    QListViewItem *item;
     1468    DiskImageItem *di;
     1469
     1470    item = hdsView->currentItem();
     1471    di = (item && item->rtti() == 1001) ? static_cast <DiskImageItem *> (item) : 0;
     1472    hdSelectedId = di ? di->getUuid() : QUuid();
     1473 
     1474    item = cdsView->currentItem();
     1475    di = (item && item->rtti() == 1001) ? static_cast <DiskImageItem *> (item) : 0;
     1476    cdSelectedId = di ? di->getUuid() : QUuid();
     1477
     1478    item = fdsView->currentItem();
     1479    di = (item && item->rtti() == 1001) ? static_cast <DiskImageItem *> (item) : 0;
     1480    fdSelectedId = di ? di->getUuid() : QUuid();
     1481
     1482    /* finally, clear all lists */
     1483    hdsView->clear();
     1484    cdsView->clear();
     1485    fdsView->clear();
    14521486}
    14531487
     
    15281562    aListView->setCurrentItem (aItem);
    15291563    aListView->setSelected (aListView->currentItem(), true);
    1530     /* it is strange repeat but it works */
    1531     aListView->adjustColumn (1);
    1532     aListView->adjustColumn (2);
    1533     aListView->adjustColumn (1);
    15341564}
    15351565
     
    16081638            hdsPane4->setText (item->getInformation (item->getUsage()));
    16091639            hdsPane5->setText (item->getInformation (item->getSnapshotName()));
    1610             hdSelectedId = item->getUuid();
    16111640        }
    16121641        else if (item->listView() == cdsView)
     
    16141643            cdsPane1->setText (item->getInformation (item->getPath(), true, "end"));
    16151644            cdsPane2->setText (item->getInformation (item->getUsage()));
    1616             cdSelectedId = item->getUuid();
    16171645        }
    16181646        else if (item->listView() == fdsView)
     
    16201648            fdsPane1->setText (item->getInformation (item->getPath(), true, "end"));
    16211649            fdsPane2->setText (item->getInformation (item->getUsage()));
    1622             fdSelectedId = item->getUuid();
    16231650        }
    16241651    }
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