- Timestamp:
- May 14, 2019 6:06:17 PM (6 years ago)
- svn:sync-xref-src-repo-rev:
- 130563
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendGlobal.cpp
r78522 r78523 273 273 template<> StorageSlot fromString<StorageSlot>(const QString &strStorageSlot) 274 274 { 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; 288 291 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+)")); 292 295 if (regExp.indexIn(strStorageSlot) != -1) 293 296 { 294 index = i; 295 break; 296 } 297 } 298 297 iIndex = i; 298 break; 299 } 300 } 301 302 /* Compose result: */ 299 303 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) 301 324 { 302 325 case 0: … … 305 328 case 3: 306 329 { 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; 312 336 if (iPort < 0 || iPort > iMaxPort) 313 337 { 314 AssertMsgFailed(("No storage slot for text='%s'", strStorageSlot.toUtf8().constData()));338 AssertMsgFailed(("No storage port for text='%s'", strStorageSlot.toUtf8().constData())); 315 339 break; 316 340 } 317 341 if (iDevice < 0 || iDevice > iMaxDevice) 318 342 { 319 AssertMsgFailed(("No storage slotfor text='%s'", strStorageSlot.toUtf8().constData()));343 AssertMsgFailed(("No storage device for text='%s'", strStorageSlot.toUtf8().constData())); 320 344 break; 321 345 } 322 result.bus = bus;323 346 result.port = iPort; 324 347 result.device = iDevice; … … 326 349 } 327 350 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; 333 363 if (iPort < 0 || iPort > iMaxPort) 334 364 { 335 AssertMsgFailed(("No storage slot for text='%s'", strStorageSlot.toUtf8().constData()));365 AssertMsgFailed(("No storage port for text='%s'", strStorageSlot.toUtf8().constData())); 336 366 break; 337 367 } 338 result.bus = bus;339 368 result.port = iPort; 340 369 result.device = iDevice; 341 370 break; 342 371 } 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 }439 372 default: 440 373 { … … 443 376 } 444 377 } 378 379 /* Return result: */ 445 380 return result; 446 381 }
Note:
See TracChangeset
for help on using the changeset viewer.