VirtualBox

Changeset 263 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Jan 24, 2007 12:15:05 PM (18 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
17802
Message:

FE/Qt: Added USB submenus and indicator to the Console window for easy access (manual attach/detach).

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

Legend:

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

    r1 r263  
    4444class QIStateIndicator;
    4545
     46class VBoxUSBLedTip;
     47
    4648class VBoxConsoleWnd : public QMainWindow
    4749{
     
    9193        DisableMouseIntegrAction    = 0x20,
    9294        Caption                     = 0x40,
     95        USBStuff                    = 0x80,
    9396        AllStuff                    = 0xFF,
    9497    };
     
    123126    void prepareFloppyMenu();
    124127    void prepareDVDMenu();
     128    void prepareUSBMenu();
    125129
    126130    void captureFloppy (int id);
    127131    void captureDVD (int id);
     132    void switchUSB (int id);
     133    void makeUSBToolTip (int id);
    128134
    129135    void showIndicatorContextMenu (QIStateIndicator *ind, QContextMenuEvent *e);
     
    182188    QPopupMenu *devicesMountFloppyMenu;
    183189    QPopupMenu *devicesMountDVDMenu;
     190    QPopupMenu *devicesUSBMenu;
    184191
    185192#ifdef VBOX_WITH_DEBUGGER_GUI
     
    194201        devicesMountFloppyMenuId,
    195202        devicesMountDVDMenuId,
     203        devicesUSBMenuId,
    196204#ifdef VBOX_WITH_DEBUGGER_GUI
    197205        dbgMenuId,
     
    204212    // widgets
    205213    VBoxConsoleView *console;
    206     QIStateIndicator *hd_light, *cd_light, *fd_light, *net_light;
     214    QIStateIndicator *hd_light, *cd_light, *fd_light, *net_light, *usb_light;
    207215    QIStateIndicator *mouse_state, *hostkey_state;
    208216    QHBox *hostkey_hbox;
    209217    QLabel *hostkey_name;
    210218
     219    VBoxUSBLedTip *mUsbLedTip;
     220
    211221    QTimer *idle_timer;
    212222    CEnums::MachineState machine_state;
     
    217227    QMap <int, CHostDVDDrive> hostDVDMap;
    218228    QMap <int, CHostFloppyDrive> hostFloppyMap;
     229    QMap <int, CUSBDevice> hostUSBMap;
    219230
    220231    QPoint normal_pos;
  • trunk/src/VBox/Frontends/VirtualBox/src/VBoxConsoleWnd.cpp

    r86 r263  
    4444#include <qlineedit.h>
    4545#include <qtextedit.h>
     46#include <qtooltip.h>
    4647#include <qdir.h>
    4748
     
    6061#include <VBox/err.h>
    6162#endif
     63
     64/** class VBoxUSBLedTip
     65 *
     66 *  The VBoxUSBLedTip class is an auxiliary ToolTip class
     67 *  for the USB LED indicator.
     68 */
     69class VBoxUSBLedTip : public QToolTip
     70{
     71public:
     72
     73    VBoxUSBLedTip (QWidget *aWidget, const CSession &aSession) :
     74        QToolTip (aWidget), mSession (aSession) {}
     75    ~VBoxUSBLedTip() { remove (parentWidget()); }
     76
     77protected:
     78
     79    void maybeTip (const QPoint &/* aPoint */)
     80    {
     81        CUSBDeviceEnumerator en = mSession.GetConsole().GetUSBDevices().Enumerate();
     82        QString devices;
     83        while (en.HasMore())
     84        {
     85            CUSBDevice usb = en.GetNext();
     86            devices += QString ("[<b><nobr>%1 %2 (%3)</nobr></b>]<br>")
     87                               .arg (usb.GetManufacturer())
     88                               .arg (usb.GetProduct())
     89                               .arg (usb.GetRevision());
     90        }
     91        QString toolTip = QObject::tr (
     92            "<qt>Indicates&nbsp;the&nbsp;activity&nbsp;of&nbsp;"
     93            "the&nbsp;attached&nbsp;USB&nbsp;devices"
     94            "<br>%1</qt>"
     95        );
     96        if (devices.isNull())
     97            devices += QObject::tr ("[<b>not attached</b>]");
     98        tip (parentWidget()->rect(), toolTip.arg (devices));
     99    }
     100
     101    const CSession &mSession;
     102};
    62103
    63104/** \class VBoxConsoleWnd
     
    88129#endif
    89130    , console (0)
     131    , mUsbLedTip (0)
    90132    , machine_state (CEnums::InvalidMachineState)
    91133    , no_auto_close (false)
     
    239281    devicesMountFloppyMenu = new QPopupMenu (devicesMenu, "devicesMountFloppyMenu");
    240282    devicesMountDVDMenu = new QPopupMenu (devicesMenu, "devicesMountDVDMenu");
     283    devicesUSBMenu = new QPopupMenu (devicesMenu, "devicesUSBMenu");
    241284
    242285    devicesMenu->insertItem (VBoxGlobal::iconSet ("fd_16px.png", "fd_disabled_16px.png"),
     
    248291    devicesUnmountDVDAction->addTo (devicesMenu);
    249292    devicesMenu->insertSeparator();
     293    devicesMenu->insertItem (VBoxGlobal::iconSet ("usb_16px.png", "usb_disabled_16px.png"),
     294        QString::null, devicesUSBMenu, devicesUSBMenuId);
    250295    devicesInstallGuestToolsAction->addTo (devicesMenu);
    251296    menuBar()->insertItem (QString::null, devicesMenu, devicesMenuId);
     
    254299    devicesMenu->setItemParameter (devicesMountFloppyMenuId, 0);
    255300    devicesMenu->setItemParameter (devicesMountDVDMenuId, 0);
     301    devicesMenu->setItemParameter (devicesUSBMenuId, 0);
    256302
    257303#ifdef VBOX_WITH_DEBUGGER_GUI
     
    303349    net_light->setStateIcon (CEnums::DeviceWriting, QPixmap::fromMimeSource ("nw_write_16px.png"));
    304350    net_light->setStateIcon (CEnums::InvalidActivity, QPixmap::fromMimeSource ("nw_disabled_16px.png"));
     351    usb_light = new QIStateIndicator (CEnums::DeviceIdle, indicatorBox, "usb_light", WNoAutoErase);
     352    usb_light->setStateIcon (CEnums::DeviceIdle, QPixmap::fromMimeSource ("usb_16px.png"));
     353    usb_light->setStateIcon (CEnums::DeviceReading, QPixmap::fromMimeSource ("usb_read_16px.png"));
     354    usb_light->setStateIcon (CEnums::DeviceWriting, QPixmap::fromMimeSource ("usb_write_16px.png"));
     355    usb_light->setStateIcon (CEnums::InvalidActivity, QPixmap::fromMimeSource ("usb_disabled_16px.png"));
    305356    /* mouse */
    306357    (new QFrame (indicatorBox))->setFrameStyle (QFrame::VLine | QFrame::Sunken);
     
    363414    connect (devicesMountFloppyMenu, SIGNAL(aboutToShow()), this, SLOT(prepareFloppyMenu()));
    364415    connect (devicesMountDVDMenu, SIGNAL(aboutToShow()), this, SLOT(prepareDVDMenu()));
     416    connect (devicesUSBMenu, SIGNAL(aboutToShow()), this, SLOT(prepareUSBMenu()));
    365417
    366418    connect (devicesMountFloppyMenu, SIGNAL(activated(int)), this, SLOT(captureFloppy(int)));
    367419    connect (devicesMountDVDMenu, SIGNAL(activated(int)), this, SLOT(captureDVD(int)));
     420    connect (devicesUSBMenu, SIGNAL(activated(int)), this, SLOT(switchUSB(int)));
     421    connect (devicesUSBMenu, SIGNAL(highlighted(int)), this, SLOT(makeUSBToolTip(int)));
    368422
    369423    connect (helpWebAction, SIGNAL (activated()),
     
    377431             this, SLOT (showIndicatorContextMenu (QIStateIndicator *, QContextMenuEvent *)));
    378432    connect (cd_light, SIGNAL (contextMenuRequested (QIStateIndicator *, QContextMenuEvent *)),
     433             this, SLOT (showIndicatorContextMenu (QIStateIndicator *, QContextMenuEvent *)));
     434    connect (usb_light, SIGNAL (contextMenuRequested (QIStateIndicator *, QContextMenuEvent *)),
    379435             this, SLOT (showIndicatorContextMenu (QIStateIndicator *, QContextMenuEvent *)));
    380436
     
    395451VBoxConsoleWnd::~VBoxConsoleWnd()
    396452{
     453    delete mUsbLedTip;
    397454}
    398455
     
    502559        }
    503560    }
     561
     562    /* initialize usb stuff */
     563    bool isUsbAvailable = cmachine.GetUSBController().GetEnabled();
     564    devicesMenu->setItemVisible (devicesUSBMenuId, isUsbAvailable);
     565    mUsbLedTip = new VBoxUSBLedTip (usb_light, csession);
    504566
    505567    /* start an idle timer that will update device lighths */
     
    10511113    devicesMenu->changeItem (devicesMountFloppyMenuId, tr ("Mount &Floppy"));
    10521114    devicesMenu->changeItem (devicesMountDVDMenuId, tr ("Mount &CD/DVD-ROM"));
     1115    devicesMenu->changeItem (devicesUSBMenuId, tr ("&USB Devices"));
    10531116
    10541117    menuBar()->changeItem (vmMenuId, tr ("&VM"));
     
    12071270        QToolTip::add (net_light, tip.arg (count));
    12081271    }
     1272    if (element & USBStuff)
     1273    {
     1274        devicesUSBMenu->setEnabled (machine_state == CEnums::Running);
     1275    }
    12091276    if (element & PauseAction)
    12101277    {
     
    17031770
    17041771/**
     1772 *  Prepares the "USB Devices" menu by populating the existent host
     1773 *  USB Devices.
     1774 */
     1775void VBoxConsoleWnd::prepareUSBMenu()
     1776{
     1777    if (!console) return;
     1778
     1779    devicesUSBMenu->clear();
     1780    CHost host = vboxGlobal().virtualBox().GetHost();
     1781
     1782    bool isUSBEmpty = host.GetUSBDevices().GetCount() == 0;
     1783    if (isUSBEmpty)
     1784    {
     1785        int id = devicesUSBMenu->insertItem (tr ("[No device attached to host]"));
     1786        devicesUSBMenu->setItemEnabled (id, !isUSBEmpty);
     1787        return;
     1788    }
     1789
     1790    CHostUSBDeviceEnumerator en = host.GetUSBDevices().Enumerate();
     1791    while (en.HasMore())
     1792    {
     1793        CHostUSBDevice iterator = en.GetNext();
     1794        CUSBDevice usb = CUnknown (iterator);
     1795        int id = devicesUSBMenu->insertItem (QString ("%1 %2 [%3]")
     1796                                             .arg (usb.GetManufacturer())
     1797                                             .arg (usb.GetProduct())
     1798                                             .arg (usb.GetRevision()));
     1799        hostUSBMap [id] = usb;
     1800        CUSBDevice attachedUSB =
     1801            csession.GetConsole().GetUSBDevices().FindById (usb.GetId());
     1802        devicesUSBMenu->setItemChecked (id, !attachedUSB.isNull());
     1803        devicesUSBMenu->setItemEnabled (id, iterator.GetState() !=
     1804                                            CEnums::USBDeviceUnavailable);
     1805    }
     1806}
     1807
     1808/**
    17051809 *  Captures a floppy device corresponding to a given menu id.
    17061810 */
     
    17461850        updateAppearanceOf (DVDStuff);
    17471851    }
     1852}
     1853
     1854/**
     1855 *  Attach/Detach selected USB Device.
     1856 */
     1857void VBoxConsoleWnd::switchUSB (int id)
     1858{
     1859    if (!console) return;
     1860
     1861    CUSBDevice usb = hostUSBMap [id];
     1862    /* if null then some other item but usb device is selected */
     1863    if (usb.isNull()) return;
     1864
     1865    if (devicesUSBMenu->isItemChecked (id))
     1866        csession.GetConsole().DetachUSBDevice (usb.GetId());
     1867    else
     1868        csession.GetConsole().AttachUSBDevice (usb.GetId());
     1869}
     1870
     1871/**
     1872 *  Update tooltip for highlighted USB Device.
     1873 */
     1874void VBoxConsoleWnd::makeUSBToolTip (int id)
     1875{
     1876    if (!console) return;
     1877
     1878    CUSBDevice usb = hostUSBMap [id];
     1879    /* if null then some other item but usb device is selected */
     1880    if (usb.isNull()) return;
     1881
     1882    QString tip = tr ("Vendor ID: %1\nProduct ID: %2\nSerial Number: %3")
     1883        .arg (usb.GetVendorId()).arg (usb.GetProductId()).arg (usb.GetSerialNumber());
     1884    QToolTip::remove (devicesUSBMenu);
     1885    QToolTip::add (devicesUSBMenu, tip);
    17481886}
    17491887
     
    17641902        devicesMountFloppyMenu->exec (e->globalPos());
    17651903        devicesMenu->setItemParameter (devicesMountFloppyMenuId, 0);
     1904    }
     1905    else
     1906    if (ind == usb_light)
     1907    {
     1908        // set "this is a context menu" flag
     1909        devicesMenu->setItemParameter (devicesUSBMenuId, 1);
     1910        devicesUSBMenu->exec (e->globalPos());
     1911        devicesMenu->setItemParameter (devicesUSBMenuId, 0);
    17661912    }
    17671913}
     
    18241970        machine_state = state;
    18251971
    1826         updateAppearanceOf (Caption | FloppyStuff | DVDStuff | PauseAction |
     1972        updateAppearanceOf (Caption | FloppyStuff | DVDStuff | USBStuff | PauseAction |
    18271973                            DisableMouseIntegrAction );
    18281974
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette