VirtualBox

Changeset 253 in vbox


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

FE/Qt: Various VDM fixes.

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

Legend:

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

    r168 r253  
    4747struct VBoxMedia
    4848{
    49     enum Status { Ok = 0, Error = 0x01, Inaccessible = 0x02 };
     49    enum Status { Unknown, Ok, Error, Inaccessible };
    5050
    5151    VBoxMedia() : type (VBoxDefs::InvalidType), status (Ok) {}
     
    298298
    299299    void startEnumeratingMedia();
     300    bool isInEnumeratingProcess() { return media_enum_thread ? true : false; }
    300301
    301302    /** Returns a list of all currently enumerated media (it is empty if the
  • trunk/src/VBox/Frontends/VirtualBox/include/VBoxMediaComboBox.h

    r1 r253  
    2424#define __VBoxMediaComboBox_h__
    2525
     26#include "VBoxGlobal.h"
     27
    2628#include <qcombobox.h>
    2729#include <quuid.h>
    2830
    29 struct VBoxMedia;
    30 typedef QValueList <VBoxMedia> VBoxMediaList;
     31class QListBoxItem;
    3132
    3233class VBoxMediaComboBox : public QComboBox
     
    3839    VBoxMediaComboBox (QWidget *aParent = 0,
    3940                       const char *aName = 0, int aType = 0);
    40     ~VBoxMediaComboBox () {}
     41    ~VBoxMediaComboBox() {}
    4142
    42     void refresh();
     43    void  refresh();
     44    void  appendItem (const QString &, const QUuid &, const QString &);
     45    void  replaceItem (int, const QString &, const QString &);
     46    void  removeLastItem();
     47    void  setReadyForRefresh();
     48    void  setRequiredItem (const QUuid &);
     49    void  setUseEmptyItem (bool);
     50    void  setBelongsTo (const QUuid &);
    4351    QUuid getId();
    44     void appendItem (const QString&, const QUuid&);
    45     void removeLastItem();
    46     void setRequiredItem (const QUuid&);
    47     void setUseEmptyItem (bool);
    48     void setReadyForRefresh();
    49     void setBelongsTo (const QUuid&);
    5052    QUuid getBelongsTo();
    51     void loadShortCuts (const QStringList&, const QStringList&);
     53    void setCurrentItem (int);
    5254
    5355protected slots:
    5456
    55     void updateShortcuts (const VBoxMediaList &);
     57    void mediaEnumerated (const VBoxMedia &);
     58    void listEnumerated (const VBoxMediaList &);
     59    void processOnItem (QListBoxItem *);
     60    void updateToolTip (int);
    5661
    5762protected:
    5863
     64    void loadCleanContent();
     65    int updateMedia (const QString &, const QUuid &, const QString &,
     66                     VBoxMedia::Status);
     67
    5968    int         mType;
    6069    QStringList mUuidList;
     70    QStringList mTipList;
    6171    QUuid       mMachineId;
    6272    QUuid       mRequiredId;
    6373    bool        mUseEmptyItem;
    6474    bool        mToBeRefreshed;
    65     bool        mWasEnabled;
    6675};
    6776
  • trunk/src/VBox/Frontends/VirtualBox/src/VBoxMediaComboBox.cpp

    r1 r253  
    2222
    2323#include "VBoxMediaComboBox.h"
     24#include "VBoxDiskImageManagerDlg.h"
    2425#include "VBoxGlobal.h"
    2526
    2627#include <qfileinfo.h>
     28#include <qimage.h>
    2729#include <qdir.h>
    2830#include <qfile.h>
     31#include <qtooltip.h>
     32#include <qlistbox.h>
    2933
    3034VBoxMediaComboBox::VBoxMediaComboBox (QWidget *aParent, const char *aName, int aType)
    3135    : QComboBox (aParent , aName),
    32     mType(aType), mRequiredId(QUuid()), mUseEmptyItem(false), mToBeRefreshed(false)
     36    mType (aType), mRequiredId (QUuid()), mUseEmptyItem (false), mToBeRefreshed (false)
    3337{
    3438    setSizePolicy (QSizePolicy::Expanding, QSizePolicy::Fixed);
    3539    /* Media shortcuts creating */
     40    connect (&vboxGlobal(), SIGNAL (mediaEnumerated (const VBoxMedia &)),
     41             this, SLOT (mediaEnumerated (const VBoxMedia &)));
    3642    connect (&vboxGlobal(), SIGNAL (mediaEnumerated (const VBoxMediaList &)),
    37              this, SLOT (updateShortcuts (const VBoxMediaList &)));
    38 }
    39 
    40 void VBoxMediaComboBox::updateShortcuts (const VBoxMediaList &aList)
    41 {
    42     /* check&reset refresh flag */
    43     if (!mToBeRefreshed)
    44         return;
    45     else
    46         mToBeRefreshed = false;
    47     /* combo-box clearing */
    48     clear();
    49     mUuidList.clear();
    50     /* prepend empty item if used */
    51     if (mUseEmptyItem)
    52         appendItem (tr ("<no hard disk>"), QUuid());
    53     int activatedItem = 0;
    54     /* processing all medias */
    55     VBoxMediaList::const_iterator it;
    56     for (it = aList.begin(); it != aList.end(); ++ it)
     43             this, SLOT (listEnumerated (const VBoxMediaList &)));
     44    connect (this, SIGNAL (activated (int)),
     45             this, SLOT (updateToolTip (int)));
     46    connect (listBox(), SIGNAL (onItem (QListBoxItem*)),
     47             this, SLOT (processOnItem (QListBoxItem*)));
     48}
     49
     50void VBoxMediaComboBox::loadCleanContent()
     51{
     52    CVirtualBox vbox = vboxGlobal().virtualBox();
     53
     54    switch (mType)
    5755    {
    58         const VBoxMedia& media = *it;
    59         if (!(media.type & mType))
    60             continue;
    61         QString src;
    62         QUuid   mediaId;
    63         switch (media.type)
    64         {
    65             case VBoxDefs::HD:
     56        /* load hd list */
     57        case VBoxDefs::HD:
     58        {
     59            CHardDiskEnumerator en = vbox.GetHardDisks().Enumerate();
     60            while (en.HasMore())
    6661            {
    67                 CHardDisk hd = media.disk;
    68                 src = hd.GetLocation();
     62                QUuid mediaId;
     63                QString toolTip;
     64                CHardDisk hd = en.GetNext();
     65                QString src = hd.GetLocation();
    6966                QUuid machineId = hd.GetMachineId();
    7067                /* append list only with free hd */
    7168                if (machineId.isNull() || machineId == mMachineId)
     69                {
    7270                    mediaId = hd.GetId();
    73                 break;
     71                    toolTip = VBoxDiskImageManagerDlg::composeHdToolTip (hd, VBoxMedia::Unknown);
     72                }
     73                if (!mediaId.isNull()) updateMedia (src, mediaId, toolTip, VBoxMedia::Unknown);
    7474            }
    75             case VBoxDefs::CD:
     75            break;
     76        }
     77        /* load cd list */
     78        case VBoxDefs::CD:
     79        {
     80            CDVDImageEnumerator en = vbox.GetDVDImages().Enumerate();
     81            while (en.HasMore())
    7682            {
    77                 CDVDImage dvd = media.disk;
    78                 src = dvd.GetFilePath();
    79                 mediaId = dvd.GetId();
    80                 break;
     83                QUuid mediaId;
     84                QString toolTip;
     85                CDVDImage cd = en.GetNext();
     86                QString src = cd.GetFilePath();
     87                mediaId = cd.GetId();
     88                toolTip = VBoxDiskImageManagerDlg::composeCdToolTip (cd, VBoxMedia::Unknown);
     89                updateMedia (src, mediaId, toolTip, VBoxMedia::Unknown);
    8190            }
    82             case VBoxDefs::FD:
     91            break;
     92        }
     93        /* load fd list */
     94        case VBoxDefs::FD:
     95        {
     96            CFloppyImageEnumerator en = vbox.GetFloppyImages().Enumerate();
     97            while (en.HasMore())
    8398            {
    84                 CFloppyImage floppy = media.disk;
    85                 src = floppy.GetFilePath();
    86                 mediaId = floppy.GetId();
    87                 break;
     99                QUuid mediaId;
     100                QString toolTip;
     101                CFloppyImage fd = en.GetNext();
     102                QString src = fd.GetFilePath();
     103                mediaId = fd.GetId();
     104                toolTip = VBoxDiskImageManagerDlg::composeFdToolTip (fd, VBoxMedia::Unknown);
     105                updateMedia (src, mediaId, toolTip, VBoxMedia::Unknown);
    88106            }
    89             default:
    90                 AssertFailed();
    91         }
    92         if (!mediaId.isNull())
    93         {
    94             QFileInfo fi (src);
    95             appendItem (fi.fileName() + " (" +
    96                         QDir::convertSeparators (fi.dirPath()) + ")", mediaId);
    97             if (mediaId == mRequiredId)
     107            break;
     108        }
     109        default:
     110            AssertFailed();
     111    }
     112}
     113
     114void VBoxMediaComboBox::mediaEnumerated (const VBoxMedia &aMedia)
     115{
     116    if (!mToBeRefreshed) return;
     117    if (!(aMedia.type & mType))
     118        return;
     119
     120    QString src;
     121    QUuid   mediaId;
     122    QString toolTip;
     123
     124    switch (aMedia.type)
     125    {
     126        case VBoxDefs::HD:
     127        {
     128            CHardDisk hd = aMedia.disk;
     129            src = hd.GetLocation();
     130            QUuid machineId = hd.GetMachineId();
     131            /* append list only with free hd */
     132            if (machineId.isNull() || machineId == mMachineId)
    98133            {
    99                 activatedItem = count() - 1;
    100                 setCurrentItem (activatedItem);
     134                mediaId = hd.GetId();
     135                toolTip = VBoxDiskImageManagerDlg::composeHdToolTip (hd, aMedia.status);
    101136            }
    102         }
     137            break;
     138        }
     139        case VBoxDefs::CD:
     140        {
     141            CDVDImage dvd = aMedia.disk;
     142            src = dvd.GetFilePath();
     143            mediaId = dvd.GetId();
     144            toolTip = VBoxDiskImageManagerDlg::composeCdToolTip (dvd, aMedia.status);
     145            break;
     146        }
     147        case VBoxDefs::FD:
     148        {
     149            CFloppyImage floppy = aMedia.disk;
     150            src = floppy.GetFilePath();
     151            mediaId = floppy.GetId();
     152            toolTip = VBoxDiskImageManagerDlg::composeFdToolTip (floppy, aMedia.status);
     153            break;
     154        }
     155        default:
     156            AssertFailed();
    103157    }
    104     emit activated (activatedItem);
    105     if (mWasEnabled)
    106         setEnabled (true);
     158    int updatedMedia = -1;
     159    if (!mediaId.isNull())
     160        updatedMedia = updateMedia (src, mediaId, toolTip, aMedia.status);
     161    if (updatedMedia == -1) return;
     162
     163    /* update warning/error icons */
     164    /// @todo (r=dmik) cache pixmaps as class members
     165    QPixmap pixmap;
     166    QImage img;
     167    if (aMedia.status == VBoxMedia::Inaccessible)
     168        img = QMessageBox::standardIcon (QMessageBox::Warning).convertToImage();
     169    else if (aMedia.status == VBoxMedia::Error)
     170        img = QMessageBox::standardIcon (QMessageBox::Critical).convertToImage();
     171    if (!img.isNull())
     172    {
     173        img = img.smoothScale (14, 14);
     174        pixmap.convertFromImage (img);
     175    }
     176    if (!pixmap.isNull())
     177        changeItem (pixmap, text (updatedMedia), updatedMedia);
     178}
     179
     180int VBoxMediaComboBox::updateMedia (const QString &aSrc,
     181                                    const QUuid   &aId,
     182                                    const QString &aTip,
     183                                    VBoxMedia::Status /* aStatus */)
     184{
     185    /* search & update media */
     186    QFileInfo fi (aSrc);
     187    int index = mUuidList.findIndex (aId);
     188    QString name = QString ("%1 (%2)").arg (fi.fileName())
     189                   .arg (QDir::convertSeparators (fi.dirPath()));
     190    index == -1 ? appendItem (name, aId, aTip) : replaceItem (index, name, aTip);
     191    if (aId == mRequiredId)
     192    {
     193        int activatedItem = index == -1 ? count() - 1 : index;
     194        setCurrentItem (activatedItem);
     195        emit activated (activatedItem);
     196    }
     197    else
     198        updateToolTip (currentItem());
     199    return index == -1 ? count() - 1 : index;
     200}
     201
     202void VBoxMediaComboBox::listEnumerated (const VBoxMediaList &aList)
     203{
     204    emit activated (currentItem());
     205    mToBeRefreshed = false;
     206}
     207
     208void VBoxMediaComboBox::updateToolTip (int aItem)
     209{
     210    /* combobox tooltip attaching */
     211    QToolTip::remove (this);
     212    QToolTip::add (this, mTipList [aItem]);
     213}
     214
     215void VBoxMediaComboBox::processOnItem (QListBoxItem* aItem)
     216{
     217    /* combobox item's tooltip attaching */
     218    int index = listBox()->index (aItem);
     219    QToolTip::remove (listBox()->viewport());
     220    QToolTip::add (listBox()->viewport(), mTipList [index]);
     221}
     222
     223void VBoxMediaComboBox::setReadyForRefresh()
     224{
     225    mToBeRefreshed = true;
     226    /* clearing media combobox */
     227    clear(), mUuidList.clear(), mTipList.clear();
     228    /* prepend empty item if used */
     229    if (mUseEmptyItem)
     230        appendItem (tr ("<no hard disk>"), QUuid(), tr ("No hard disk"));
     231    /* load all non-enumerated shortcuts */
     232    if (!vboxGlobal().isInEnumeratingProcess()) loadCleanContent();
     233    /* update already enumerated shortcuts */
     234    VBoxMediaList list = vboxGlobal().currentMediaList();
     235    for (VBoxMediaList::const_iterator it = list.begin(); it != list.end(); ++ it)
     236        mediaEnumerated (*it);
    107237}
    108238
     
    116246QUuid VBoxMediaComboBox::getId()
    117247{
    118     return mUuidList.isEmpty() ? QUuid() : QUuid (mUuidList[currentItem()]);
    119 }
    120 
    121 void VBoxMediaComboBox::appendItem (const QString &aName, const QUuid &aId)
    122 {
    123     insertItem(aName);
     248    return mUuidList.isEmpty() ? QUuid() : QUuid (mUuidList [currentItem()]);
     249}
     250
     251void VBoxMediaComboBox::appendItem (const QString &aName,
     252                                    const QUuid   &aId,
     253                                    const QString &aTip)
     254{
     255    insertItem (aName);
    124256    mUuidList << aId;
     257    mTipList  << aTip;
     258}
     259
     260void VBoxMediaComboBox::replaceItem (int aNumber,
     261                                     const QString &aName,
     262                                     const QString &aTip)
     263{
     264    changeItem (aName, aNumber);
     265    mTipList [aNumber] = aTip;
    125266}
    126267
     
    130271        removeItem (count() - 1);
    131272    mUuidList.pop_back();
     273    mTipList.pop_back();
    132274}
    133275
     
    142284}
    143285
    144 void VBoxMediaComboBox::setReadyForRefresh()
    145 {
    146     mToBeRefreshed = true;
    147     /* clearing media combobox */
    148     clear(), mUuidList.clear();
    149     /* blocking media combobox */
    150     mWasEnabled = isEnabled();
    151     setEnabled (false);
    152     insertItem (tr ("...enumerating media..."));
    153 }
    154 
    155286void VBoxMediaComboBox::setBelongsTo (const QUuid &aMachineId)
    156287{
     
    163294}
    164295
    165 void VBoxMediaComboBox::loadShortCuts (const QStringList& aNameList,
    166                                        const QStringList& aKeyList)
    167 {
    168     /* clearing media combobox */
    169     clear(), mUuidList.clear();
    170     /* load shortcuts from string lists */
    171     QStringList::const_iterator itName = aNameList.begin();
    172     QStringList::const_iterator itKey  = aKeyList.begin();
    173     int activatedItem = 0;
    174     for (;itName != aNameList.end() && itKey != aKeyList.end();)
    175     {
    176         appendItem (*itName, *itKey);
    177         if (*itKey == mRequiredId)
    178         {
    179             activatedItem = count() - 1;
    180             setCurrentItem (activatedItem);
    181         }
    182         ++itName; ++itKey;
    183     }
    184     emit activated (activatedItem);
    185 }
     296void VBoxMediaComboBox::setCurrentItem (int aIndex)
     297{
     298    QComboBox::setCurrentItem (aIndex);
     299    updateToolTip (aIndex);
     300}
  • trunk/src/VBox/Frontends/VirtualBox/ui/VBoxDiskImageManagerDlg.ui

    r59 r253  
    303303                <widget class="QLayoutWidget">
    304304                    <property name="name">
    305                         <cstring>layout6</cstring>
     305                        <cstring>buttonLayout</cstring>
    306306                    </property>
    307307                    <hbox>
     
    329329                            <property name="name">
    330330                                <cstring>Spacer1</cstring>
     331                            </property>
     332                            <property name="orientation">
     333                                <enum>Horizontal</enum>
     334                            </property>
     335                            <property name="sizeType">
     336                                <enum>Expanding</enum>
     337                            </property>
     338                            <property name="sizeHint">
     339                                <size>
     340                                    <width>214</width>
     341                                    <height>16</height>
     342                                </size>
     343                            </property>
     344                        </spacer>
     345                        <spacer>
     346                            <property name="name">
     347                                <cstring>Spacer2</cstring>
    331348                            </property>
    332349                            <property name="orientation">
     
    509526    <forward>class QSizeGrip</forward>
    510527    <forward>class QIRichLabel</forward>
    511     <forward>class ProgressBarItem</forward>
     528    <forward>class QProgressBar</forward>
    512529</forwards>
    513530<variables>
     
    546563    <variable access="private">static VBoxDiskImageManagerDlg *mModelessDialog;</variable>
    547564    <variable access="private">bool mToBeRefreshed;</variable>
    548     <variable access="private">ProgressBarItem *mHdsProgress;</variable>
    549     <variable access="private">ProgressBarItem *mCdsProgress;</variable>
    550     <variable access="private">ProgressBarItem *mFdsProgress;</variable>
     565    <variable access="private">QProgressBar *mProgressBar;</variable>
     566    <variable access="private">QLabel *mProgressText;</variable>
    551567</variables>
    552568<slots>
     
    567583    <slot access="protected">reject()</slot>
    568584    <slot access="protected">mouseOnItem( QListViewItem *item )</slot>
    569     <slot access="protected">addDroppedImages( QDropEvent* )</slot>
    570585</slots>
    571586<functions>
    572587    <function access="private">init()</function>
     588    <function access="private">loadListViews()</function>
    573589    <function access="private" returnType="int">result()</function>
    574590    <function access="private">setResult( int )</function>
    575591    <function returnType="int">exec()</function>
    576592    <function access="private">done( int )</function>
    577     <function access="private">insertMedia( const VBoxMedia &amp; media )</function>
     593    <function access="private">updateMedia( const VBoxMedia &amp; media )</function>
     594    <function access="private" returnType="DiskImageItem*">searchItem( QListView*, QUuid )</function>
    578595    <function specifier="non virtual" access="private" returnType="QString">static getDVDImageUsage( const QUuid &amp; id )</function>
    579596    <function specifier="non virtual" access="private" returnType="QString">static getFloppyImageUsage( const QUuid &amp; id )</function>
     
    585602    <function access="private" returnType="QListView*">getCurrentListView()</function>
    586603    <function returnType="bool">eventFilter( QObject *, QEvent * )</function>
    587     <function access="private">addDroppedImage( QString aSource, VBoxDefs::DiskType aDiskType )</function>
     604    <function access="private">addDroppedImages( QStringList* )</function>
     605    <function access="private" returnType="DiskImageItem*">addImageToList( QString aSource, VBoxDefs::DiskType aDiskType )</function>
    588606    <function access="private" returnType="DiskImageItem*">createImageNode( QListView *aList, DiskImageItem *aRoot, QString aName, QString aLabel1 = QString::null, QString aLabel2 = QString::null, QString aLabel3 = QString::null, QString aLabel4 = QString::null, QString aLabel5 = QString::null, QString aLabel6 = QString::null, QString aLabel7 = QString::null )</function>
    589     <function access="private" returnType="DiskImageItem*">createHdItem( QListView*, DiskImageItem*, CHardDisk &amp; )</function>
    590     <function access="private" returnType="DiskImageItem*">createCdItem( QListView*, DiskImageItem*, CDVDImage &amp; )</function>
    591     <function access="private" returnType="DiskImageItem*">createFdItem( QListView*, DiskImageItem*, CFloppyImage &amp; )</function>
    592     <function access="private">createHdChildren( DiskImageItem*, CHardDisk &amp; )</function>
     607    <function access="private" returnType="DiskImageItem*">createHdItem( QListView*, DiskImageItem*, CHardDisk &amp;, VBoxMedia::Status )</function>
     608    <function access="private" returnType="DiskImageItem*">createCdItem( QListView*, DiskImageItem*, CDVDImage &amp;, VBoxMedia::Status )</function>
     609    <function access="private" returnType="DiskImageItem*">createFdItem( QListView*, DiskImageItem*, CFloppyImage &amp;, VBoxMedia::Status )</function>
     610    <function access="private">createHdChildren( DiskImageItem*, CHardDisk &amp;, VBoxMedia::Status )</function>
    593611    <function access="protected">showEvent( QShowEvent * )</function>
    594612    <function access="protected">resizeEvent( QResizeEvent* )</function>
     
    597615    <function access="protected" returnType="QIRichLabel*">createInfoString( QString, QWidget*, int, int )</function>
    598616    <function access="protected" returnType="QPushButton*">searchDefaultButton()</function>
    599     <function access="protected">setCurrentItem( QListView*, DiskImageItem* )</function>
    600     <function>uploadCurrentList( QStringList&amp;, QStringList&amp;, const QUuid&amp; )</function>
     617    <function access="protected">setCurrentItem( QListView*, QListViewItem* )</function>
    601618    <function specifier="non virtual">static showModeless( const VBoxMediaList * = NULL )</function>
    602     <function access="protected">refreshList( QListView*, ProgressBarItem*&amp; )</function>
    603     <function specifier="non virtual" returnType="QString">static composeHdToolTip( CHardDisk &amp; )</function>
    604     <function specifier="non virtual" returnType="QString">static composeCdToolTip( CDVDImage &amp; )</function>
    605     <function specifier="non virtual" returnType="QString">static composeFdToolTip( CFloppyImage &amp; )</function>
     619    <function specifier="non virtual" returnType="QString">static composeHdToolTip( CHardDisk &amp;, VBoxMedia::Status = VBoxMedia::Ok )</function>
     620    <function specifier="non virtual" returnType="QString">static composeCdToolTip( CDVDImage &amp;, VBoxMedia::Status = VBoxMedia::Ok )</function>
     621    <function specifier="non virtual" returnType="QString">static composeFdToolTip( CFloppyImage &amp;, VBoxMedia::Status = VBoxMedia::Ok )</function>
     622    <function access="protected">prepareToRefresh()</function>
    606623</functions>
    607624<layoutdefaults spacing="10" margin="10"/>
  • 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 }
  • trunk/src/VBox/Frontends/VirtualBox/ui/VBoxNewVMWzd.ui.h

    r1 r253  
    402402        /* update media combobox */
    403403        QFileInfo fi (chd.GetLocation());
    404         mediaCombo->appendItem (fi.fileName() + " (" +
    405                                 QDir::convertSeparators (fi.dirPath()) + ")", uuidHD);
     404        mediaCombo->appendItem (QString ("%1 (%2)")
     405            .arg (fi.fileName())
     406            .arg (QDir::convertSeparators (fi.dirPath())),
     407            uuidHD, VBoxDiskImageManagerDlg::composeHdToolTip (chd));
    406408        mediaCombo->setCurrentItem (mediaCombo->count() - 1);
    407409        mediaCombo->setFocus();
  • trunk/src/VBox/Frontends/VirtualBox/ui/VBoxVMSettingsDlg.ui

    r1 r253  
    24582458    <function access="protected">showEvent( QShowEvent * )</function>
    24592459    <function returnType="bool">eventFilter( QObject * watched, QEvent * e )</function>
    2460     <function access="protected">updateShortcuts( VBoxDefs::DiskType, VBoxDiskImageManagerDlg *aVdm = 0 )</function>
     2460    <function access="protected">updateShortcuts()</function>
    24612461    <function access="protected" returnType="QString">getHdInfo( QGroupBox*, QUuid )</function>
    24622462</functions>
  • trunk/src/VBox/Frontends/VirtualBox/ui/VBoxVMSettingsDlg.ui.h

    r70 r253  
    226226{
    227227    polished = false;
    228    
     228
    229229    setIcon (QPixmap::fromMimeSource ("settings_16px.png"));
    230230
     
    333333    QWhatsThis::add (cbHDD, tr ("Displays the virtual hard disk to attach to this IDE slot "
    334334                                "and allows to quickly select a different hard disk."));
    335    
     335
    336336    wvalHDD = new QIWidgetValidator( pageHDD, this );
    337337    connect (wvalHDD, SIGNAL (validityChanged (const QIWidgetValidator *)),
     
    417417                         "virtual machine that uses the specified driver to communicate "
    418418                         "to the host audio card."));
    419    
     419
    420420    /* Network Page */
    421421
     
    563563    if (!object->isWidgetType())
    564564        return QDialog::eventFilter (object, event);
    565    
     565
    566566    QWidget *widget = static_cast <QWidget *> (object);
    567567    if (widget->topLevelWidget() != this)
     
    595595{
    596596    QDialog::showEvent (e);
    597    
     597
    598598    /* one may think that QWidget::polish() is the right place to do things
    599599     * below, but apparently, by the time when QWidget::polish() is called,
     
    601601     * size hint is not properly calculated. Since this is sometimes necessary,
    602602     * we provide our own "polish" implementation. */
    603    
     603
    604604    if (polished)
    605605        return;
    606    
     606
    607607    polished = true;
    608    
     608
    609609    /* resize to the miminum possible size */
    610610    resize (minimumSize());
    611    
     611
    612612    VBoxGlobal::centerWidget (this, parentWidget());
    613613}
     
    622622}
    623623
    624 void VBoxVMSettingsDlg::updateShortcuts (VBoxDefs::DiskType aType,
    625                                          VBoxDiskImageManagerDlg *aVdm)
    626 {
    627     /* update request for selected item */
     624void VBoxVMSettingsDlg::updateShortcuts()
     625{
     626    /* setup necessary combobox item */
    628627    cbHDA->setRequiredItem (uuidHDA);
    629628    cbHDB->setRequiredItem (uuidHDB);
     
    631630    cbISODVD->setRequiredItem (uuidISODVD);
    632631    cbISOFloppy->setRequiredItem (uuidISOFloppy);
    633 
    634     if (aVdm)
    635     /* quick update from vdm data */
    636     {
    637         QStringList names, keys;
    638         aVdm->uploadCurrentList (names, keys, cbHDA->getBelongsTo());
    639 
    640         switch (aType)
    641         {
    642             case VBoxDefs::HD:
    643                 cbHDA->loadShortCuts (names, keys);
    644                 cbHDB->loadShortCuts (names, keys);
    645                 cbHDD->loadShortCuts (names, keys);
    646                 break;
    647             case VBoxDefs::CD:
    648                 cbISODVD->loadShortCuts (names, keys);
    649                 break;
    650             case VBoxDefs::FD:
    651                 cbISOFloppy->loadShortCuts (names, keys);
    652                 break;
    653             default:
    654                 Assert (0);
    655                 break;
    656         }
    657     }
    658     else
    659     /* slow update through media-enumeration process */
    660     {
    661         /* request for refresh every combo-box */
    662         cbHDA->setReadyForRefresh();
    663         cbHDB->setReadyForRefresh();
    664         cbHDD->setReadyForRefresh();
    665         cbISODVD->setReadyForRefresh();
    666         cbISOFloppy->setReadyForRefresh();
    667         /* starting media-enumerating process */
    668         vboxGlobal().startEnumeratingMedia();
    669     }
     632    /* request for refresh every combo-box */
     633    cbHDA->setReadyForRefresh();
     634    cbHDB->setReadyForRefresh();
     635    cbHDD->setReadyForRefresh();
     636    cbISODVD->setReadyForRefresh();
     637    cbISOFloppy->setReadyForRefresh();
     638    /* starting media-enumerating process */
     639    vboxGlobal().startEnumeratingMedia();
    670640}
    671641
     
    674644{
    675645    uuidHDA = grbHDA->isChecked() ? cbHDA->getId() : QUuid();
     646    cbHDA->setRequiredItem (uuidHDA);
    676647    txHDA->setText (getHdInfo (grbHDA, uuidHDA));
    677     /* tool-tip composing */
    678     if (!uuidHDA.isNull())
    679     {
    680         CHardDisk hd = vboxGlobal().virtualBox().GetHardDisk (uuidHDA);
    681         QToolTip::add (cbHDA, VBoxDiskImageManagerDlg::composeHdToolTip (hd));
    682     }
    683648    /* revailidate */
    684649    wvalHDD->revalidate();
     
    689654{
    690655    uuidHDB = grbHDB->isChecked() ? cbHDB->getId() : QUuid();
     656    cbHDB->setRequiredItem (uuidHDB);
    691657    txHDB->setText (getHdInfo (grbHDB, uuidHDB));
    692     /* tool-tip composing */
    693     if (!uuidHDB.isNull())
    694     {
    695         CHardDisk hd = vboxGlobal().virtualBox().GetHardDisk (uuidHDB);
    696         QToolTip::add (cbHDB, VBoxDiskImageManagerDlg::composeHdToolTip (hd));
    697     }
    698658    /* revailidate */
    699659    wvalHDD->revalidate();
     
    704664{
    705665    uuidHDD = grbHDD->isChecked() ? cbHDD->getId() : QUuid();
     666    cbHDD->setRequiredItem (uuidHDD);
    706667    txHDD->setText (getHdInfo (grbHDD, uuidHDD));
    707     /* tool-tip composing */
    708     if (!uuidHDD.isNull())
    709     {
    710         CHardDisk hd = vboxGlobal().virtualBox().GetHardDisk (uuidHDD);
    711         QToolTip::add (cbHDD, VBoxDiskImageManagerDlg::composeHdToolTip (hd));
    712     }
    713668    /* revailidate */
    714669    wvalHDD->revalidate();
     
    719674{
    720675    uuidISODVD = bgDVD->isChecked() ? cbISODVD->getId() : QUuid();
    721     /* tool-tip composing */
    722     if (!uuidISODVD.isNull())
    723     {
    724         CDVDImage cd = vboxGlobal().virtualBox().GetDVDImage (uuidISODVD);
    725         QToolTip::add (cbISODVD, VBoxDiskImageManagerDlg::composeCdToolTip (cd));
    726     }
     676    cbISODVD->setRequiredItem (uuidISODVD);
    727677    /* revailidate */
    728678    wvalDVD->revalidate();
     
    733683{
    734684    uuidISOFloppy = bgFloppy->isChecked() ? cbISOFloppy->getId() : QUuid();
    735     /* tool-tip composing */
    736     if (!uuidISOFloppy.isNull())
    737     {
    738         CFloppyImage fd = vboxGlobal().virtualBox().GetFloppyImage (uuidISOFloppy);
    739         QToolTip::add (cbISOFloppy, VBoxDiskImageManagerDlg::composeFdToolTip (fd));
    740     }
     685    cbISOFloppy->setRequiredItem (uuidISOFloppy);
    741686    /* revailidate */
    742687    wvalFloppy->revalidate();
     
    746691QString VBoxVMSettingsDlg::getHdInfo (QGroupBox *aGroupBox, QUuid aId)
    747692{
    748     QString notAttached = tr ("<not attached>", "hard disk"); 
     693    QString notAttached = tr ("<not attached>", "hard disk");
    749694    if (aId.isNull())
    750695        return notAttached;
     
    790735    if (!warning.isEmpty())
    791736        warningString = QString ("<font color=red>%1</font>").arg (warning);
    792    
     737
    793738    if (!warningString.isEmpty())
    794739        whatsThisLabel->setText (warningString);
     
    12691214    cbHDB->setBelongsTo(machine.GetId());
    12701215    cbHDD->setBelongsTo(machine.GetId());
    1271     updateShortcuts (VBoxDefs::InvalidType);
     1216    updateShortcuts();
    12721217
    12731218    /* revalidate pages with custom validation */
     
    15061451    if (dlg.exec() == VBoxDiskImageManagerDlg::Accepted)
    15071452        *id = dlg.getSelectedUuid();
    1508     updateShortcuts (type, &dlg);
     1453    updateShortcuts();
    15091454    cbb->setFocus();
    15101455}
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