VirtualBox

Changeset 95245 in vbox


Ignore:
Timestamp:
Jun 10, 2022 9:05:10 AM (3 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
151792
Message:

FE/Qt/Ds: bugref:6899: Machine settings: USB page accessibility improvements (part 1); Moving USB controller type stuff into separate UIUSBControllerEditor widget.

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

Legend:

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

    r95222 r95245  
    933933        src/settings/editors/UIShortcutConfigurationEditor.h \
    934934        src/settings/editors/UISnapshotFolderEditor.h \
     935        src/settings/editors/UIUSBControllerEditor.h \
    935936        src/settings/editors/UIVideoMemoryEditor.h \
    936937        src/settings/editors/UIVirtualCPUEditor.h \
     
    15101511        src/settings/editors/UIShortcutConfigurationEditor.cpp \
    15111512        src/settings/editors/UISnapshotFolderEditor.cpp \
     1513        src/settings/editors/UIUSBControllerEditor.cpp \
    15121514        src/settings/editors/UIVideoMemoryEditor.cpp \
    15131515        src/settings/editors/UIVirtualCPUEditor.cpp \
  • trunk/src/VBox/Frontends/VirtualBox/src/settings/editors/UIUSBControllerEditor.cpp

    r95244 r95245  
    11/* $Id$ */
    22/** @file
    3  * VBox Qt GUI - UIAudioControllerEditor class implementation.
     3 * VBox Qt GUI - UIUSBControllerEditor class implementation.
    44 */
    55
     
    1717
    1818/* Qt includes: */
    19 #include <QComboBox>
    20 #include <QGridLayout>
    21 #include <QHBoxLayout>
    22 #include <QLabel>
     19#include <QButtonGroup>
     20#include <QRadioButton>
     21#include <QVBoxLayout>
    2322
    2423/* GUI includes: */
    2524#include "UICommon.h"
    26 #include "UIConverter.h"
    27 #include "UIAudioControllerEditor.h"
     25#include "UIUSBControllerEditor.h"
    2826
    2927/* COM includes: */
     
    3129
    3230
    33 UIAudioControllerEditor::UIAudioControllerEditor(QWidget *pParent /* = 0 */)
     31UIUSBControllerEditor::UIUSBControllerEditor(QWidget *pParent /* = 0 */)
    3432    : QIWithRetranslateUI<QWidget>(pParent)
    35     , m_enmValue(KAudioControllerType_Max)
    36     , m_pLabel(0)
    37     , m_pCombo(0)
     33    , m_enmValue(KUSBControllerType_Max)
     34    , m_pRadioButtonUSB1(0)
     35    , m_pRadioButtonUSB2(0)
     36    , m_pRadioButtonUSB3(0)
    3837{
    3938    prepare();
    4039}
    4140
    42 void UIAudioControllerEditor::setValue(KAudioControllerType enmValue)
     41void UIUSBControllerEditor::setValue(KUSBControllerType enmValue)
    4342{
    4443    /* Update cached value and
     
    4746    {
    4847        m_enmValue = enmValue;
    49         populateCombo();
     48        updateButtonSet();
    5049    }
    5150}
    5251
    53 KAudioControllerType UIAudioControllerEditor::value() const
     52KUSBControllerType UIUSBControllerEditor::value() const
    5453{
    55     return m_pCombo ? m_pCombo->currentData().value<KAudioControllerType>() : m_enmValue;
     54    if (   m_pRadioButtonUSB1
     55        && m_pRadioButtonUSB1->isChecked())
     56        return KUSBControllerType_OHCI;
     57    else if (   m_pRadioButtonUSB2
     58             && m_pRadioButtonUSB2->isChecked())
     59        return KUSBControllerType_EHCI;
     60    else if (   m_pRadioButtonUSB3
     61             && m_pRadioButtonUSB3->isChecked())
     62        return KUSBControllerType_XHCI;
     63    return m_enmValue;
    5664}
    5765
    58 int UIAudioControllerEditor::minimumLabelHorizontalHint() const
     66void UIUSBControllerEditor::retranslateUi()
    5967{
    60     return m_pLabel ? m_pLabel->minimumSizeHint().width() : 0;
    61 }
    62 
    63 void UIAudioControllerEditor::setMinimumLayoutIndent(int iIndent)
    64 {
    65     if (m_pLayout)
    66         m_pLayout->setColumnMinimumWidth(0, iIndent);
    67 }
    68 
    69 void UIAudioControllerEditor::retranslateUi()
    70 {
    71     if (m_pLabel)
    72         m_pLabel->setText(tr("Audio &Controller:"));
    73     if (m_pCombo)
     68    if (m_pRadioButtonUSB1)
    7469    {
    75         for (int i = 0; i < m_pCombo->count(); ++i)
    76         {
    77             const KAudioControllerType enmType = m_pCombo->itemData(i).value<KAudioControllerType>();
    78             m_pCombo->setItemText(i, gpConverter->toString(enmType));
    79         }
    80         m_pCombo->setToolTip(tr("Selects the type of the virtual sound card. Depending on this value, "
    81                                 "VirtualBox will provide different audio hardware to the virtual machine."));
     70        m_pRadioButtonUSB1->setText(tr("USB &1.1 (OHCI) Controller"));
     71        m_pRadioButtonUSB1->setToolTip(tr("When chosen, enables the virtual USB OHCI controller of "
     72                                          "this machine. The USB OHCI controller provides USB 1.0 support."));
     73    }
     74    if (m_pRadioButtonUSB2)
     75    {
     76        m_pRadioButtonUSB2->setText(tr("USB &2.0 (OHCI + EHCI) Controller"));
     77        m_pRadioButtonUSB2->setToolTip(tr("When chosen, enables the virtual USB OHCI and EHCI "
     78                                          "controllers of this machine. Together they provide USB 2.0 support."));
     79    }
     80    if (m_pRadioButtonUSB3)
     81    {
     82        m_pRadioButtonUSB3->setText(tr("USB &3.0 (xHCI) Controller"));
     83        m_pRadioButtonUSB3->setToolTip(tr("When chosen, enables the virtual USB xHCI controller of "
     84                                          "this machine. The USB xHCI controller provides USB 3.0 support."));
    8285    }
    8386}
    8487
    85 void UIAudioControllerEditor::prepare()
     88void UIUSBControllerEditor::prepare()
    8689{
    8790    /* Create main layout: */
    88     m_pLayout = new QGridLayout(this);
    89     if (m_pLayout)
     91    QVBoxLayout *pLayout = new QVBoxLayout(this);
     92    if (pLayout)
    9093    {
    91         m_pLayout->setContentsMargins(0, 0, 0, 0);
     94        pLayout->setContentsMargins(0, 0, 0, 0);
    9295
    93         /* Create label: */
    94         m_pLabel = new QLabel(this);
    95         if (m_pLabel)
     96        /* Prepare button-group: */
     97        QButtonGroup *pButtonGroup = new QButtonGroup(this);
     98        if (pButtonGroup)
    9699        {
    97             m_pLabel->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
    98             m_pLayout->addWidget(m_pLabel, 0, 0);
    99         }
    100 
    101         /* Create combo layout: */
    102         QHBoxLayout *pComboLayout = new QHBoxLayout;
    103         if (pComboLayout)
    104         {
    105             /* Create combo: */
    106             m_pCombo = new QComboBox(this);
    107             if (m_pCombo)
     100            /* Prepare USB1 radio-button: */
     101            m_pRadioButtonUSB1 = new QRadioButton(this);
     102            if (m_pRadioButtonUSB1)
    108103            {
    109                 /* This is necessary since contents is dynamical now: */
    110                 m_pCombo->setSizeAdjustPolicy(QComboBox::AdjustToContents);
    111                 if (m_pLabel)
    112                     m_pLabel->setBuddy(m_pCombo);
    113                 pComboLayout->addWidget(m_pCombo);
     104                m_pRadioButtonUSB1->setVisible(false);
     105                pLayout->addWidget(m_pRadioButtonUSB1);
     106            }
     107            /* Prepare USB2 radio-button: */
     108            m_pRadioButtonUSB2 = new QRadioButton(this);
     109            if (m_pRadioButtonUSB2)
     110            {
     111                m_pRadioButtonUSB2->setVisible(false);
     112                pLayout->addWidget(m_pRadioButtonUSB2);
     113            }
     114            /* Prepare USB3 radio-button: */
     115            m_pRadioButtonUSB3 = new QRadioButton(this);
     116            if (m_pRadioButtonUSB3)
     117            {
     118                m_pRadioButtonUSB3->setVisible(false);
     119                pLayout->addWidget(m_pRadioButtonUSB3);
    114120            }
    115121
    116             /* Add stretch: */
    117             pComboLayout->addStretch();
    118 
    119             /* Add combo-layout into main-layout: */
    120             m_pLayout->addLayout(pComboLayout, 0, 1);
     122            connect(pButtonGroup, static_cast<void(QButtonGroup::*)(QAbstractButton*)>(&QButtonGroup::buttonClicked),
     123                    this, &UIUSBControllerEditor::sigValueChanged);
    121124        }
    122125    }
    123126
    124     /* Populate combo: */
    125     populateCombo();
     127    /* Update button set: */
     128    updateButtonSet();
    126129
    127130    /* Apply language settings: */
     
    129132}
    130133
    131 void UIAudioControllerEditor::populateCombo()
     134void UIUSBControllerEditor::updateButtonSet()
    132135{
    133     if (m_pCombo)
     136    /* Load currently supported types: */
     137    CSystemProperties comProperties = uiCommon().virtualBox().GetSystemProperties();
     138    m_supportedValues = comProperties.GetSupportedUSBControllerTypes();
     139
     140    /* Make sure requested value if sane is present as well: */
     141    if (   m_enmValue != KUSBControllerType_Max
     142        && !m_supportedValues.contains(m_enmValue))
     143        m_supportedValues.prepend(m_enmValue);
     144
     145    /* Update visibility for all values: */
     146    if (m_pRadioButtonUSB1)
     147        m_pRadioButtonUSB1->setVisible(m_supportedValues.contains(KUSBControllerType_OHCI));
     148    if (m_pRadioButtonUSB2)
     149        m_pRadioButtonUSB2->setVisible(m_supportedValues.contains(KUSBControllerType_EHCI));
     150    if (m_pRadioButtonUSB3)
     151        m_pRadioButtonUSB3->setVisible(m_supportedValues.contains(KUSBControllerType_XHCI));
     152
     153    /* Look for proper button to choose: */
     154    switch (m_enmValue)
    134155    {
    135         /* Clear combo first of all: */
    136         m_pCombo->clear();
    137 
    138         /* Load currently supported audio driver types: */
    139         CSystemProperties comProperties = uiCommon().virtualBox().GetSystemProperties();
    140         m_supportedValues = comProperties.GetSupportedAudioControllerTypes();
    141 
    142         /* Make sure requested value if sane is present as well: */
    143         if (   m_enmValue != KAudioControllerType_Max
    144             && !m_supportedValues.contains(m_enmValue))
    145             m_supportedValues.prepend(m_enmValue);
    146 
    147         /* Update combo with all the supported values: */
    148         foreach (const KAudioControllerType &enmType, m_supportedValues)
    149             m_pCombo->addItem(QString(), QVariant::fromValue(enmType));
    150 
    151         /* Look for proper index to choose: */
    152         const int iIndex = m_pCombo->findData(QVariant::fromValue(m_enmValue));
    153         if (iIndex != -1)
    154             m_pCombo->setCurrentIndex(iIndex);
    155 
    156         /* Retranslate finally: */
    157         retranslateUi();
     156        default:
     157        case KUSBControllerType_OHCI:
     158        {
     159            if (m_pRadioButtonUSB1)
     160                m_pRadioButtonUSB1->setChecked(true);
     161            break;
     162        }
     163        case KUSBControllerType_EHCI:
     164        {
     165            if (m_pRadioButtonUSB2)
     166                m_pRadioButtonUSB2->setChecked(true);
     167            break;
     168        }
     169        case KUSBControllerType_XHCI:
     170        {
     171            if (m_pRadioButtonUSB3)
     172                m_pRadioButtonUSB3->setChecked(true);
     173            break;
     174        }
    158175    }
    159176}
  • trunk/src/VBox/Frontends/VirtualBox/src/settings/editors/UIUSBControllerEditor.h

    r95244 r95245  
    11/* $Id$ */
    22/** @file
    3  * VBox Qt GUI - UIAudioControllerEditor class declaration.
     3 * VBox Qt GUI - UIUSBControllerEditor class declaration.
    44 */
    55
     
    1616 */
    1717
    18 #ifndef FEQT_INCLUDED_SRC_settings_editors_UIAudioControllerEditor_h
    19 #define FEQT_INCLUDED_SRC_settings_editors_UIAudioControllerEditor_h
     18#ifndef FEQT_INCLUDED_SRC_settings_editors_UIUSBControllerEditor_h
     19#define FEQT_INCLUDED_SRC_settings_editors_UIUSBControllerEditor_h
    2020#ifndef RT_WITHOUT_PRAGMA_ONCE
    2121# pragma once
     
    3333
    3434/* Forward declarations: */
    35 class QComboBox;
    36 class QGridLayout;
    37 class QLabel;
     35class QRadioButton;
    3836
    39 /** QWidget subclass used as an audio controller editor. */
    40 class SHARED_LIBRARY_STUFF UIAudioControllerEditor : public QIWithRetranslateUI<QWidget>
     37/** QWidget subclass used as a USB controller editor. */
     38class SHARED_LIBRARY_STUFF UIUSBControllerEditor : public QIWithRetranslateUI<QWidget>
    4139{
    4240    Q_OBJECT;
     41
     42signals:
     43
     44    /** Notifies listeners about value change. */
     45    void sigValueChanged();
    4346
    4447public:
    4548
    4649    /** Constructs editor passing @a pParent to the base-class. */
    47     UIAudioControllerEditor(QWidget *pParent = 0);
     50    UIUSBControllerEditor(QWidget *pParent = 0);
    4851
    4952    /** Defines editor @a enmValue. */
    50     void setValue(KAudioControllerType enmValue);
     53    void setValue(KUSBControllerType enmValue);
    5154    /** Returns editor value. */
    52     KAudioControllerType value() const;
     55    KUSBControllerType value() const;
    5356
    5457    /** Returns the vector of supported values. */
    55     QVector<KAudioControllerType> supportedValues() const { return m_supportedValues; }
    56 
    57     /** Returns minimum layout hint. */
    58     int minimumLabelHorizontalHint() const;
    59     /** Defines minimum layout @a iIndent. */
    60     void setMinimumLayoutIndent(int iIndent);
     58    QVector<KUSBControllerType> supportedValues() const { return m_supportedValues; }
    6159
    6260protected:
     
    6967    /** Prepares all. */
    7068    void prepare();
    71     /** Populates combo. */
    72     void populateCombo();
     69
     70    /** Updates button set. */
     71    void updateButtonSet();
    7372
    7473    /** Holds the value to be selected. */
    75     KAudioControllerType  m_enmValue;
     74    KUSBControllerType  m_enmValue;
    7675
    7776    /** Holds the vector of supported values. */
    78     QVector<KAudioControllerType>  m_supportedValues;
     77    QVector<KUSBControllerType>  m_supportedValues;
    7978
    80     /** Holds the main layout instance. */
    81     QGridLayout *m_pLayout;
    82     /** Holds the label instance. */
    83     QLabel      *m_pLabel;
    84     /** Holds the combo instance. */
    85     QComboBox   *m_pCombo;
     79    /** Holds the USB1 radio-button instance. */
     80    QRadioButton     *m_pRadioButtonUSB1;
     81    /** Holds the USB2 radio-button instance. */
     82    QRadioButton     *m_pRadioButtonUSB2;
     83    /** Holds the USB3 radio-button instance. */
     84    QRadioButton     *m_pRadioButtonUSB3;
    8685};
    8786
    88 #endif /* !FEQT_INCLUDED_SRC_settings_editors_UIAudioControllerEditor_h */
     87#endif /* !FEQT_INCLUDED_SRC_settings_editors_UIUSBControllerEditor_h */
  • trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsUSB.cpp

    r94667 r95245  
    4040#include "QIToolBar.h"
    4141#include "UICommon.h"
     42#include "UIUSBControllerEditor.h"
    4243
    4344/* COM includes: */
     
    136137    UIDataSettingsMachineUSB()
    137138        : m_fUSBEnabled(false)
    138         , m_USBControllerType(KUSBControllerType_Null)
     139        , m_enmUSBControllerType(KUSBControllerType_Null)
    139140    {}
    140141
     
    144145        return true
    145146               && (m_fUSBEnabled == other.m_fUSBEnabled)
    146                && (m_USBControllerType == other.m_USBControllerType)
     147               && (m_enmUSBControllerType == other.m_enmUSBControllerType)
    147148               ;
    148149    }
     
    154155
    155156    /** Holds whether the USB is enabled. */
    156     bool m_fUSBEnabled;
     157    bool                m_fUSBEnabled;
    157158    /** Holds the USB controller type. */
    158     KUSBControllerType m_USBControllerType;
     159    KUSBControllerType  m_enmUSBControllerType;
    159160};
    160161
     
    337338    , m_pCheckBoxUSB(0)
    338339    , m_pWidgetUSBSettings(0)
    339     , m_pRadioButtonUSB1(0)
    340     , m_pRadioButtonUSB2(0)
    341     , m_pRadioButtonUSB3(0)
     340    , m_pEditorController(0)
    342341    , m_pLabelSeparatorFilters(0)
    343342    , m_pLayoutFilters(0)
     
    352351    , m_pMenuUSBDevices(0)
    353352{
    354     /* Prepare: */
    355353    prepare();
    356354}
     
    358356UIMachineSettingsUSB::~UIMachineSettingsUSB()
    359357{
    360     /* Cleanup: */
    361358    cleanup();
    362359}
     
    389386    /* Gather old USB data: */
    390387    oldUsbData.m_fUSBEnabled = !m_machine.GetUSBControllers().isEmpty();
    391     oldUsbData.m_USBControllerType = m_machine.GetUSBControllerCountByType(KUSBControllerType_XHCI) > 0 ? KUSBControllerType_XHCI :
    392                                      m_machine.GetUSBControllerCountByType(KUSBControllerType_EHCI) > 0 ? KUSBControllerType_EHCI :
    393                                      m_machine.GetUSBControllerCountByType(KUSBControllerType_OHCI) > 0 ? KUSBControllerType_OHCI :
    394                                      KUSBControllerType_Null;
     388    oldUsbData.m_enmUSBControllerType = m_machine.GetUSBControllerCountByType(KUSBControllerType_XHCI) > 0 ? KUSBControllerType_XHCI
     389                                      : m_machine.GetUSBControllerCountByType(KUSBControllerType_EHCI) > 0 ? KUSBControllerType_EHCI
     390                                      : m_machine.GetUSBControllerCountByType(KUSBControllerType_OHCI) > 0 ? KUSBControllerType_OHCI
     391                                      : KUSBControllerType_Null;
    395392
    396393    /* Check whether controller is valid: */
     
    447444    const UIDataSettingsMachineUSB &oldUsbData = m_pCache->base();
    448445
    449     /* Load currently supported USB controllers: */
    450     CSystemProperties comProperties = uiCommon().virtualBox().GetSystemProperties();
    451     QVector<KUSBControllerType> supportedTypes = comProperties.GetSupportedUSBControllerTypes();
    452     /* Take currently requested type into account if it's sane: */
    453     if (!supportedTypes.contains(oldUsbData.m_USBControllerType) && oldUsbData.m_USBControllerType != KUSBControllerType_Null)
    454         supportedTypes.prepend(oldUsbData.m_USBControllerType);
    455 
    456     /* Adjust radio-button visibility: */
    457     if (m_pRadioButtonUSB1)
    458         m_pRadioButtonUSB1->setVisible(supportedTypes.contains(KUSBControllerType_OHCI));
    459     if (m_pRadioButtonUSB2)
    460         m_pRadioButtonUSB2->setVisible(supportedTypes.contains(KUSBControllerType_EHCI));
    461     if (m_pRadioButtonUSB3)
    462         m_pRadioButtonUSB3->setVisible(supportedTypes.contains(KUSBControllerType_XHCI));
    463 
    464446    /* Load old USB data from cache: */
    465447    if (m_pCheckBoxUSB)
    466448        m_pCheckBoxUSB->setChecked(oldUsbData.m_fUSBEnabled);
    467     switch (oldUsbData.m_USBControllerType)
    468     {
    469         default:
    470         case KUSBControllerType_OHCI:
    471         {
    472             if (m_pRadioButtonUSB1)
    473                 m_pRadioButtonUSB1->setChecked(true);
    474             break;
    475         }
    476         case KUSBControllerType_EHCI:
    477         {
    478             if (m_pRadioButtonUSB2)
    479                 m_pRadioButtonUSB2->setChecked(true);
    480             break;
    481         }
    482         case KUSBControllerType_XHCI:
    483         {
    484             if (m_pRadioButtonUSB3)
    485                 m_pRadioButtonUSB3->setChecked(true);
    486             break;
    487         }
    488     }
     449    if (m_pEditorController)
     450        m_pEditorController->setValue(oldUsbData.m_enmUSBControllerType);
    489451
    490452    /* For each filter => load it from cache: */
     
    517479    if (m_pCheckBoxUSB)
    518480        newUsbData.m_fUSBEnabled = m_pCheckBoxUSB->isChecked();
    519     if (!newUsbData.m_fUSBEnabled)
    520         newUsbData.m_USBControllerType = KUSBControllerType_Null;
    521     else
    522     {
    523         if (   m_pRadioButtonUSB1
    524             && m_pRadioButtonUSB1->isChecked())
    525             newUsbData.m_USBControllerType = KUSBControllerType_OHCI;
    526         else if (   m_pRadioButtonUSB2
    527                  && m_pRadioButtonUSB2->isChecked())
    528             newUsbData.m_USBControllerType = KUSBControllerType_EHCI;
    529         else if (   m_pRadioButtonUSB3
    530                  && m_pRadioButtonUSB3->isChecked())
    531             newUsbData.m_USBControllerType = KUSBControllerType_XHCI;
    532     }
     481    if (m_pEditorController)
     482        newUsbData.m_enmUSBControllerType = newUsbData.m_fUSBEnabled ? m_pEditorController->value() : KUSBControllerType_Null;
    533483
    534484    /* For each filter: */
     
    566516    /* USB 2.0/3.0 Extension Pack presence test: */
    567517    if (   m_pCheckBoxUSB->isChecked()
    568         && (m_pRadioButtonUSB2->isChecked() || m_pRadioButtonUSB3->isChecked()))
     518        && (   m_pEditorController->value() == KUSBControllerType_EHCI
     519            || m_pEditorController->value() == KUSBControllerType_XHCI))
    569520    {
    570521        CExtPackManager extPackManager = uiCommon().virtualBox().GetExtensionPackManager();
     
    591542{
    592543    setTabOrder(pWidget, m_pCheckBoxUSB);
    593     setTabOrder(m_pCheckBoxUSB, m_pRadioButtonUSB1);
    594     setTabOrder(m_pRadioButtonUSB1, m_pRadioButtonUSB2);
    595     setTabOrder(m_pRadioButtonUSB2, m_pRadioButtonUSB3);
    596     setTabOrder(m_pRadioButtonUSB3, m_pTreeWidgetFilters);
     544    setTabOrder(m_pCheckBoxUSB, m_pEditorController);
     545    setTabOrder(m_pEditorController, m_pTreeWidgetFilters);
    597546}
    598547
     
    601550    m_pCheckBoxUSB->setToolTip(tr("When checked, enables the virtual USB controller of this machine."));
    602551    m_pCheckBoxUSB->setText(tr("Enable &USB Controller"));
    603     m_pRadioButtonUSB1->setToolTip(tr("When chosen, enables the virtual USB OHCI controller of "
    604                                       "this machine. The USB OHCI controller provides USB 1.0 support."));
    605     m_pRadioButtonUSB1->setText(tr("USB &1.1 (OHCI) Controller"));
    606     m_pRadioButtonUSB2->setToolTip(tr("When chosen, enables the virtual USB OHCI and EHCI "
    607                                       "controllers of this machine. Together they provide USB 2.0 support."));
    608     m_pRadioButtonUSB2->setText(tr("USB &2.0 (OHCI + EHCI) Controller"));
    609     m_pRadioButtonUSB3->setToolTip(tr("When chosen, enables the virtual USB xHCI controller of "
    610                                       "this machine. The USB xHCI controller provides USB 3.0 support."));
    611     m_pRadioButtonUSB3->setText(tr("USB &3.0 (xHCI) Controller"));
    612552    m_pLabelSeparatorFilters->setText(tr("USB Device &Filters"));
    613553    QTreeWidgetItem *pQtreewidgetitem = m_pTreeWidgetFilters->headerItem();
     
    648588    m_pCheckBoxUSB->setEnabled(isMachineOffline());
    649589    m_pWidgetUSBSettings->setEnabled(isMachineInValidMode() && m_pCheckBoxUSB->isChecked());
    650     m_pRadioButtonUSB1->setEnabled(isMachineOffline() && m_pCheckBoxUSB->isChecked());
    651     m_pRadioButtonUSB2->setEnabled(isMachineOffline() && m_pCheckBoxUSB->isChecked());
    652     m_pRadioButtonUSB3->setEnabled(isMachineOffline() && m_pCheckBoxUSB->isChecked());
     590    m_pEditorController->setEnabled(isMachineOffline() && m_pCheckBoxUSB->isChecked());
    653591}
    654592
     
    657595    /* Enable/disable USB children: */
    658596    m_pWidgetUSBSettings->setEnabled(isMachineInValidMode() && fEnabled);
    659     m_pRadioButtonUSB1->setEnabled(isMachineOffline() && fEnabled);
    660     m_pRadioButtonUSB2->setEnabled(isMachineOffline() && fEnabled);
    661     m_pRadioButtonUSB3->setEnabled(isMachineOffline() && fEnabled);
     597    m_pEditorController->setEnabled(isMachineOffline() && fEnabled);
    662598    if (fEnabled)
    663599    {
     
    923859        {
    924860            /* Prepare USB settings widget layout: */
    925             m_pLayoutUSBSettings = new QVBoxLayout(m_pWidgetUSBSettings);
    926             if (m_pLayoutUSBSettings)
    927             {
    928                 m_pLayoutUSBSettings->setContentsMargins(0, 0, 0, 0);
    929 
    930                 /* Prepare USB radio-buttons: */
    931                 prepareRadioButtons();
     861            QVBoxLayout *pLayoutUSBSettings = new QVBoxLayout(m_pWidgetUSBSettings);
     862            if (pLayoutUSBSettings)
     863            {
     864                pLayoutUSBSettings->setContentsMargins(0, 0, 0, 0);
     865
     866                /* Prepare USB controller editor: */
     867                m_pEditorController = new UIUSBControllerEditor(m_pWidgetUSBSettings);
     868                if (m_pEditorController)
     869                    pLayoutUSBSettings->addWidget(m_pEditorController);
    932870
    933871                /* Prepare separator: */
    934872                m_pLabelSeparatorFilters = new QILabelSeparator(m_pWidgetUSBSettings);
    935873                if (m_pLabelSeparatorFilters)
    936                     m_pLayoutUSBSettings->addWidget(m_pLabelSeparatorFilters);
     874                    pLayoutUSBSettings->addWidget(m_pLabelSeparatorFilters);
    937875
    938876                /* Prepare USB filters layout: */
     
    948886                    prepareFiltersToolbar();
    949887
    950                     m_pLayoutUSBSettings->addLayout(m_pLayoutFilters);
     888                    pLayoutUSBSettings->addLayout(m_pLayoutFilters);
    951889                }
    952890            }
     
    954892            pLayoutMain->addWidget(m_pWidgetUSBSettings, 1, 1, 1, 2);
    955893        }
    956     }
    957 }
    958 
    959 void UIMachineSettingsUSB::prepareRadioButtons()
    960 {
    961     /* Prepare USB1 radio-button: */
    962     m_pRadioButtonUSB1 = new QRadioButton(m_pWidgetUSBSettings);
    963     if (m_pRadioButtonUSB1)
    964     {
    965         m_pRadioButtonUSB1->setVisible(false);
    966         m_pLayoutUSBSettings->addWidget(m_pRadioButtonUSB1);
    967     }
    968     /* Prepare USB2 radio-button: */
    969     m_pRadioButtonUSB2 = new QRadioButton(m_pWidgetUSBSettings);
    970     if (m_pRadioButtonUSB2)
    971     {
    972         m_pRadioButtonUSB2->setVisible(false);
    973         m_pLayoutUSBSettings->addWidget(m_pRadioButtonUSB2);
    974     }
    975     /* Prepare USB3 radio-button: */
    976     m_pRadioButtonUSB3 = new QRadioButton(m_pWidgetUSBSettings);
    977     if (m_pRadioButtonUSB3)
    978     {
    979         m_pRadioButtonUSB3->setVisible(false);
    980         m_pLayoutUSBSettings->addWidget(m_pRadioButtonUSB3);
    981894    }
    982895}
     
    1060973{
    1061974    /* Configure validation connections: */
    1062     connect(m_pCheckBoxUSB, &QCheckBox::stateChanged, this, &UIMachineSettingsUSB::revalidate);
    1063     connect(m_pRadioButtonUSB1, &QRadioButton::toggled, this, &UIMachineSettingsUSB::revalidate);
    1064     connect(m_pRadioButtonUSB2, &QRadioButton::toggled, this, &UIMachineSettingsUSB::revalidate);
    1065     connect(m_pRadioButtonUSB3, &QRadioButton::toggled, this, &UIMachineSettingsUSB::revalidate);
     975    connect(m_pCheckBoxUSB, &QCheckBox::stateChanged,
     976            this, &UIMachineSettingsUSB::revalidate);
     977    connect(m_pEditorController, &UIUSBControllerEditor::sigValueChanged,
     978            this, &UIMachineSettingsUSB::revalidate);
    1066979
    1067980    /* Configure widget connections: */
     
    11501063            /* Create/update USB controllers: */
    11511064            if (newUsbData.m_fUSBEnabled)
    1152                 fSuccess = createUSBControllers(newUsbData.m_USBControllerType);
     1065                fSuccess = createUSBControllers(newUsbData.m_enmUSBControllerType);
    11531066        }
    11541067
  • trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsUSB.h

    r94333 r95245  
    2828class QCheckBox;
    2929class QHBoxLayout;
    30 class QRadioButton;
    31 class QVBoxLayout;
    3230class QTreeWidgetItem;
    3331class QILabelSeparator;
     32class QIToolBar;
    3433class QITreeWidget;
    3534class VBoxUSBMenu;
    36 class QIToolBar;
     35class UIUSBControllerEditor;
    3736struct UIDataSettingsMachineUSB;
    3837struct UIDataSettingsMachineUSBFilter;
     
    122121    /** Prepares widgets. */
    123122    void prepareWidgets();
    124     /** Prepares radio-buttons. */
    125     void prepareRadioButtons();
    126123    /** Prepares filters tree-widget. */
    127124    void prepareFiltersTreeWidget();
     
    156153     * @{ */
    157154        /** Holds the USB check-box instance. */
    158         QCheckBox        *m_pCheckBoxUSB;
     155        QCheckBox             *m_pCheckBoxUSB;
    159156        /** Holds the USB settings widget instance. */
    160         QWidget          *m_pWidgetUSBSettings;
    161         /** Holds the USB settings widget layout instance. */
    162         QVBoxLayout      *m_pLayoutUSBSettings;
    163         /** Holds the USB1 radio-button instance. */
    164         QRadioButton     *m_pRadioButtonUSB1;
    165         /** Holds the USB2 radio-button instance. */
    166         QRadioButton     *m_pRadioButtonUSB2;
    167         /** Holds the USB3 radio-button instance. */
    168         QRadioButton     *m_pRadioButtonUSB3;
     157        QWidget               *m_pWidgetUSBSettings;
     158        /** Holds the USB controller editor instance. */
     159        UIUSBControllerEditor *m_pEditorController;
    169160        /** Holds the USB widget separator instance. */
    170         QILabelSeparator *m_pLabelSeparatorFilters;
     161        QILabelSeparator      *m_pLabelSeparatorFilters;
    171162        /** Holds the USB filters layout instance. */
    172         QHBoxLayout      *m_pLayoutFilters;
     163        QHBoxLayout           *m_pLayoutFilters;
    173164        /** Holds the USB filters tree-widget instance. */
    174         QITreeWidget     *m_pTreeWidgetFilters;
     165        QITreeWidget          *m_pTreeWidgetFilters;
    175166        /** Holds the USB filters toolbar instance. */
    176         QIToolBar        *m_pToolbarFilters;
     167        QIToolBar             *m_pToolbarFilters;
    177168        /** Holds the New action instance. */
    178         QAction          *m_pActionNew;
     169        QAction               *m_pActionNew;
    179170        /** Holds the Add action instance. */
    180         QAction          *m_pActionAdd;
     171        QAction               *m_pActionAdd;
    181172        /** Holds the Edit action instance. */
    182         QAction          *m_pActionEdit;
     173        QAction               *m_pActionEdit;
    183174        /** Holds the Remove action instance. */
    184         QAction          *m_pActionRemove;
     175        QAction               *m_pActionRemove;
    185176        /** Holds the Move Up action instance. */
    186         QAction          *m_pActionMoveUp;
     177        QAction               *m_pActionMoveUp;
    187178        /** Holds the Move Down action instance. */
    188         QAction          *m_pActionMoveDown;
     179        QAction               *m_pActionMoveDown;
    189180        /** Holds the USB devices menu instance. */
    190         VBoxUSBMenu      *m_pMenuUSBDevices;
     181        VBoxUSBMenu           *m_pMenuUSBDevices;
    191182    /** @} */
    192183};
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