VirtualBox

Ignore:
Timestamp:
Jan 23, 2007 6:28:49 PM (18 years ago)
Author:
vboxsync
Message:

FE/Qt: Various VDM fixes.

File:
1 edited

Legend:

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

    r132 r253  
    4444                   QString aLabel8 = QString::null) :
    4545        QListViewItem (parent, aLabel1, aLabel2, aLabel3, aLabel4, aLabel5,
    46                        aLabel6, aLabel7, aLabel8), mName (aLabel1) {}
     46                       aLabel6, aLabel7, aLabel8),
     47        mName (aLabel1), mStatus (VBoxMedia::Unknown) {}
    4748
    4849    DiskImageItem (QListView *parent, QString aLabel1,
     
    5556                   QString aLabel8 = QString::null) :
    5657        QListViewItem (parent, aLabel1, aLabel2, aLabel3, aLabel4, aLabel5,
    57                        aLabel6, aLabel7, aLabel8), mName (aLabel1) {}
     58                       aLabel6, aLabel7, aLabel8),
     59        mName (aLabel1), mStatus (VBoxMedia::Unknown) {}
    5860
    5961    QString getName() { return mName; }
     
    8688    void setMachineId (QString aMachineId) { mMachineId = aMachineId; }
    8789    const QString &getMachineId() { return mMachineId; }
     90
     91
     92    void setStatus (VBoxMedia::Status aStatus) { mStatus = aStatus; }
     93    VBoxMedia::Status getStatus() { return mStatus; }
    8894
    8995
     
    106112    int compare (QListViewItem *aItem, int aColumn, bool aAscending) const
    107113    {
    108         if (aItem->rtti() == 1002)
    109             return aAscending ? 1 : -1;
    110 
    111114        ULONG64 thisValue = vboxGlobal().parseSize (       text (aColumn));
    112115        ULONG64 thatValue = vboxGlobal().parseSize (aItem->text (aColumn));
     
    127130                QListViewItem::nextSibling()->rtti() == 1001) ?
    128131                static_cast<DiskImageItem*> (QListViewItem::nextSibling()) : 0;
     132    }
     133
     134    void paintCell (QPainter *aPainter, const QColorGroup &aColorGroup,
     135                    int aColumn, int aWidth, int aSlign)
     136    {
     137        QColorGroup cGroup (aColorGroup);
     138        if (mStatus == VBoxMedia::Unknown)
     139            cGroup.setColor (QColorGroup::Text, cGroup.mid());
     140        QListViewItem::paintCell (aPainter, cGroup, aColumn, aWidth, aSlign);
    129141    }
    130142
     
    144156
    145157    QString mToolTip;
    146 };
    147 
    148 
    149 class ProgressBarItem : public QListViewItem, public QProgressBar
    150 {
    151 public:
    152 
    153     ProgressBarItem (QListView *aParent, ULONG aTotalSteps) :
    154         QListViewItem (aParent)
    155     {
    156         setFrameShadow (Sunken);
    157         setFrameShape (Panel);
    158         setSelectable (false);
    159         setProgress (0, aTotalSteps);
    160         setPercentageVisible (false);
    161     }
    162 
    163     void paintCell (QPainter *p, const QColorGroup &cg,
    164                     int column, int width, int align)
    165     {
    166         setMaximumWidth (100);
    167         setFixedHeight (QListViewItem::height());
    168         QListViewItem::paintCell (p, cg, column, width, align);
    169         if (column == 0)
    170         {
    171             drawContents (p);
    172             drawFrame (p);
    173         }
    174     }
    175 
    176     void increaseProgress() { setProgress (progress() + 1); }
    177 
    178     int rtti() const { return 1002; }
    179 
    180     int compare (QListViewItem *aItem, int /*aColumn*/, bool aAscending) const
    181     {
    182         if (aItem->rtti() == 1001)
    183             return aAscending ? -1 : 1;
    184         else
    185             return 0;
    186     }
     158
     159    VBoxMedia::Status mStatus;
    187160};
    188161
     
    206179        /// @todo refreshAll() may be slow, so it may be better to analyze
    207180        //  event details and update only what is changed */
    208         connect (&vboxGlobal(), SIGNAL (machineDataChanged (const VBoxMachineDataChangeEvent &)),
    209                  mModelessDialog, SLOT (refreshAll()));
     181        //connect (&vboxGlobal(), SIGNAL (machineDataChanged (const VBoxMachineDataChangeEvent &)),
     182        //         mModelessDialog, SLOT (refreshAll()));
    210183        connect (&vboxGlobal(), SIGNAL (machineRegistered (const VBoxMachineRegisteredEvent &)),
    211184                 mModelessDialog, SLOT (refreshAll()));
     
    223196                                     ~WindowMinimized);
    224197    mModelessDialog->setActiveWindow();
    225 
    226198}
    227199
     
    233205    mToBeRefreshed = false;
    234206    mInLoop = false;
    235 
    236     mHdsProgress = 0;
    237     mCdsProgress = 0;
    238     mFdsProgress = 0;
    239207
    240208    defaultButton = searchDefaultButton();
     
    273241
    274242    /* setup image list views */
    275 
    276     hdsView->setShowSortIndicator (true);
    277     cdsView->setShowSortIndicator (true);
    278     fdsView->setShowSortIndicator (true);
    279 
    280243    hdsView->setColumnAlignment (1, Qt::AlignRight);
    281244    hdsView->setColumnAlignment (2, Qt::AlignRight);
     
    290253    cdsView->header()->setStretchEnabled (false);
    291254    cdsView->header()->setStretchEnabled (true, 0);
     255
    292256
    293257    /* setup list-view's item tooltip */
     
    302266             this, SLOT (mouseOnItem(QListViewItem*)));
    303267
    304     /* setup dnd handlers */
    305     hdsView->viewport()->setAcceptDrops (true);
    306     cdsView->viewport()->setAcceptDrops (true);
    307     fdsView->viewport()->setAcceptDrops (true);
    308     connect (hdsView, SIGNAL (dropped (QDropEvent *)),
    309              this, SLOT (addDroppedImages (QDropEvent*)));
    310     connect (cdsView, SIGNAL (dropped (QDropEvent*)),
    311              this, SLOT (addDroppedImages (QDropEvent*)));
    312     connect (fdsView, SIGNAL (dropped (QDropEvent*)),
    313              this, SLOT (addDroppedImages (QDropEvent*)));
    314268
    315269    /* status-bar currently disabled */
    316270    statusBar()->setHidden (true);
     271
    317272
    318273    /* context menu composing */
     
    435390    fdsPane1 = createInfoString (tr ("Location"), fdsContainer, 0, -1);
    436391    fdsPane2 = createInfoString (tr ("Attached to"), fdsContainer, 1, -1);
     392
     393
     394    /* enumeration progressbar creation */
     395    mProgressText = new QLabel (tr ("Checking accessibility"), centralWidget());
     396    mProgressText->setHidden (true);
     397    buttonLayout->insertWidget (2, mProgressText);
     398    mProgressBar = new QProgressBar (centralWidget());
     399    mProgressBar->setHidden (true);
     400    mProgressBar->setFrameShadow (QFrame::Sunken);
     401    mProgressBar->setFrameShape  (QFrame::Panel);
     402    mProgressBar->setPercentageVisible (false);
     403    mProgressBar->setMaximumWidth (100);
     404    buttonLayout->insertWidget (3, mProgressBar);
     405
     406    if (!vboxGlobal().isInEnumeratingProcess()) loadListViews();
     407}
     408
     409
     410void VBoxDiskImageManagerDlg::loadListViews()
     411{
     412    /* load hd list */
     413    CHardDiskEnumerator hdEnum = vbox.GetHardDisks().Enumerate();
     414    while (hdEnum.HasMore())
     415    {
     416        CHardDisk hd = hdEnum.GetNext();
     417        DiskImageItem *item = createHdItem (hdsView, 0, hd, VBoxMedia::Unknown);
     418        createHdChildren (item, hd, VBoxMedia::Unknown);
     419    }
     420
     421    /* load cd list */
     422    CDVDImageEnumerator cdEnum = vbox.GetDVDImages().Enumerate();
     423    while (cdEnum.HasMore())
     424    {
     425        CDVDImage cd = cdEnum.GetNext();
     426        DiskImageItem *item = createCdItem (cdsView, 0, cd, VBoxMedia::Unknown);
     427    }
     428
     429    /* load fd list */
     430    CFloppyImageEnumerator fdEnum = vbox.GetFloppyImages().Enumerate();
     431    while (fdEnum.HasMore())
     432    {
     433        CFloppyImage fd = fdEnum.GetNext();
     434        DiskImageItem *item = createFdItem (fdsView, 0, fd, VBoxMedia::Unknown);
     435    }
    437436}
    438437
     
    504503        case 1001:
    505504            tip = static_cast<DiskImageItem*> (aItem)->getToolTip();
    506             break;
    507         case 1002:
    508             tip = tr ("Enumeration in progress...", "Media accessibility check");
    509505            break;
    510506        default:
     
    624620                QDragEnterEvent *dragEnterEvent =
    625621                    static_cast<QDragEnterEvent*>(aEvent);
    626                 dragEnterEvent->accept();
     622                dragEnterEvent->acceptAction();
     623                return true;
     624            }
     625            break;
     626        }
     627        case QEvent::Drop:
     628        {
     629            if (aObject == currentList)
     630            {
     631                QDropEvent *dropEvent =
     632                    static_cast<QDropEvent*>(aEvent);
     633                QStringList *droppedList = new QStringList();
     634                QUriDrag::decodeLocalFiles (dropEvent, *droppedList);
     635                QCustomEvent *updateEvent = new QCustomEvent (1001);
     636                updateEvent->setData (droppedList);
     637                QApplication::postEvent (currentList, updateEvent);
     638                dropEvent->acceptAction();
     639                return true;
     640            }
     641            break;
     642        }
     643        case 1001: /* QCustomEvent 1001 - DnD Update Event */
     644        {
     645            if (aObject == currentList)
     646            {
     647                QCustomEvent *updateEvent =
     648                    static_cast<QCustomEvent*>(aEvent);
     649                addDroppedImages ((QStringList*) updateEvent->data());
     650                return true;
    627651            }
    628652            break;
     
    655679
    656680
    657 void VBoxDiskImageManagerDlg::addDroppedImages (QDropEvent *aEvent)
     681void VBoxDiskImageManagerDlg::addDroppedImages (QStringList *aDroppedList)
    658682{
    659683    QListView *currentList = getCurrentListView();
    660684
    661     QStringList droppedList;
    662     QUriDrag::decodeLocalFiles (aEvent, droppedList);
    663 
    664     for (QStringList::Iterator it = droppedList.begin();
    665          it != droppedList.end(); ++it)
     685    DiskImageItem *item = 0;
     686    for (QStringList::Iterator it = (*aDroppedList).begin();
     687         it != (*aDroppedList).end(); ++it)
    666688    {
    667689        // Checking dropped media type
     
    680702        }
    681703        // If media type has been determined - attach this device
    682         if (type)
    683             addDroppedImage (*it, type);
    684     }
    685 
    686     refreshAll();
    687 }
    688 
    689 
    690 void VBoxDiskImageManagerDlg::addDroppedImage (QString aSource, VBoxDefs::DiskType aDiskType)
     704        if (type) item = addImageToList (*it, type);
     705    }
     706    delete aDroppedList;
     707    setCurrentItem (currentList, item);
     708}
     709
     710
     711DiskImageItem* VBoxDiskImageManagerDlg::addImageToList (QString aSource, VBoxDefs::DiskType aDiskType)
    691712{
    692713    if (aSource.isEmpty())
    693         return;
    694 
     714        return 0;
     715
     716    DiskImageItem *item = 0;
    695717    QUuid uuid;
    696718    switch (aDiskType)
     
    703725                CHardDisk hardDisk = CUnknown (vdi);
    704726                vbox.RegisterHardDisk (hardDisk);
     727                if (vbox.isOk())
     728                {
     729                    VBoxMedia::Status status = hardDisk.GetAccessible() ?
     730                        VBoxMedia::Ok : VBoxMedia::Inaccessible;
     731                    item = createHdItem (hdsView, 0, hardDisk, status);
     732                    /* synchronize modeless dialog if present */
     733                    if (mModelessDialog && mModelessDialog != this)
     734                        mModelessDialog->createHdItem (mModelessDialog->hdsView,
     735                                                       0, hardDisk, status);
     736                }
    705737            }
    706738            break;
     
    710742            CDVDImage dvdImage = vbox.OpenDVDImage (aSource, uuid);
    711743            if (vbox.isOk())
     744            {
    712745                vbox.RegisterDVDImage (dvdImage);
     746                if (vbox.isOk())
     747                {
     748                    VBoxMedia::Status status = dvdImage.GetAccessible() ?
     749                        VBoxMedia::Ok : VBoxMedia::Inaccessible;
     750                    item = createCdItem (cdsView, 0, dvdImage, status);
     751                    /* synchronize modeless dialog if present */
     752                    if (mModelessDialog && mModelessDialog != this)
     753                        mModelessDialog->createCdItem (mModelessDialog->cdsView,
     754                                                       0, dvdImage, status);
     755                }
     756            }
    713757            break;
    714758        }
     
    717761            CFloppyImage floppyImage = vbox.OpenFloppyImage (aSource, uuid);
    718762            if (vbox.isOk())
     763            {
    719764                vbox.RegisterFloppyImage (floppyImage);
     765                if (vbox.isOk())
     766                {
     767                    VBoxMedia::Status status = floppyImage.GetAccessible() ?
     768                        VBoxMedia::Ok : VBoxMedia::Inaccessible;
     769                    item = createFdItem (fdsView, 0, floppyImage, status);
     770                    /* synchronize modeless dialog if present */
     771                    if (mModelessDialog && mModelessDialog != this)
     772                        mModelessDialog->createFdItem (mModelessDialog->fdsView,
     773                                                       0, floppyImage, status);
     774                }
     775            }
    720776            break;
    721777        }
     
    725781        }
    726782    }
     783    return item;
    727784}
    728785
     
    838895
    839896
    840 QString VBoxDiskImageManagerDlg::composeHdToolTip (CHardDisk &aHd)
     897QString VBoxDiskImageManagerDlg::composeHdToolTip (CHardDisk &aHd,
     898                                                   VBoxMedia::Status aStatus)
    841899{
    842900    CVirtualBox vbox = vboxGlobal().virtualBox();
    843     bool accessible = aHd.GetAccessible();
    844901    QUuid machineId = aHd.GetMachineId();
    845902
     
    867924    /* compose tool-tip information */
    868925    QString tip;
    869     if (!accessible)
    870     {
    871         tip = tr ("<nobr><b>%1</b></nobr><br>%2")
    872                   .arg (location)
    873                   .arg (aHd.GetLastAccessError());
    874     }
    875     else
    876     {
    877         tip = tr ("<nobr><b>%1</b></nobr><br>"
    878                   "<nobr>Disk type:&nbsp;&nbsp;%2</nobr><br>"
    879                   "<nobr>Storage type:&nbsp;&nbsp;%3</nobr>")
    880                   .arg (location)
    881                   .arg (hardDiskType)
    882                   .arg (storageType);
    883 
    884         if (!usage.isNull())
    885             tip += tr ("<br><nobr>Attached to:&nbsp;&nbsp;%1</nobr>").arg (usage);
    886         if (!snapshotName.isNull())
    887             tip += tr ("<br><nobr>Snapshot:&nbsp;&nbsp;%5</nobr>").arg (snapshotName);
     926    switch (aStatus)
     927    {
     928        case VBoxMedia::Unknown:
     929        {
     930            tip = tr ("<nobr><b>%1</b></nobr><br>"
     931                      "Checking accessibility...", "HDD")
     932                      .arg (location);
     933            break;
     934        }
     935        case VBoxMedia::Ok:
     936        {
     937            tip = tr ("<nobr><b>%1</b></nobr><br>"
     938                      "<nobr>Disk type:&nbsp;&nbsp;%2</nobr><br>"
     939                      "<nobr>Storage type:&nbsp;&nbsp;%3</nobr>")
     940                      .arg (location)
     941                      .arg (hardDiskType)
     942                      .arg (storageType);
     943
     944            if (!usage.isNull())
     945                tip += tr ("<br><nobr>Attached to:&nbsp;&nbsp;%1</nobr>", "HDD")
     946                           .arg (usage);
     947            if (!snapshotName.isNull())
     948                tip += tr ("<br><nobr>Snapshot:&nbsp;&nbsp;%5</nobr>", "HDD")
     949                           .arg (snapshotName);
     950            break;
     951        }
     952        case VBoxMedia::Error:
     953        {
     954            /// @todo (r=dmik) paass a complete VBoxMedia instance here
     955            //  to get the result of blabla.GetAccessible() call form CUnknown
     956            tip = tr ("<nobr><b>%1</b></nobr><br>"
     957                      "Error checking media accessibility", "HDD")
     958                      .arg (location);
     959            break;
     960        }
     961        case VBoxMedia::Inaccessible:
     962        {
     963            tip = tr ("<nobr><b>%1</b></nobr><br>%2", "HDD")
     964                      .arg (location)
     965                      .arg (aHd.GetLastAccessError());
     966            break;
     967        }
     968        default:
     969            AssertFailed();
    888970    }
    889971    return tip;
    890972}
    891973
    892 QString VBoxDiskImageManagerDlg::composeCdToolTip (CDVDImage &aCd)
    893 {
    894     bool accessible = aCd.GetAccessible();
     974QString VBoxDiskImageManagerDlg::composeCdToolTip (CDVDImage &aCd,
     975                                                   VBoxMedia::Status aStatus)
     976{
    895977    QString src = aCd.GetFilePath();
    896978    QFileInfo fi (src);
     
    901983    /* compose tool-tip information */
    902984    QString tip;
    903     if (!accessible)
    904     {
    905         /// @todo (r=dmik) correct this when GetLastAccessError() is
    906         //  implemented for IFloppyImage/IDVDImage
    907         tip = tr ("<nobr><b>%1</b></nobr><br>%2")
    908                   .arg (location)
    909                   .arg (tr ("The image file is not accessible",
    910                             "CD/DVD/Floppy"));
    911     }
    912     else
    913     {
    914         tip = tr ("<nobr><b>%1</b></nobr>")
    915                   .arg (location);
    916 
    917         if (!usage.isNull())
    918             tip += tr ("<br><nobr>Attached to:&nbsp;&nbsp;%1</nobr>").arg (usage);
     985    switch (aStatus)
     986    {
     987        case VBoxMedia::Unknown:
     988        {
     989            tip = tr ("<nobr><b>%1</b></nobr><br>"
     990                      "Checking accessibility...", "CD/DVD/Floppy")
     991                      .arg (location);
     992            break;
     993        }
     994        case VBoxMedia::Ok:
     995        {
     996            tip = tr ("<nobr><b>%1</b></nobr>", "CD/DVD/Floppy")
     997                      .arg (location);
     998
     999            if (!usage.isNull())
     1000                tip += tr ("<br><nobr>Attached to:&nbsp;&nbsp;%1</nobr>",
     1001                           "CD/DVD/Floppy")
     1002                           .arg (usage);
     1003            break;
     1004        }
     1005        case VBoxMedia::Error:
     1006        {
     1007            /// @todo (r=dmik) paass a complete VBoxMedia instance here
     1008            //  to get the result of blabla.GetAccessible() call form CUnknown
     1009            tip = tr ("<nobr><b>%1</b></nobr><br>"
     1010                      "Error checking media accessibility", "CD/DVD/Floppy")
     1011                      .arg (location);
     1012            break;
     1013        }
     1014        case VBoxMedia::Inaccessible:
     1015        {
     1016            /// @todo (r=dmik) correct this when GetLastAccessError() is
     1017            //  implemented for IDVDImage
     1018            tip = tr ("<nobr><b>%1</b></nobr><br>%2")
     1019                      .arg (location)
     1020                      .arg (tr ("The image file is not accessible",
     1021                                "CD/DVD/Floppy"));
     1022            break;
     1023        }
     1024        default:
     1025            AssertFailed();
    9191026    }
    9201027    return tip;
    9211028}
    9221029
    923 QString VBoxDiskImageManagerDlg::composeFdToolTip (CFloppyImage &aFd)
    924 {
    925     bool accessible = aFd.GetAccessible();
     1030QString VBoxDiskImageManagerDlg::composeFdToolTip (CFloppyImage &aFd,
     1031                                                   VBoxMedia::Status aStatus)
     1032{
    9261033    QString src = aFd.GetFilePath();
    9271034    QFileInfo fi (src);
     
    9311038
    9321039    /* compose tool-tip information */
     1040    /* compose tool-tip information */
    9331041    QString tip;
    934     if (!accessible)
    935     {
    936         /// @todo (r=dmik) correct this when GetLastAccessError() is
    937         //  implemented for IFloppyImage/IDVDImage
    938         tip = tr ("<nobr><b>%1</b></nobr><br>%2")
    939                   .arg (location)
    940                   .arg (tr ("The image file is not accessible",
    941                             "CD/DVD/Floppy"));
    942     }
    943     else
    944     {
    945         tip = tr ("<nobr><b>%1</b></nobr>")
     1042    switch (aStatus)
     1043    {
     1044        case VBoxMedia::Unknown:
     1045        {
     1046            tip = tr ("<nobr><b>%1</b></nobr><br>"
     1047                      "Checking accessibility...", "CD/DVD/Floppy")
    9461048                      .arg (location);
    947 
    948         if (!usage.isNull())
    949             tip += tr ("<br><nobr>Attached to:&nbsp;&nbsp;%1</nobr>").arg (usage);
     1049            break;
     1050        }
     1051        case VBoxMedia::Ok:
     1052        {
     1053            tip = tr ("<nobr><b>%1</b></nobr>", "CD/DVD/Floppy")
     1054                      .arg (location);
     1055
     1056            if (!usage.isNull())
     1057                tip += tr ("<br><nobr>Attached to:&nbsp;&nbsp;%1</nobr>",
     1058                           "CD/DVD/Floppy")
     1059                           .arg (usage);
     1060            break;
     1061        }
     1062        case VBoxMedia::Error:
     1063        {
     1064            /// @todo (r=dmik) paass a complete VBoxMedia instance here
     1065            //  to get the result of blabla.GetAccessible() call form CUnknown
     1066            tip = tr ("<nobr><b>%1</b></nobr><br>"
     1067                      "Error checking media accessibility", "CD/DVD/Floppy")
     1068                      .arg (location);
     1069            break;
     1070        }
     1071        case VBoxMedia::Inaccessible:
     1072        {
     1073            /// @todo (r=dmik) correct this when GetLastAccessError() is
     1074            //  implemented for IDVDImage
     1075            tip = tr ("<nobr><b>%1</b></nobr><br>%2")
     1076                      .arg (location)
     1077                      .arg (tr ("The image file is not accessible",
     1078                                "CD/DVD/Floppy"));
     1079            break;
     1080        }
     1081        default:
     1082            AssertFailed();
    9501083    }
    9511084    return tip;
     
    9551088DiskImageItem* VBoxDiskImageManagerDlg::createHdItem (QListView *aList,
    9561089                                                      DiskImageItem *aRoot,
    957                                                       CHardDisk &aHd)
     1090                                                      CHardDisk &aHd,
     1091                                                      VBoxMedia::Status aStatus)
    9581092{
    9591093    DiskImageItem *item = 0;
     
    9621096    QString src = aHd.GetLocation();
    9631097    QUuid machineId = aHd.GetMachineId();
    964     bool accessible = aHd.GetAccessible();
    9651098
    9661099    QString usage;
     
    9691102    QString storageType = vboxGlobal().toString (aHd.GetStorageType());
    9701103    QString hardDiskType = vboxGlobal().hardDiskTypeString (aHd);
    971     QString virtualSize = accessible ?
    972         vboxGlobal().formatSize (aHd.GetSize() * _1M) : QString ("--");
    973     QString actualSize = accessible ?
     1104    QString virtualSize = aStatus == VBoxMedia::Ok ?
     1105        vboxGlobal().formatSize ((ULONG64)aHd.GetSize() * _1M) : QString ("--");
     1106    QString actualSize = aStatus == VBoxMedia::Ok ?
    9741107        vboxGlobal().formatSize (aHd.GetActualSize()) : QString ("--");
    9751108    QString snapshotName;
     
    9831116    QFileInfo fi (src);
    9841117
    985     item = createImageNode (
    986         aList, aRoot,
    987         fi.fileName(),
    988         virtualSize,
    989         actualSize
    990     );
     1118    item = createImageNode (aList, aRoot,
     1119                            fi.fileName(),
     1120                            virtualSize,
     1121                            actualSize);
    9911122    item->setPath (aHd.GetStorageType() == CEnums::ISCSIHardDisk ? src :
    9921123                   QDir::convertSeparators (fi.absFilePath()));
     
    9991130    item->setUuid (uuid);
    10001131    item->setMachineId (machineId);
    1001     item->setToolTip (composeHdToolTip (aHd));
     1132    item->setToolTip (composeHdToolTip (aHd, aStatus));
     1133    item->setStatus (aStatus);
    10021134
    10031135    return item;
     
    10071139DiskImageItem* VBoxDiskImageManagerDlg::createCdItem (QListView *aList,
    10081140                                                      DiskImageItem *aRoot,
    1009                                                       CDVDImage &aCd)
     1141                                                      CDVDImage &aCd,
     1142                                                      VBoxMedia::Status aStatus)
    10101143{
    10111144    DiskImageItem *item = 0;
     
    10141147    QString src = aCd.GetFilePath();
    10151148    QString usage = getDVDImageUsage (uuid);
    1016     bool accessible = aCd.GetAccessible();
    1017 
    1018     QString size = accessible ?
     1149
     1150    QString size = aStatus == VBoxMedia::Ok ?
    10191151        vboxGlobal().formatSize (aCd.GetSize()) : QString ("--");
    10201152    QFileInfo fi (src);
     
    10271159    item->setActualSize (size);
    10281160    item->setUuid (uuid);
    1029     item->setToolTip (composeCdToolTip (aCd));
     1161    item->setToolTip (composeCdToolTip (aCd, aStatus));
     1162    item->setStatus (aStatus);
    10301163
    10311164    return item;
     
    10351168DiskImageItem* VBoxDiskImageManagerDlg::createFdItem (QListView *aList,
    10361169                                                      DiskImageItem *aRoot,
    1037                                                       CFloppyImage &aFd)
     1170                                                      CFloppyImage &aFd,
     1171                                                      VBoxMedia::Status aStatus)
    10381172{
    10391173    DiskImageItem *item = 0;
     
    10421176    QString src = aFd.GetFilePath();
    10431177    QString usage = getFloppyImageUsage (uuid);
    1044     bool accessible = aFd.GetAccessible();
    1045 
    1046     QString size = accessible ?
     1178
     1179    QString size = aStatus == VBoxMedia::Ok ?
    10471180        vboxGlobal().formatSize (aFd.GetSize()) : QString ("--");
    10481181    QFileInfo fi (src);
     
    10551188    item->setActualSize (size);
    10561189    item->setUuid (uuid);
    1057     item->setToolTip (composeFdToolTip (aFd));
     1190    item->setToolTip (composeFdToolTip (aFd, aStatus));
     1191    item->setStatus (aStatus);
    10581192
    10591193    return item;
     
    10621196
    10631197void VBoxDiskImageManagerDlg::createHdChildren (DiskImageItem *aRoot,
    1064                                                 CHardDisk &aHd)
     1198                                                CHardDisk &aHd,
     1199                                                VBoxMedia::Status aStatus)
    10651200{
    10661201    CHardDiskEnumerator enumerator = aHd.GetChildren().Enumerate();
     
    10681203    {
    10691204        CHardDisk subHd = enumerator.GetNext();
    1070         DiskImageItem *subItem = createHdItem (0, aRoot, subHd);
    1071         createHdChildren (subItem, subHd);
    1072     }
    1073 }
    1074 
    1075 
    1076 void VBoxDiskImageManagerDlg::insertMedia (const VBoxMedia &aMedia)
    1077 {
    1078     /* ignore non-interesting aMedia */
     1205        DiskImageItem *subItem = createHdItem (0, aRoot, subHd, aStatus);
     1206        createHdChildren (subItem, subHd, aStatus);
     1207    }
     1208}
     1209
     1210
     1211DiskImageItem* VBoxDiskImageManagerDlg::searchItem (QListView *aList, QUuid aId)
     1212{
     1213    DiskImageItem *item = 0, *iterator = 0;
     1214    if (aList->firstChild() && aList->firstChild()->rtti() == 1001)
     1215        iterator = static_cast<DiskImageItem*>(aList->firstChild());
     1216    while (iterator)
     1217    {
     1218        if (iterator->getUuid() == aId)
     1219            item = iterator;
     1220        iterator = iterator->nextSibling();
     1221    }
     1222    return item;
     1223}
     1224
     1225
     1226void VBoxDiskImageManagerDlg::updateMedia (const VBoxMedia &aMedia)
     1227{
     1228    /* ignore non-updated aMedia */
    10791229    if (!(type & aMedia.type))
    10801230        return;
    10811231
     1232    /* search for updated listview item */
    10821233    DiskImageItem *item = 0;
    1083 
    10841234    switch (aMedia.type)
    10851235    {
    10861236        case VBoxDefs::HD:
    10871237        {
    1088             refreshList (hdsView, mHdsProgress);
    10891238            CHardDisk hd = aMedia.disk;
    1090             item = createHdItem (hdsView, 0, hd);
    1091             createHdChildren (item, hd);
    1092             hdsView->adjustColumn (1);
    1093             hdsView->adjustColumn (2);
     1239            item = searchItem (hdsView, hd.GetId());
     1240            delete item;
     1241            item = createHdItem (hdsView, 0, hd, aMedia.status);
     1242            createHdChildren (item, hd, aMedia.status);
    10941243            break;
    10951244        }
    10961245        case VBoxDefs::CD:
    10971246        {
    1098             refreshList (cdsView, mCdsProgress);
    10991247            CDVDImage cd = aMedia.disk;
    1100             item = createCdItem (cdsView, 0, cd);
    1101             cdsView->adjustColumn (1);
     1248            item = searchItem (cdsView, cd.GetId());
     1249            delete item;
     1250            item = createCdItem (cdsView, 0, cd, aMedia.status);
    11021251            break;
    11031252        }
    11041253        case VBoxDefs::FD:
    11051254        {
    1106             refreshList (fdsView, mFdsProgress);
    11071255            CFloppyImage fd = aMedia.disk;
    1108             item = createFdItem (fdsView, 0, fd);
    1109             fdsView->adjustColumn (1);
     1256            item = searchItem (fdsView, fd.GetId());
     1257            delete item;
     1258            item = createFdItem (fdsView, 0, fd, aMedia.status);
    11101259            break;
    11111260        }
     
    11211270    else if (aMedia.status == VBoxMedia::Error)
    11221271        item->setPixmap (0, pxErroneous);
     1272
     1273    mProgressBar->setProgress (mProgressBar->progress() + 1);
    11231274}
    11241275
     
    11601311
    11611312    VBoxMediaList::const_iterator it;
     1313    prepareToRefresh();
    11621314    for (it = list.begin(); it != list.end(); ++ it)
    1163         insertMedia (*it);
    1164 
    1165     if (!mediaList)
     1315        updateMedia (*it);
     1316
     1317    if (mediaList)
     1318    {
     1319        mediaEnumerated (*mediaList);
     1320    }
     1321    else
    11661322    {
    11671323        /* only start enumerating media if we haven't been supplied with a list
    11681324         * (it's ok if the enumeration has been already started, nothing will
    11691325         * happen) */
    1170         refreshAll();
     1326        vboxGlobal().startEnumeratingMedia();
    11711327    }
    11721328}
     
    11761332{
    11771333    if (!mToBeRefreshed) return;
    1178 
    1179     insertMedia (aMedia);
     1334    updateMedia (aMedia);
     1335    processCurrentChanged();
    11801336}
    11811337
     
    11851341    if (!mToBeRefreshed) return;
    11861342
    1187     delete mHdsProgress, delete mCdsProgress, delete mFdsProgress;
    1188     mHdsProgress = 0, mCdsProgress = 0, mFdsProgress = 0;
    1189 
    1190     cdsView->setCurrentItem (cdsView->firstChild());
    1191     fdsView->setCurrentItem (fdsView->firstChild());
    1192     hdsView->setCurrentItem (hdsView->firstChild());
    1193     cdsView->setSelected (cdsView->currentItem(), true);
    1194     fdsView->setSelected (fdsView->currentItem(), true);
    1195     hdsView->setSelected (hdsView->currentItem(), true);
    1196     processCurrentChanged();
     1343    mProgressBar->setHidden (true);
     1344    mProgressText->setHidden (true);
    11971345
    11981346    imRefreshAction->setEnabled (true);
     
    12261374
    12271375
    1228 void VBoxDiskImageManagerDlg::refreshAll()
     1376void VBoxDiskImageManagerDlg::prepareToRefresh()
    12291377{
    12301378    if (mToBeRefreshed) return;
     
    12381386    fdsPane1->clear(), fdsPane2->clear();
    12391387
     1388    /* prepare progressbar */
     1389    if (mProgressBar)
     1390    {
     1391        int totalSteps = 0;
     1392        if (type & VBoxDefs::HD)
     1393            totalSteps += vbox.GetHardDisks().GetCount();
     1394        if (type & VBoxDefs::CD)
     1395            totalSteps += vbox.GetDVDImages().GetCount();
     1396        if (type & VBoxDefs::FD)
     1397            totalSteps += vbox.GetFloppyImages().GetCount();
     1398        mProgressBar->setProgress (0, totalSteps);
     1399        mProgressBar->setHidden (false);
     1400        mProgressText->setHidden (false);
     1401    }
     1402
    12401403    imRefreshAction->setEnabled (false);
    12411404    setCursor (QCursor (BusyCursor));
    1242 
     1405}
     1406
     1407
     1408void VBoxDiskImageManagerDlg::refreshAll()
     1409{
     1410    if (mToBeRefreshed) return;
     1411    prepareToRefresh();
     1412    /* lists clearing */
     1413    hdsView->clear(), cdsView->clear(), fdsView->clear();
     1414    /* load all lists */
     1415    loadListViews();
    12431416    /* start enumerating media */
    12441417    vboxGlobal().startEnumeratingMedia();
    1245 }
    1246 
    1247 void VBoxDiskImageManagerDlg::refreshList (QListView *aView, ProgressBarItem *&aItem)
    1248 {
    1249     if (!aItem)
    1250     {
    1251         aView->clear();
    1252         ULONG iCount = 0;
    1253         if (aView == hdsView)
    1254             iCount = vbox.GetHardDisks().GetCount();
    1255         else if (aView == cdsView)
    1256             iCount = vbox.GetDVDImages().GetCount();
    1257         else if (aView == fdsView)
    1258             iCount = vbox.GetFloppyImages().GetCount();
    1259         aItem = new ProgressBarItem (aView, iCount);
    1260     }
    1261     aItem->increaseProgress();
    12621418}
    12631419
     
    13231479
    13241480
    1325 void VBoxDiskImageManagerDlg::setCurrentItem (QListView *aListView, DiskImageItem *aItem)
    1326 {
     1481void VBoxDiskImageManagerDlg::setCurrentItem (QListView *aListView, QListViewItem *aItem)
     1482{
     1483    aListView->setFocus();
    13271484    if (aItem)
    13281485    {
    13291486        aListView->setCurrentItem (aItem);
    13301487        aListView->setSelected (aListView->currentItem(), true);
     1488        /* it is strange repeat but it works */
    13311489        aListView->adjustColumn (1);
    13321490        aListView->adjustColumn (2);
    1333     }
    1334     aListView->setFocus();
     1491        aListView->adjustColumn (1);
     1492    }
    13351493    processCurrentChanged (aListView->currentItem());
    13361494}
     
    13411499    QListView *currentList = getCurrentListView();
    13421500    currentList->setFocus();
     1501
     1502    QListViewItem *itemToSelect =
     1503        !currentList->isSelected (currentList->currentItem()) ?
     1504        currentList->firstChild() : currentList->currentItem();
     1505    setCurrentItem (currentList, itemToSelect);
    13431506
    13441507    /* tab stop setup */
     
    13601523    setTabOrder (buttonHelp, buttonOk);
    13611524    setTabOrder (buttonOk, twImages);
    1362 
    1363     processCurrentChanged (currentList->selectedItem());
    13641525}
    13651526
     
    14401601    {
    14411602        CHardDisk hd = dlg.hardDisk();
    1442         DiskImageItem *createdItem = createHdItem (hdsView, 0, hd);
     1603        VBoxMedia::Status status = hd.GetAccessible() ?
     1604            VBoxMedia::Ok : VBoxMedia::Inaccessible;
     1605        DiskImageItem *createdItem = createHdItem (hdsView, 0, hd, status);
    14431606        setCurrentItem (hdsView, createdItem);
    14441607        /* synchronize modeless dialog if present */
    14451608        if (mModelessDialog && mModelessDialog != this)
    1446             mModelessDialog->createHdItem (mModelessDialog->hdsView, 0, hd);
     1609            mModelessDialog->createHdItem (mModelessDialog->hdsView,
     1610                                           0, hd, status);
    14471611    }
    14481612}
     
    14571621
    14581622    QString dir;
    1459     if (item)
     1623    if (item && item->getStatus() == VBoxMedia::Ok)
    14601624        dir = item->getPath().stripWhiteSpace();
    14611625
     
    14901654                                                title);
    14911655
    1492     DiskImageItem *createdItem = 0;
    1493     if (src)
    1494     {
    1495         QUuid uuid;
    1496         if (currentList == hdsView)
    1497         {
    1498             CVirtualDiskImage vdi = vbox.OpenVirtualDiskImage (src);
    1499             if (vbox.isOk())
    1500             {
    1501                 /// @todo (dmik) later, change wrappers so that converting
    1502                 //  to CUnknown is not necessary for cross-assignments
    1503                 CHardDisk hardDisk = CUnknown (vdi);
    1504                 vbox.RegisterHardDisk (hardDisk);
    1505                 if (vbox.isOk())
    1506                 {
    1507                     createdItem = createHdItem (hdsView, 0, hardDisk);
    1508                     /* synchronize modeless dialog if present */
    1509                     if (mModelessDialog && mModelessDialog != this)
    1510                         mModelessDialog->createHdItem (mModelessDialog->hdsView, 0, hardDisk);
    1511                 }
    1512             }
    1513         }
    1514         else
    1515         if (currentList == cdsView)
    1516         {
    1517             CDVDImage dvdImage = vbox.OpenDVDImage (src, uuid);
    1518             if (vbox.isOk())
    1519             {
    1520                 vbox.RegisterDVDImage (dvdImage);
    1521                 if (vbox.isOk())
    1522                 {
    1523                     createdItem = createCdItem (cdsView, 0, dvdImage);
    1524                     /* synchronize modeless dialog if present */
    1525                     if (mModelessDialog && mModelessDialog != this)
    1526                         mModelessDialog->createCdItem (mModelessDialog->cdsView, 0, dvdImage);
    1527                 }
    1528             }
    1529         }
    1530         else
    1531         if (currentList == fdsView)
    1532         {
    1533             CFloppyImage floppyImage = vbox.OpenFloppyImage (src, uuid);
    1534             if (vbox.isOk())
    1535             {
    1536                 vbox.RegisterFloppyImage (floppyImage);
    1537                 if (vbox.isOk())
    1538                 {
    1539                     createdItem = createFdItem (fdsView, 0, floppyImage);
    1540                     /* synchronize modeless dialog if present */
    1541                     if (mModelessDialog && mModelessDialog != this)
    1542                         mModelessDialog->createFdItem (mModelessDialog->fdsView, 0, floppyImage);
    1543                 }
    1544             }
    1545         }
    1546 
    1547         if (!vbox.isOk())
    1548         {
    1549             vboxProblem().cannotRegisterMedia (this, vbox, type, src);
    1550         }
    1551     }
    1552     /* set current item */
     1656    DiskImageItem *createdItem = addImageToList (src, type);
    15531657    setCurrentItem (currentList, createdItem);
     1658
     1659    if (!vbox.isOk())
     1660    {
     1661        vboxProblem().cannotRegisterMedia (this, vbox, type, src);
     1662    }
    15541663}
    15551664
     
    15731682        int deleteImage;
    15741683        if (vbox.GetHardDisk (uuid).GetStorageType() == CEnums::VirtualDiskImage &&
    1575             vbox.GetHardDisk (uuid).GetAccessible())
     1684            item->getStatus() == VBoxMedia::Ok)
    15761685        {
    15771686            deleteImage = vboxProblem().confirmHardDiskImageDeletion (this, src);
     
    16131722    {
    16141723        delete item;
    1615         setCurrentItem (currentList, (DiskImageItem*)currentList->currentItem());
     1724        setCurrentItem (currentList, currentList->currentItem());
    16161725        /* synchronize modeless dialog if present */
    16171726        if (mModelessDialog && mModelessDialog != this)
     
    18251934        accept();
    18261935}
    1827 
    1828 
    1829 void VBoxDiskImageManagerDlg::uploadCurrentList (QStringList &aNames,
    1830                                                  QStringList &aKeys,
    1831                                                  const QUuid &aMachineId)
    1832 {
    1833     QListView *currentList = getCurrentListView();
    1834     DiskImageItem *item = 0;
    1835     if (currentList->firstChild() &&
    1836         currentList->firstChild()->rtti() == 1001)
    1837         item = static_cast<DiskImageItem*> (currentList->firstChild());
    1838     Assert (item);
    1839 
    1840     do {
    1841         if (QUuid (item->getMachineId()).isNull() ||
    1842             QUuid (item->getMachineId()) == aMachineId)
    1843         {
    1844             aNames << QString ("%1 (%2)")
    1845                       .arg (item->getName().stripWhiteSpace())
    1846                       .arg (item->getPath().stripWhiteSpace());
    1847             aKeys  << item->getUuid();
    1848         }
    1849         item = item->nextSibling();
    1850     } while (item);
    1851 }
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