Index: trunk/src/VBox/Frontends/VirtualBox4/Makefile.kmk
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox4/Makefile.kmk	(revision 10717)
+++ trunk/src/VBox/Frontends/VirtualBox4/Makefile.kmk	(revision 10728)
@@ -482,4 +482,5 @@
 	include/VBoxVMSettingsParallel.h \
 	include/VBoxVMSettingsUSB.h \
+	include/VBoxVMSettingsUSBFilterDetails.h \
 	include/VBoxVMSettingsSF.h \
 	include/VBoxVMSettingsVRDP.h \
@@ -555,4 +556,5 @@
 	src/VBoxVMSettingsParallel.cpp \
 	src/VBoxVMSettingsUSB.cpp \
+	src/VBoxVMSettingsUSBFilterDetails.cpp \
 	src/VBoxVMSettingsSF.cpp \
 	src/VBoxVMSettingsVRDP.cpp \
Index: trunk/src/VBox/Frontends/VirtualBox4/VBoxUI.pro
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox4/VBoxUI.pro	(revision 10717)
+++ trunk/src/VBox/Frontends/VirtualBox4/VBoxUI.pro	(revision 10728)
@@ -49,4 +49,5 @@
     ui/VBoxVMSettingsSerial.ui \
     ui/VBoxVMSettingsUSB.ui \
+    ui/VBoxVMSettingsUSBFilterDetails.ui \
     ui/VBoxVMSettingsVRDP.ui \
     ui/VBoxGLSettingsGeneral.ui \
Index: trunk/src/VBox/Frontends/VirtualBox4/include/VBoxGlobal.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox4/include/VBoxGlobal.h	(revision 10717)
+++ trunk/src/VBox/Frontends/VirtualBox4/include/VBoxGlobal.h	(revision 10728)
@@ -465,4 +465,5 @@
     QString details (const CUSBDevice &aDevice) const;
     QString toolTip (const CUSBDevice &aDevice) const;
+    QString toolTip (const CUSBDeviceFilter &aFilter) const;
 
     QString prepareFileNameForHTML (const QString &fn) const;
Index: trunk/src/VBox/Frontends/VirtualBox4/include/VBoxVMSettingsUSB.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox4/include/VBoxVMSettingsUSB.h	(revision 10717)
+++ trunk/src/VBox/Frontends/VirtualBox4/include/VBoxVMSettingsUSB.h	(revision 10728)
@@ -44,4 +44,11 @@
     };
 
+    enum RemoteMode 
+    {
+        ModeAny = 0,
+        ModeOn,
+        ModeOff
+    };
+
     VBoxVMSettingsUSB (FilterType aType);
 
@@ -67,7 +74,8 @@
     void currentChanged (QTreeWidgetItem *aItem = 0,
                          QTreeWidgetItem *aPrev = 0);
-    void setCurrentText (const QString &aText);
+
     void newClicked();
     void addClicked();
+    void edtClicked();
     void addConfirmed (QAction *aAction);
     void delClicked();
@@ -85,4 +93,5 @@
     QAction *mNewAction;
     QAction *mAddAction;
+    QAction *mEdtAction;
     QAction *mDelAction;
     QAction *mMupAction;
Index: trunk/src/VBox/Frontends/VirtualBox4/include/VBoxVMSettingsUSBFilterDetails.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox4/include/VBoxVMSettingsUSBFilterDetails.h	(revision 10728)
+++ trunk/src/VBox/Frontends/VirtualBox4/include/VBoxVMSettingsUSBFilterDetails.h	(revision 10728)
@@ -0,0 +1,51 @@
+/** @file
+ *
+ * VBox frontends: Qt4 GUI ("VirtualBox"):
+ * VBoxVMSettingsUSBFilterDetails class declaration
+ */
+
+/*
+ * Copyright (C) 2008 Sun Microsystems, Inc.
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
+ * Clara, CA 95054 USA or visit http://www.sun.com if you need
+ * additional information or have any questions.
+ */
+
+#ifndef __VBoxVMSettingsUSBFilterDetails_h__
+#define __VBoxVMSettingsUSBFilterDetails_h__
+
+#include "VBoxVMSettingsUSBFilterDetails.gen.h"
+#include "QIWithRetranslateUI.h"
+#include "QIDialog.h"
+#include "VBoxVMSettingsUSB.h"
+
+class VBoxVMSettingsUSBFilterDetails : public QIWithRetranslateUI2<QIDialog>,
+                                       public Ui::VBoxVMSettingsUSBFilterDetails
+{
+    Q_OBJECT;
+
+public:
+
+    VBoxVMSettingsUSBFilterDetails (VBoxVMSettingsUSB::FilterType aType, QWidget *aParent = NULL);
+
+protected:
+
+    void retranslateUi();
+
+private:
+
+    /* Private member vars */
+    VBoxVMSettingsUSB::FilterType mType;
+};
+
+#endif /* __VBoxVMSettingsUSBFilterDetails_h__ */
+
Index: trunk/src/VBox/Frontends/VirtualBox4/src/VBoxGlobal.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox4/src/VBoxGlobal.cpp	(revision 10717)
+++ trunk/src/VBox/Frontends/VirtualBox4/src/VBoxGlobal.cpp	(revision 10728)
@@ -1387,4 +1387,57 @@
         tip += QString (tr ("<br><nobr>State: %1</nobr>", "USB device tooltip"))
                         .arg (vboxGlobal().toString (hostDev.GetState()));
+    }
+
+    return tip;
+}
+
+/**
+ *  Returns the multi-line description of the given USB filter
+ */
+QString VBoxGlobal::toolTip (const CUSBDeviceFilter &aFilter) const
+{
+    QString tip;
+
+    QString vendorId = aFilter.GetVendorId();
+    if (!vendorId.isEmpty())
+        tip += tr ("<nobr>Vendor ID: %1</nobr>", "USB filter tooltip")
+                   .arg (vendorId);
+
+    QString productId = aFilter.GetProductId();
+    if (!productId.isEmpty())
+        tip += tip.isEmpty() ? "":"<br/>" + tr ("<nobr>Product ID: %2</nobr>", "USB filter tooltip")
+                                                .arg (productId);
+
+    QString revision = aFilter.GetRevision();
+    if (!revision.isEmpty())
+        tip += tip.isEmpty() ? "":"<br/>" + tr ("<nobr>Revision: %3</nobr>", "USB filter tooltip")
+                                                .arg (revision);
+
+    QString product = aFilter.GetProduct();
+    if (!product.isEmpty())
+        tip += tip.isEmpty() ? "":"<br/>" + tr ("<nobr>Product: %4</nobr>", "USB filter tooltip")
+                                                .arg (product);
+
+    QString manufacturer = aFilter.GetManufacturer();
+    if (!manufacturer.isEmpty())
+        tip += tip.isEmpty() ? "":"<br/>" + tr ("<nobr>Manufacturer: %5</nobr>", "USB filter tooltip")
+                                                .arg (manufacturer);
+
+    QString serial = aFilter.GetSerialNumber();
+    if (!serial.isEmpty())
+        tip += tip.isEmpty() ? "":"<br/>" + tr ("<nobr>Serial No.: %1</nobr>", "USB filter tooltip")
+                                                .arg (serial);
+
+    QString port = aFilter.GetPort();
+    if (!port.isEmpty())
+        tip += tip.isEmpty() ? "":"<br/>" + tr ("<nobr>Port: %1</nobr>", "USB filter tooltip")
+                                                .arg (port);
+
+    /* add the state field if it's a host USB device */
+    CHostUSBDevice hostDev = CUnknown (aFilter);
+    if (!hostDev.isNull())
+    {
+        tip += tip.isEmpty() ? "":"<br/>" + tr ("<nobr>State: %1</nobr>", "USB filter tooltip")
+                                                .arg (vboxGlobal().toString (hostDev.GetState()));
     }
 
Index: trunk/src/VBox/Frontends/VirtualBox4/src/VBoxVMSettingsUSB.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox4/src/VBoxVMSettingsUSB.cpp	(revision 10717)
+++ trunk/src/VBox/Frontends/VirtualBox4/src/VBoxVMSettingsUSB.cpp	(revision 10728)
@@ -22,4 +22,5 @@
 
 #include "VBoxVMSettingsUSB.h"
+#include "VBoxVMSettingsUSBFilterDetails.h"
 #include "VBoxSettingsUtils.h"
 #include "QIWidgetValidator.h"
@@ -44,4 +45,5 @@
     mNewAction = new QAction (mTwFilters);
     mAddAction = new QAction (mTwFilters);
+    mEdtAction = new QAction (mTwFilters);
     mDelAction = new QAction (mTwFilters);
     mMupAction = new QAction (mTwFilters);
@@ -50,4 +52,5 @@
     mNewAction->setShortcut (QKeySequence ("Ins"));
     mAddAction->setShortcut (QKeySequence ("Alt+Ins"));
+    mEdtAction->setShortcut (QKeySequence ("Ctrl+Return"));
     mDelAction->setShortcut (QKeySequence ("Del"));
     mMupAction->setShortcut (QKeySequence ("Ctrl+Up"));
@@ -57,4 +60,6 @@
                                               ":/usb_new_disabled_16px.png"));
     mAddAction->setIcon (VBoxGlobal::iconSet (":/usb_add_16px.png",
+                                              ":/usb_add_disabled_16px.png"));
+    mEdtAction->setIcon (VBoxGlobal::iconSet (":/usb_add_16px.png",
                                               ":/usb_add_disabled_16px.png"));
     mDelAction->setIcon (VBoxGlobal::iconSet (":/usb_remove_16px.png",
@@ -70,4 +75,6 @@
     mMenu->addAction (mAddAction);
     mMenu->addSeparator();
+    mMenu->addAction (mEdtAction);
+    mMenu->addSeparator();
     mMenu->addAction (mDelAction);
     mMenu->addSeparator();
@@ -82,8 +89,11 @@
     toolBar->addAction (mNewAction);
     toolBar->addAction (mAddAction);
+    toolBar->addAction (mEdtAction);
     toolBar->addAction (mDelAction);
     toolBar->addAction (mMupAction);
     toolBar->addAction (mMdnAction);
     toolBar->setSizePolicy (QSizePolicy::Fixed, QSizePolicy::MinimumExpanding);
+    toolBar->updateGeometry();
+    toolBar->setMinimumHeight (toolBar->sizeHint().height());
     mWtFilterHandler->layout()->addWidget (toolBar);
 
@@ -95,4 +105,6 @@
     connect (mTwFilters, SIGNAL (customContextMenuRequested (const QPoint &)),
              this, SLOT (showContextMenu (const QPoint &)));
+    connect (mTwFilters, SIGNAL (itemDoubleClicked (QTreeWidgetItem *, int)),
+             this, SLOT (edtClicked ()));
 
     mUSBDevicesMenu = new VBoxUSBMenu (this);
@@ -103,4 +115,6 @@
     connect (mAddAction, SIGNAL (triggered (bool)),
              this, SLOT (addClicked()));
+    connect (mEdtAction, SIGNAL (triggered (bool)),
+             this, SLOT (edtClicked()));
     connect (mDelAction, SIGNAL (triggered (bool)),
              this, SLOT (delClicked()));
@@ -110,38 +124,6 @@
              this, SLOT (mdnClicked()));
 
-    connect (mLeName, SIGNAL (textEdited (const QString &)),
-             this, SLOT (setCurrentText (const QString &)));
-    connect (mLeVendorID, SIGNAL (textEdited (const QString &)),
-             this, SLOT (setCurrentText (const QString &)));
-    connect (mLeProductID, SIGNAL (textEdited (const QString &)),
-             this, SLOT (setCurrentText (const QString &)));
-    connect (mLeRevision, SIGNAL (textEdited (const QString &)),
-             this, SLOT (setCurrentText (const QString &)));
-    connect (mLePort, SIGNAL (textEdited (const QString &)),
-             this, SLOT (setCurrentText (const QString &)));
-    connect (mLeManufacturer, SIGNAL (textEdited (const QString &)),
-             this, SLOT (setCurrentText (const QString &)));
-    connect (mLeProduct, SIGNAL (textEdited (const QString &)),
-             this, SLOT (setCurrentText (const QString &)));
-    connect (mLeSerialNo, SIGNAL (textEdited (const QString &)),
-             this, SLOT (setCurrentText (const QString &)));
-    connect (mCbRemote, SIGNAL (activated (const QString &)),
-             this, SLOT (setCurrentText (const QString &)));
-    connect (mCbAction, SIGNAL (activated (const QString &)),
-             this, SLOT (setCurrentText (const QString &)));
-
     /* Setup dialog */
     mTwFilters->header()->hide();
-
-    mCbRemote->addItem (""); /* Any */
-    mCbRemote->addItem (""); /* Yes */
-    mCbRemote->addItem (""); /* No */
-    mLbRemote->setHidden (mType != MachineType);
-    mCbRemote->setHidden (mType != MachineType);
-
-    mCbAction->insertItem (0, ""); /* KUSBDeviceFilterAction_Ignore */
-    mCbAction->insertItem (1, ""); /* KUSBDeviceFilterAction_Hold */
-    mLbAction->setHidden (mType != HostType);
-    mCbAction->setHidden (mType != HostType);
 
     /* Applying language settings */
@@ -244,14 +226,4 @@
     setTabOrder (mGbUSB, mCbUSB2);
     setTabOrder (mCbUSB2, mTwFilters);
-    setTabOrder (mTwFilters, mLeName);
-    setTabOrder (mLeName, mLeVendorID);
-    setTabOrder (mLeVendorID, mLeManufacturer);
-    setTabOrder (mLeManufacturer, mLeProductID);
-    setTabOrder (mLeProductID, mLeProduct);
-    setTabOrder (mLeProduct, mLeRevision);
-    setTabOrder (mLeRevision, mLeSerialNo);
-    setTabOrder (mLeSerialNo, mLePort);
-    setTabOrder (mLePort, mCbRemote);
-    setTabOrder (mCbRemote, mCbAction);
 }
 
@@ -263,4 +235,5 @@
     mNewAction->setText (tr ("&Add Empty Filter"));
     mAddAction->setText (tr ("A&dd Filter From Device"));
+    mEdtAction->setText (tr ("&Edit Filter"));
     mDelAction->setText (tr ("&Remove Filter"));
     mMupAction->setText (tr ("&Move Filter Up"));
@@ -271,4 +244,6 @@
     mAddAction->setToolTip (mAddAction->text().remove ('&') +
         QString (" (%1)").arg (mAddAction->shortcut().toString()));
+    mEdtAction->setToolTip (mEdtAction->text().remove ('&') +
+        QString (" (%1)").arg (mEdtAction->shortcut().toString()));
     mDelAction->setToolTip (mDelAction->text().remove ('&') +
         QString (" (%1)").arg (mDelAction->shortcut().toString()));
@@ -285,17 +260,9 @@
                                   "set to the values of the selected USB "
                                   "device attached to the host PC."));
+    mEdtAction->setWhatsThis (tr ("Edit the selected filter."));
     mDelAction->setWhatsThis (tr ("Removes the selected USB filter."));
     mMupAction->setWhatsThis (tr ("Moves the selected USB filter up."));
     mMdnAction->setWhatsThis (tr ("Moves the selected USB filter down."));
 
-    mCbRemote->setItemText (0, tr ("Any", "remote"));
-    mCbRemote->setItemText (1, tr ("Yes", "remote"));
-    mCbRemote->setItemText (2, tr ("No", "remote"));
-
-    mCbAction->setItemText (0,
-        vboxGlobal().toString (KUSBDeviceFilterAction_Ignore));
-    mCbAction->setItemText (1,
-        vboxGlobal().toString (KUSBDeviceFilterAction_Hold));
-
     mUSBFilterName = tr ("New Filter %1", "usb");
 }
@@ -304,5 +271,4 @@
 {
     mGbUSBFilters->setEnabled (aOn);
-    mWtProperties->setEnabled (aOn && mTwFilters->topLevelItemCount());
 }
 
@@ -322,110 +288,8 @@
 
     /* Enable/disable operational buttons */
+    mEdtAction->setEnabled (aItem);
     mDelAction->setEnabled (aItem);
     mMupAction->setEnabled (aItem && mTwFilters->itemAbove (aItem));
     mMdnAction->setEnabled (aItem && mTwFilters->itemBelow (aItem));
-
-    /* Load filter parameters */
-    CUSBDeviceFilter filter;
-    if (aItem)
-        filter = mFilters [mTwFilters->indexOfTopLevelItem (aItem)];
-
-    mLeName->setText (filter.isNull() ? QString::null : filter.GetName());
-    mLeVendorID->setText (filter.isNull() ? QString::null : filter.GetVendorId());
-    mLeProductID->setText (filter.isNull() ? QString::null : filter.GetProductId());
-    mLeRevision->setText (filter.isNull() ? QString::null : filter.GetRevision());
-    mLePort->setText (filter.isNull() ? QString::null : filter.GetPort());
-    mLeManufacturer->setText (filter.isNull() ? QString::null : filter.GetManufacturer());
-    mLeProduct->setText (filter.isNull() ? QString::null : filter.GetProduct());
-    mLeSerialNo->setText (filter.isNull() ? QString::null : filter.GetSerialNumber());
-    switch (mType)
-    {
-        case MachineType:
-        {
-            QString remote = filter.isNull() ? QString::null : filter.GetRemote();
-            if (remote == "yes" || remote == "true" || remote == "1")
-                mCbRemote->setCurrentIndex (1);
-            else if (remote == "no" || remote == "false" || remote == "0")
-                mCbRemote->setCurrentIndex (2);
-            else
-                mCbRemote->setCurrentIndex (0);
-            break;
-        }
-        case HostType:
-        {
-            CHostUSBDeviceFilter hostFilter = CUnknown (filter);
-            KUSBDeviceFilterAction action = hostFilter.isNull() ?
-                KUSBDeviceFilterAction_Ignore : hostFilter.GetAction();
-            if (action == KUSBDeviceFilterAction_Ignore)
-                mCbAction->setCurrentIndex (0);
-            else if (action == KUSBDeviceFilterAction_Hold)
-                mCbAction->setCurrentIndex (1);
-            else
-                AssertMsgFailed (("Invalid USBDeviceFilterAction type"));
-            break;
-        }
-        default:
-        {
-            AssertMsgFailed (("Invalid VBoxVMSettingsUSB type"));
-            break;
-        }
-    }
-
-    mWtProperties->setEnabled (aItem);
-}
-
-void VBoxVMSettingsUSB::setCurrentText (const QString &aText)
-{
-    QObject *sdr = sender();
-    QTreeWidgetItem *item = mTwFilters->currentItem();
-    Assert (item);
-
-    CUSBDeviceFilter filter =
-        mFilters [mTwFilters->indexOfTopLevelItem (item)];
-
-    /* Update filter's attribute on line-edited action */
-    if (sdr == mLeName)
-    {
-        filter.SetName (aText);
-        item->setText (twUSBFilters_Name, aText);
-    } else
-    if (sdr == mLeVendorID)
-    {
-        filter.SetVendorId (aText);
-    } else
-    if (sdr == mLeProductID)
-    {
-        filter.SetProductId (aText);
-    } else
-    if (sdr == mLeRevision)
-    {
-        filter.SetRevision (aText);
-    } else
-    if (sdr == mLePort)
-    {
-        filter.SetPort (aText);
-    } else
-    if (sdr == mLeManufacturer)
-    {
-        filter.SetManufacturer (aText);
-    } else
-    if (sdr == mLeProduct)
-    {
-        filter.SetProduct (aText);
-    } else
-    if (sdr == mLeSerialNo)
-    {
-        filter.SetSerialNumber (aText);
-    } else
-    if (sdr == mCbRemote)
-    {
-        filter.SetRemote (mCbRemote->currentIndex() > 0 ?
-                          aText.toLower() : QString::null);
-    } else
-    if (sdr == mCbAction)
-    {
-        CHostUSBDeviceFilter hostFilter = CUnknown (filter);
-        hostFilter.SetAction (vboxGlobal().toUSBDevFilterAction (aText));
-    }
 }
 
@@ -528,4 +392,87 @@
 }
 
+void VBoxVMSettingsUSB::edtClicked()
+{
+    QTreeWidgetItem *item = mTwFilters->currentItem();
+    Assert (item);
+
+    VBoxVMSettingsUSBFilterDetails fd (mType, this);
+
+    CUSBDeviceFilter filter =
+        mFilters [mTwFilters->indexOfTopLevelItem (item)];
+
+    fd.mLeName->setText (filter.isNull() ? QString::null : filter.GetName());
+    fd.mLeVendorID->setText (filter.isNull() ? QString::null : filter.GetVendorId());
+    fd.mLeProductID->setText (filter.isNull() ? QString::null : filter.GetProductId());
+    fd.mLeRevision->setText (filter.isNull() ? QString::null : filter.GetRevision());
+    fd.mLePort->setText (filter.isNull() ? QString::null : filter.GetPort());
+    fd.mLeManufacturer->setText (filter.isNull() ? QString::null : filter.GetManufacturer());
+    fd.mLeProduct->setText (filter.isNull() ? QString::null : filter.GetProduct());
+    fd.mLeSerialNo->setText (filter.isNull() ? QString::null : filter.GetSerialNumber());
+
+    switch (mType)
+    {
+        case MachineType:
+        {
+            QString remote = filter.isNull() ? QString::null : filter.GetRemote().toLower();
+            if (remote == "yes" || remote == "true" || remote == "1")
+                fd.mCbRemote->setCurrentIndex (ModeOn);
+            else if (remote == "no" || remote == "false" || remote == "0")
+                fd.mCbRemote->setCurrentIndex (ModeOff);
+            else
+                fd.mCbRemote->setCurrentIndex (ModeAny);
+            break;
+        }
+        case HostType:
+        {
+            CHostUSBDeviceFilter hostFilter = CUnknown (filter);
+            KUSBDeviceFilterAction action = hostFilter.isNull() ?
+                KUSBDeviceFilterAction_Ignore : hostFilter.GetAction();
+            if (action == KUSBDeviceFilterAction_Ignore)
+                fd.mCbAction->setCurrentIndex (0);
+            else if (action == KUSBDeviceFilterAction_Hold)
+                fd.mCbAction->setCurrentIndex (1);
+            else
+                AssertMsgFailed (("Invalid USBDeviceFilterAction type"));
+            break;
+        }
+        default:
+        {
+            AssertMsgFailed (("Invalid VBoxVMSettingsUSB type"));
+            break;
+        }
+    }
+
+    if (fd.exec() == QDialog::Accepted)
+    {
+        filter.SetName (fd.mLeName->text().isEmpty() ? QString::null : fd.mLeName->text());
+        item->setText (twUSBFilters_Name, fd.mLeName->text());
+        filter.SetVendorId (fd.mLeVendorID->text().isEmpty() ? QString::null : fd.mLeVendorID->text());
+        filter.SetProductId (fd.mLeProductID->text().isEmpty() ? QString::null : fd.mLeProductID->text());
+        filter.SetRevision (fd.mLeRevision->text().isEmpty() ? QString::null : fd.mLeRevision->text());
+        filter.SetManufacturer (fd.mLeManufacturer->text().isEmpty() ? QString::null : fd.mLeManufacturer->text());
+        filter.SetProduct (fd.mLeProduct->text().isEmpty() ? QString::null : fd.mLeProduct->text());
+        filter.SetSerialNumber (fd.mLeSerialNo->text().isEmpty() ? QString::null : fd.mLeSerialNo->text());
+        filter.SetPort (fd.mLePort->text().isEmpty() ? QString::null : fd.mLePort->text());
+        if (mType == MachineType)
+        {
+            switch (fd.mCbRemote->currentIndex())
+             {
+                 case ModeAny: filter.SetRemote (QString::null); break;
+                 case ModeOn:  filter.SetRemote ("yes"); break;
+                 case ModeOff: filter.SetRemote ("no"); break;
+                 default: AssertMsgFailed (("Invalid combo box index"));
+             }
+        }
+        else
+        if (mType == HostType)
+        {
+            CHostUSBDeviceFilter hostFilter = CUnknown (filter);
+            hostFilter.SetAction (vboxGlobal().toUSBDevFilterAction (fd.mCbAction->currentText()));
+        }
+        item->setToolTip (0, vboxGlobal().toolTip (filter));
+    }
+}
+
 void VBoxVMSettingsUSB::delClicked()
 {
@@ -538,11 +485,6 @@
 
     /* Setup validators */
-    if (!mTwFilters->topLevelItemCount() && mLeName->validator())
-    {
-        mLeName->setValidator (0);
-        mLeVendorID->setValidator (0);
-        mLeProductID->setValidator (0);
-        mLeRevision->setValidator (0);
-        mLePort->setValidator (0);
+    if (!mTwFilters->topLevelItemCount())
+    {
         if (mValidator)
         {
@@ -606,22 +548,8 @@
     item->setCheckState (0, aFilter.GetActive() ? Qt::Checked : Qt::Unchecked);
     item->setText (twUSBFilters_Name, aFilter.GetName());
-
-    /* Setup validators */
-    if (!mLeName->validator())
-    {
-        mLeName->setValidator (new QRegExpValidator (QRegExp (".+"), this));
-        mLeVendorID->setValidator (new QRegExpValidator (QRegExp ("[0-9a-fA-F]{0,4}"), this));
-        mLeProductID->setValidator (new QRegExpValidator (QRegExp ("[0-9a-fA-F]{0,4}"), this));
-        mLeRevision->setValidator (new QRegExpValidator (QRegExp ("[0-9]{0,4}"), this));
-        mLePort->setValidator (new QRegExpValidator (QRegExp ("[0-9]*"), this));
-        if (mValidator)
-            mValidator->rescan();
-    }
+    item->setToolTip (0, vboxGlobal().toolTip (aFilter));
 
     if (isNew)
-    {
         mTwFilters->setCurrentItem (item);
-        mLeName->setFocus();
-    }
 
     if (mValidator)
Index: trunk/src/VBox/Frontends/VirtualBox4/src/VBoxVMSettingsUSBFilterDetails.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox4/src/VBoxVMSettingsUSBFilterDetails.cpp	(revision 10728)
+++ trunk/src/VBox/Frontends/VirtualBox4/src/VBoxVMSettingsUSBFilterDetails.cpp	(revision 10728)
@@ -0,0 +1,75 @@
+/** @file
+ *
+ * VBox frontends: Qt4 GUI ("VirtualBox"):
+ * VBoxVMSettingsUSBFilterDetails class implementation
+ */
+
+/*
+ * Copyright (C) 2008 Sun Microsystems, Inc.
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
+ * Clara, CA 95054 USA or visit http://www.sun.com if you need
+ * additional information or have any questions.
+ */
+
+#include "VBoxVMSettingsUSBFilterDetails.h"
+#include "VBoxGlobal.h"
+
+VBoxVMSettingsUSBFilterDetails::VBoxVMSettingsUSBFilterDetails (VBoxVMSettingsUSB::FilterType aType, QWidget *aParent /* = NULL */)
+    : QIWithRetranslateUI2<QIDialog> (aParent, Qt::Sheet)
+    , mType (aType)
+{
+    /* Apply UI decorations */
+    Ui::VBoxVMSettingsUSBFilterDetails::setupUi (this);
+
+    mCbRemote->insertItem (VBoxVMSettingsUSB::ModeAny, ""); /* Any */
+    mCbRemote->insertItem (VBoxVMSettingsUSB::ModeOn,  ""); /* Yes */
+    mCbRemote->insertItem (VBoxVMSettingsUSB::ModeOff, ""); /* No */
+    mLbRemote->setHidden (mType != VBoxVMSettingsUSB::MachineType);
+    mCbRemote->setHidden (mType != VBoxVMSettingsUSB::MachineType);
+
+    mCbAction->insertItem (0, ""); /* KUSBDeviceFilterAction_Ignore */
+    mCbAction->insertItem (1, ""); /* KUSBDeviceFilterAction_Hold */
+    mLbAction->setHidden (mType != VBoxVMSettingsUSB::HostType);
+    mCbAction->setHidden (mType != VBoxVMSettingsUSB::HostType);
+
+    mLeName->setValidator (new QRegExpValidator (QRegExp (".+"), this));
+    mLeVendorID->setValidator (new QRegExpValidator (QRegExp ("[0-9a-fA-F]{0,4}"), this));
+    mLeProductID->setValidator (new QRegExpValidator (QRegExp ("[0-9a-fA-F]{0,4}"), this));
+    mLeRevision->setValidator (new QRegExpValidator (QRegExp ("[0-9]{0,4}"), this));
+    mLePort->setValidator (new QRegExpValidator (QRegExp ("[0-9]*"), this));
+
+    /* Applying language settings */
+    retranslateUi();
+    
+    adjustSize();
+
+#ifdef Q_WS_MAC
+    setSizePolicy (QSizePolicy::Fixed, QSizePolicy::Fixed);
+    setFixedSize (minimumSize());
+#endif /* Q_WS_MAC */
+}
+
+void VBoxVMSettingsUSBFilterDetails::retranslateUi()
+{
+    /* Translate uic generated strings */
+    Ui::VBoxVMSettingsUSBFilterDetails::retranslateUi (this);
+
+    mCbRemote->setItemText (VBoxVMSettingsUSB::ModeAny, tr ("Any", "remote"));
+    mCbRemote->setItemText (VBoxVMSettingsUSB::ModeOn,  tr ("Yes", "remote"));
+    mCbRemote->setItemText (VBoxVMSettingsUSB::ModeOff, tr ("No",  "remote"));
+
+    mCbAction->setItemText (0,
+        vboxGlobal().toString (KUSBDeviceFilterAction_Ignore));
+    mCbAction->setItemText (1,
+        vboxGlobal().toString (KUSBDeviceFilterAction_Hold));
+}
+
Index: trunk/src/VBox/Frontends/VirtualBox4/ui/VBoxVMSettingsUSB.ui
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox4/ui/VBoxVMSettingsUSB.ui	(revision 10717)
+++ trunk/src/VBox/Frontends/VirtualBox4/ui/VBoxVMSettingsUSB.ui	(revision 10728)
@@ -23,40 +23,54 @@
     <x>0</x>
     <y>0</y>
-    <width>392</width>
-    <height>424</height>
+    <width>468</width>
+    <height>328</height>
    </rect>
   </property>
-  <layout class="QVBoxLayout" >
-   <property name="leftMargin" >
-    <number>0</number>
-   </property>
-   <property name="topMargin" >
-    <number>5</number>
-   </property>
-   <property name="rightMargin" >
-    <number>0</number>
-   </property>
-   <property name="bottomMargin" >
-    <number>5</number>
-   </property>
-   <item>
-    <widget class="QGroupBox" name="mGbUSB" >
+  <layout class="QGridLayout" >
+   <item row="0" column="0" colspan="2" >
+    <widget class="QCheckBox" name="mGbUSB" >
      <property name="whatsThis" >
       <string>When checked, enables the virtual USB controller of this machine.</string>
      </property>
-     <property name="title" >
+     <property name="text" >
       <string>Enable &amp;USB Controller</string>
      </property>
-     <property name="checkable" >
+     <property name="checked" >
       <bool>true</bool>
      </property>
-     <property name="checked" >
-      <bool>false</bool>
+    </widget>
+   </item>
+   <item row="1" column="0" >
+    <spacer>
+     <property name="orientation" >
+      <enum>Qt::Horizontal</enum>
      </property>
-     <layout class="QHBoxLayout" >
+     <property name="sizeType" >
+      <enum>QSizePolicy::Fixed</enum>
+     </property>
+     <property name="sizeHint" >
+      <size>
+       <width>20</width>
+       <height>20</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="1" column="1" >
+    <widget class="QWidget" native="1" name="mUSBChild" >
+     <layout class="QGridLayout" >
+      <property name="leftMargin" >
+       <number>0</number>
+      </property>
       <property name="topMargin" >
-       <number>5</number>
+       <number>0</number>
       </property>
-      <item>
+      <property name="rightMargin" >
+       <number>0</number>
+      </property>
+      <property name="bottomMargin" >
+       <number>0</number>
+      </property>
+      <item row="0" column="0" >
        <widget class="QCheckBox" name="mCbUSB2" >
         <property name="whatsThis" >
@@ -68,17 +82,15 @@
        </widget>
       </item>
-     </layout>
-    </widget>
-   </item>
-   <item>
-    <widget class="QGroupBox" name="mGbUSBFilters" >
-     <property name="title" >
-      <string>USB Device &amp;Filters</string>
-     </property>
-     <layout class="QVBoxLayout" >
-      <property name="topMargin" >
-       <number>5</number>
-      </property>
-      <item>
+      <item row="1" column="0" >
+       <widget class="QILabelSeparator" name="mGbUSBFilters" >
+        <property name="text" >
+         <string>USB Device &amp;Filters</string>
+        </property>
+        <property name="buddy" >
+         <cstring>mTwFilters</cstring>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="0" >
        <widget class="QWidget" native="1" name="mWtFilterHandler" >
         <layout class="QHBoxLayout" >
@@ -116,220 +128,4 @@
        </widget>
       </item>
-      <item>
-       <widget class="QWidget" native="1" name="mWtProperties" >
-        <layout class="QVBoxLayout" >
-         <property name="leftMargin" >
-          <number>0</number>
-         </property>
-         <property name="topMargin" >
-          <number>0</number>
-         </property>
-         <property name="rightMargin" >
-          <number>0</number>
-         </property>
-         <property name="bottomMargin" >
-          <number>0</number>
-         </property>
-         <item>
-          <layout class="QHBoxLayout" >
-           <item>
-            <widget class="QLabel" name="mLbName" >
-             <property name="text" >
-              <string>&amp;Name</string>
-             </property>
-             <property name="buddy" >
-              <cstring>mLeName</cstring>
-             </property>
-            </widget>
-           </item>
-           <item>
-            <widget class="QLineEdit" name="mLeName" >
-             <property name="whatsThis" >
-              <string>Displays the filter name.</string>
-             </property>
-            </widget>
-           </item>
-          </layout>
-         </item>
-         <item>
-          <layout class="QGridLayout" >
-           <item row="0" column="0" >
-            <widget class="QLabel" name="mLbVendorID" >
-             <property name="text" >
-              <string>&amp;Vendor ID</string>
-             </property>
-             <property name="buddy" >
-              <cstring>mLeVendorID</cstring>
-             </property>
-            </widget>
-           </item>
-           <item row="0" column="1" >
-            <widget class="QLineEdit" name="mLeVendorID" >
-             <property name="whatsThis" >
-              <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>
-             </property>
-            </widget>
-           </item>
-           <item row="0" column="2" >
-            <widget class="QLabel" name="mLbManufacturer" >
-             <property name="text" >
-              <string>&amp;Manufacturer</string>
-             </property>
-             <property name="buddy" >
-              <cstring>mLeManufacturer</cstring>
-             </property>
-            </widget>
-           </item>
-           <item row="0" column="3" >
-            <widget class="QLineEdit" name="mLeManufacturer" >
-             <property name="whatsThis" >
-              <string>Defines the manufacturer filter as an &lt;i>exact match&lt;/i> string. An empty string will match any value.</string>
-             </property>
-            </widget>
-           </item>
-           <item row="1" column="0" >
-            <widget class="QLabel" name="mLbProductID" >
-             <property name="text" >
-              <string>&amp;Product ID</string>
-             </property>
-             <property name="buddy" >
-              <cstring>mLeProductID</cstring>
-             </property>
-            </widget>
-           </item>
-           <item row="1" column="1" >
-            <widget class="QLineEdit" name="mLeProductID" >
-             <property name="whatsThis" >
-              <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>
-             </property>
-            </widget>
-           </item>
-           <item row="1" column="2" >
-            <widget class="QLabel" name="mLbProduct" >
-             <property name="text" >
-              <string>Pro&amp;duct</string>
-             </property>
-             <property name="buddy" >
-              <cstring>mLeProduct</cstring>
-             </property>
-            </widget>
-           </item>
-           <item row="1" column="3" >
-            <widget class="QLineEdit" name="mLeProduct" >
-             <property name="whatsThis" >
-              <string>Defines the product name filter as an &lt;i>exact match&lt;/i> string. An empty string will match any value.</string>
-             </property>
-            </widget>
-           </item>
-           <item row="2" column="0" >
-            <widget class="QLabel" name="mLbRevision" >
-             <property name="text" >
-              <string>&amp;Revision</string>
-             </property>
-             <property name="buddy" >
-              <cstring>mLeRevision</cstring>
-             </property>
-            </widget>
-           </item>
-           <item row="2" column="1" >
-            <widget class="QLineEdit" name="mLeRevision" >
-             <property name="whatsThis" >
-              <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>
-             </property>
-            </widget>
-           </item>
-           <item row="2" column="2" >
-            <widget class="QLabel" name="mLbSerialNo" >
-             <property name="text" >
-              <string>&amp;Serial No.</string>
-             </property>
-             <property name="buddy" >
-              <cstring>mLeSerialNo</cstring>
-             </property>
-            </widget>
-           </item>
-           <item row="2" column="3" >
-            <widget class="QLineEdit" name="mLeSerialNo" >
-             <property name="whatsThis" >
-              <string>Defines the serial number filter as an &lt;i>exact match&lt;/i> string. An empty string will match any value.</string>
-             </property>
-            </widget>
-           </item>
-           <item row="3" column="0" >
-            <widget class="QLabel" name="mLbPort" >
-             <property name="text" >
-              <string>Por&amp;t</string>
-             </property>
-             <property name="buddy" >
-              <cstring>mLePort</cstring>
-             </property>
-            </widget>
-           </item>
-           <item row="3" column="1" >
-            <widget class="QLineEdit" name="mLePort" >
-             <property name="whatsThis" >
-              <string>Defines the host USB port filter as an &lt;i>exact match&lt;/i> string. An empty string will match any value.</string>
-             </property>
-            </widget>
-           </item>
-           <item row="3" column="2" >
-            <layout class="QVBoxLayout" >
-             <item>
-              <widget class="QLabel" name="mLbRemote" >
-               <property name="text" >
-                <string>R&amp;emote</string>
-               </property>
-               <property name="buddy" >
-                <cstring>mCbRemote</cstring>
-               </property>
-              </widget>
-             </item>
-             <item>
-              <widget class="QLabel" name="mLbAction" >
-               <property name="text" >
-                <string>&amp;Action</string>
-               </property>
-               <property name="buddy" >
-                <cstring>mCbAction</cstring>
-               </property>
-              </widget>
-             </item>
-            </layout>
-           </item>
-           <item row="3" column="3" >
-            <layout class="QVBoxLayout" >
-             <item>
-              <widget class="QComboBox" name="mCbRemote" >
-               <property name="sizePolicy" >
-                <sizepolicy vsizetype="Fixed" hsizetype="Expanding" >
-                 <horstretch>0</horstretch>
-                 <verstretch>0</verstretch>
-                </sizepolicy>
-               </property>
-               <property name="whatsThis" >
-                <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>
-               </property>
-              </widget>
-             </item>
-             <item>
-              <widget class="QComboBox" name="mCbAction" >
-               <property name="sizePolicy" >
-                <sizepolicy vsizetype="Fixed" hsizetype="Expanding" >
-                 <horstretch>0</horstretch>
-                 <verstretch>0</verstretch>
-                </sizepolicy>
-               </property>
-               <property name="whatsThis" >
-                <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>
-               </property>
-              </widget>
-             </item>
-            </layout>
-           </item>
-          </layout>
-         </item>
-        </layout>
-       </widget>
-      </item>
      </layout>
     </widget>
@@ -337,5 +133,29 @@
   </layout>
  </widget>
+ <customwidgets>
+  <customwidget>
+   <class>QILabelSeparator</class>
+   <extends>QLabel</extends>
+   <header>QILabelSeparator.h</header>
+  </customwidget>
+ </customwidgets>
  <resources/>
- <connections/>
+ <connections>
+  <connection>
+   <sender>mGbUSB</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>mUSBChild</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel" >
+     <x>233</x>
+     <y>19</y>
+    </hint>
+    <hint type="destinationlabel" >
+     <x>246</x>
+     <y>177</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
 </ui>
Index: trunk/src/VBox/Frontends/VirtualBox4/ui/VBoxVMSettingsUSBFilterDetails.ui
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox4/ui/VBoxVMSettingsUSBFilterDetails.ui	(revision 10728)
+++ trunk/src/VBox/Frontends/VirtualBox4/ui/VBoxVMSettingsUSBFilterDetails.ui	(revision 10728)
@@ -0,0 +1,315 @@
+<ui version="4.0" >
+ <comment>
+ VBox frontends: Qt4 GUI ("VirtualBox"):
+
+ Copyright (C) 2008 Sun Microsystems, Inc.
+
+ This file is part of VirtualBox Open Source Edition (OSE), as
+ available from http://www.virtualbox.org. This file is free software;
+ you can redistribute it and/or modify it under the terms of the GNU
+ General Public License (GPL) as published by the Free Software
+ Foundation, in version 2 as it comes in the "COPYING" file of the
+ VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+
+ Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
+ Clara, CA 95054 USA or visit http://www.sun.com if you need
+ additional information or have any questions.
+ </comment>
+ <class>VBoxVMSettingsUSBFilterDetails</class>
+ <widget class="QDialog" name="VBoxVMSettingsUSBFilterDetails" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>325</width>
+    <height>360</height>
+   </rect>
+  </property>
+  <property name="minimumSize" >
+   <size>
+    <width>325</width>
+    <height>0</height>
+   </size>
+  </property>
+  <property name="windowTitle" >
+   <string>Filter details</string>
+  </property>
+  <layout class="QGridLayout" >
+   <item row="0" column="0" >
+    <widget class="QLabel" name="mLbName" >
+     <property name="text" >
+      <string>&amp;Name:</string>
+     </property>
+     <property name="alignment" >
+      <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+     </property>
+     <property name="buddy" >
+      <cstring>mLeName</cstring>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="1" >
+    <widget class="QLineEdit" name="mLeName" >
+     <property name="toolTip" >
+      <string>Displays the filter name.</string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="0" >
+    <widget class="QLabel" name="mLbVendorID" >
+     <property name="text" >
+      <string>&amp;Vendor ID:</string>
+     </property>
+     <property name="alignment" >
+      <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+     </property>
+     <property name="buddy" >
+      <cstring>mLeVendorID</cstring>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="1" >
+    <widget class="QLineEdit" name="mLeVendorID" >
+     <property name="toolTip" >
+      <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>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="0" >
+    <widget class="QLabel" name="mLbProductID" >
+     <property name="text" >
+      <string>&amp;Product ID:</string>
+     </property>
+     <property name="alignment" >
+      <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+     </property>
+     <property name="buddy" >
+      <cstring>mLeProductID</cstring>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="1" >
+    <widget class="QLineEdit" name="mLeProductID" >
+     <property name="toolTip" >
+      <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>
+     </property>
+    </widget>
+   </item>
+   <item row="3" column="0" >
+    <widget class="QLabel" name="mLbRevision" >
+     <property name="text" >
+      <string>&amp;Revision:</string>
+     </property>
+     <property name="alignment" >
+      <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+     </property>
+     <property name="buddy" >
+      <cstring>mLeRevision</cstring>
+     </property>
+    </widget>
+   </item>
+   <item row="3" column="1" >
+    <widget class="QLineEdit" name="mLeRevision" >
+     <property name="toolTip" >
+      <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>
+     </property>
+    </widget>
+   </item>
+   <item row="4" column="0" >
+    <widget class="QLabel" name="mLbManufacturer" >
+     <property name="text" >
+      <string>&amp;Manufacturer:</string>
+     </property>
+     <property name="alignment" >
+      <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+     </property>
+     <property name="buddy" >
+      <cstring>mLeManufacturer</cstring>
+     </property>
+    </widget>
+   </item>
+   <item row="4" column="1" >
+    <widget class="QLineEdit" name="mLeManufacturer" >
+     <property name="toolTip" >
+      <string>Defines the manufacturer filter as an &lt;i>exact match&lt;/i> string. An empty string will match any value.</string>
+     </property>
+    </widget>
+   </item>
+   <item row="5" column="0" >
+    <widget class="QLabel" name="mLbProduct" >
+     <property name="text" >
+      <string>Pro&amp;duct:</string>
+     </property>
+     <property name="alignment" >
+      <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+     </property>
+     <property name="buddy" >
+      <cstring>mLeProduct</cstring>
+     </property>
+    </widget>
+   </item>
+   <item row="5" column="1" >
+    <widget class="QLineEdit" name="mLeProduct" >
+     <property name="toolTip" >
+      <string>Defines the product name filter as an &lt;i>exact match&lt;/i> string. An empty string will match any value.</string>
+     </property>
+    </widget>
+   </item>
+   <item row="6" column="0" >
+    <widget class="QLabel" name="mLbSerialNo" >
+     <property name="text" >
+      <string>&amp;Serial No.:</string>
+     </property>
+     <property name="alignment" >
+      <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+     </property>
+     <property name="buddy" >
+      <cstring>mLeSerialNo</cstring>
+     </property>
+    </widget>
+   </item>
+   <item row="6" column="1" >
+    <widget class="QLineEdit" name="mLeSerialNo" >
+     <property name="toolTip" >
+      <string>Defines the serial number filter as an &lt;i>exact match&lt;/i> string. An empty string will match any value.</string>
+     </property>
+    </widget>
+   </item>
+   <item row="7" column="0" >
+    <widget class="QLabel" name="mLbPort" >
+     <property name="text" >
+      <string>Por&amp;t:</string>
+     </property>
+     <property name="alignment" >
+      <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+     </property>
+     <property name="buddy" >
+      <cstring>mLePort</cstring>
+     </property>
+    </widget>
+   </item>
+   <item row="7" column="1" >
+    <widget class="QLineEdit" name="mLePort" >
+     <property name="toolTip" >
+      <string>Defines the host USB port filter as an &lt;i>exact match&lt;/i> string. An empty string will match any value.</string>
+     </property>
+    </widget>
+   </item>
+   <item row="8" column="0" >
+    <widget class="QLabel" name="mLbRemote" >
+     <property name="text" >
+      <string>R&amp;emote:</string>
+     </property>
+     <property name="alignment" >
+      <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+     </property>
+     <property name="buddy" >
+      <cstring>mCbRemote</cstring>
+     </property>
+    </widget>
+   </item>
+   <item row="8" column="1" >
+    <widget class="QComboBox" name="mCbRemote" >
+     <property name="sizePolicy" >
+      <sizepolicy vsizetype="Fixed" hsizetype="Expanding" >
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="toolTip" >
+      <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>
+     </property>
+    </widget>
+   </item>
+   <item row="9" column="0" >
+    <widget class="QLabel" name="mLbAction" >
+     <property name="text" >
+      <string>&amp;Action:</string>
+     </property>
+     <property name="alignment" >
+      <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+     </property>
+     <property name="buddy" >
+      <cstring>mCbAction</cstring>
+     </property>
+    </widget>
+   </item>
+   <item row="9" column="1" >
+    <widget class="QComboBox" name="mCbAction" >
+     <property name="sizePolicy" >
+      <sizepolicy vsizetype="Fixed" hsizetype="Expanding" >
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="toolTip" >
+      <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>
+     </property>
+    </widget>
+   </item>
+   <item row="10" column="1" >
+    <spacer>
+     <property name="orientation" >
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" >
+      <size>
+       <width>20</width>
+       <height>20</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="11" column="0" colspan="2" >
+    <widget class="QIDialogButtonBox" name="mButtonBox" >
+     <property name="standardButtons" >
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <customwidgets>
+  <customwidget>
+   <class>QIDialogButtonBox</class>
+   <extends>QDialogButtonBox</extends>
+   <header>QIDialogButtonBox.h</header>
+  </customwidget>
+ </customwidgets>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>mButtonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>VBoxVMSettingsUSBFilterDetails</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel" >
+     <x>162</x>
+     <y>339</y>
+    </hint>
+    <hint type="destinationlabel" >
+     <x>162</x>
+     <y>179</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>mButtonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>VBoxVMSettingsUSBFilterDetails</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel" >
+     <x>162</x>
+     <y>339</y>
+    </hint>
+    <hint type="destinationlabel" >
+     <x>162</x>
+     <y>179</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
