Changeset 51053 in vbox for trunk/src/VBox/Frontends/VirtualBox
- Timestamp:
- Apr 11, 2014 4:30:13 PM (11 years ago)
- svn:sync-xref-src-repo-rev:
- 93275
- Location:
- trunk/src/VBox/Frontends/VirtualBox/src/extradata
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp
r51048 r51053 215 215 /* Prepare extra-data event-handler: */ 216 216 prepareExtraDataEventHandler(); 217 /* Prepare extra-data map: */218 prepare ExtraDataMap();217 /* Prepare global extra-data map: */ 218 prepareGlobalExtraDataMap(); 219 219 } 220 220 … … 277 277 } 278 278 279 void UIExtraDataManager::prepare ExtraDataMap()279 void UIExtraDataManager::prepareGlobalExtraDataMap() 280 280 { 281 281 /* Get CVirtualBox: */ 282 282 CVirtualBox vbox = vboxGlobal().virtualBox(); 283 /* Load extra-data map: */ 284 if (!vboxGlobal().isVMConsoleProcess()) 285 { 286 /* From CVirtualBox for Selector UI: */ 287 foreach (const QString &strKey, vbox.GetExtraDataKeys()) 288 m_data[strKey] = vbox.GetExtraData(strKey); 289 } 290 else 291 { 292 /* From CMachine for Runtime UI: */ 293 const QString strMachineID = vboxGlobal().managedVMUuid(); 294 CMachine machine = vbox.FindMachine(strMachineID); 295 AssertMsgReturnVoid(vbox.isOk() && !machine.isNull(), 296 ("Machine with ID={%s} was not found!\n", 297 strMachineID.toAscii().constData())); 298 foreach (const QString &strKey, machine.GetExtraDataKeys()) 299 m_data[strKey] = machine.GetExtraData(strKey); 300 } 283 284 /* Load global extra-data map: */ 285 foreach (const QString &strKey, vbox.GetExtraDataKeys()) 286 m_data[QString()][strKey] = vbox.GetExtraData(strKey); 301 287 } 302 288 … … 314 300 } 315 301 302 void UIExtraDataManager::hotloadMachineExtraDataMap(const QString &strID) const 303 { 304 /* Make sure it is not yet loaded: */ 305 AssertReturnVoid(!strID.isNull() && !m_data.contains(strID)); 306 307 /* Search for corresponding machine: */ 308 CVirtualBox vbox = vboxGlobal().virtualBox(); 309 CMachine machine = vbox.FindMachine(strID); 310 AssertReturnVoid(vbox.isOk() && !machine.isNull()); 311 312 /* Make sure at least empty map is created: */ 313 m_data[strID] = ExtraDataMap(); 314 315 /* Do not handle inaccessible machine: */ 316 if (!machine.GetAccessible()) 317 return; 318 319 /* Load machine extra-data map: */ 320 foreach (const QString &strKey, machine.GetExtraDataKeys()) 321 m_data[strID][strKey] = machine.GetExtraData(strKey); 322 } 323 324 bool UIExtraDataManager::isFeatureAllowed(const QString &strKey, const QString &strID /* = QString() */) const 325 { 326 /* Hot-load machine extra-data map if necessary: */ 327 if (!strID.isNull() && !m_data.contains(strID)) 328 hotloadMachineExtraDataMap(strID); 329 330 /* Access corresponding map: */ 331 ExtraDataMap &data = m_data[strID]; 332 333 /* 'false' if value was not set: */ 334 if (!data.contains(strKey)) 335 return false; 336 337 /* Check corresponding value: */ 338 const QString &strValue = data[strKey]; 339 return strValue.compare("true", Qt::CaseInsensitive) == 0 340 || strValue.compare("yes", Qt::CaseInsensitive) == 0 341 || strValue.compare("on", Qt::CaseInsensitive) == 0 342 || strValue == "1"; 343 } 344 345 QString UIExtraDataManager::extraDataString(const QString &strKey, const QString &strID /* = QString() */) const 346 { 347 /* Hot-load machine extra-data map if necessary: */ 348 if (!strID.isNull() && !m_data.contains(strID)) 349 hotloadMachineExtraDataMap(strID); 350 351 /* Access corresponding map: */ 352 ExtraDataMap &data = m_data[strID]; 353 354 /* QString() if value was not set: */ 355 if (!data.contains(strKey)) 356 return QString(); 357 358 /* Returns corresponding value: */ 359 return data[strKey]; 360 } 361 362 QStringList UIExtraDataManager::extraDataStringList(const QString &strKey, const QString &strID /* = QString() */) const 363 { 364 /* Hot-load machine extra-data map if necessary: */ 365 if (!strID.isNull() && !m_data.contains(strID)) 366 hotloadMachineExtraDataMap(strID); 367 368 /* Access corresponding map: */ 369 ExtraDataMap &data = m_data[strID]; 370 371 /* QStringList() if machine value was not set: */ 372 if (!data.contains(strKey)) 373 return QStringList(); 374 375 /* Returns corresponding value: */ 376 return data[strKey].split(',', QString::SkipEmptyParts); 377 } 378 316 379 #include "UIExtraDataManager.moc" 317 380 -
trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h
r51048 r51053 27 27 /* Forward declarations: */ 28 28 class UIExtraDataEventHandler; 29 30 /* Type definitions: */ 31 typedef QMap<QString, QString> ExtraDataMap; 29 32 30 33 /** Singleton QObject extension … … 75 78 /** Prepare extra-data event-handler. */ 76 79 void prepareExtraDataEventHandler(); 77 /** Prepare extra-data map. */78 void prepare ExtraDataMap();80 /** Prepare global extra-data map. */ 81 void prepareGlobalExtraDataMap(); 79 82 80 83 /** Cleanup Extra-data Manager. */ … … 87 90 // void cleanupExtraDataMap(); 88 91 92 /** Hot-load machine extra-data map. */ 93 void hotloadMachineExtraDataMap(const QString &strID) const; 94 95 /** Determines whether feature corresponding to passed @a strKey is allowed. 96 * If valid @a strID is set => applies to machine extra-data, otherwise => to global one. */ 97 bool isFeatureAllowed(const QString &strKey, const QString &strID = QString()) const; 98 99 /** Returns extra-data value corresponding to passed @a strKey as QString. 100 * If valid @a strID is set => applies to machine extra-data, otherwise => to global one. */ 101 QString extraDataString(const QString &strKey, const QString &strID = QString()) const; 102 103 /** Returns extra-data value corresponding to passed @a strKey as QStringList. 104 * If valid @a strID is set => applies to machine extra-data, otherwise => to global one. */ 105 QStringList extraDataStringList(const QString &strKey, const QString &strID = QString()) const; 106 89 107 /** Singleton Extra-data Manager instance. */ 90 108 static UIExtraDataManager *m_pInstance; … … 96 114 97 115 /** Extra-data map. */ 98 QMap<QString, QString> m_data;116 mutable QMap<QString, ExtraDataMap> m_data; 99 117 }; 100 118
Note:
See TracChangeset
for help on using the changeset viewer.