VirtualBox

Changeset 9626 in vbox


Ignore:
Timestamp:
Jun 11, 2008 7:45:47 PM (17 years ago)
Author:
vboxsync
Message:

Fe/Qt4: finishing porting of VBoxMediaComboBox widget.

Location:
trunk/src/VBox/Frontends/VirtualBox4
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox4/include/VBoxMediaComboBox.h

    r9600 r9626  
    2626#include "VBoxGlobal.h"
    2727
    28 #include <qcombobox.h>
    29 //Added by qt3to4:
     28#include <QComboBox>
    3029#include <QPixmap>
    31 
    32 class Q3ListBoxItem;
    3330
    3431class VBoxMediaComboBox : public QComboBox
     
    3835public:
    3936
     37    static QString fullItemName (const QString &aSrc);
     38
    4039    VBoxMediaComboBox (QWidget *aParent, int aType = -1,
    4140                       bool aUseEmptyItem = false);
    42     ~VBoxMediaComboBox() {}
    43 
    44     static QString fullItemName (const QString &aSrc);
    4541
    4642    void  refresh();
    47     void  setUseEmptyItem (bool);
    48     void  setBelongsTo (const QUuid &);
     43
     44    void  setUseEmptyItem (bool aUse);
     45    void  setBelongsTo (const QUuid &aMachineId);
     46    void  setCurrentItem (const QUuid &aId);
     47    void  setType (int aImageType);
     48
    4949    QUuid getId (int aId = -1) const;
    50     QUuid getBelongsTo();
    51     void  setCurrentItem (const QUuid &);
    52     void  setType (int);
    5350
    5451protected slots:
     
    5653    void mediaEnumStarted();
    5754    void mediaEnumerated (const VBoxMedia &, int);
     55
    5856    void mediaAdded (const VBoxMedia &);
    5957    void mediaUpdated (const VBoxMedia &);
    6058    void mediaRemoved (VBoxDefs::DiskType, const QUuid &);
    61     void processOnItem (const QModelIndex&);
    62     void processActivated (int);
     59
     60    void processActivated (int aIndex);
     61    void processIndexChanged (int aIndex);
     62
     63    void processOnItem (const QModelIndex &aIndex);
    6364
    6465protected:
    6566
    66     void init();
    67     void updateToolTip (int);
    6867    void processMedia (const VBoxMedia &);
    6968    void processHdMedia (const VBoxMedia &);
    7069    void processCdMedia (const VBoxMedia &);
    7170    void processFdMedia (const VBoxMedia &);
    72     void appendItem (const QString &, const QUuid &,
    73                      const QString &, QPixmap *);
    74     void replaceItem (int, const QString &,
    75                       const QString &, QPixmap *);
    76     void updateShortcut (const QString &, const QUuid &, const QString &,
    77                           VBoxMedia::Status);
     71
     72    void updateShortcut (const QString &aSrc, const QUuid &aId,
     73                         const QString &aToolTip, VBoxMedia::Status aStatus);
     74
     75    void newItem (const QString &aName, const QUuid &aId,
     76                  const QString &aToolTip, QPixmap *aPixmap);
     77    void updItem (int aIndex, const QString &aNewName,
     78                  const QString &aNewTip, QPixmap *aNewPix);
     79
     80    QList<QUuid> mUuidList;
     81    QList<QString> mTipList;
    7882
    7983    int         mType;
    80     QStringList mUuidList;
    81     QStringList mTipList;
    8284    QUuid       mMachineId;
    8385    QUuid       mRequiredId;
  • trunk/src/VBox/Frontends/VirtualBox4/src/VBoxMediaComboBox.cpp

    r9600 r9626  
    2828#include <QPixmap>
    2929
     30/* static // compose item name */
     31QString VBoxMediaComboBox::fullItemName (const QString &aSrc)
     32{
     33    QFileInfo fi (aSrc);
     34    return QString ("%1 (%2)").arg (fi.fileName())
     35               .arg (QDir::convertSeparators (fi.absolutePath()));
     36}
     37
     38
    3039VBoxMediaComboBox::VBoxMediaComboBox (QWidget *aParent, int aType /* = -1 */,
    3140                                      bool aUseEmptyItem /* = false */)
    3241    : QComboBox (aParent)
    33     , mType (aType), mRequiredId (QUuid()), mUseEmptyItem (aUseEmptyItem)
    34 {
    35     init();
    36 }
    37 
    38 void VBoxMediaComboBox::init()
     42    , mType (aType), mUseEmptyItem (aUseEmptyItem)
    3943{
    4044    /* Setup default size policy */
     
    5559             this, SLOT (mediaRemoved (VBoxDefs::DiskType, const QUuid &)));
    5660
    57     /* Setup connections */
     61    /* Setup other connections */
    5862    connect (this, SIGNAL (activated (int)),
    5963             this, SLOT (processActivated (int)));
     64    connect (this, SIGNAL (currentIndexChanged (int)),
     65             this, SLOT (processIndexChanged (int)));
    6066
    6167    /* In some qt themes embedded list-box is not used by default, so create it */
     
    6773                 this, SLOT (processOnItem (const QModelIndex&)));
    6874
    69     /* cache pixmaps as class members */
     75    /* Cache pixmaps as class members */
    7076    QIcon icon;
    7177    icon = vboxGlobal().standardIcon (QStyle::SP_MessageBoxWarning, this);
     
    7783}
    7884
    79 QString VBoxMediaComboBox::fullItemName (const QString &aSrc)
    80 {
    81     /* Compose item's name */
    82     QFileInfo fi (aSrc);
    83     return QString ("%1 (%2)").arg (fi.fileName())
    84                .arg (QDir::convertSeparators (fi.absolutePath()));
    85 }
    86 
    8785void VBoxMediaComboBox::refresh()
    8886{
     
    9189    /* Prepend empty item if used */
    9290    if (mUseEmptyItem)
    93         appendItem (tr ("<no hard disk>"), QUuid(), tr ("No hard disk"), 0);
     91        newItem (tr ("<no hard disk>"), QUuid(), tr ("No hard disk"), 0);
    9492    /* Load current media list */
    9593    VBoxMediaList list = vboxGlobal().currentMediaList();
     
    9896        mediaEnumerated (*it, 0);
    9997    /* Activate item selected during current list loading */
    100     processActivated (currentIndex());
     98    processIndexChanged (currentIndex());
     99}
     100
     101
     102void VBoxMediaComboBox::setUseEmptyItem (bool aUseEmptyItem)
     103{
     104    mUseEmptyItem = aUseEmptyItem;
     105}
     106
     107void VBoxMediaComboBox::setBelongsTo (const QUuid &aMachineId)
     108{
     109    mMachineId = aMachineId;
     110}
     111
     112void VBoxMediaComboBox::setCurrentItem (const QUuid &aId)
     113{
     114    mRequiredId = aId;
     115    int index = mUuidList.indexOf (mRequiredId);
     116    if (index != -1)
     117        setCurrentIndex (index);
     118}
     119
     120void VBoxMediaComboBox::setType (int aType)
     121{
     122    mType = aType;
     123}
     124
     125
     126QUuid VBoxMediaComboBox::getId (int aId /* = -1 */) const
     127{
     128    return aId == -1 && currentIndex() >= 0 && currentIndex() < mUuidList.size() ?
     129           mUuidList [currentIndex()] :
     130           aId < 0 || aId >= mUuidList.size() ? QUuid() :
     131           mUuidList [aId];
    101132}
    102133
     
    136167        mUuidList.removeAt (index);
    137168        mTipList.removeAt (index);
    138         /* emit signal to ensure parent dialog process selection changes */
    139         emit activated (currentIndex());
    140169    }
     170}
     171
     172
     173void VBoxMediaComboBox::processActivated (int aIndex)
     174{
     175    mRequiredId = aIndex < 0 || aIndex >= mUuidList.size() ?
     176        QUuid() : mUuidList [aIndex];
     177}
     178
     179void VBoxMediaComboBox::processIndexChanged (int aIndex)
     180{
     181    /* Combobox tooltip re-attaching */
     182    setToolTip (QString::null);
     183    if (aIndex >= 0 && aIndex < mTipList.size())
     184        setToolTip (mTipList [aIndex]);
     185}
     186
     187void VBoxMediaComboBox::processOnItem (const QModelIndex &aIndex)
     188{
     189    /* Combobox item's tooltip attaching */
     190    int index = aIndex.row();
     191    view()->viewport()->setToolTip (QString::null);
     192    view()->viewport()->setToolTip (mTipList [index]);
    141193}
    142194
     
    151203        case VBoxDefs::HD:
    152204        {
     205            CHardDisk hd = aMedia.disk;
    153206            /* Ignoring non-root disks */
    154             CHardDisk hd = aMedia.disk;
    155207            if (hd.GetParent().isNull())
    156208                processHdMedia (aMedia);
     
    187239void VBoxMediaComboBox::processCdMedia (const VBoxMedia &aMedia)
    188240{
    189     CDVDImage dvd = aMedia.disk;
    190     QString src = dvd.GetFilePath();
    191     QUuid mediaId = dvd.GetId();
    192     QString toolTip = VBoxDiskImageManagerDlg::composeCdToolTip (dvd, aMedia.status);
     241    CDVDImage cd = aMedia.disk;
     242    QString src = cd.GetFilePath();
     243    QUuid mediaId = cd.GetId();
     244    QString toolTip = VBoxDiskImageManagerDlg::composeCdToolTip (cd, aMedia.status);
    193245    updateShortcut (src, mediaId, toolTip, aMedia.status);
    194246}
     
    196248void VBoxMediaComboBox::processFdMedia (const VBoxMedia &aMedia)
    197249{
    198     CFloppyImage floppy = aMedia.disk;
    199     QString src = floppy.GetFilePath();
    200     QUuid mediaId = floppy.GetId();
    201     QString toolTip = VBoxDiskImageManagerDlg::composeFdToolTip (floppy, aMedia.status);
     250    CFloppyImage fd = aMedia.disk;
     251    QString src = fd.GetFilePath();
     252    QUuid mediaId = fd.GetId();
     253    QString toolTip = VBoxDiskImageManagerDlg::composeFdToolTip (fd, aMedia.status);
    202254    updateShortcut (src, mediaId, toolTip, aMedia.status);
    203255}
     256
    204257
    205258void VBoxMediaComboBox::updateShortcut (const QString &aSrc,
     
    220273    int index = mUuidList.indexOf (aId);
    221274    /* Create or update media */
    222     if (index == -1)
    223         appendItem (name, aId, aTip, pixmap);
    224     else
    225         replaceItem (index, name, aTip, pixmap);
     275    index == -1 ? newItem (name, aId, aTip, pixmap) :
     276                  updItem (index, name, aTip, pixmap);
    226277
    227278    /* Activate required item if it was updated */
    228279    if (aId == mRequiredId)
    229280        setCurrentItem (aId);
    230     /* Select last added item if there is no item selected */
    231     else if (currentText().isEmpty())
    232         QComboBox::setCurrentIndex (index == -1 ? count() - 1 : index);
    233 }
    234 
    235 void VBoxMediaComboBox::processActivated (int aItem)
    236 {
    237     mRequiredId = mUuidList.isEmpty() || aItem < 0 ? QUuid() : QUuid (mUuidList [aItem]);
    238     updateToolTip (aItem);
    239 }
    240 
    241 void VBoxMediaComboBox::updateToolTip (int aItem)
    242 {
    243     /* Combobox tooltip re-attaching */
    244     setToolTip (QString::null);
    245     if (!mTipList.isEmpty() && aItem >= 0)
    246         setToolTip (mTipList [aItem]);
    247 }
    248 
    249 void VBoxMediaComboBox::processOnItem (const QModelIndex &aIndex)
    250 {
    251     /* Combobox item's tooltip attaching */
    252     int index = aIndex.row();
    253     view()->viewport()->setToolTip (QString::null);
    254     view()->viewport()->setToolTip (mTipList [index]);
    255 }
    256 
    257 QUuid VBoxMediaComboBox::getId (int aId) const
    258 {
    259     return mUuidList.isEmpty() ? QUuid() :
    260            aId == -1 ? QUuid (mUuidList [currentIndex()]) :
    261            QUuid (mUuidList [aId]);
    262 }
    263 
    264 void VBoxMediaComboBox::appendItem (const QString &aName,
    265                                     const QUuid   &aId,
    266                                     const QString &aTip,
    267                                     QPixmap       *aPixmap)
    268 {
    269     int currentInd = currentIndex();
    270 
    271     int insertPosition = count();
    272     for (int i = 0; i < count(); ++ i)
     281    /* Activate first item in list if current is not required */
     282    else if (getId() != mRequiredId)
     283        setCurrentIndex (0);
     284    /* Update current item if it was not really changed */
     285    processIndexChanged (currentIndex());
     286}
     287
     288void VBoxMediaComboBox::newItem (const QString &aName,
     289                                 const QUuid   &aId,
     290                                 const QString &aTip,
     291                                 QPixmap       *aPixmap)
     292{
     293    int initCount = count();
     294
     295    int insertPosition = initCount;
     296    for (int i = 0; i < initCount; ++ i)
    273297        /* Searching for the first real (non-null) vdi item
    274298           which have name greater than the item to be inserted.
     
    281305        }
    282306
    283     insertPosition == count() ? mUuidList.append (aId) :
     307    insertPosition == initCount ? mUuidList.append (aId) :
    284308        mUuidList.insert (insertPosition, aId);
    285309
    286     insertPosition == count() ? mTipList.append (aTip) :
     310    insertPosition == initCount ? mTipList.append (aTip) :
    287311        mTipList.insert (insertPosition, aTip);
    288312
    289313    aPixmap ? insertItem (insertPosition, *aPixmap, aName) :
    290314              insertItem (insertPosition, aName);
    291 
    292     if (insertPosition != count() && currentInd >= insertPosition)
    293         QComboBox::setCurrentIndex (currentInd + 1);
    294 }
    295 
    296 void VBoxMediaComboBox::replaceItem (int            aNumber,
    297                                      const QString &aName,
    298                                      const QString &aTip,
    299                                      QPixmap       *aPixmap)
    300 {
    301     setItemText (aNumber, aName);
    302     if (aPixmap)
    303         setItemIcon (aNumber, *aPixmap);
    304     mTipList [aNumber] = aTip;
    305 }
    306 
    307 void VBoxMediaComboBox::setUseEmptyItem (bool aUseEmptyItem)
    308 {
    309     mUseEmptyItem = aUseEmptyItem;
    310 }
    311 
    312 void VBoxMediaComboBox::setBelongsTo (const QUuid &aMachineId)
    313 {
    314     mMachineId = aMachineId;
    315 }
    316 
    317 QUuid VBoxMediaComboBox::getBelongsTo()
    318 {
    319     return mMachineId;
    320 }
    321 
    322 void VBoxMediaComboBox::setCurrentItem (const QUuid &aId)
    323 {
    324     mRequiredId = aId;
    325     int index = mUuidList.indexOf (mRequiredId);
    326     if (index != -1)
    327     {
    328         QComboBox::setCurrentIndex (index);
    329         emit activated (index);
    330     }
    331 }
    332 
    333 void VBoxMediaComboBox::setType (int aType)
    334 {
    335     mType = aType;
    336 }
    337 
     315}
     316
     317void VBoxMediaComboBox::updItem (int            aIndex,
     318                                 const QString &aNewName,
     319                                 const QString &aNewTip,
     320                                 QPixmap       *aNewPix)
     321{
     322    setItemText (aIndex, aNewName);
     323    if (aNewPix)
     324        setItemIcon (aIndex, *aNewPix);
     325    mTipList [aIndex] = aNewTip;
     326}
     327
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