VirtualBox

Changeset 78523 in vbox for trunk/src


Ignore:
Timestamp:
May 14, 2019 6:06:17 PM (6 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
130563
Message:

FE/Qt: bugref:4551 and bugref:9440: UIConverterBackendGlobal: More convenient QString=>StorageSlot conversion function, removing redundant some of code.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendGlobal.cpp

    r78522 r78523  
    273273template<> StorageSlot fromString<StorageSlot>(const QString &strStorageSlot)
    274274{
    275     QHash<int, QString> list;
    276     list[0] = QApplication::translate("VBoxGlobal", "IDE Primary Master", "StorageSlot");
    277     list[1] = QApplication::translate("VBoxGlobal", "IDE Primary Slave", "StorageSlot");
    278     list[2] = QApplication::translate("VBoxGlobal", "IDE Secondary Master", "StorageSlot");
    279     list[3] = QApplication::translate("VBoxGlobal", "IDE Secondary Slave", "StorageSlot");
    280     list[4] = QApplication::translate("VBoxGlobal", "SATA Port %1", "StorageSlot");
    281     list[5] = QApplication::translate("VBoxGlobal", "SCSI Port %1", "StorageSlot");
    282     list[6] = QApplication::translate("VBoxGlobal", "SAS Port %1", "StorageSlot");
    283     list[7] = QApplication::translate("VBoxGlobal", "Floppy Device %1", "StorageSlot");
    284     list[8] = QApplication::translate("VBoxGlobal", "USB Port %1", "StorageSlot");
    285     list[9] = QApplication::translate("VBoxGlobal", "NVMe Port %1", "StorageSlot");
    286     list[10] = QApplication::translate("VBoxGlobal", "virtio-scsi Port %1", "StorageSlot");
    287     int index = -1;
     275    /* Prepare a hash of known port templates: */
     276    QHash<int, QString> templates;
     277    templates[0] = QApplication::translate("VBoxGlobal", "IDE Primary Master", "StorageSlot");
     278    templates[1] = QApplication::translate("VBoxGlobal", "IDE Primary Slave", "StorageSlot");
     279    templates[2] = QApplication::translate("VBoxGlobal", "IDE Secondary Master", "StorageSlot");
     280    templates[3] = QApplication::translate("VBoxGlobal", "IDE Secondary Slave", "StorageSlot");
     281    templates[4] = QApplication::translate("VBoxGlobal", "SATA Port %1", "StorageSlot");
     282    templates[5] = QApplication::translate("VBoxGlobal", "SCSI Port %1", "StorageSlot");
     283    templates[6] = QApplication::translate("VBoxGlobal", "SAS Port %1", "StorageSlot");
     284    templates[7] = QApplication::translate("VBoxGlobal", "Floppy Device %1", "StorageSlot");
     285    templates[8] = QApplication::translate("VBoxGlobal", "USB Port %1", "StorageSlot");
     286    templates[9] = QApplication::translate("VBoxGlobal", "NVMe Port %1", "StorageSlot");
     287    templates[10] = QApplication::translate("VBoxGlobal", "virtio-scsi Port %1", "StorageSlot");
     288
     289    /* Search for a template index strStorageSlot corresponds to: */
     290    int iIndex = -1;
    288291    QRegExp regExp;
    289     for (int i = 0; i < list.size(); ++i)
    290     {
    291         regExp = QRegExp(i >= 0 && i <= 3 ? list[i] : list[i].arg("(\\d+)"));
     292    for (int i = 0; i < templates.size(); ++i)
     293    {
     294        regExp = QRegExp(i >= 0 && i <= 3 ? templates.value(i) : templates.value(i).arg("(\\d+)"));
    292295        if (regExp.indexIn(strStorageSlot) != -1)
    293296        {
    294             index = i;
    295             break;
    296         }
    297     }
    298 
     297            iIndex = i;
     298            break;
     299        }
     300    }
     301
     302    /* Compose result: */
    299303    StorageSlot result;
    300     switch (index)
     304
     305    /* First we determine bus type: */
     306    switch (iIndex)
     307    {
     308        case 0:
     309        case 1:
     310        case 2:
     311        case 3:  result.bus = KStorageBus_IDE; break;
     312        case 4:  result.bus = KStorageBus_SATA; break;
     313        case 5:  result.bus = KStorageBus_SCSI; break;
     314        case 6:  result.bus = KStorageBus_SAS; break;
     315        case 7:  result.bus = KStorageBus_Floppy; break;
     316        case 8:  result.bus = KStorageBus_USB; break;
     317        case 9:  result.bus = KStorageBus_PCIe; break;
     318        case 10: result.bus = KStorageBus_VirtioSCSI; break;
     319        default: AssertMsgFailed(("No storage bus for text='%s'", strStorageSlot.toUtf8().constData())); break;
     320    }
     321
     322    /* Second we determine port/device pair: */
     323    switch (iIndex)
    301324    {
    302325        case 0:
     
    305328        case 3:
    306329        {
    307             KStorageBus bus = KStorageBus_IDE;
    308             int iMaxPort = vboxGlobal().virtualBox().GetSystemProperties().GetMaxPortCountForStorageBus(bus);
    309             int iMaxDevice = vboxGlobal().virtualBox().GetSystemProperties().GetMaxDevicesPerPortForStorageBus(bus);
    310             LONG iPort = index / iMaxPort;
    311             LONG iDevice = index % iMaxPort;
     330            if (result.bus == KStorageBus_Null)
     331                break;
     332            const int iMaxPort = vboxGlobal().virtualBox().GetSystemProperties().GetMaxPortCountForStorageBus(result.bus);
     333            const int iMaxDevice = vboxGlobal().virtualBox().GetSystemProperties().GetMaxDevicesPerPortForStorageBus(result.bus);
     334            const LONG iPort = iIndex / iMaxPort;
     335            const LONG iDevice = iIndex % iMaxPort;
    312336            if (iPort < 0 || iPort > iMaxPort)
    313337            {
    314                 AssertMsgFailed(("No storage slot for text='%s'", strStorageSlot.toUtf8().constData()));
     338                AssertMsgFailed(("No storage port for text='%s'", strStorageSlot.toUtf8().constData()));
    315339                break;
    316340            }
    317341            if (iDevice < 0 || iDevice > iMaxDevice)
    318342            {
    319                 AssertMsgFailed(("No storage slot for text='%s'", strStorageSlot.toUtf8().constData()));
     343                AssertMsgFailed(("No storage device for text='%s'", strStorageSlot.toUtf8().constData()));
    320344                break;
    321345            }
    322             result.bus = bus;
    323346            result.port = iPort;
    324347            result.device = iDevice;
     
    326349        }
    327350        case 4:
    328         {
    329             KStorageBus bus = KStorageBus_SATA;
    330             int iMaxPort = vboxGlobal().virtualBox().GetSystemProperties().GetMaxPortCountForStorageBus(bus);
    331             LONG iPort = regExp.cap(1).toInt();
    332             LONG iDevice = 0;
     351        case 5:
     352        case 6:
     353        case 7:
     354        case 8:
     355        case 9:
     356        case 10:
     357        {
     358            if (result.bus == KStorageBus_Null)
     359                break;
     360            const int iMaxPort = vboxGlobal().virtualBox().GetSystemProperties().GetMaxPortCountForStorageBus(result.bus);
     361            const LONG iPort = regExp.cap(1).toInt();
     362            const LONG iDevice = 0;
    333363            if (iPort < 0 || iPort > iMaxPort)
    334364            {
    335                 AssertMsgFailed(("No storage slot for text='%s'", strStorageSlot.toUtf8().constData()));
     365                AssertMsgFailed(("No storage port for text='%s'", strStorageSlot.toUtf8().constData()));
    336366                break;
    337367            }
    338             result.bus = bus;
    339368            result.port = iPort;
    340369            result.device = iDevice;
    341370            break;
    342371        }
    343         case 5:
    344         {
    345             KStorageBus bus = KStorageBus_SCSI;
    346             int iMaxPort = vboxGlobal().virtualBox().GetSystemProperties().GetMaxPortCountForStorageBus(bus);
    347             LONG iPort = regExp.cap(1).toInt();
    348             LONG iDevice = 0;
    349             if (iPort < 0 || iPort > iMaxPort)
    350             {
    351                 AssertMsgFailed(("No storage slot for text='%s'", strStorageSlot.toUtf8().constData()));
    352                 break;
    353             }
    354             result.bus = bus;
    355             result.port = iPort;
    356             result.device = iDevice;
    357             break;
    358         }
    359         case 6:
    360         {
    361             KStorageBus bus = KStorageBus_SAS;
    362             int iMaxPort = vboxGlobal().virtualBox().GetSystemProperties().GetMaxPortCountForStorageBus(bus);
    363             LONG iPort = regExp.cap(1).toInt();
    364             LONG iDevice = 0;
    365             if (iPort < 0 || iPort > iMaxPort)
    366             {
    367                 AssertMsgFailed(("No storage slot for text='%s'", strStorageSlot.toUtf8().constData()));
    368                 break;
    369             }
    370             result.bus = bus;
    371             result.port = iPort;
    372             result.device = iDevice;
    373             break;
    374         }
    375         case 7:
    376         {
    377             KStorageBus bus = KStorageBus_Floppy;
    378             int iMaxDevice = vboxGlobal().virtualBox().GetSystemProperties().GetMaxDevicesPerPortForStorageBus(bus);
    379             LONG iPort = 0;
    380             LONG iDevice = regExp.cap(1).toInt();
    381             if (iDevice < 0 || iDevice > iMaxDevice)
    382             {
    383                 AssertMsgFailed(("No storage slot for text='%s'", strStorageSlot.toUtf8().constData()));
    384                 break;
    385             }
    386             result.bus = bus;
    387             result.port = iPort;
    388             result.device = iDevice;
    389             break;
    390         }
    391         case 8:
    392         {
    393             KStorageBus bus = KStorageBus_USB;
    394             int iMaxPort = vboxGlobal().virtualBox().GetSystemProperties().GetMaxPortCountForStorageBus(bus);
    395             LONG iPort = regExp.cap(1).toInt();
    396             LONG iDevice = 0;
    397             if (iPort < 0 || iPort > iMaxPort)
    398             {
    399                 AssertMsgFailed(("No storage slot for text='%s'", strStorageSlot.toUtf8().constData()));
    400                 break;
    401             }
    402             result.bus = bus;
    403             result.port = iPort;
    404             result.device = iDevice;
    405             break;
    406         }
    407         case 9:
    408         {
    409             KStorageBus bus = KStorageBus_PCIe;
    410             int iMaxPort = vboxGlobal().virtualBox().GetSystemProperties().GetMaxPortCountForStorageBus(bus);
    411             LONG iPort = regExp.cap(1).toInt();
    412             LONG iDevice = 0;
    413             if (iPort < 0 || iPort > iMaxPort)
    414             {
    415                 AssertMsgFailed(("No storage slot for text='%s'", strStorageSlot.toUtf8().constData()));
    416                 break;
    417             }
    418             result.bus = bus;
    419             result.port = iPort;
    420             result.device = iDevice;
    421             break;
    422         }
    423         case 10:
    424         {
    425             KStorageBus bus = KStorageBus_VirtioSCSI;
    426             int iMaxPort = vboxGlobal().virtualBox().GetSystemProperties().GetMaxPortCountForStorageBus(bus);
    427             LONG iPort = regExp.cap(1).toInt();
    428             LONG iDevice = 0;
    429             if (iPort < 0 || iPort > iMaxPort)
    430             {
    431                 AssertMsgFailed(("No storage slot for text='%s'", strStorageSlot.toUtf8().constData()));
    432                 break;
    433             }
    434             result.bus = bus;
    435             result.port = iPort;
    436             result.device = iDevice;
    437             break;
    438         }
    439372        default:
    440373        {
     
    443376        }
    444377    }
     378
     379    /* Return result: */
    445380    return result;
    446381}
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