VirtualBox

Ignore:
Timestamp:
Jul 17, 2008 2:48:48 PM (16 years ago)
Author:
vboxsync
Message:

FE/Qt4: VM USB settings face lift.

Location:
trunk/src/VBox/Frontends/VirtualBox4
Files:
3 added
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox4/Makefile.kmk

    r10659 r10728  
    482482        include/VBoxVMSettingsParallel.h \
    483483        include/VBoxVMSettingsUSB.h \
     484        include/VBoxVMSettingsUSBFilterDetails.h \
    484485        include/VBoxVMSettingsSF.h \
    485486        include/VBoxVMSettingsVRDP.h \
     
    555556        src/VBoxVMSettingsParallel.cpp \
    556557        src/VBoxVMSettingsUSB.cpp \
     558        src/VBoxVMSettingsUSBFilterDetails.cpp \
    557559        src/VBoxVMSettingsSF.cpp \
    558560        src/VBoxVMSettingsVRDP.cpp \
  • trunk/src/VBox/Frontends/VirtualBox4/VBoxUI.pro

    r10515 r10728  
    4949    ui/VBoxVMSettingsSerial.ui \
    5050    ui/VBoxVMSettingsUSB.ui \
     51    ui/VBoxVMSettingsUSBFilterDetails.ui \
    5152    ui/VBoxVMSettingsVRDP.ui \
    5253    ui/VBoxGLSettingsGeneral.ui \
  • trunk/src/VBox/Frontends/VirtualBox4/include/VBoxGlobal.h

    r10670 r10728  
    465465    QString details (const CUSBDevice &aDevice) const;
    466466    QString toolTip (const CUSBDevice &aDevice) const;
     467    QString toolTip (const CUSBDeviceFilter &aFilter) const;
    467468
    468469    QString prepareFileNameForHTML (const QString &fn) const;
  • trunk/src/VBox/Frontends/VirtualBox4/include/VBoxVMSettingsUSB.h

    r10167 r10728  
    4444    };
    4545
     46    enum RemoteMode
     47    {
     48        ModeAny = 0,
     49        ModeOn,
     50        ModeOff
     51    };
     52
    4653    VBoxVMSettingsUSB (FilterType aType);
    4754
     
    6774    void currentChanged (QTreeWidgetItem *aItem = 0,
    6875                         QTreeWidgetItem *aPrev = 0);
    69     void setCurrentText (const QString &aText);
     76
    7077    void newClicked();
    7178    void addClicked();
     79    void edtClicked();
    7280    void addConfirmed (QAction *aAction);
    7381    void delClicked();
     
    8593    QAction *mNewAction;
    8694    QAction *mAddAction;
     95    QAction *mEdtAction;
    8796    QAction *mDelAction;
    8897    QAction *mMupAction;
  • trunk/src/VBox/Frontends/VirtualBox4/src/VBoxGlobal.cpp

    r10670 r10728  
    13871387        tip += QString (tr ("<br><nobr>State: %1</nobr>", "USB device tooltip"))
    13881388                        .arg (vboxGlobal().toString (hostDev.GetState()));
     1389    }
     1390
     1391    return tip;
     1392}
     1393
     1394/**
     1395 *  Returns the multi-line description of the given USB filter
     1396 */
     1397QString VBoxGlobal::toolTip (const CUSBDeviceFilter &aFilter) const
     1398{
     1399    QString tip;
     1400
     1401    QString vendorId = aFilter.GetVendorId();
     1402    if (!vendorId.isEmpty())
     1403        tip += tr ("<nobr>Vendor ID: %1</nobr>", "USB filter tooltip")
     1404                   .arg (vendorId);
     1405
     1406    QString productId = aFilter.GetProductId();
     1407    if (!productId.isEmpty())
     1408        tip += tip.isEmpty() ? "":"<br/>" + tr ("<nobr>Product ID: %2</nobr>", "USB filter tooltip")
     1409                                                .arg (productId);
     1410
     1411    QString revision = aFilter.GetRevision();
     1412    if (!revision.isEmpty())
     1413        tip += tip.isEmpty() ? "":"<br/>" + tr ("<nobr>Revision: %3</nobr>", "USB filter tooltip")
     1414                                                .arg (revision);
     1415
     1416    QString product = aFilter.GetProduct();
     1417    if (!product.isEmpty())
     1418        tip += tip.isEmpty() ? "":"<br/>" + tr ("<nobr>Product: %4</nobr>", "USB filter tooltip")
     1419                                                .arg (product);
     1420
     1421    QString manufacturer = aFilter.GetManufacturer();
     1422    if (!manufacturer.isEmpty())
     1423        tip += tip.isEmpty() ? "":"<br/>" + tr ("<nobr>Manufacturer: %5</nobr>", "USB filter tooltip")
     1424                                                .arg (manufacturer);
     1425
     1426    QString serial = aFilter.GetSerialNumber();
     1427    if (!serial.isEmpty())
     1428        tip += tip.isEmpty() ? "":"<br/>" + tr ("<nobr>Serial No.: %1</nobr>", "USB filter tooltip")
     1429                                                .arg (serial);
     1430
     1431    QString port = aFilter.GetPort();
     1432    if (!port.isEmpty())
     1433        tip += tip.isEmpty() ? "":"<br/>" + tr ("<nobr>Port: %1</nobr>", "USB filter tooltip")
     1434                                                .arg (port);
     1435
     1436    /* add the state field if it's a host USB device */
     1437    CHostUSBDevice hostDev = CUnknown (aFilter);
     1438    if (!hostDev.isNull())
     1439    {
     1440        tip += tip.isEmpty() ? "":"<br/>" + tr ("<nobr>State: %1</nobr>", "USB filter tooltip")
     1441                                                .arg (vboxGlobal().toString (hostDev.GetState()));
    13891442    }
    13901443
  • trunk/src/VBox/Frontends/VirtualBox4/src/VBoxVMSettingsUSB.cpp

    r10167 r10728  
    2222
    2323#include "VBoxVMSettingsUSB.h"
     24#include "VBoxVMSettingsUSBFilterDetails.h"
    2425#include "VBoxSettingsUtils.h"
    2526#include "QIWidgetValidator.h"
     
    4445    mNewAction = new QAction (mTwFilters);
    4546    mAddAction = new QAction (mTwFilters);
     47    mEdtAction = new QAction (mTwFilters);
    4648    mDelAction = new QAction (mTwFilters);
    4749    mMupAction = new QAction (mTwFilters);
     
    5052    mNewAction->setShortcut (QKeySequence ("Ins"));
    5153    mAddAction->setShortcut (QKeySequence ("Alt+Ins"));
     54    mEdtAction->setShortcut (QKeySequence ("Ctrl+Return"));
    5255    mDelAction->setShortcut (QKeySequence ("Del"));
    5356    mMupAction->setShortcut (QKeySequence ("Ctrl+Up"));
     
    5760                                              ":/usb_new_disabled_16px.png"));
    5861    mAddAction->setIcon (VBoxGlobal::iconSet (":/usb_add_16px.png",
     62                                              ":/usb_add_disabled_16px.png"));
     63    mEdtAction->setIcon (VBoxGlobal::iconSet (":/usb_add_16px.png",
    5964                                              ":/usb_add_disabled_16px.png"));
    6065    mDelAction->setIcon (VBoxGlobal::iconSet (":/usb_remove_16px.png",
     
    7075    mMenu->addAction (mAddAction);
    7176    mMenu->addSeparator();
     77    mMenu->addAction (mEdtAction);
     78    mMenu->addSeparator();
    7279    mMenu->addAction (mDelAction);
    7380    mMenu->addSeparator();
     
    8289    toolBar->addAction (mNewAction);
    8390    toolBar->addAction (mAddAction);
     91    toolBar->addAction (mEdtAction);
    8492    toolBar->addAction (mDelAction);
    8593    toolBar->addAction (mMupAction);
    8694    toolBar->addAction (mMdnAction);
    8795    toolBar->setSizePolicy (QSizePolicy::Fixed, QSizePolicy::MinimumExpanding);
     96    toolBar->updateGeometry();
     97    toolBar->setMinimumHeight (toolBar->sizeHint().height());
    8898    mWtFilterHandler->layout()->addWidget (toolBar);
    8999
     
    95105    connect (mTwFilters, SIGNAL (customContextMenuRequested (const QPoint &)),
    96106             this, SLOT (showContextMenu (const QPoint &)));
     107    connect (mTwFilters, SIGNAL (itemDoubleClicked (QTreeWidgetItem *, int)),
     108             this, SLOT (edtClicked ()));
    97109
    98110    mUSBDevicesMenu = new VBoxUSBMenu (this);
     
    103115    connect (mAddAction, SIGNAL (triggered (bool)),
    104116             this, SLOT (addClicked()));
     117    connect (mEdtAction, SIGNAL (triggered (bool)),
     118             this, SLOT (edtClicked()));
    105119    connect (mDelAction, SIGNAL (triggered (bool)),
    106120             this, SLOT (delClicked()));
     
    110124             this, SLOT (mdnClicked()));
    111125
    112     connect (mLeName, SIGNAL (textEdited (const QString &)),
    113              this, SLOT (setCurrentText (const QString &)));
    114     connect (mLeVendorID, SIGNAL (textEdited (const QString &)),
    115              this, SLOT (setCurrentText (const QString &)));
    116     connect (mLeProductID, SIGNAL (textEdited (const QString &)),
    117              this, SLOT (setCurrentText (const QString &)));
    118     connect (mLeRevision, SIGNAL (textEdited (const QString &)),
    119              this, SLOT (setCurrentText (const QString &)));
    120     connect (mLePort, SIGNAL (textEdited (const QString &)),
    121              this, SLOT (setCurrentText (const QString &)));
    122     connect (mLeManufacturer, SIGNAL (textEdited (const QString &)),
    123              this, SLOT (setCurrentText (const QString &)));
    124     connect (mLeProduct, SIGNAL (textEdited (const QString &)),
    125              this, SLOT (setCurrentText (const QString &)));
    126     connect (mLeSerialNo, SIGNAL (textEdited (const QString &)),
    127              this, SLOT (setCurrentText (const QString &)));
    128     connect (mCbRemote, SIGNAL (activated (const QString &)),
    129              this, SLOT (setCurrentText (const QString &)));
    130     connect (mCbAction, SIGNAL (activated (const QString &)),
    131              this, SLOT (setCurrentText (const QString &)));
    132 
    133126    /* Setup dialog */
    134127    mTwFilters->header()->hide();
    135 
    136     mCbRemote->addItem (""); /* Any */
    137     mCbRemote->addItem (""); /* Yes */
    138     mCbRemote->addItem (""); /* No */
    139     mLbRemote->setHidden (mType != MachineType);
    140     mCbRemote->setHidden (mType != MachineType);
    141 
    142     mCbAction->insertItem (0, ""); /* KUSBDeviceFilterAction_Ignore */
    143     mCbAction->insertItem (1, ""); /* KUSBDeviceFilterAction_Hold */
    144     mLbAction->setHidden (mType != HostType);
    145     mCbAction->setHidden (mType != HostType);
    146128
    147129    /* Applying language settings */
     
    244226    setTabOrder (mGbUSB, mCbUSB2);
    245227    setTabOrder (mCbUSB2, mTwFilters);
    246     setTabOrder (mTwFilters, mLeName);
    247     setTabOrder (mLeName, mLeVendorID);
    248     setTabOrder (mLeVendorID, mLeManufacturer);
    249     setTabOrder (mLeManufacturer, mLeProductID);
    250     setTabOrder (mLeProductID, mLeProduct);
    251     setTabOrder (mLeProduct, mLeRevision);
    252     setTabOrder (mLeRevision, mLeSerialNo);
    253     setTabOrder (mLeSerialNo, mLePort);
    254     setTabOrder (mLePort, mCbRemote);
    255     setTabOrder (mCbRemote, mCbAction);
    256228}
    257229
     
    263235    mNewAction->setText (tr ("&Add Empty Filter"));
    264236    mAddAction->setText (tr ("A&dd Filter From Device"));
     237    mEdtAction->setText (tr ("&Edit Filter"));
    265238    mDelAction->setText (tr ("&Remove Filter"));
    266239    mMupAction->setText (tr ("&Move Filter Up"));
     
    271244    mAddAction->setToolTip (mAddAction->text().remove ('&') +
    272245        QString (" (%1)").arg (mAddAction->shortcut().toString()));
     246    mEdtAction->setToolTip (mEdtAction->text().remove ('&') +
     247        QString (" (%1)").arg (mEdtAction->shortcut().toString()));
    273248    mDelAction->setToolTip (mDelAction->text().remove ('&') +
    274249        QString (" (%1)").arg (mDelAction->shortcut().toString()));
     
    285260                                  "set to the values of the selected USB "
    286261                                  "device attached to the host PC."));
     262    mEdtAction->setWhatsThis (tr ("Edit the selected filter."));
    287263    mDelAction->setWhatsThis (tr ("Removes the selected USB filter."));
    288264    mMupAction->setWhatsThis (tr ("Moves the selected USB filter up."));
    289265    mMdnAction->setWhatsThis (tr ("Moves the selected USB filter down."));
    290266
    291     mCbRemote->setItemText (0, tr ("Any", "remote"));
    292     mCbRemote->setItemText (1, tr ("Yes", "remote"));
    293     mCbRemote->setItemText (2, tr ("No", "remote"));
    294 
    295     mCbAction->setItemText (0,
    296         vboxGlobal().toString (KUSBDeviceFilterAction_Ignore));
    297     mCbAction->setItemText (1,
    298         vboxGlobal().toString (KUSBDeviceFilterAction_Hold));
    299 
    300267    mUSBFilterName = tr ("New Filter %1", "usb");
    301268}
     
    304271{
    305272    mGbUSBFilters->setEnabled (aOn);
    306     mWtProperties->setEnabled (aOn && mTwFilters->topLevelItemCount());
    307273}
    308274
     
    322288
    323289    /* Enable/disable operational buttons */
     290    mEdtAction->setEnabled (aItem);
    324291    mDelAction->setEnabled (aItem);
    325292    mMupAction->setEnabled (aItem && mTwFilters->itemAbove (aItem));
    326293    mMdnAction->setEnabled (aItem && mTwFilters->itemBelow (aItem));
    327 
    328     /* Load filter parameters */
    329     CUSBDeviceFilter filter;
    330     if (aItem)
    331         filter = mFilters [mTwFilters->indexOfTopLevelItem (aItem)];
    332 
    333     mLeName->setText (filter.isNull() ? QString::null : filter.GetName());
    334     mLeVendorID->setText (filter.isNull() ? QString::null : filter.GetVendorId());
    335     mLeProductID->setText (filter.isNull() ? QString::null : filter.GetProductId());
    336     mLeRevision->setText (filter.isNull() ? QString::null : filter.GetRevision());
    337     mLePort->setText (filter.isNull() ? QString::null : filter.GetPort());
    338     mLeManufacturer->setText (filter.isNull() ? QString::null : filter.GetManufacturer());
    339     mLeProduct->setText (filter.isNull() ? QString::null : filter.GetProduct());
    340     mLeSerialNo->setText (filter.isNull() ? QString::null : filter.GetSerialNumber());
    341     switch (mType)
    342     {
    343         case MachineType:
    344         {
    345             QString remote = filter.isNull() ? QString::null : filter.GetRemote();
    346             if (remote == "yes" || remote == "true" || remote == "1")
    347                 mCbRemote->setCurrentIndex (1);
    348             else if (remote == "no" || remote == "false" || remote == "0")
    349                 mCbRemote->setCurrentIndex (2);
    350             else
    351                 mCbRemote->setCurrentIndex (0);
    352             break;
    353         }
    354         case HostType:
    355         {
    356             CHostUSBDeviceFilter hostFilter = CUnknown (filter);
    357             KUSBDeviceFilterAction action = hostFilter.isNull() ?
    358                 KUSBDeviceFilterAction_Ignore : hostFilter.GetAction();
    359             if (action == KUSBDeviceFilterAction_Ignore)
    360                 mCbAction->setCurrentIndex (0);
    361             else if (action == KUSBDeviceFilterAction_Hold)
    362                 mCbAction->setCurrentIndex (1);
    363             else
    364                 AssertMsgFailed (("Invalid USBDeviceFilterAction type"));
    365             break;
    366         }
    367         default:
    368         {
    369             AssertMsgFailed (("Invalid VBoxVMSettingsUSB type"));
    370             break;
    371         }
    372     }
    373 
    374     mWtProperties->setEnabled (aItem);
    375 }
    376 
    377 void VBoxVMSettingsUSB::setCurrentText (const QString &aText)
    378 {
    379     QObject *sdr = sender();
    380     QTreeWidgetItem *item = mTwFilters->currentItem();
    381     Assert (item);
    382 
    383     CUSBDeviceFilter filter =
    384         mFilters [mTwFilters->indexOfTopLevelItem (item)];
    385 
    386     /* Update filter's attribute on line-edited action */
    387     if (sdr == mLeName)
    388     {
    389         filter.SetName (aText);
    390         item->setText (twUSBFilters_Name, aText);
    391     } else
    392     if (sdr == mLeVendorID)
    393     {
    394         filter.SetVendorId (aText);
    395     } else
    396     if (sdr == mLeProductID)
    397     {
    398         filter.SetProductId (aText);
    399     } else
    400     if (sdr == mLeRevision)
    401     {
    402         filter.SetRevision (aText);
    403     } else
    404     if (sdr == mLePort)
    405     {
    406         filter.SetPort (aText);
    407     } else
    408     if (sdr == mLeManufacturer)
    409     {
    410         filter.SetManufacturer (aText);
    411     } else
    412     if (sdr == mLeProduct)
    413     {
    414         filter.SetProduct (aText);
    415     } else
    416     if (sdr == mLeSerialNo)
    417     {
    418         filter.SetSerialNumber (aText);
    419     } else
    420     if (sdr == mCbRemote)
    421     {
    422         filter.SetRemote (mCbRemote->currentIndex() > 0 ?
    423                           aText.toLower() : QString::null);
    424     } else
    425     if (sdr == mCbAction)
    426     {
    427         CHostUSBDeviceFilter hostFilter = CUnknown (filter);
    428         hostFilter.SetAction (vboxGlobal().toUSBDevFilterAction (aText));
    429     }
    430294}
    431295
     
    528392}
    529393
     394void VBoxVMSettingsUSB::edtClicked()
     395{
     396    QTreeWidgetItem *item = mTwFilters->currentItem();
     397    Assert (item);
     398
     399    VBoxVMSettingsUSBFilterDetails fd (mType, this);
     400
     401    CUSBDeviceFilter filter =
     402        mFilters [mTwFilters->indexOfTopLevelItem (item)];
     403
     404    fd.mLeName->setText (filter.isNull() ? QString::null : filter.GetName());
     405    fd.mLeVendorID->setText (filter.isNull() ? QString::null : filter.GetVendorId());
     406    fd.mLeProductID->setText (filter.isNull() ? QString::null : filter.GetProductId());
     407    fd.mLeRevision->setText (filter.isNull() ? QString::null : filter.GetRevision());
     408    fd.mLePort->setText (filter.isNull() ? QString::null : filter.GetPort());
     409    fd.mLeManufacturer->setText (filter.isNull() ? QString::null : filter.GetManufacturer());
     410    fd.mLeProduct->setText (filter.isNull() ? QString::null : filter.GetProduct());
     411    fd.mLeSerialNo->setText (filter.isNull() ? QString::null : filter.GetSerialNumber());
     412
     413    switch (mType)
     414    {
     415        case MachineType:
     416        {
     417            QString remote = filter.isNull() ? QString::null : filter.GetRemote().toLower();
     418            if (remote == "yes" || remote == "true" || remote == "1")
     419                fd.mCbRemote->setCurrentIndex (ModeOn);
     420            else if (remote == "no" || remote == "false" || remote == "0")
     421                fd.mCbRemote->setCurrentIndex (ModeOff);
     422            else
     423                fd.mCbRemote->setCurrentIndex (ModeAny);
     424            break;
     425        }
     426        case HostType:
     427        {
     428            CHostUSBDeviceFilter hostFilter = CUnknown (filter);
     429            KUSBDeviceFilterAction action = hostFilter.isNull() ?
     430                KUSBDeviceFilterAction_Ignore : hostFilter.GetAction();
     431            if (action == KUSBDeviceFilterAction_Ignore)
     432                fd.mCbAction->setCurrentIndex (0);
     433            else if (action == KUSBDeviceFilterAction_Hold)
     434                fd.mCbAction->setCurrentIndex (1);
     435            else
     436                AssertMsgFailed (("Invalid USBDeviceFilterAction type"));
     437            break;
     438        }
     439        default:
     440        {
     441            AssertMsgFailed (("Invalid VBoxVMSettingsUSB type"));
     442            break;
     443        }
     444    }
     445
     446    if (fd.exec() == QDialog::Accepted)
     447    {
     448        filter.SetName (fd.mLeName->text().isEmpty() ? QString::null : fd.mLeName->text());
     449        item->setText (twUSBFilters_Name, fd.mLeName->text());
     450        filter.SetVendorId (fd.mLeVendorID->text().isEmpty() ? QString::null : fd.mLeVendorID->text());
     451        filter.SetProductId (fd.mLeProductID->text().isEmpty() ? QString::null : fd.mLeProductID->text());
     452        filter.SetRevision (fd.mLeRevision->text().isEmpty() ? QString::null : fd.mLeRevision->text());
     453        filter.SetManufacturer (fd.mLeManufacturer->text().isEmpty() ? QString::null : fd.mLeManufacturer->text());
     454        filter.SetProduct (fd.mLeProduct->text().isEmpty() ? QString::null : fd.mLeProduct->text());
     455        filter.SetSerialNumber (fd.mLeSerialNo->text().isEmpty() ? QString::null : fd.mLeSerialNo->text());
     456        filter.SetPort (fd.mLePort->text().isEmpty() ? QString::null : fd.mLePort->text());
     457        if (mType == MachineType)
     458        {
     459            switch (fd.mCbRemote->currentIndex())
     460             {
     461                 case ModeAny: filter.SetRemote (QString::null); break;
     462                 case ModeOn:  filter.SetRemote ("yes"); break;
     463                 case ModeOff: filter.SetRemote ("no"); break;
     464                 default: AssertMsgFailed (("Invalid combo box index"));
     465             }
     466        }
     467        else
     468        if (mType == HostType)
     469        {
     470            CHostUSBDeviceFilter hostFilter = CUnknown (filter);
     471            hostFilter.SetAction (vboxGlobal().toUSBDevFilterAction (fd.mCbAction->currentText()));
     472        }
     473        item->setToolTip (0, vboxGlobal().toolTip (filter));
     474    }
     475}
     476
    530477void VBoxVMSettingsUSB::delClicked()
    531478{
     
    538485
    539486    /* Setup validators */
    540     if (!mTwFilters->topLevelItemCount() && mLeName->validator())
    541     {
    542         mLeName->setValidator (0);
    543         mLeVendorID->setValidator (0);
    544         mLeProductID->setValidator (0);
    545         mLeRevision->setValidator (0);
    546         mLePort->setValidator (0);
     487    if (!mTwFilters->topLevelItemCount())
     488    {
    547489        if (mValidator)
    548490        {
     
    606548    item->setCheckState (0, aFilter.GetActive() ? Qt::Checked : Qt::Unchecked);
    607549    item->setText (twUSBFilters_Name, aFilter.GetName());
    608 
    609     /* Setup validators */
    610     if (!mLeName->validator())
    611     {
    612         mLeName->setValidator (new QRegExpValidator (QRegExp (".+"), this));
    613         mLeVendorID->setValidator (new QRegExpValidator (QRegExp ("[0-9a-fA-F]{0,4}"), this));
    614         mLeProductID->setValidator (new QRegExpValidator (QRegExp ("[0-9a-fA-F]{0,4}"), this));
    615         mLeRevision->setValidator (new QRegExpValidator (QRegExp ("[0-9]{0,4}"), this));
    616         mLePort->setValidator (new QRegExpValidator (QRegExp ("[0-9]*"), this));
    617         if (mValidator)
    618             mValidator->rescan();
    619     }
     550    item->setToolTip (0, vboxGlobal().toolTip (aFilter));
    620551
    621552    if (isNew)
    622     {
    623553        mTwFilters->setCurrentItem (item);
    624         mLeName->setFocus();
    625     }
    626554
    627555    if (mValidator)
  • trunk/src/VBox/Frontends/VirtualBox4/ui/VBoxVMSettingsUSB.ui

    r10167 r10728  
    2323    <x>0</x>
    2424    <y>0</y>
    25     <width>392</width>
    26     <height>424</height>
     25    <width>468</width>
     26    <height>328</height>
    2727   </rect>
    2828  </property>
    29   <layout class="QVBoxLayout" >
    30    <property name="leftMargin" >
    31     <number>0</number>
    32    </property>
    33    <property name="topMargin" >
    34     <number>5</number>
    35    </property>
    36    <property name="rightMargin" >
    37     <number>0</number>
    38    </property>
    39    <property name="bottomMargin" >
    40     <number>5</number>
    41    </property>
    42    <item>
    43     <widget class="QGroupBox" name="mGbUSB" >
     29  <layout class="QGridLayout" >
     30   <item row="0" column="0" colspan="2" >
     31    <widget class="QCheckBox" name="mGbUSB" >
    4432     <property name="whatsThis" >
    4533      <string>When checked, enables the virtual USB controller of this machine.</string>
    4634     </property>
    47      <property name="title" >
     35     <property name="text" >
    4836      <string>Enable &amp;USB Controller</string>
    4937     </property>
    50      <property name="checkable" >
     38     <property name="checked" >
    5139      <bool>true</bool>
    5240     </property>
    53      <property name="checked" >
    54       <bool>false</bool>
     41    </widget>
     42   </item>
     43   <item row="1" column="0" >
     44    <spacer>
     45     <property name="orientation" >
     46      <enum>Qt::Horizontal</enum>
    5547     </property>
    56      <layout class="QHBoxLayout" >
     48     <property name="sizeType" >
     49      <enum>QSizePolicy::Fixed</enum>
     50     </property>
     51     <property name="sizeHint" >
     52      <size>
     53       <width>20</width>
     54       <height>20</height>
     55      </size>
     56     </property>
     57    </spacer>
     58   </item>
     59   <item row="1" column="1" >
     60    <widget class="QWidget" native="1" name="mUSBChild" >
     61     <layout class="QGridLayout" >
     62      <property name="leftMargin" >
     63       <number>0</number>
     64      </property>
    5765      <property name="topMargin" >
    58        <number>5</number>
     66       <number>0</number>
    5967      </property>
    60       <item>
     68      <property name="rightMargin" >
     69       <number>0</number>
     70      </property>
     71      <property name="bottomMargin" >
     72       <number>0</number>
     73      </property>
     74      <item row="0" column="0" >
    6175       <widget class="QCheckBox" name="mCbUSB2" >
    6276        <property name="whatsThis" >
     
    6882       </widget>
    6983      </item>
    70      </layout>
    71     </widget>
    72    </item>
    73    <item>
    74     <widget class="QGroupBox" name="mGbUSBFilters" >
    75      <property name="title" >
    76       <string>USB Device &amp;Filters</string>
    77      </property>
    78      <layout class="QVBoxLayout" >
    79       <property name="topMargin" >
    80        <number>5</number>
    81       </property>
    82       <item>
     84      <item row="1" column="0" >
     85       <widget class="QILabelSeparator" name="mGbUSBFilters" >
     86        <property name="text" >
     87         <string>USB Device &amp;Filters</string>
     88        </property>
     89        <property name="buddy" >
     90         <cstring>mTwFilters</cstring>
     91        </property>
     92       </widget>
     93      </item>
     94      <item row="2" column="0" >
    8395       <widget class="QWidget" native="1" name="mWtFilterHandler" >
    8496        <layout class="QHBoxLayout" >
     
    116128       </widget>
    117129      </item>
    118       <item>
    119        <widget class="QWidget" native="1" name="mWtProperties" >
    120         <layout class="QVBoxLayout" >
    121          <property name="leftMargin" >
    122           <number>0</number>
    123          </property>
    124          <property name="topMargin" >
    125           <number>0</number>
    126          </property>
    127          <property name="rightMargin" >
    128           <number>0</number>
    129          </property>
    130          <property name="bottomMargin" >
    131           <number>0</number>
    132          </property>
    133          <item>
    134           <layout class="QHBoxLayout" >
    135            <item>
    136             <widget class="QLabel" name="mLbName" >
    137              <property name="text" >
    138               <string>&amp;Name</string>
    139              </property>
    140              <property name="buddy" >
    141               <cstring>mLeName</cstring>
    142              </property>
    143             </widget>
    144            </item>
    145            <item>
    146             <widget class="QLineEdit" name="mLeName" >
    147              <property name="whatsThis" >
    148               <string>Displays the filter name.</string>
    149              </property>
    150             </widget>
    151            </item>
    152           </layout>
    153          </item>
    154          <item>
    155           <layout class="QGridLayout" >
    156            <item row="0" column="0" >
    157             <widget class="QLabel" name="mLbVendorID" >
    158              <property name="text" >
    159               <string>&amp;Vendor ID</string>
    160              </property>
    161              <property name="buddy" >
    162               <cstring>mLeVendorID</cstring>
    163              </property>
    164             </widget>
    165            </item>
    166            <item row="0" column="1" >
    167             <widget class="QLineEdit" name="mLeVendorID" >
    168              <property name="whatsThis" >
    169               <string>Defines the vendor ID filter. The &lt;i>exact match&lt;/i> string format is &lt;tt>XXXX&lt;/tt> where &lt;tt>X&lt;/tt> is a hexadecimal digit. An empty string will match any value.</string>
    170              </property>
    171             </widget>
    172            </item>
    173            <item row="0" column="2" >
    174             <widget class="QLabel" name="mLbManufacturer" >
    175              <property name="text" >
    176               <string>&amp;Manufacturer</string>
    177              </property>
    178              <property name="buddy" >
    179               <cstring>mLeManufacturer</cstring>
    180              </property>
    181             </widget>
    182            </item>
    183            <item row="0" column="3" >
    184             <widget class="QLineEdit" name="mLeManufacturer" >
    185              <property name="whatsThis" >
    186               <string>Defines the manufacturer filter as an &lt;i>exact match&lt;/i> string. An empty string will match any value.</string>
    187              </property>
    188             </widget>
    189            </item>
    190            <item row="1" column="0" >
    191             <widget class="QLabel" name="mLbProductID" >
    192              <property name="text" >
    193               <string>&amp;Product ID</string>
    194              </property>
    195              <property name="buddy" >
    196               <cstring>mLeProductID</cstring>
    197              </property>
    198             </widget>
    199            </item>
    200            <item row="1" column="1" >
    201             <widget class="QLineEdit" name="mLeProductID" >
    202              <property name="whatsThis" >
    203               <string>Defines the product ID filter. The &lt;i>exact match&lt;/i> string format is &lt;tt>XXXX&lt;/tt> where &lt;tt>X&lt;/tt> is a hexadecimal digit. An empty string will match any value.</string>
    204              </property>
    205             </widget>
    206            </item>
    207            <item row="1" column="2" >
    208             <widget class="QLabel" name="mLbProduct" >
    209              <property name="text" >
    210               <string>Pro&amp;duct</string>
    211              </property>
    212              <property name="buddy" >
    213               <cstring>mLeProduct</cstring>
    214              </property>
    215             </widget>
    216            </item>
    217            <item row="1" column="3" >
    218             <widget class="QLineEdit" name="mLeProduct" >
    219              <property name="whatsThis" >
    220               <string>Defines the product name filter as an &lt;i>exact match&lt;/i> string. An empty string will match any value.</string>
    221              </property>
    222             </widget>
    223            </item>
    224            <item row="2" column="0" >
    225             <widget class="QLabel" name="mLbRevision" >
    226              <property name="text" >
    227               <string>&amp;Revision</string>
    228              </property>
    229              <property name="buddy" >
    230               <cstring>mLeRevision</cstring>
    231              </property>
    232             </widget>
    233            </item>
    234            <item row="2" column="1" >
    235             <widget class="QLineEdit" name="mLeRevision" >
    236              <property name="whatsThis" >
    237               <string>Defines the revision number filter. The &lt;i>exact match&lt;/i> string format is &lt;tt>IIFF&lt;/tt> where &lt;tt>I&lt;/tt> is a decimal digit of the integer part and &lt;tt>F&lt;/tt> is a decimal digit of the fractional part. An empty string will match any value.</string>
    238              </property>
    239             </widget>
    240            </item>
    241            <item row="2" column="2" >
    242             <widget class="QLabel" name="mLbSerialNo" >
    243              <property name="text" >
    244               <string>&amp;Serial No.</string>
    245              </property>
    246              <property name="buddy" >
    247               <cstring>mLeSerialNo</cstring>
    248              </property>
    249             </widget>
    250            </item>
    251            <item row="2" column="3" >
    252             <widget class="QLineEdit" name="mLeSerialNo" >
    253              <property name="whatsThis" >
    254               <string>Defines the serial number filter as an &lt;i>exact match&lt;/i> string. An empty string will match any value.</string>
    255              </property>
    256             </widget>
    257            </item>
    258            <item row="3" column="0" >
    259             <widget class="QLabel" name="mLbPort" >
    260              <property name="text" >
    261               <string>Por&amp;t</string>
    262              </property>
    263              <property name="buddy" >
    264               <cstring>mLePort</cstring>
    265              </property>
    266             </widget>
    267            </item>
    268            <item row="3" column="1" >
    269             <widget class="QLineEdit" name="mLePort" >
    270              <property name="whatsThis" >
    271               <string>Defines the host USB port filter as an &lt;i>exact match&lt;/i> string. An empty string will match any value.</string>
    272              </property>
    273             </widget>
    274            </item>
    275            <item row="3" column="2" >
    276             <layout class="QVBoxLayout" >
    277              <item>
    278               <widget class="QLabel" name="mLbRemote" >
    279                <property name="text" >
    280                 <string>R&amp;emote</string>
    281                </property>
    282                <property name="buddy" >
    283                 <cstring>mCbRemote</cstring>
    284                </property>
    285               </widget>
    286              </item>
    287              <item>
    288               <widget class="QLabel" name="mLbAction" >
    289                <property name="text" >
    290                 <string>&amp;Action</string>
    291                </property>
    292                <property name="buddy" >
    293                 <cstring>mCbAction</cstring>
    294                </property>
    295               </widget>
    296              </item>
    297             </layout>
    298            </item>
    299            <item row="3" column="3" >
    300             <layout class="QVBoxLayout" >
    301              <item>
    302               <widget class="QComboBox" name="mCbRemote" >
    303                <property name="sizePolicy" >
    304                 <sizepolicy vsizetype="Fixed" hsizetype="Expanding" >
    305                  <horstretch>0</horstretch>
    306                  <verstretch>0</verstretch>
    307                 </sizepolicy>
    308                </property>
    309                <property name="whatsThis" >
    310                 <string>Defines whether this filter applies to USB devices attached locally to the host computer (&lt;i>No&lt;/i>), to a VRDP client's computer (&lt;i>Yes&lt;/i>), or both (&lt;i>Any&lt;/i>).</string>
    311                </property>
    312               </widget>
    313              </item>
    314              <item>
    315               <widget class="QComboBox" name="mCbAction" >
    316                <property name="sizePolicy" >
    317                 <sizepolicy vsizetype="Fixed" hsizetype="Expanding" >
    318                  <horstretch>0</horstretch>
    319                  <verstretch>0</verstretch>
    320                 </sizepolicy>
    321                </property>
    322                <property name="whatsThis" >
    323                 <string>Defines an action performed by the host computer when a matching device is attached: give it up to the host OS (&lt;i>Ignore&lt;/i>) or grab it for later usage by virtual machines (&lt;i>Hold&lt;/i>).</string>
    324                </property>
    325               </widget>
    326              </item>
    327             </layout>
    328            </item>
    329           </layout>
    330          </item>
    331         </layout>
    332        </widget>
    333       </item>
    334130     </layout>
    335131    </widget>
     
    337133  </layout>
    338134 </widget>
     135 <customwidgets>
     136  <customwidget>
     137   <class>QILabelSeparator</class>
     138   <extends>QLabel</extends>
     139   <header>QILabelSeparator.h</header>
     140  </customwidget>
     141 </customwidgets>
    339142 <resources/>
    340  <connections/>
     143 <connections>
     144  <connection>
     145   <sender>mGbUSB</sender>
     146   <signal>toggled(bool)</signal>
     147   <receiver>mUSBChild</receiver>
     148   <slot>setEnabled(bool)</slot>
     149   <hints>
     150    <hint type="sourcelabel" >
     151     <x>233</x>
     152     <y>19</y>
     153    </hint>
     154    <hint type="destinationlabel" >
     155     <x>246</x>
     156     <y>177</y>
     157    </hint>
     158   </hints>
     159  </connection>
     160 </connections>
    341161</ui>
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