VirtualBox

Changeset 4324 in vbox


Ignore:
Timestamp:
Aug 23, 2007 7:01:31 PM (17 years ago)
Author:
vboxsync
Message:

Main: Improved serial port API (mostly spelling);
FE/Qt: Improved serial port UI (spelling and duplicate handling).

Location:
trunk/src/VBox
Files:
2 added
14 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManage.cpp

    r4288 r4324  
    10581058            {
    10591059                ULONG uIRQ, uIOBase;
    1060                 SerialHostMode_T HostMode;
     1060                PortMode_T HostMode;
    10611061                Bstr path;
    10621062                BOOL fServer;
     
    10721072                {
    10731073                    default:
    1074                     case SerialHostMode_Disconnected:
     1074                    case PortMode_DisconnectedPort:
    10751075                        RTPrintf(", disconnected\n");
    10761076                        break;
    1077                     case SerialHostMode_HostPipe:
     1077                    case PortMode_HostPipePort:
    10781078                        RTPrintf(", attached to pipe (%s) '%lS'\n",
    10791079                                fServer ? "server" : "client", path.raw());
    10801080                        break;
    1081                     case SerialHostMode_HostDevice:
     1081                    case PortMode_HostDevicePort:
    10821082                        RTPrintf(", attached to device '%lS'\n", path.raw());
    10831083                        break;
     
    41124112                if (strcmp(uarts_mode[n], "disconnected") == 0)
    41134113                {
    4114                     CHECK_ERROR_RET(uart, COMSETTER(HostMode) (SerialHostMode_Disconnected), 1);
     4114                    CHECK_ERROR_RET(uart, COMSETTER(HostMode) (PortMode_DisconnectedPort), 1);
    41154115                }
    41164116                else
     
    41184118                    if (strcmp(uarts_mode[n], "server") == 0)
    41194119                    {
    4120                         CHECK_ERROR_RET(uart, COMSETTER(HostMode) (SerialHostMode_HostPipe), 1);
     4120                        CHECK_ERROR_RET(uart, COMSETTER(HostMode) (PortMode_HostPipePort), 1);
    41214121                        CHECK_ERROR_RET(uart, COMSETTER(Server) (TRUE), 1);
    41224122                    }
    41234123                    else if (strcmp(uarts_mode[n], "client") == 0)
    41244124                    {
    4125                         CHECK_ERROR_RET(uart, COMSETTER(HostMode) (SerialHostMode_HostPipe), 1);
     4125                        CHECK_ERROR_RET(uart, COMSETTER(HostMode) (PortMode_HostPipePort), 1);
    41264126                        CHECK_ERROR_RET(uart, COMSETTER(Server) (FALSE), 1);
    41274127                    }
    41284128                    else
    41294129                    {
    4130                         CHECK_ERROR_RET(uart, COMSETTER(HostMode) (SerialHostMode_HostDevice), 1);
     4130                        CHECK_ERROR_RET(uart, COMSETTER(HostMode) (PortMode_HostDevicePort), 1);
    41314131                    }
    41324132                    CHECK_ERROR_RET(uart, COMSETTER(Path) (Bstr(uarts_path[n])), 1);
  • trunk/src/VBox/Frontends/VirtualBox/VBoxUI.pro

    r4071 r4324  
    2222FORMS   = ui/VBoxDiskImageManagerDlg.ui \
    2323        ui/VBoxVMNetworkSettings.ui \
     24        ui/VBoxVMSerialPortSettings.ui \
    2425        ui/VBoxUSBFilterSettings.ui \
    2526        ui/VBoxSharedFoldersSettings.ui \
  • trunk/src/VBox/Frontends/VirtualBox/include/VBoxGlobal.h

    r4294 r4324  
    226226    }
    227227
    228     QString toString (CEnums::SerialHostMode t) const
    229     {
    230         AssertMsg (!serialHostModeTypes [t].isNull(), ("No text for %d", t));
    231         return serialHostModeTypes [t];
     228    QString toString (CEnums::PortMode t) const
     229    {
     230        AssertMsg (!portModeTypes [t].isNull(), ("No text for %d", t));
     231        return portModeTypes [t];
    232232    }
    233233
     
    260260    }
    261261
    262     CEnums::SerialHostMode toSerialHostMode (const QString &s) const
     262    CEnums::PortMode toPortMode (const QString &s) const
    263263    {
    264264        QStringVector::const_iterator it =
    265             qFind (serialHostModeTypes.begin(), serialHostModeTypes.end(), s);
    266         AssertMsg (it != serialHostModeTypes.end(), ("No value for {%s}", s.latin1()));
    267         return CEnums::SerialHostMode (it - serialHostModeTypes.begin());
     265            qFind (portModeTypes.begin(), portModeTypes.end(), s);
     266        AssertMsg (it != portModeTypes.end(), ("No value for {%s}", s.latin1()));
     267        return CEnums::PortMode (it - portModeTypes.begin());
    268268    }
    269269
     
    549549    QStringVector diskStorageTypes;
    550550    QStringVector vrdpAuthTypes;
    551     QStringVector serialHostModeTypes;
     551    QStringVector portModeTypes;
    552552    QStringVector usbFilterActionTypes;
    553553    QStringVector diskControllerDevices;
  • trunk/src/VBox/Frontends/VirtualBox/src/VBoxGlobal.cpp

    r4297 r4324  
    576576    , diskStorageTypes (CEnums::HardDiskStorageType_COUNT)
    577577    , vrdpAuthTypes (CEnums::VRDPAuthType_COUNT)
    578     , serialHostModeTypes (CEnums::SerialHostMode_COUNT)
     578    , portModeTypes (CEnums::PortMode_COUNT)
    579579    , usbFilterActionTypes (CEnums::USBDeviceFilterAction_COUNT)
    580580    , diskControllerDevices (3)
     
    18641864        tr ("Guest", "VRDPAuthType");
    18651865
    1866     serialHostModeTypes [CEnums::Disconnected] =
    1867         tr ("Disconnected", "SerialHostMode");
    1868     serialHostModeTypes [CEnums::HostPipe] =
    1869         tr ("Host Pipe", "SerialHostMode");
    1870     serialHostModeTypes [CEnums::HostDevice] =
    1871         tr ("Host Device", "SerialHostMode");
     1866    portModeTypes [CEnums::DisconnectedPort] =
     1867        tr ("Disconnected", "PortMode");
     1868    portModeTypes [CEnums::HostPipePort] =
     1869        tr ("Host Pipe", "PortMode");
     1870    portModeTypes [CEnums::HostDevicePort] =
     1871        tr ("Host Device", "PortMode");
    18721872
    18731873    usbFilterActionTypes [CEnums::USBDeviceFilterIgnore] =
  • trunk/src/VBox/Frontends/VirtualBox/ui/VBoxVMNetworkSettings.ui.h

    r4071 r4324  
    2626*****************************************************************************/
    2727
    28 /**
    29  *  VBoxVMNetworkSettings class to use as network interface setup page.
    30  */
    3128void VBoxVMNetworkSettings::init()
    3229{
  • trunk/src/VBox/Frontends/VirtualBox/ui/VBoxVMSettingsDlg.ui

    r4294 r4324  
    270270        <item>
    271271            <property name="text">
    272                 <string> Serial Port </string>
     272                <string> Serial Ports </string>
    273273            </property>
    274274            <property name="text">
     
    276276            </property>
    277277            <property name="text">
    278                 <string>#serial</string>
     278                <string>#serialPorts</string>
    279279            </property>
    280280            <property name="pixmap">
    281                 <pixmap>refresh_16px.png</pixmap>
     281                <pixmap></pixmap>
    282282            </property>
    283283            <property name="pixmap">
     
    27122712                    <number>9</number>
    27132713                </attribute>
     2714                <vbox>
     2715                    <property name="name">
     2716                        <cstring>unnamed</cstring>
     2717                    </property>
     2718                    <property name="margin">
     2719                        <number>0</number>
     2720                    </property>
     2721                    <widget class="QTabWidget">
     2722                        <property name="name">
     2723                            <cstring>tbwSerialPorts</cstring>
     2724                        </property>
     2725                        <property name="sizePolicy">
     2726                            <sizepolicy>
     2727                                <hsizetype>1</hsizetype>
     2728                                <vsizetype>1</vsizetype>
     2729                                <horstretch>0</horstretch>
     2730                                <verstretch>0</verstretch>
     2731                            </sizepolicy>
     2732                        </property>
     2733                    </widget>
     2734                </vbox>
    27142735            </widget>
    27152736        </widget>
     
    30553076    <include location="local" impldecl="in declaration">VBoxGlobal.h</include>
    30563077    <include location="local" impldecl="in implementation">VBoxVMNetworkSettings.h</include>
     3078    <include location="local" impldecl="in implementation">VBoxVMSerialPortSettings.h</include>
    30573079    <include location="local" impldecl="in implementation">VBoxUSBFilterSettings.h</include>
    30583080    <include location="local" impldecl="in implementation">VBoxSharedFoldersSettings.h</include>
     
    30663088    <forward>class VBoxUSBMenu</forward>
    30673089    <forward>class VBoxSharedFoldersSettings</forward>
    3068     <forward>class VBoxVMSerialPortSettings</forward>
    30693090    <forward>class QIRichLabel</forward>
    30703091    <forward>class BootItemsList</forward>
     
    30923113    <variable access="private">bool mUSBFilterListModified;</variable>
    30933114    <variable access="private">VBoxSharedFoldersSettings *mSharedFolders;</variable>
    3094     <variable access="private">VBoxVMSerialPortSettings *mSerialPorts;</variable>
    30953115    <variable access="private">QString warningString;</variable>
    30963116    <variable access="private">VBoxMediaComboBox *cbHDA;</variable>
     
    31163136    <slot>showImageManagerISOFloppy()</slot>
    31173137    <slot>showVDImageManager( QUuid *id, VBoxMediaComboBox *le, QLabel *tx = NULL )</slot>
    3118     <slot>addNetworkAdapter( const CNetworkAdapter &amp; adapter )</slot>
     3138    <slot>addNetworkAdapter( const CNetworkAdapter &amp; )</slot>
     3139    <slot>addSerialPort( const CSerialPort &amp; )</slot>
    31193140    <slot>slRAM_valueChanged( int val )</slot>
    31203141    <slot>leRAM_textChanged( const QString &amp; text )</slot>
  • trunk/src/VBox/Frontends/VirtualBox/ui/VBoxVMSettingsDlg.ui.h

    r4300 r4324  
    470470
    471471
    472 class VBoxVMSerialPortSettings : public QWidget
    473 {
    474     Q_OBJECT
    475 
    476 public:
    477 
    478     VBoxVMSerialPortSettings (QWidget *aParent)
    479         : QWidget (aParent, "VBoxVMSerialPortSettings")
    480         , mTabWidget (0)
    481     {
    482         /* Basic initialization */
    483         mTabWidget = new QTabWidget (this, "mTabWidget");
    484         mTabWidget->setMargin (11);
    485         mTabWidget->setSizePolicy (QSizePolicy::Expanding, QSizePolicy::Preferred);
    486         QVBoxLayout *mainLayout = new QVBoxLayout (this);
    487         mainLayout->addWidget (mTabWidget);
    488         mainLayout->addItem (new QSpacerItem (0, 0, QSizePolicy::Preferred,
    489                                                     QSizePolicy::Expanding));
    490 
    491         /* Create a list of known COM interfaces configurations */
    492         mConfigList << PortConfig (0x3f8, 4, 1);
    493         mConfigList << PortConfig (0x2f8, 3, 2);
    494         mConfigList << PortConfig (0x3e8, 4, 3);
    495         mConfigList << PortConfig (0x2e8, 3, 4);
    496     }
    497 
    498     void getFromMachine (const CMachine &aMachine)
    499     {
    500         mMachine = aMachine;
    501 
    502         ulong count = vboxGlobal().virtualBox().GetSystemProperties().GetSerialPortCount();
    503         for (ulong slot = 0; slot < count; ++ slot)
    504         {
    505             CSerialPort port = mMachine.GetSerialPort (slot);
    506             addPage (port, slot);
    507         }
    508 
    509         /* Revalidate all pages */
    510         portConfigUpdate();
    511     }
    512 
    513     void putBackToMachine()
    514     {
    515         for (int slot = 0; slot < mTabWidget->count(); ++ slot)
    516         {
    517             CSerialPort port = mMachine.GetSerialPort (slot);
    518 
    519             port.SetEnabled (static_cast<QGroupBox*> (mTabWidget->page (slot))->isChecked());
    520 
    521             PortConfig config = parsePortConfig (mPortList.at (slot)->currentText());
    522             port.SetIOBase (config.io);
    523             port.SetIRQ (config.irq);
    524 
    525             port.SetHostMode (vboxGlobal().toSerialHostMode (mModeList.at (slot)->currentText()));
    526 
    527             QCheckBox *chbIsServer = mIsServerList.at (slot);
    528             port.SetServer (chbIsServer->isEnabled() ?
    529                             chbIsServer->isChecked() : false);
    530 
    531             QLineEdit *lePath = mPathList.at (slot);
    532             port.SetPath (lePath->isEnabled() ?
    533                           lePath->text() : QString::null);
    534         }
    535     }
    536 
    537 private slots:
    538 
    539     void portConfigUpdate()
    540     {
    541         for (int index = 0; index < mTabWidget->count(); ++ index)
    542         {
    543             QComboBox *cbPortConfig = mPortList.at (index);
    544             QString oldText = cbPortConfig->currentText();
    545             QStringList newList = portConfigList (index);
    546             cbPortConfig->clear();
    547             cbPortConfig->insertStringList (newList);
    548             cbPortConfig->setCurrentText (oldText);
    549         }
    550     }
    551 
    552     void hostModeUpdate (int aIndex = -1)
    553     {
    554         if (aIndex == -1)
    555             aIndex = mTabWidget->currentPageIndex();
    556         QCheckBox *chbIsServer = mIsServerList.at (aIndex);
    557         QLineEdit *lePath = mPathList.at (aIndex);
    558         CEnums::SerialHostMode mode = vboxGlobal().toSerialHostMode (
    559             mModeList.at (aIndex)->currentText());
    560         chbIsServer->setEnabled (mode == CEnums::HostPipe);
    561         lePath->setEnabled (mode != CEnums::Disconnected);
    562     }
    563 
    564 private:
    565 
    566     struct PortConfig
    567     {
    568         PortConfig ()
    569             : io (0), irq (0), number (0) {}
    570         PortConfig (ulong aIO, ulong aIRQ, ulong aNumber)
    571             : io (aIO), irq (aIRQ), number (aNumber) {}
    572 
    573         bool isNull() { return !io && !irq; }
    574 
    575         bool operator== (const PortConfig &aCfg) const
    576         {
    577             return io  == aCfg.io && irq == aCfg.irq;
    578         }
    579 
    580         static QString format()
    581         {
    582             return QString ("I/O Port = 0x%1, IRQ = %2");
    583         }
    584         QString toString()
    585         {
    586             QString info = format().arg (QString::number (io, 16)).arg (irq);
    587             if (number)
    588                 info += QString (" (COM%1)").arg (number);
    589             return info;
    590         }
    591 
    592         ulong io;
    593         ulong irq;
    594         ulong number;
    595     };
    596     typedef QValueList<PortConfig> PortConfigs;
    597 
    598     void addPage (const CSerialPort &aPort, ulong aSlot)
    599     {
    600         /* Create Serial Port page */
    601         QGroupBox *gBox = new QGroupBox (tr ("&Enable Serial Port"));
    602         gBox->setColumnLayout (0, Qt::Vertical);
    603         gBox->layout()->setMargin (11);
    604         gBox->layout()->setSpacing (6);
    605         gBox->setCheckable (true);
    606 
    607         QLabel *lbPort = new QLabel (tr ("Serial Port &Number"), gBox);
    608         QComboBox *cbPort = new QComboBox (gBox);
    609         lbPort->setBuddy (cbPort);
    610         connect (cbPort, SIGNAL (activated (int)),
    611                  this , SLOT (portConfigUpdate()));
    612 
    613         QLabel *lbType = new QLabel (tr ("Serial Port Host &Mode"), gBox);
    614         QComboBox *cbMode = new QComboBox (gBox);
    615         lbType->setBuddy (cbMode);
    616         cbMode->insertItem (vboxGlobal().toString (CEnums::Disconnected));
    617         cbMode->insertItem (vboxGlobal().toString (CEnums::HostPipe));
    618         cbMode->insertItem (vboxGlobal().toString (CEnums::HostDevice));
    619         connect (cbMode, SIGNAL (activated (int)),
    620                  this , SLOT (hostModeUpdate()));
    621 
    622         QCheckBox *chbIsServer = new QCheckBox (tr ("Create Pipe &Automatically"), gBox);
    623 
    624         QLabel *lbPath = new QLabel (tr ("Serial Port &Path"), gBox);
    625         QLineEdit *lePath = new QLineEdit (gBox);
    626         lbPath->setBuddy (lePath);
    627 
    628         QGridLayout *pageLayout = new QGridLayout (gBox->layout());
    629         pageLayout->setAlignment (Qt::AlignTop);
    630         pageLayout->addWidget (lbPort, 0, 0);
    631         pageLayout->addMultiCellWidget (cbPort, 0, 0, 1, 2);
    632         pageLayout->addWidget (lbType, 1, 0);
    633         pageLayout->addWidget (cbMode, 1, 1);
    634         pageLayout->addWidget (chbIsServer, 1, 2);
    635         pageLayout->addWidget (lbPath, 2, 0);
    636         pageLayout->addMultiCellWidget (lePath, 2, 2, 1, 2);
    637 
    638         /* Load machine information */
    639         gBox->setChecked (aPort.GetEnabled());
    640 
    641         PortConfig config (aPort.GetIOBase(), aPort.GetIRQ(), 0);
    642         if (!mConfigList.contains (config))
    643             mConfigList << config;
    644         cbPort->insertStringList (portConfigList (mTabWidget->count()));
    645         for (int id = 0; id < cbPort->count(); ++ id)
    646             if (parsePortConfig (cbPort->text (id)) == config)
    647                 cbPort->setCurrentItem (id);
    648 
    649         cbMode->setCurrentText (vboxGlobal().toString (aPort.GetHostMode()));
    650 
    651         chbIsServer->setChecked (aPort.GetServer());
    652 
    653         lePath->setText (aPort.GetPath());
    654 
    655         /* Append newly createrd widget */
    656         mTabWidget->addTab (gBox, tr ("Port &%1").arg (aSlot));
    657         mPortList.append (cbPort);
    658         mModeList.append (cbMode);
    659         mIsServerList.append (chbIsServer);
    660         mPathList.append (lePath);
    661 
    662         /* Revalidate page */
    663         hostModeUpdate (aSlot);
    664     }
    665 
    666     QStringList portConfigList (int aIndex)
    667     {
    668         QStringList list;
    669         PortConfigs config = portConfigs (aIndex);
    670         for (ulong id = 0; id < config.count(); ++ id)
    671             list << config [id].toString();
    672         return list;
    673     }
    674 
    675     PortConfigs portConfigs (int aIndex)
    676     {
    677         PortConfigs config (mConfigList);
    678         if (aIndex == mTabWidget->count())
    679             return config;
    680 
    681         for (int index = 0; index < mTabWidget->count(); ++ index)
    682         {
    683             if (index != aIndex)
    684             {
    685                 PortConfig used = parsePortConfig (mPortList.at (index)->currentText());
    686                 Assert (!used.isNull());
    687                 config.remove (used);
    688             }
    689         }
    690         return config;
    691     }
    692 
    693     PortConfig parsePortConfig (const QString &aString)
    694     {
    695         QRegExp regExp (PortConfig::format().arg ("([0-9a-f]+)").arg ("(\\d+)"));
    696         if (regExp.search (aString) != -1)
    697             return PortConfig (regExp.cap (1).toULong(0, 16),
    698                                regExp.cap (2).toULong(), 0);
    699         Assert (0);
    700         return PortConfig();
    701     }
    702 
    703     QTabWidget *mTabWidget;
    704     PortConfigs mConfigList;
    705 
    706     QPtrList<QComboBox> mPortList;
    707     QPtrList<QComboBox> mModeList;
    708     QPtrList<QCheckBox> mIsServerList;
    709     QPtrList<QLineEdit> mPathList;
    710 
    711     CMachine mMachine;
    712 };
    713 
    714 
    715472void VBoxVMSettingsDlg::init()
    716473{
     
    957714    QToolTip::add (pbHostRemove, tr ("Remove"));
    958715
     716    /* Serial Port Page */
     717
    959718    /* USB Page */
    960719
     
    1021780    mSharedFolders->setDialogType (VBoxSharedFoldersSettings::MachineType);
    1022781    pageFoldersLayout->addWidget (mSharedFolders);
    1023 
    1024     /* Serial Port Page */
    1025 
    1026     QVBoxLayout* pageSerialLayout = new QVBoxLayout (pageSerial, 0, 0);
    1027     mSerialPorts = new VBoxVMSerialPortSettings (pageSerial);
    1028     pageSerialLayout->addWidget (mSerialPorts);
    1029782
    1030783    /*
     
    15491302    Q_UNUSED (wval);
    15501303
     1304    /* reset the warning text; interested parties will set it during
     1305     * validation */
     1306    setWarning (QString::null);
     1307
    15511308    /* detect the overall validity */
    15521309    bool newValid = true;
     
    15671324        valid = newValid;
    15681325        buttonOk->setEnabled (valid);
    1569         if (valid)
    1570             setWarning(0);
    1571         warningLabel->setHidden(valid);
    1572         warningPixmap->setHidden(valid);
    1573     }
    1574 }
    1575 
    1576 
    1577 void VBoxVMSettingsDlg::revalidate( QIWidgetValidator *wval )
     1326        warningLabel->setHidden (valid);
     1327        warningPixmap->setHidden (valid);
     1328    }
     1329}
     1330
     1331
     1332void VBoxVMSettingsDlg::revalidate (QIWidgetValidator *wval)
    15781333{
    15791334    /* do individual validations for pages */
     
    15811336    bool valid = wval->isOtherValid();
    15821337
     1338    QString warningText;
     1339    QString pageTitle = ::path (listView->currentItem());
     1340
    15831341    if (pg == pageHDD)
    15841342    {
     
    15931351            {
    15941352                valid = false;
    1595                 setWarning (tr ("Primary Master hard disk is not selected."));
     1353                warningText = tr ("Primary Master hard disk is not selected");
    15961354            }
    15971355            else uuids << uuidHDA;
     
    16031361            {
    16041362                valid = false;
    1605                 setWarning (tr ("Primary Slave hard disk is not selected."));
     1363                warningText = tr ("Primary Slave hard disk is not selected");
    16061364            }
    16071365            else
     
    16161374                    uuids << uuidHDB;
    16171375                else
    1618                     setWarning (tr ("Primary Slave hard disk is already attached "
    1619                                     "to a different slot."));
     1376                    warningText = tr ("Primary Slave hard disk is already attached "
     1377                                      "to a different slot");
    16201378            }
    16211379        }
     
    16261384            {
    16271385                valid = false;
    1628                 setWarning (tr ("Secondary Slave hard disk is not selected."));
     1386                warningText = tr ("Secondary Slave hard disk is not selected");
    16291387            }
    16301388            else
     
    16391397                    uuids << uuidHDB;
    16401398                else
    1641                     setWarning (tr ("Secondary Slave hard disk is already attached "
    1642                                     "to a different slot."));
     1399                    warningText = tr ("Secondary Slave hard disk is already attached "
     1400                                      "to a different slot");
    16431401            }
    16441402        }
     
    16671425
    16681426        if (!valid)
    1669             setWarning (tr ("CD/DVD image file is not selected."));
     1427            warningText = tr ("CD/DVD image file is not selected");
    16701428    }
    16711429    else if (pg == pageFloppy)
     
    16841442
    16851443        if (!valid)
    1686             setWarning (tr ("Floppy image file is not selected."));
     1444            warningText = tr ("Floppy image file is not selected");
    16871445    }
    16881446    else if (pg == pageNetwork)
    16891447    {
     1448        QWidget *tab = NULL;
     1449        for (int index = 0; index < tbwNetwork->count(); ++ index)
     1450        {
     1451            QWidget *tab = tbwNetwork->page (index);
     1452            VBoxVMNetworkSettings *page =
     1453                static_cast <VBoxVMNetworkSettings *> (tab);
     1454            valid = page->isPageValid (mInterfaceList);
     1455            if (!valid) break;
     1456        }
     1457        if (!valid)
     1458        {
     1459            Assert (tab);
     1460            warningText = tr ("Incorrect host network interface is selected");
     1461            pageTitle += ": " + tbwNetwork->tabLabel (tab);
     1462        }
     1463    }
     1464    else if (pg == pageSerial)
     1465    {
     1466        QValueList <QString> ports;
     1467        QValueList <QString> paths;
     1468
    16901469        int index = 0;
    1691         for (; index < tbwNetwork->count(); ++index)
    1692         {
    1693             QWidget *tab = tbwNetwork->page (index);
    1694             VBoxVMNetworkSettings *set = static_cast<VBoxVMNetworkSettings*> (tab);
    1695             valid = set->isPageValid (mInterfaceList);
    1696             if (!valid) break;
    1697         }
    1698         if (!valid)
    1699             setWarning (tr ("Incorrect host network interface is selected "
    1700                             "for Adapter %1.").arg (index));
     1470        for (; index < tbwSerialPorts->count(); ++ index)
     1471        {
     1472            QWidget *tab = tbwSerialPorts->page (index);
     1473            VBoxVMSerialPortSettings *page =
     1474                static_cast <VBoxVMSerialPortSettings *> (tab);
     1475
     1476            /* skip disabled ports */
     1477            if (!page->mSerialPortBox->isChecked())
     1478                continue;
     1479            /* check the predefined port number unicity */
     1480            if (!page->isUserDefined())
     1481            {
     1482                QString port = page->mPortNumCombo->currentText();
     1483                valid = !ports.contains (port);
     1484                if (!valid)
     1485                {
     1486                    warningText = tr ("Duplicate port number is selected ");
     1487                    pageTitle += ": " + tbwSerialPorts->tabLabel (tab);
     1488                    break;
     1489                }
     1490                ports << port;
     1491            }
     1492            /* check the port path unicity */
     1493            CEnums::PortMode mode =
     1494                vboxGlobal().toPortMode (page->mHostModeCombo->currentText());
     1495            if (mode != CEnums::DisconnectedPort)
     1496            {
     1497                QString path = page->mPortPathLine->text();
     1498                valid = !paths.contains (path);
     1499                if (!valid)
     1500                {
     1501                    warningText = tr ("Duplicate port path is entered ");
     1502                    pageTitle += ": " + tbwSerialPorts->tabLabel (tab);
     1503                    break;
     1504                }
     1505                paths << path;
     1506            }
     1507        }
    17011508    }
    17021509    else if (pg == pageVRDP)
     
    17071514                    (leVRDPPort->text().isEmpty() || leVRDPTimeout->text().isEmpty()));
    17081515            if (!valid && leVRDPPort->text().isEmpty())
    1709                 setWarning (tr ("VRDP Port is not set."));
     1516                warningText = tr ("VRDP Port is not set ");
    17101517            if (!valid && leVRDPTimeout->text().isEmpty())
    1711                 setWarning (tr ("VRDP Timeout is not set."));
     1518                warningText = tr ("VRDP Timeout is not set ");
    17121519        }
    17131520        else
    17141521            valid = true;
    17151522    }
     1523
     1524    if (!valid)
     1525        setWarning (tr ("%1 on the <b>%2</b> page.")
     1526                    .arg (warningText, pageTitle));
    17161527
    17171528    wval->setOtherValid (valid);
     
    19801791    }
    19811792
     1793    /* serial ports */
     1794    {
     1795        ulong count = vbox.GetSystemProperties().GetSerialPortCount();
     1796        for (ulong slot = 0; slot < count; ++ slot)
     1797        {
     1798            CSerialPort port = machine.GetSerialPort (slot);
     1799            addSerialPort (port);
     1800        }
     1801    }
     1802
    19821803    /* USB */
    19831804    {
     
    20491870    {
    20501871        mSharedFolders->getFromMachine (machine);
    2051     }
    2052 
    2053     /* serial ports */
    2054     {
    2055         mSerialPorts->getFromMachine (machine);
    20561872    }
    20571873
     
    22542070    }
    22552071
     2072    /* serial ports */
     2073    {
     2074        for (int index = 0; index < tbwSerialPorts->count(); index++)
     2075        {
     2076            VBoxVMSerialPortSettings *page =
     2077                (VBoxVMSerialPortSettings *) tbwSerialPorts->page (index);
     2078            Assert (page);
     2079            page->putBackToPort();
     2080        }
     2081    }
     2082
    22562083    /* usb */
    22572084    {
     
    23162143    }
    23172144
    2318     /* serial ports */
    2319     {
    2320         mSerialPorts->putBackToMachine();
    2321     }
    2322 
    23232145    return COMResult();
    23242146}
     
    24002222
    24012223#endif
     2224}
     2225
     2226void VBoxVMSettingsDlg::addSerialPort (const CSerialPort &aPort)
     2227{
     2228    VBoxVMSerialPortSettings *page = new VBoxVMSerialPortSettings();
     2229    page->getFromPort (aPort);
     2230    tbwSerialPorts->addTab (page, QString (tr ("Port %1", "serial ports"))
     2231                                               .arg (aPort.GetSlot()));
     2232
     2233    /* fix the tab order so that main dialog's buttons are always the last */
     2234    setTabOrder (page->mPortPathLine, buttonHelp);
     2235    setTabOrder (buttonHelp, buttonOk);
     2236    setTabOrder (buttonOk, buttonCancel);
     2237
     2238    /* setup validation */
     2239    QIWidgetValidator *wval = new QIWidgetValidator (pageSerial, this);
     2240    connect (page->mSerialPortBox, SIGNAL (toggled (bool)),
     2241             wval, SLOT (revalidate()));
     2242    connect (page->mIRQLine, SIGNAL (textChanged (const QString &)),
     2243             wval, SLOT (revalidate()));
     2244    connect (page->mIOPortLine, SIGNAL (textChanged (const QString &)),
     2245             wval, SLOT (revalidate()));
     2246    connect (page->mHostModeCombo, SIGNAL (activated (const QString &)),
     2247             wval, SLOT (revalidate()));
     2248    connect (wval, SIGNAL (validityChanged (const QIWidgetValidator *)),
     2249             this, SLOT (enableOk (const QIWidgetValidator *)));
     2250    connect (wval, SIGNAL (isValidRequested (QIWidgetValidator *)),
     2251             this, SLOT (revalidate (QIWidgetValidator *)));
     2252
     2253    wval->revalidate();
    24022254}
    24032255
  • trunk/src/VBox/Main/ConsoleImpl.cpp

    r4322 r4324  
    59255925
    59265926        ULONG uIRQ, uIOBase;
    5927         SerialHostMode_T HostMode;
     5927        PortMode_T HostMode;
    59285928        Bstr  path;
    59295929        BOOL  fServer;
     
    59355935        rc = CFGMR3InsertInteger(pCfg,   "IRQ", uIRQ);                              RC_CHECK();
    59365936        rc = CFGMR3InsertInteger(pCfg,   "IOBase", uIOBase);                        RC_CHECK();
    5937         if (HostMode != SerialHostMode_Disconnected)
     5937        if (HostMode != PortMode_DisconnectedPort)
    59385938        {
    59395939            rc = CFGMR3InsertNode(pInst,     "LUN#0", &pLunL0);                     RC_CHECK();
    5940             if (HostMode == SerialHostMode_HostPipe)
     5940            if (HostMode == PortMode_HostPipePort)
    59415941            {
    59425942                rc = CFGMR3InsertString(pLunL0,  "Driver", "Char");                 RC_CHECK();
     
    59475947                rc = CFGMR3InsertInteger(pLunL2, "IsServer", fServer);              RC_CHECK();
    59485948            }
    5949             else if (HostMode == SerialHostMode_HostDevice)
     5949            else if (HostMode == PortMode_HostDevicePort)
    59505950            {
    59515951                rc = CFGMR3InsertString(pLunL0,  "Driver", "Host Serial");          RC_CHECK();
     
    59805980        hrc = parallelPort->COMGETTER(IRQ)(&uIRQ);                                  H();
    59815981        hrc = parallelPort->COMGETTER(IOBase)(&uIOBase);                            H();
    5982         hrc = parallelPort->COMGETTER(DevicePath)(DevicePath.asOutParam());         H();
     5982        hrc = parallelPort->COMGETTER(Path)(DevicePath.asOutParam());               H();
    59835983        rc = CFGMR3InsertInteger(pCfg,   "IRQ", uIRQ);                              RC_CHECK();
    59845984        rc = CFGMR3InsertInteger(pCfg,   "IOBase", uIOBase);                        RC_CHECK();
  • trunk/src/VBox/Main/ParallelPortImpl.cpp

    r4071 r4324  
    262262    uint32_t uIRQ;
    263263    CFGLDRQueryUInt32 (portNode, "IRQ", &uIRQ);
    264     /* device path (required) */
    265     Bstr DevicePath;
    266     CFGLDRQueryBSTR   (portNode, "DevicePath", DevicePath.asOutParam());
     264    /* device path */
     265    Bstr path;
     266    CFGLDRQueryBSTR   (portNode, "path", path.asOutParam());
    267267
    268268    mData->mEnabled = fEnabled;
     
    270270    mData->mIOBase  = uIOBase;
    271271    mData->mIRQ     = uIRQ;
    272     mData->mDevicePath = DevicePath;
     272    mData->mPath    = path;
    273273
    274274    return S_OK;
     
    292292    CFGLDRSetUInt32 (portNode, "IOBase",  mData->mIOBase);
    293293    CFGLDRSetUInt32 (portNode, "IRQ",     mData->mIRQ);
    294     CFGLDRSetBSTR   (portNode, "DevicePath", mData->mDevicePath);
     294    CFGLDRSetBSTR   (portNode, "path",    mData->mPath);
    295295
    296296    return S_OK;
     
    451451}
    452452
    453 STDMETHODIMP ParallelPort::COMGETTER(DevicePath) (BSTR *aDevicePath)
    454 {
    455     if (!aDevicePath)
     453STDMETHODIMP ParallelPort::COMGETTER(Path) (BSTR *aPath)
     454{
     455    if (!aPath)
    456456        return E_POINTER;
    457457
     
    461461    AutoReaderLock alock (this);
    462462
    463     mData->mDevicePath.cloneTo (aDevicePath);
    464 
    465     return S_OK;
    466 }
    467 
    468 STDMETHODIMP ParallelPort::COMSETTER(DevicePath) (INPTR BSTR aDevicePath)
    469 {
    470     if (!aDevicePath || *aDevicePath == 0)
     463    mData->mPath.cloneTo (aPath);
     464
     465    return S_OK;
     466}
     467
     468STDMETHODIMP ParallelPort::COMSETTER(Path) (INPTR BSTR aPath)
     469{
     470    if (!aPath || *aPath == 0)
    471471        return E_INVALIDARG;
    472472
     
    480480    AutoLock alock (this);
    481481
    482     if (mData->mDevicePath != aDevicePath)
     482    if (mData->mPath != aPath)
    483483    {
    484484        mData.backup();
    485         mData->mDevicePath = aDevicePath;
     485        mData->mPath = aPath;
    486486
    487487        /* leave the lock before informing callbacks */
  • trunk/src/VBox/Main/SerialPortImpl.cpp

    r4293 r4324  
    256256    bool fEnabled = false;
    257257    CFGLDRQueryBool (portNode, "enabled", &fEnabled);
    258     Bstr mode;
    259258    uint32_t uIOBase;
    260259    /* I/O base (required) */
     
    264263    CFGLDRQueryUInt32 (portNode, "IRQ", &uIRQ);
    265264    /* host mode (required) */
    266     CFGLDRQueryBSTR (portNode, "HostMode", mode.asOutParam());
     265    Bstr mode;
     266    CFGLDRQueryBSTR (portNode, "hostMode", mode.asOutParam());
    267267    if (mode == L"HostPipe")
    268         mData->mHostMode = SerialHostMode_HostPipe;
     268        mData->mHostMode = PortMode_HostPipePort;
    269269    else if (mode == L"HostDevice")
    270         mData->mHostMode = SerialHostMode_HostDevice;
     270        mData->mHostMode = PortMode_HostDevicePort;
    271271    else
    272         mData->mHostMode = SerialHostMode_Disconnected;
    273     /* name of the pipe (required) */
     272        mData->mHostMode = PortMode_DisconnectedPort;
     273    /* pipe/device path */
    274274    Bstr path;
    275275    int rc = CFGLDRQueryBSTR(portNode, "path", path.asOutParam());
    276     /* backward compatibility */
    277     if (rc == VERR_CFG_NO_VALUE)
    278         CFGLDRQueryBSTR(portNode, "pipe", path.asOutParam());
     276    /* server mode */
    279277    bool fServer = true;
    280     CFGLDRQueryBool   (portNode, "server", &fServer);
     278    CFGLDRQueryBool (portNode, "server", &fServer);
    281279
    282280    mData->mEnabled  = fEnabled;
     
    307305    {
    308306        default:
    309         case SerialHostMode_Disconnected:
     307        case PortMode_DisconnectedPort:
    310308            mode = "Disconnected";
    311309            break;
    312         case SerialHostMode_HostPipe:
     310        case PortMode_HostPipePort:
    313311            mode = "HostPipe";
    314312            break;
    315         case SerialHostMode_HostDevice:
     313        case PortMode_HostDevicePort:
    316314            mode = "HostDevice";
    317315            break;
     
    319317    CFGLDRSetUInt32 (portNode, "slot",    mData->mSlot);
    320318    CFGLDRSetBool   (portNode, "enabled", !!mData->mEnabled);
    321     if (mData->mEnabled)
    322     {
    323         CFGLDRSetUInt32 (portNode, "IOBase",  mData->mIOBase);
    324         CFGLDRSetUInt32 (portNode, "IRQ",     mData->mIRQ);
    325         CFGLDRSetString (portNode, "HostMode", mode);
    326         if (mData->mHostMode != SerialHostMode_Disconnected)
    327         {
    328             CFGLDRSetBSTR   (portNode, "path",    mData->mPath);
    329             if (mData->mHostMode == SerialHostMode_HostPipe)
    330                 CFGLDRSetBool   (portNode, "server",  !!mData->mServer);
    331         }
     319    CFGLDRSetUInt32 (portNode, "IOBase",  mData->mIOBase);
     320    CFGLDRSetUInt32 (portNode, "IRQ",     mData->mIRQ);
     321    CFGLDRSetString (portNode, "hostMode", mode);
     322    if (mData->mHostMode != PortMode_DisconnectedPort)
     323    {
     324        CFGLDRSetBSTR (portNode, "path",    mData->mPath);
     325        if (mData->mHostMode == PortMode_HostPipePort)
     326            CFGLDRSetBool (portNode, "server",  !!mData->mServer);
    332327    }
    333328
     
    380375}
    381376
    382 STDMETHODIMP SerialPort::COMGETTER(HostMode) (SerialHostMode_T *aHostMode)
     377STDMETHODIMP SerialPort::COMGETTER(HostMode) (PortMode_T *aHostMode)
    383378{
    384379    if (!aHostMode)
     
    395390}
    396391
    397 STDMETHODIMP SerialPort::COMSETTER(HostMode) (SerialHostMode_T aHostMode)
     392STDMETHODIMP SerialPort::COMSETTER(HostMode) (PortMode_T aHostMode)
    398393{
    399394    AutoCaller autoCaller (this);
     
    413408        mData.backup();
    414409        mData->mHostMode = aHostMode;
    415         if (aHostMode == SerialHostMode_Disconnected)
     410        if (aHostMode == PortMode_DisconnectedPort)
    416411        {
    417412            mData->mPath   = "";
  • trunk/src/VBox/Main/idl/VirtualBox.xidl

    r4318 r4324  
    70887088
    70897089  <enum
    7090      name="SerialHostMode"
    7091      uuid="5ac6ae50-30d4-4c89-8f9c-35b4500a5b9f"
     7090     name="PortMode"
     7091     uuid="b266f43c-2e93-46b3-812b-c20e600e867b"
    70927092     >
    7093     <const name="Disconnected"        value="0"/>
    7094     <const name="HostPipe"            value="1"/>
    7095     <const name="HostDevice"          value="2"/>
     7093    <const name="DisconnectedPort"        value="0"/>
     7094    <const name="HostPipePort"            value="1"/>
     7095    <const name="HostDevicePort"          value="2"/>
    70967096  </enum>
    70977097
    70987098  <interface
    70997099     name="ISerialPort" extends="$unknown"
    7100      uuid="a5ab0989-0ca9-4d5e-b565-f7739b92bb0c"
     7100     uuid="937f6970-5103-4745-b78e-d28dcf1479a8"
    71017101     wsmap="managed"
    71027102     >
     
    71127112    <attribute name="enabled" type="boolean">
    71137113      <desc>
    7114         Flag whether the serial port is enabled. If it is disabled,
    7115         the serial port will not be reported to the guest.
     7114        Flag whether the serial port is enabled. If disabled,
     7115        the serial port will not be reported to the guest OS.
    71167116      </desc>
    71177117    </attribute>
    71187118
    71197119    <attribute name="IOBase" type="unsigned long">
    7120       <desc>Gets the I/O base of the serial port.</desc>
     7120      <desc>I/O base of the serial port.</desc>
    71217121    </attribute>
    71227122
    71237123    <attribute name="IRQ" type="unsigned long">
    7124       <desc>Gets the IRQ of the serial port.</desc>
    7125     </attribute>
    7126 
    7127     <attribute name="HostMode" type="SerialHostMode">
     7124      <desc>IRQ of the serial port.</desc>
     7125    </attribute>
     7126
     7127    <attribute name="hostMode" type="PortMode">
    71287128      <desc>How is this port connected to the host.</desc>
    71297129    </attribute>
    71307130
    71317131    <attribute name="server" type="boolean">
    7132       <desc>Flag whether this serial port acts as a server or a client.</desc>
     7132      <desc>
     7133        Flag whether this serial port acts as a server (creates a new pipe on
     7134        the host) or as a client (uses the existing pipe). This attribute is
     7135        used only when #hostMode is PortMode::HostPipe.
     7136      </desc>
    71337137    </attribute>
    71347138
    71357139    <attribute name="path" type="wstring">
    7136       <desc>Flag whether this serial port acts as a server or a client.</desc>
     7140      <desc>
     7141        Path to the serial port's pipe on the host when #hostMode is
     7142        PortMode::HostPipe, or the host serial device name when #hostMode is
     7143        PortMode::HostDevice.
     7144      </desc>
    71377145    </attribute>
    71387146
     
    71467154  <interface
    71477155     name="IParallelPort" extends="$unknown"
    7148      uuid="6d7f2385-8ce3-4342-a042-61fa1882354b"
     7156     uuid="0c925f06-dd10-4b77-8de8-294d738c3214"
    71497157     wsmap="managed"
    71507158     >
     
    71607168    <attribute name="enabled" type="boolean">
    71617169      <desc>
    7162         Flag whether the parallel port is enabled. If it is disabled,
    7163         the parallel port will not be reported to the guest.
     7170        Flag whether the parallel port is enabled. If disabled,
     7171        the parallel port will not be reported to the guest OS.
    71647172      </desc>
    71657173    </attribute>
    71667174
    71677175    <attribute name="IOBase" type="unsigned long">
    7168       <desc>Gets the I/O base of the parallel port.</desc>
     7176      <desc>I/O base of the parallel port.</desc>
    71697177    </attribute>
    71707178
    71717179    <attribute name="IRQ" type="unsigned long">
    7172       <desc>Gets the IRQ of the parallel port.</desc>
    7173     </attribute>
    7174 
    7175     <attribute name="DevicePath" type="wstring">
    7176       <desc>Gets the of the device path connected to the parallel port.</desc>
     7180      <desc>IRQ of the parallel port.</desc>
     7181    </attribute>
     7182
     7183    <attribute name="path" type="wstring">
     7184      <desc>Host parallel device name.</desc>
    71777185    </attribute>
    71787186
  • trunk/src/VBox/Main/include/ParallelPortImpl.h

    r4071 r4324  
    4848                    mEnabled == that.mEnabled &&
    4949                    mIRQ == that.mIRQ &&
    50                     mIOBase == that.mIOBase);
     50                    mIOBase == that.mIOBase &&
     51                    mPath == that.mPath);
    5152        }
    5253
     
    5556        ULONG mIRQ;
    5657        ULONG mIOBase;
    57         Bstr  mDevicePath;
     58        Bstr  mPath;
    5859    };
    5960
     
    9091    STDMETHOD(COMGETTER(IOBase))  (ULONG     *aIOBase);
    9192    STDMETHOD(COMSETTER(IOBase))  (ULONG      aIOBase);
    92     STDMETHOD(COMGETTER(DevicePath))    (BSTR      *aDevicePath);
    93     STDMETHOD(COMSETTER(DevicePath))    (INPTR BSTR aDevicePath);
     93    STDMETHOD(COMGETTER(Path))    (BSTR      *aPath);
     94    STDMETHOD(COMSETTER(Path))    (INPTR BSTR aPath);
    9495
    9596    // public methods only for internal purposes
  • trunk/src/VBox/Main/include/SerialPortImpl.h

    r4273 r4324  
    4040            , mIRQ (4)
    4141            , mIOBase (0x3f8)
    42             , mHostMode (SerialHostMode_Disconnected)
     42            , mHostMode (PortMode_DisconnectedPort)
    4343            , mServer (FALSE)
    4444        {}
     
    4949                   (mSlot     == that.mSlot     &&
    5050                    mEnabled  == that.mEnabled  &&
     51                    mIRQ      == that.mIRQ      &&
     52                    mIOBase   == that.mIOBase   &&
    5153                    mHostMode == that.mHostMode &&
    52                     mIRQ      == that.mIRQ      &&
    53                     mIOBase   == that.mIOBase);
     54                    mPath     == that.mPath     &&
     55                    mServer   == that.mServer);
    5456        }
    5557
     
    5860        ULONG mIRQ;
    5961        ULONG mIOBase;
    60         SerialHostMode_T mHostMode;
     62        PortMode_T mHostMode;
    6163        Bstr  mPath;
    6264        BOOL  mServer;
     
    9193    STDMETHOD(COMGETTER(Enabled))  (BOOL      *aEnabled);
    9294    STDMETHOD(COMSETTER(Enabled))  (BOOL       aEnabled);
    93     STDMETHOD(COMGETTER(HostMode)) (SerialHostMode_T *aHostMode);
    94     STDMETHOD(COMSETTER(HostMode)) (SerialHostMode_T  aHostMode);
     95    STDMETHOD(COMGETTER(HostMode)) (PortMode_T *aHostMode);
     96    STDMETHOD(COMSETTER(HostMode)) (PortMode_T  aHostMode);
    9597    STDMETHOD(COMGETTER(IRQ))      (ULONG     *aIRQ);
    9698    STDMETHOD(COMSETTER(IRQ))      (ULONG      aIRQ);
  • trunk/src/VBox/Main/xml/VirtualBox-settings-common.xsd

    r4269 r4324  
    172172</xsd:simpleType>
    173173
    174 <xsd:simpleType name="TUartHostModeType">
     174<xsd:simpleType name="TPortMode">
    175175    <xsd:restriction base="xsd:string">
    176176      <xsd:enumeration value="Disconnected"/>
     
    529529  </xsd:attribute>
    530530  <xsd:attribute name="enabled" type="xsd:boolean" use="required"/>
    531   <xsd:attribute name="IRQ" type="xsd:unsignedInt" default="4"/>
    532   <xsd:attribute name="IOBase" type="xsd:unsignedInt" default="1016"/>
    533   <xsd:attribute name="HostMode" type="TUartHostModeType" default="Disconnected"/>
    534   <xsd:attribute name="pipe" type="xsd:string"/>
    535   <xsd:attribute name="path" type="xsd:string"/>
    536   <xsd:attribute name="server" type="xsd:boolean"/>
     531  <xsd:attribute name="IRQ" type="xsd:unsignedInt" use="required"/>
     532  <xsd:attribute name="IOBase" type="xsd:unsignedInt" use="required"/>
     533  <xsd:attribute name="hostMode" type="TPortMode" use="required"/>
     534  <xsd:attribute name="path" type="TLocalFile"/>
     535  <xsd:attribute name="server" type="xsd:boolean" default="false"/>
    537536</xsd:complexType>
    538537
     
    560559  </xsd:attribute>
    561560  <xsd:attribute name="enabled" type="xsd:boolean" use="required"/>
    562   <xsd:attribute name="IRQ" type="xsd:unsignedInt" default="4"/>
    563   <xsd:attribute name="IOBase" type="xsd:unsignedInt" default="888"/>
    564   <xsd:attribute name="DevicePath" type="TLocalFile"/>
     561  <xsd:attribute name="IRQ" type="xsd:unsignedInt" use="required"/>
     562  <xsd:attribute name="IOBase" type="xsd:unsignedInt" use="required"/>
     563  <xsd:attribute name="path" type="TLocalFile"/>
    565564</xsd:complexType>
    566565
Note: See TracChangeset for help on using the changeset viewer.

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