VirtualBox

Changeset 75427 in vbox


Ignore:
Timestamp:
Nov 13, 2018 4:39:09 PM (6 years ago)
Author:
vboxsync
Message:

FE/Qt: bugref:9289: VirtualBox Manager / Details pane: Support for extra-data options, for now console only, no UI.

Location:
trunk/src/VBox/Frontends/VirtualBox/src
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackend.h

    r75016 r75427  
    8989template<> SHARED_LIBRARY_STUFF bool canConvert<UIExtraDataMetaDefs::MenuWindowActionType>();
    9090#endif /* VBOX_WS_MAC */
     91template<> SHARED_LIBRARY_STUFF bool canConvert<UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral>();
     92template<> SHARED_LIBRARY_STUFF bool canConvert<UIExtraDataMetaDefs::DetailsElementOptionTypeSystem>();
     93template<> SHARED_LIBRARY_STUFF bool canConvert<UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay>();
     94template<> SHARED_LIBRARY_STUFF bool canConvert<UIExtraDataMetaDefs::DetailsElementOptionTypeStorage>();
     95template<> SHARED_LIBRARY_STUFF bool canConvert<UIExtraDataMetaDefs::DetailsElementOptionTypeAudio>();
     96template<> SHARED_LIBRARY_STUFF bool canConvert<UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork>();
     97template<> SHARED_LIBRARY_STUFF bool canConvert<UIExtraDataMetaDefs::DetailsElementOptionTypeSerial>();
     98template<> SHARED_LIBRARY_STUFF bool canConvert<UIExtraDataMetaDefs::DetailsElementOptionTypeUsb>();
     99template<> SHARED_LIBRARY_STUFF bool canConvert<UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders>();
     100template<> SHARED_LIBRARY_STUFF bool canConvert<UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface>();
     101template<> SHARED_LIBRARY_STUFF bool canConvert<UIExtraDataMetaDefs::DetailsElementOptionTypeDescription>();
    91102template<> SHARED_LIBRARY_STUFF bool canConvert<UIToolType>();
    92103template<> SHARED_LIBRARY_STUFF bool canConvert<UIVisualStateType>();
     
    164175template<> SHARED_LIBRARY_STUFF UIExtraDataMetaDefs::MenuWindowActionType fromInternalString<UIExtraDataMetaDefs::MenuWindowActionType>(const QString &strMenuWindowActionType);
    165176#endif /* VBOX_WS_MAC */
     177template<> SHARED_LIBRARY_STUFF QString toInternalString(const UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral &enmDetailsElementOptionTypeGeneral);
     178template<> SHARED_LIBRARY_STUFF UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral>(const QString &strDetailsElementOptionTypeGeneral);
     179template<> SHARED_LIBRARY_STUFF QString toInternalString(const UIExtraDataMetaDefs::DetailsElementOptionTypeSystem &enmDetailsElementOptionTypeSystem);
     180template<> SHARED_LIBRARY_STUFF UIExtraDataMetaDefs::DetailsElementOptionTypeSystem fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeSystem>(const QString &strDetailsElementOptionTypeSystem);
     181template<> SHARED_LIBRARY_STUFF QString toInternalString(const UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay &enmDetailsElementOptionTypeDisplay);
     182template<> SHARED_LIBRARY_STUFF UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay>(const QString &strDetailsElementOptionTypeDisplay);
     183template<> SHARED_LIBRARY_STUFF QString toInternalString(const UIExtraDataMetaDefs::DetailsElementOptionTypeStorage &enmDetailsElementOptionTypeStorage);
     184template<> SHARED_LIBRARY_STUFF UIExtraDataMetaDefs::DetailsElementOptionTypeStorage fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeStorage>(const QString &strDetailsElementOptionTypeStorage);
     185template<> SHARED_LIBRARY_STUFF QString toInternalString(const UIExtraDataMetaDefs::DetailsElementOptionTypeAudio &enmDetailsElementOptionTypeAudio);
     186template<> SHARED_LIBRARY_STUFF UIExtraDataMetaDefs::DetailsElementOptionTypeAudio fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeAudio>(const QString &strDetailsElementOptionTypeAudio);
     187template<> SHARED_LIBRARY_STUFF QString toInternalString(const UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork &enmDetailsElementOptionTypeNetwork);
     188template<> SHARED_LIBRARY_STUFF UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork>(const QString &strDetailsElementOptionTypeNetwork);
     189template<> SHARED_LIBRARY_STUFF QString toInternalString(const UIExtraDataMetaDefs::DetailsElementOptionTypeSerial &enmDetailsElementOptionTypeSerial);
     190template<> SHARED_LIBRARY_STUFF UIExtraDataMetaDefs::DetailsElementOptionTypeSerial fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeSerial>(const QString &strDetailsElementOptionTypeSerial);
     191template<> SHARED_LIBRARY_STUFF QString toInternalString(const UIExtraDataMetaDefs::DetailsElementOptionTypeUsb &enmDetailsElementOptionTypeUsb);
     192template<> SHARED_LIBRARY_STUFF UIExtraDataMetaDefs::DetailsElementOptionTypeUsb fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeUsb>(const QString &strDetailsElementOptionTypeUsb);
     193template<> SHARED_LIBRARY_STUFF QString toInternalString(const UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders &enmDetailsElementOptionTypeSharedFolders);
     194template<> SHARED_LIBRARY_STUFF UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders>(const QString &strDetailsElementOptionTypeSharedFolders);
     195template<> SHARED_LIBRARY_STUFF QString toInternalString(const UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface &enmDetailsElementOptionTypeUserInterface);
     196template<> SHARED_LIBRARY_STUFF UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface>(const QString &strDetailsElementOptionTypeUserInterface);
     197template<> SHARED_LIBRARY_STUFF QString toInternalString(const UIExtraDataMetaDefs::DetailsElementOptionTypeDescription &enmDetailsElementOptionTypeDescription);
     198template<> SHARED_LIBRARY_STUFF UIExtraDataMetaDefs::DetailsElementOptionTypeDescription fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeDescription>(const QString &strDetailsElementOptionTypeDescription);
    166199template<> SHARED_LIBRARY_STUFF QString toInternalString(const UIToolType &enmToolType);
    167200template<> SHARED_LIBRARY_STUFF UIToolType fromInternalString<UIToolType>(const QString &strToolType);
  • trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendGlobal.cpp

    r75359 r75427  
    5353template<> bool canConvert<UIExtraDataMetaDefs::MenuWindowActionType>() { return true; }
    5454#endif /* VBOX_WS_MAC */
     55template<> bool canConvert<UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral>() { return true; }
     56template<> bool canConvert<UIExtraDataMetaDefs::DetailsElementOptionTypeSystem>() { return true; }
     57template<> bool canConvert<UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay>() { return true; }
     58template<> bool canConvert<UIExtraDataMetaDefs::DetailsElementOptionTypeStorage>() { return true; }
     59template<> bool canConvert<UIExtraDataMetaDefs::DetailsElementOptionTypeAudio>() { return true; }
     60template<> bool canConvert<UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork>() { return true; }
     61template<> bool canConvert<UIExtraDataMetaDefs::DetailsElementOptionTypeSerial>() { return true; }
     62template<> bool canConvert<UIExtraDataMetaDefs::DetailsElementOptionTypeUsb>() { return true; }
     63template<> bool canConvert<UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders>() { return true; }
     64template<> bool canConvert<UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface>() { return true; }
     65template<> bool canConvert<UIExtraDataMetaDefs::DetailsElementOptionTypeDescription>() { return true; }
    5566template<> bool canConvert<UIToolType>() { return true; }
    5667template<> bool canConvert<UIVisualStateType>() { return true; }
     
    870881#endif /* VBOX_WS_MAC */
    871882
     883/* QString <= UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral: */
     884template<> QString toInternalString(const UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral &enmDetailsElementOptionTypeGeneral)
     885{
     886    QString strResult;
     887    switch (enmDetailsElementOptionTypeGeneral)
     888    {
     889        case UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral_Name:     strResult = "Name"; break;
     890        case UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral_OS:       strResult = "OS"; break;
     891        case UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral_Location: strResult = "Location"; break;
     892        case UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral_Groups:   strResult = "Groups"; break;
     893        default:
     894        {
     895            AssertMsgFailed(("No text for details element option type=%d", enmDetailsElementOptionTypeGeneral));
     896            break;
     897        }
     898    }
     899    return strResult;
     900}
     901
     902/* UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral <= QString: */
     903template<> UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral>(const QString &strDetailsElementOptionTypeGeneral)
     904{
     905    /* Here we have some fancy stuff allowing us
     906     * to search through the keys using 'case-insensitive' rule: */
     907    QStringList keys;   QList<UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral> values;
     908    keys << "Name";     values << UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral_Name;
     909    keys << "OS";       values << UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral_OS;
     910    keys << "Location"; values << UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral_Location;
     911    keys << "Groups";   values << UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral_Groups;
     912    /* Invalid type for unknown words: */
     913    if (!keys.contains(strDetailsElementOptionTypeGeneral, Qt::CaseInsensitive))
     914        return UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral_Invalid;
     915    /* Corresponding type for known words: */
     916    return values.at(keys.indexOf(QRegExp(strDetailsElementOptionTypeGeneral, Qt::CaseInsensitive)));
     917}
     918
     919/* QString <= UIExtraDataMetaDefs::DetailsElementOptionTypeSystem: */
     920template<> QString toInternalString(const UIExtraDataMetaDefs::DetailsElementOptionTypeSystem &enmDetailsElementOptionTypeSystem)
     921{
     922    QString strResult;
     923    switch (enmDetailsElementOptionTypeSystem)
     924    {
     925        case UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_RAM:             strResult = "RAM"; break;
     926        case UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_CPUCount:        strResult = "CPUCount"; break;
     927        case UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_CPUExecutionCap: strResult = "CPUExecutionCap"; break;
     928        case UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_BootOrder:       strResult = "BootOrder"; break;
     929        case UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_ChipsetType:     strResult = "ChipsetType"; break;
     930        case UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_Firmware:        strResult = "Firmware"; break;
     931        case UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_Acceleration:    strResult = "Acceleration"; break;
     932        default:
     933        {
     934            AssertMsgFailed(("No text for details element option type=%d", enmDetailsElementOptionTypeSystem));
     935            break;
     936        }
     937    }
     938    return strResult;
     939}
     940
     941/* UIExtraDataMetaDefs::DetailsElementOptionTypeSystem <= QString: */
     942template<> UIExtraDataMetaDefs::DetailsElementOptionTypeSystem fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeSystem>(const QString &strDetailsElementOptionTypeSystem)
     943{
     944    /* Here we have some fancy stuff allowing us
     945     * to search through the keys using 'case-insensitive' rule: */
     946    QStringList keys;          QList<UIExtraDataMetaDefs::DetailsElementOptionTypeSystem> values;
     947    keys << "RAM";             values << UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_RAM;
     948    keys << "CPUCount";        values << UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_CPUCount;
     949    keys << "CPUExecutionCap"; values << UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_CPUExecutionCap;
     950    keys << "BootOrder";       values << UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_BootOrder;
     951    keys << "ChipsetType";     values << UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_ChipsetType;
     952    keys << "Firmware";        values << UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_Firmware;
     953    keys << "Acceleration";    values << UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_Acceleration;
     954    /* Invalid type for unknown words: */
     955    if (!keys.contains(strDetailsElementOptionTypeSystem, Qt::CaseInsensitive))
     956        return UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_Invalid;
     957    /* Corresponding type for known words: */
     958    return values.at(keys.indexOf(QRegExp(strDetailsElementOptionTypeSystem, Qt::CaseInsensitive)));
     959}
     960
     961/* QString <= UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay: */
     962template<> QString toInternalString(const UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay &enmDetailsElementOptionTypeDisplay)
     963{
     964    QString strResult;
     965    switch (enmDetailsElementOptionTypeDisplay)
     966    {
     967        case UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_VRAM:         strResult = "VRAM"; break;
     968        case UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_ScreenCount:  strResult = "ScreenCount"; break;
     969        case UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_ScaleFactor:  strResult = "ScaleFactor"; break;
     970        case UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_Acceleration: strResult = "Acceleration"; break;
     971        case UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_VRDE:         strResult = "VRDE"; break;
     972        case UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_Recording:    strResult = "Recording"; break;
     973        default:
     974        {
     975            AssertMsgFailed(("No text for details element option type=%d", enmDetailsElementOptionTypeDisplay));
     976            break;
     977        }
     978    }
     979    return strResult;
     980}
     981
     982/* UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay <= QString: */
     983template<> UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay>(const QString &strDetailsElementOptionTypeDisplay)
     984{
     985    /* Here we have some fancy stuff allowing us
     986     * to search through the keys using 'case-insensitive' rule: */
     987    QStringList keys;       QList<UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay> values;
     988    keys << "VRAM";         values << UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_VRAM;
     989    keys << "ScreenCount";  values << UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_ScreenCount;
     990    keys << "ScaleFactor";  values << UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_ScaleFactor;
     991    keys << "Acceleration"; values << UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_Acceleration;
     992    keys << "VRDE";         values << UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_VRDE;
     993    keys << "Recording";    values << UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_Recording;
     994    /* Invalid type for unknown words: */
     995    if (!keys.contains(strDetailsElementOptionTypeDisplay, Qt::CaseInsensitive))
     996        return UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_Invalid;
     997    /* Corresponding type for known words: */
     998    return values.at(keys.indexOf(QRegExp(strDetailsElementOptionTypeDisplay, Qt::CaseInsensitive)));
     999}
     1000
     1001/* QString <= UIExtraDataMetaDefs::DetailsElementOptionTypeStorage: */
     1002template<> QString toInternalString(const UIExtraDataMetaDefs::DetailsElementOptionTypeStorage &enmDetailsElementOptionTypeStorage)
     1003{
     1004    QString strResult;
     1005    switch (enmDetailsElementOptionTypeStorage)
     1006    {
     1007        case UIExtraDataMetaDefs::DetailsElementOptionTypeStorage_HardDisks:      strResult = "HardDisks"; break;
     1008        case UIExtraDataMetaDefs::DetailsElementOptionTypeStorage_OpticalDevices: strResult = "OpticalDevices"; break;
     1009        case UIExtraDataMetaDefs::DetailsElementOptionTypeStorage_FloppyDevices:  strResult = "FloppyDevices"; break;
     1010        default:
     1011        {
     1012            AssertMsgFailed(("No text for details element option type=%d", enmDetailsElementOptionTypeStorage));
     1013            break;
     1014        }
     1015    }
     1016    return strResult;
     1017}
     1018
     1019/* UIExtraDataMetaDefs::DetailsElementOptionTypeStorage <= QString: */
     1020template<> UIExtraDataMetaDefs::DetailsElementOptionTypeStorage fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeStorage>(const QString &strDetailsElementOptionTypeStorage)
     1021{
     1022    /* Here we have some fancy stuff allowing us
     1023     * to search through the keys using 'case-insensitive' rule: */
     1024    QStringList keys;         QList<UIExtraDataMetaDefs::DetailsElementOptionTypeStorage> values;
     1025    keys << "HardDisks";      values << UIExtraDataMetaDefs::DetailsElementOptionTypeStorage_HardDisks;
     1026    keys << "OpticalDevices"; values << UIExtraDataMetaDefs::DetailsElementOptionTypeStorage_OpticalDevices;
     1027    keys << "FloppyDevices";  values << UIExtraDataMetaDefs::DetailsElementOptionTypeStorage_FloppyDevices;
     1028    /* Invalid type for unknown words: */
     1029    if (!keys.contains(strDetailsElementOptionTypeStorage, Qt::CaseInsensitive))
     1030        return UIExtraDataMetaDefs::DetailsElementOptionTypeStorage_Invalid;
     1031    /* Corresponding type for known words: */
     1032    return values.at(keys.indexOf(QRegExp(strDetailsElementOptionTypeStorage, Qt::CaseInsensitive)));
     1033}
     1034
     1035/* QString <= UIExtraDataMetaDefs::DetailsElementOptionTypeAudio: */
     1036template<> QString toInternalString(const UIExtraDataMetaDefs::DetailsElementOptionTypeAudio &enmDetailsElementOptionTypeAudio)
     1037{
     1038    QString strResult;
     1039    switch (enmDetailsElementOptionTypeAudio)
     1040    {
     1041        case UIExtraDataMetaDefs::DetailsElementOptionTypeAudio_Driver:     strResult = "Driver"; break;
     1042        case UIExtraDataMetaDefs::DetailsElementOptionTypeAudio_Controller: strResult = "Controller"; break;
     1043        case UIExtraDataMetaDefs::DetailsElementOptionTypeAudio_IO:         strResult = "IO"; break;
     1044        default:
     1045        {
     1046            AssertMsgFailed(("No text for details element option type=%d", enmDetailsElementOptionTypeAudio));
     1047            break;
     1048        }
     1049    }
     1050    return strResult;
     1051}
     1052
     1053/* UIExtraDataMetaDefs::DetailsElementOptionTypeAudio <= QString: */
     1054template<> UIExtraDataMetaDefs::DetailsElementOptionTypeAudio fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeAudio>(const QString &strDetailsElementOptionTypeAudio)
     1055{
     1056    /* Here we have some fancy stuff allowing us
     1057     * to search through the keys using 'case-insensitive' rule: */
     1058    QStringList keys;     QList<UIExtraDataMetaDefs::DetailsElementOptionTypeAudio> values;
     1059    keys << "Driver";     values << UIExtraDataMetaDefs::DetailsElementOptionTypeAudio_Driver;
     1060    keys << "Controller"; values << UIExtraDataMetaDefs::DetailsElementOptionTypeAudio_Controller;
     1061    keys << "IO";         values << UIExtraDataMetaDefs::DetailsElementOptionTypeAudio_IO;
     1062    /* Invalid type for unknown words: */
     1063    if (!keys.contains(strDetailsElementOptionTypeAudio, Qt::CaseInsensitive))
     1064        return UIExtraDataMetaDefs::DetailsElementOptionTypeAudio_Invalid;
     1065    /* Corresponding type for known words: */
     1066    return values.at(keys.indexOf(QRegExp(strDetailsElementOptionTypeAudio, Qt::CaseInsensitive)));
     1067}
     1068
     1069/* QString <= UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork: */
     1070template<> QString toInternalString(const UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork &enmDetailsElementOptionTypeNetwork)
     1071{
     1072    QString strResult;
     1073    switch (enmDetailsElementOptionTypeNetwork)
     1074    {
     1075        case UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_NotAttached:     strResult = "NotAttached"; break;
     1076        case UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_NAT:             strResult = "NAT"; break;
     1077        case UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_BridgetAdapter:  strResult = "BridgetAdapter"; break;
     1078        case UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_InternalNetwork: strResult = "InternalNetwork"; break;
     1079        case UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_HostOnlyAdapter: strResult = "HostOnlyAdapter"; break;
     1080        case UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_GenericDriver:   strResult = "GenericDriver"; break;
     1081        default:
     1082        {
     1083            AssertMsgFailed(("No text for details element option type=%d", enmDetailsElementOptionTypeNetwork));
     1084            break;
     1085        }
     1086    }
     1087    return strResult;
     1088}
     1089
     1090/* UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork <= QString: */
     1091template<> UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork>(const QString &strDetailsElementOptionTypeNetwork)
     1092{
     1093    /* Here we have some fancy stuff allowing us
     1094     * to search through the keys using 'case-insensitive' rule: */
     1095    QStringList keys;          QList<UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork> values;
     1096    keys << "NotAttached";     values << UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_NotAttached;
     1097    keys << "NAT";             values << UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_NAT;
     1098    keys << "BridgetAdapter";  values << UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_BridgetAdapter;
     1099    keys << "InternalNetwork"; values << UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_InternalNetwork;
     1100    keys << "HostOnlyAdapter"; values << UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_HostOnlyAdapter;
     1101    keys << "GenericDriver";   values << UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_GenericDriver;
     1102    /* Invalid type for unknown words: */
     1103    if (!keys.contains(strDetailsElementOptionTypeNetwork, Qt::CaseInsensitive))
     1104        return UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_Invalid;
     1105    /* Corresponding type for known words: */
     1106    return values.at(keys.indexOf(QRegExp(strDetailsElementOptionTypeNetwork, Qt::CaseInsensitive)));
     1107}
     1108
     1109/* QString <= UIExtraDataMetaDefs::DetailsElementOptionTypeSerial: */
     1110template<> QString toInternalString(const UIExtraDataMetaDefs::DetailsElementOptionTypeSerial &enmDetailsElementOptionTypeSerial)
     1111{
     1112    QString strResult;
     1113    switch (enmDetailsElementOptionTypeSerial)
     1114    {
     1115        case UIExtraDataMetaDefs::DetailsElementOptionTypeSerial_Disconnected: strResult = "Disconnected"; break;
     1116        case UIExtraDataMetaDefs::DetailsElementOptionTypeSerial_HostPipe:     strResult = "HostPipe"; break;
     1117        case UIExtraDataMetaDefs::DetailsElementOptionTypeSerial_HostDevice:   strResult = "HostDevice"; break;
     1118        case UIExtraDataMetaDefs::DetailsElementOptionTypeSerial_RawFile:      strResult = "RawFile"; break;
     1119        case UIExtraDataMetaDefs::DetailsElementOptionTypeSerial_TCP:          strResult = "TCP"; break;
     1120        default:
     1121        {
     1122            AssertMsgFailed(("No text for details element option type=%d", enmDetailsElementOptionTypeSerial));
     1123            break;
     1124        }
     1125    }
     1126    return strResult;
     1127}
     1128
     1129/* UIExtraDataMetaDefs::DetailsElementOptionTypeSerial <= QString: */
     1130template<> UIExtraDataMetaDefs::DetailsElementOptionTypeSerial fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeSerial>(const QString &strDetailsElementOptionTypeSerial)
     1131{
     1132    /* Here we have some fancy stuff allowing us
     1133     * to search through the keys using 'case-insensitive' rule: */
     1134    QStringList keys;       QList<UIExtraDataMetaDefs::DetailsElementOptionTypeSerial> values;
     1135    keys << "Disconnected"; values << UIExtraDataMetaDefs::DetailsElementOptionTypeSerial_Disconnected;
     1136    keys << "HostPipe";     values << UIExtraDataMetaDefs::DetailsElementOptionTypeSerial_HostPipe;
     1137    keys << "HostDevice";   values << UIExtraDataMetaDefs::DetailsElementOptionTypeSerial_HostDevice;
     1138    keys << "RawFile";      values << UIExtraDataMetaDefs::DetailsElementOptionTypeSerial_RawFile;
     1139    keys << "TCP";          values << UIExtraDataMetaDefs::DetailsElementOptionTypeSerial_TCP;
     1140    /* Invalid type for unknown words: */
     1141    if (!keys.contains(strDetailsElementOptionTypeSerial, Qt::CaseInsensitive))
     1142        return UIExtraDataMetaDefs::DetailsElementOptionTypeSerial_Invalid;
     1143    /* Corresponding type for known words: */
     1144    return values.at(keys.indexOf(QRegExp(strDetailsElementOptionTypeSerial, Qt::CaseInsensitive)));
     1145}
     1146
     1147/* QString <= UIExtraDataMetaDefs::DetailsElementOptionTypeUsb: */
     1148template<> QString toInternalString(const UIExtraDataMetaDefs::DetailsElementOptionTypeUsb &enmDetailsElementOptionTypeUsb)
     1149{
     1150    QString strResult;
     1151    switch (enmDetailsElementOptionTypeUsb)
     1152    {
     1153        case UIExtraDataMetaDefs::DetailsElementOptionTypeUsb_Controller:    strResult = "Controller"; break;
     1154        case UIExtraDataMetaDefs::DetailsElementOptionTypeUsb_DeviceFilters: strResult = "DeviceFilters"; break;
     1155        default:
     1156        {
     1157            AssertMsgFailed(("No text for details element option type=%d", enmDetailsElementOptionTypeUsb));
     1158            break;
     1159        }
     1160    }
     1161    return strResult;
     1162}
     1163
     1164/* UIExtraDataMetaDefs::DetailsElementOptionTypeUsb <= QString: */
     1165template<> UIExtraDataMetaDefs::DetailsElementOptionTypeUsb fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeUsb>(const QString &strDetailsElementOptionTypeUsb)
     1166{
     1167    /* Here we have some fancy stuff allowing us
     1168     * to search through the keys using 'case-insensitive' rule: */
     1169    QStringList keys;        QList<UIExtraDataMetaDefs::DetailsElementOptionTypeUsb> values;
     1170    keys << "Controller";    values << UIExtraDataMetaDefs::DetailsElementOptionTypeUsb_Controller;
     1171    keys << "DeviceFilters"; values << UIExtraDataMetaDefs::DetailsElementOptionTypeUsb_DeviceFilters;
     1172    /* Invalid type for unknown words: */
     1173    if (!keys.contains(strDetailsElementOptionTypeUsb, Qt::CaseInsensitive))
     1174        return UIExtraDataMetaDefs::DetailsElementOptionTypeUsb_Invalid;
     1175    /* Corresponding type for known words: */
     1176    return values.at(keys.indexOf(QRegExp(strDetailsElementOptionTypeUsb, Qt::CaseInsensitive)));
     1177}
     1178
     1179/* QString <= UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders: */
     1180template<> QString toInternalString(const UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders &enmDetailsElementOptionTypeSharedFolders)
     1181{
     1182    QString strResult;
     1183    switch (enmDetailsElementOptionTypeSharedFolders)
     1184    {
     1185        case UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders_Summary: strResult = "Summary"; break;
     1186        default:
     1187        {
     1188            AssertMsgFailed(("No text for details element option type=%d", enmDetailsElementOptionTypeSharedFolders));
     1189            break;
     1190        }
     1191    }
     1192    return strResult;
     1193}
     1194
     1195/* UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders <= QString: */
     1196template<> UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders>(const QString &strDetailsElementOptionTypeSharedFolders)
     1197{
     1198    /* Here we have some fancy stuff allowing us
     1199     * to search through the keys using 'case-insensitive' rule: */
     1200    QStringList keys;  QList<UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders> values;
     1201    keys << "Summary"; values << UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders_Summary;
     1202    /* Invalid type for unknown words: */
     1203    if (!keys.contains(strDetailsElementOptionTypeSharedFolders, Qt::CaseInsensitive))
     1204        return UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders_Invalid;
     1205    /* Corresponding type for known words: */
     1206    return values.at(keys.indexOf(QRegExp(strDetailsElementOptionTypeSharedFolders, Qt::CaseInsensitive)));
     1207}
     1208
     1209/* QString <= UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface: */
     1210template<> QString toInternalString(const UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface &enmDetailsElementOptionTypeUserInterface)
     1211{
     1212    QString strResult;
     1213    switch (enmDetailsElementOptionTypeUserInterface)
     1214    {
     1215        case UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface_MenuBar:     strResult = "MenuBar"; break;
     1216        case UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface_StatusBar:   strResult = "StatusBar"; break;
     1217        case UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface_MiniToolbar: strResult = "MiniToolbar"; break;
     1218        default:
     1219        {
     1220            AssertMsgFailed(("No text for details element option type=%d", enmDetailsElementOptionTypeUserInterface));
     1221            break;
     1222        }
     1223    }
     1224    return strResult;
     1225}
     1226
     1227/* UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface <= QString: */
     1228template<> UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface>(const QString &strDetailsElementOptionTypeUserInterface)
     1229{
     1230    /* Here we have some fancy stuff allowing us
     1231     * to search through the keys using 'case-insensitive' rule: */
     1232    QStringList keys;      QList<UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface> values;
     1233    keys << "MenuBar";     values << UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface_MenuBar;
     1234    keys << "StatusBar";   values << UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface_StatusBar;
     1235    keys << "MiniToolbar"; values << UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface_MiniToolbar;
     1236    /* Invalid type for unknown words: */
     1237    if (!keys.contains(strDetailsElementOptionTypeUserInterface, Qt::CaseInsensitive))
     1238        return UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface_Invalid;
     1239    /* Corresponding type for known words: */
     1240    return values.at(keys.indexOf(QRegExp(strDetailsElementOptionTypeUserInterface, Qt::CaseInsensitive)));
     1241}
     1242
     1243/* QString <= UIExtraDataMetaDefs::DetailsElementOptionTypeDescription: */
     1244template<> QString toInternalString(const UIExtraDataMetaDefs::DetailsElementOptionTypeDescription &enmDetailsElementOptionTypeDescription)
     1245{
     1246    QString strResult;
     1247    switch (enmDetailsElementOptionTypeDescription)
     1248    {
     1249        case UIExtraDataMetaDefs::DetailsElementOptionTypeDescription_Summary: strResult = "Summary"; break;
     1250        default:
     1251        {
     1252            AssertMsgFailed(("No text for details element option type=%d", enmDetailsElementOptionTypeDescription));
     1253            break;
     1254        }
     1255    }
     1256    return strResult;
     1257}
     1258
     1259/* UIExtraDataMetaDefs::DetailsElementOptionTypeDescription <= QString: */
     1260template<> UIExtraDataMetaDefs::DetailsElementOptionTypeDescription fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeDescription>(const QString &strDetailsElementOptionTypeDescription)
     1261{
     1262    /* Here we have some fancy stuff allowing us
     1263     * to search through the keys using 'case-insensitive' rule: */
     1264    QStringList keys;  QList<UIExtraDataMetaDefs::DetailsElementOptionTypeDescription> values;
     1265    keys << "Summary"; values << UIExtraDataMetaDefs::DetailsElementOptionTypeDescription_Summary;
     1266    /* Invalid type for unknown words: */
     1267    if (!keys.contains(strDetailsElementOptionTypeDescription, Qt::CaseInsensitive))
     1268        return UIExtraDataMetaDefs::DetailsElementOptionTypeDescription_Invalid;
     1269    /* Corresponding type for known words: */
     1270    return values.at(keys.indexOf(QRegExp(strDetailsElementOptionTypeDescription, Qt::CaseInsensitive)));
     1271}
     1272
    8721273/* QString <= UIToolType: */
    8731274template<> QString toInternalString(const UIToolType &enmToolType)
  • trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h

    r75424 r75427  
    417417{
    418418    Q_OBJECT;
     419
     420    /* Menu related stuff: */
    419421    Q_ENUMS(MenuType);
    420422    Q_ENUMS(MenuApplicationActionType);
     
    430432    Q_ENUMS(MenuWindowActionType);
    431433#endif
     434
     435    /* Details pane related stuff: */
     436    Q_ENUMS(DetailsElementOptionTypeGeneral);
     437    Q_ENUMS(DetailsElementOptionTypeSystem);
     438    Q_ENUMS(DetailsElementOptionTypeDisplay);
     439    Q_ENUMS(DetailsElementOptionTypeStorage);
     440    Q_ENUMS(DetailsElementOptionTypeAudio);
     441    Q_ENUMS(DetailsElementOptionTypeNetwork);
     442    Q_ENUMS(DetailsElementOptionTypeSerial);
     443    Q_ENUMS(DetailsElementOptionTypeUsb);
     444    Q_ENUMS(DetailsElementOptionTypeSharedFolders);
     445    Q_ENUMS(DetailsElementOptionTypeUserInterface);
     446    Q_ENUMS(DetailsElementOptionTypeDescription);
    432447
    433448public:
     
    602617    };
    603618#endif /* VBOX_WS_MAC */
     619
     620
     621    /** VirtualBox Manager UI: Details element: "General" option types. */
     622    enum DetailsElementOptionTypeGeneral
     623    {
     624        DetailsElementOptionTypeGeneral_Invalid  = 0,
     625        DetailsElementOptionTypeGeneral_Name     = RT_BIT(0),
     626        DetailsElementOptionTypeGeneral_OS       = RT_BIT(1),
     627        DetailsElementOptionTypeGeneral_Location = RT_BIT(2),
     628        DetailsElementOptionTypeGeneral_Groups   = RT_BIT(3),
     629        DetailsElementOptionTypeGeneral_Default  = 0xFFFF
     630    };
     631
     632    /** VirtualBox Manager UI: Details element: "System" option types. */
     633    enum DetailsElementOptionTypeSystem
     634    {
     635        DetailsElementOptionTypeSystem_Invalid         = 0,
     636        DetailsElementOptionTypeSystem_RAM             = RT_BIT(0),
     637        DetailsElementOptionTypeSystem_CPUCount        = RT_BIT(1),
     638        DetailsElementOptionTypeSystem_CPUExecutionCap = RT_BIT(2),
     639        DetailsElementOptionTypeSystem_BootOrder       = RT_BIT(3),
     640        DetailsElementOptionTypeSystem_ChipsetType     = RT_BIT(4),
     641        DetailsElementOptionTypeSystem_Firmware        = RT_BIT(5),
     642        DetailsElementOptionTypeSystem_Acceleration    = RT_BIT(6),
     643        DetailsElementOptionTypeSystem_Default         = 0xFFFF
     644    };
     645
     646    /** VirtualBox Manager UI: Details element: "Display" option types. */
     647    enum DetailsElementOptionTypeDisplay
     648    {
     649        DetailsElementOptionTypeDisplay_Invalid      = 0,
     650        DetailsElementOptionTypeDisplay_VRAM         = RT_BIT(0),
     651        DetailsElementOptionTypeDisplay_ScreenCount  = RT_BIT(1),
     652        DetailsElementOptionTypeDisplay_ScaleFactor  = RT_BIT(2),
     653        DetailsElementOptionTypeDisplay_Acceleration = RT_BIT(3),
     654        DetailsElementOptionTypeDisplay_VRDE         = RT_BIT(4),
     655        DetailsElementOptionTypeDisplay_Recording    = RT_BIT(5),
     656        DetailsElementOptionTypeDisplay_Default      = 0xFFFF
     657    };
     658
     659    /** VirtualBox Manager UI: Details element: "Storage" option types. */
     660    enum DetailsElementOptionTypeStorage
     661    {
     662        DetailsElementOptionTypeStorage_Invalid        = 0,
     663        DetailsElementOptionTypeStorage_HardDisks      = RT_BIT(0),
     664        DetailsElementOptionTypeStorage_OpticalDevices = RT_BIT(1),
     665        DetailsElementOptionTypeStorage_FloppyDevices  = RT_BIT(2),
     666        DetailsElementOptionTypeStorage_Default        = 0xFFFF
     667    };
     668
     669    /** VirtualBox Manager UI: Details element: "Audio" option types. */
     670    enum DetailsElementOptionTypeAudio
     671    {
     672        DetailsElementOptionTypeAudio_Invalid    = 0,
     673        DetailsElementOptionTypeAudio_Driver     = RT_BIT(0),
     674        DetailsElementOptionTypeAudio_Controller = RT_BIT(1),
     675        DetailsElementOptionTypeAudio_IO         = RT_BIT(2),
     676        DetailsElementOptionTypeAudio_Default    = 0xFFFF
     677    };
     678
     679    /** VirtualBox Manager UI: Details element: "Network" option types. */
     680    enum DetailsElementOptionTypeNetwork
     681    {
     682        DetailsElementOptionTypeNetwork_Invalid         = 0,
     683        DetailsElementOptionTypeNetwork_NotAttached     = RT_BIT(0),
     684        DetailsElementOptionTypeNetwork_NAT             = RT_BIT(1),
     685        DetailsElementOptionTypeNetwork_BridgetAdapter  = RT_BIT(2),
     686        DetailsElementOptionTypeNetwork_InternalNetwork = RT_BIT(3),
     687        DetailsElementOptionTypeNetwork_HostOnlyAdapter = RT_BIT(4),
     688        DetailsElementOptionTypeNetwork_GenericDriver   = RT_BIT(5),
     689        DetailsElementOptionTypeNetwork_Default         = 0xFFFF
     690    };
     691
     692    /** VirtualBox Manager UI: Details element: "Serial" option types. */
     693    enum DetailsElementOptionTypeSerial
     694    {
     695        DetailsElementOptionTypeSerial_Invalid      = 0,
     696        DetailsElementOptionTypeSerial_Disconnected = RT_BIT(0),
     697        DetailsElementOptionTypeSerial_HostPipe     = RT_BIT(1),
     698        DetailsElementOptionTypeSerial_HostDevice   = RT_BIT(2),
     699        DetailsElementOptionTypeSerial_RawFile      = RT_BIT(3),
     700        DetailsElementOptionTypeSerial_TCP          = RT_BIT(4),
     701        DetailsElementOptionTypeSerial_Default      = 0xFFFF
     702    };
     703
     704    /** VirtualBox Manager UI: Details element: "USB" option types. */
     705    enum DetailsElementOptionTypeUsb
     706    {
     707        DetailsElementOptionTypeUsb_Invalid       = 0,
     708        DetailsElementOptionTypeUsb_Controller    = RT_BIT(0),
     709        DetailsElementOptionTypeUsb_DeviceFilters = RT_BIT(1),
     710        DetailsElementOptionTypeUsb_Default       = 0xFFFF
     711    };
     712
     713    /** VirtualBox Manager UI: Details element: "SharedFolders" option types. */
     714    enum DetailsElementOptionTypeSharedFolders
     715    {
     716        DetailsElementOptionTypeSharedFolders_Invalid = 0,
     717        DetailsElementOptionTypeSharedFolders_Summary = RT_BIT(0),
     718        DetailsElementOptionTypeSharedFolders_Default = 0xFFFF
     719    };
     720
     721    /** VirtualBox Manager UI: Details element: "UserInterface" option types. */
     722    enum DetailsElementOptionTypeUserInterface
     723    {
     724        DetailsElementOptionTypeUserInterface_Invalid     = 0,
     725        DetailsElementOptionTypeUserInterface_MenuBar     = RT_BIT(0),
     726        DetailsElementOptionTypeUserInterface_StatusBar   = RT_BIT(1),
     727        DetailsElementOptionTypeUserInterface_MiniToolbar = RT_BIT(2),
     728        DetailsElementOptionTypeUserInterface_Default     = 0xFFFF
     729    };
     730
     731    /** VirtualBox Manager UI: Details element: "Description" option types. */
     732    enum DetailsElementOptionTypeDescription
     733    {
     734        DetailsElementOptionTypeDescription_Invalid = 0,
     735        DetailsElementOptionTypeDescription_Summary = RT_BIT(0),
     736        DetailsElementOptionTypeDescription_Default = 0xFFFF
     737    };
    604738};
    605739
  • trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp

    r75424 r75427  
    29192919}
    29202920
     2921QStringList UIExtraDataManager::vboxManagerDetailsPaneElementOptions(DetailsElementType enmElementType)
     2922{
     2923    /* Compose full key from GUI_Details_Elements and enmElementType: */
     2924    QString strElementType = gpConverter->toInternalString(enmElementType);
     2925    AssertReturn(!strElementType.isEmpty(), QStringList());
     2926    strElementType[0] = strElementType.at(0).toUpper();
     2927    const QString strFullKey = QString("%1/%2").arg(GUI_Details_Elements).arg(strElementType);
     2928
     2929    /* Returns option list: */
     2930    return extraDataStringList(strFullKey);
     2931}
     2932
    29212933bool UIExtraDataManager::snapshotManagerDetailsExpanded()
    29222934{
     
    45834595            else if (strKey == GUI_Input_HostKeyCombination)
    45844596                emit sigRuntimeUIHostKeyCombinationChange();
     4597            /* Details options: */
     4598            else if (strKey.startsWith(QString(GUI_Details_Elements) + '/'))
     4599            {
     4600                QString strLeftover = strKey;
     4601                strLeftover.remove(QString(GUI_Details_Elements) + '/');
     4602                const DetailsElementType enmType = gpConverter->fromInternalString<DetailsElementType>(strLeftover);
     4603                if (enmType != DetailsElementType_Invalid)
     4604                    emit sigDetailsOptionsChange(enmType);
     4605            }
    45854606        }
    45864607    }
  • trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h

    r75424 r75427  
    7171    /** Notifies about Runtime UI host-key combination change. */
    7272    void sigRuntimeUIHostKeyCombinationChange();
     73
     74    /** Notifies about VirtualBox Manager / Details pane options change. */
     75    void sigDetailsOptionsChange(DetailsElementType enmType);
    7376
    7477    /** Notifies about menu-bar configuration change. */
     
    341344        /** Defines selector-window details-pane' preview update @a interval. */
    342345        void setSelectorWindowPreviewUpdateInterval(PreviewUpdateIntervalType interval);
     346
     347        /** Returns VirtualBox Manager / Details pane options for certain @a enmElementType. */
     348        QStringList vboxManagerDetailsPaneElementOptions(DetailsElementType enmElementType);
    343349    /** @} */
    344350
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/details/UIDetails.cpp

    r74679 r75427  
    2727# include "UIDetailsModel.h"
    2828# include "UIDetailsView.h"
     29# include "UIExtraDataManager.h"
    2930
    3031#endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
     
    7374    }
    7475
     76    /* Extra-data events connections: */
     77    connect(gEDataManager, &UIExtraDataManager::sigDetailsOptionsChange,
     78            m_pDetailsModel, &UIDetailsModel::sltHandleExtraDataOptionsChange);
     79
    7580    /* Setup details-model connections: */
    7681    connect(m_pDetailsModel, &UIDetailsModel::sigRootItemMinimumWidthHintChanged,
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/details/UIDetailsElement.cpp

    r74878 r75427  
    3434# include "UIDetailsSet.h"
    3535# include "UIDetailsModel.h"
     36# include "UIExtraDataManager.h"
    3637# include "UIGraphicsRotatorButton.h"
    3738# include "UIGraphicsTextPane.h"
     
    249250}
    250251
     252QStringList UIDetailsElement::extraDataOptions() const
     253{
     254    return gEDataManager->vboxManagerDetailsPaneElementOptions(elementType());
     255}
     256
    251257const CMachine &UIDetailsElement::machine()
    252258{
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/details/UIDetailsElement.h

    r74942 r75427  
    155155        /** Returns the description of the item. */
    156156        virtual QString description() const /* override */;
     157
     158        /** Returns extra-data options. */
     159        QStringList extraDataOptions() const;
    157160
    158161        /** Returns cached machine reference. */
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/details/UIDetailsElements.cpp

    r75426 r75427  
    242242    {
    243243        /* Name: */
    244         table << UITextTableLine(QApplication::translate("UIDetails", "Name", "details (general)"), comMachine.GetName());
    245 
    246         /* Operating System: */
    247         table << UITextTableLine(QApplication::translate("UIDetails", "Operating System", "details (general)"),
    248                                  vboxGlobal().vmGuestOSTypeDescription(comMachine.GetOSTypeId()));
    249 
    250         /* Settings File Location: */
    251         table << UITextTableLine(QApplication::translate("UIDetails", "Settings File Location", "details (general)"),
    252                                  QDir::toNativeSeparators(QFileInfo(comMachine.GetSettingsFilePath()).absolutePath()));
     244        if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral_Name)
     245            table << UITextTableLine(QApplication::translate("UIDetails", "Name", "details (general)"), comMachine.GetName());
     246
     247        /* Operating system: */
     248        if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral_OS)
     249            table << UITextTableLine(QApplication::translate("UIDetails", "Operating System", "details (general)"),
     250                                     vboxGlobal().vmGuestOSTypeDescription(comMachine.GetOSTypeId()));
     251
     252        /* Settings file location: */
     253        if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral_Location)
     254            table << UITextTableLine(QApplication::translate("UIDetails", "Settings File Location", "details (general)"),
     255                                     QDir::toNativeSeparators(QFileInfo(comMachine.GetSettingsFilePath()).absolutePath()));
    253256
    254257        /* Groups: */
    255         QStringList groups = comMachine.GetGroups().toList();
    256         /* Do not show groups for machine which is in root group only: */
    257         if (groups.size() == 1)
    258             groups.removeAll("/");
    259         /* If group list still not empty: */
    260         if (!groups.isEmpty())
    261         {
    262             /* For every group: */
    263             for (int i = 0; i < groups.size(); ++i)
    264             {
    265                 /* Trim first '/' symbol: */
    266                 QString &strGroup = groups[i];
    267                 if (strGroup.startsWith("/") && strGroup != "/")
    268                     strGroup.remove(0, 1);
    269             }
    270             table << UITextTableLine(QApplication::translate("UIDetails", "Groups", "details (general)"), groups.join(", "));
     258        if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral_Groups)
     259        {
     260            QStringList groups = comMachine.GetGroups().toList();
     261            /* Do not show groups for machine which is in root group only: */
     262            if (groups.size() == 1)
     263                groups.removeAll("/");
     264            /* If group list still not empty: */
     265            if (!groups.isEmpty())
     266            {
     267                /* For every group: */
     268                for (int i = 0; i < groups.size(); ++i)
     269                {
     270                    /* Trim first '/' symbol: */
     271                    QString &strGroup = groups[i];
     272                    if (strGroup.startsWith("/") && strGroup != "/")
     273                        strGroup.remove(0, 1);
     274                }
     275                table << UITextTableLine(QApplication::translate("UIDetails", "Groups", "details (general)"), groups.join(", "));
     276            }
    271277        }
    272278    }
     
    276282    /* Save the table as property: */
    277283    setProperty("table", QVariant::fromValue(table));
     284}
     285
     286UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral UIDetailsElementGeneral::parsedExtraDataOptions()
     287{
     288    UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral options = UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral_Invalid;
     289    foreach (const QString &strOption, extraDataOptions())
     290    {
     291        const UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral enmOption =
     292            gpConverter->fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral>(strOption);
     293        if (enmOption != UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral_Invalid)
     294            options = static_cast<UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral>(options | enmOption);
     295    }
     296    if (options == UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral_Invalid)
     297        options = UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral_Default;
     298    return options;
    278299}
    279300
     
    293314    {
    294315        /* Base memory: */
    295         table << UITextTableLine(QApplication::translate("UIDetails", "Base Memory", "details (system)"),
    296                                  QApplication::translate("UIDetails", "%1 MB", "details").arg(comMachine.GetMemorySize()));
    297 
    298         /* CPU count: */
    299         const int cCPU = comMachine.GetCPUCount();
    300         if (cCPU > 1)
    301             table << UITextTableLine(QApplication::translate("UIDetails", "Processors", "details (system)"),
    302                                      QString::number(cCPU));
    303 
    304         /* CPU execution cap: */
    305         const int iCPUExecutionCap = comMachine.GetCPUExecutionCap();
    306         if (iCPUExecutionCap < 100)
    307             table << UITextTableLine(QApplication::translate("UIDetails", "Execution Cap", "details (system)"),
    308                                      QApplication::translate("UIDetails", "%1%", "details").arg(iCPUExecutionCap));
    309 
    310         /* Boot-order: */
    311         QStringList bootOrder;
    312         for (ulong i = 1; i <= vboxGlobal().virtualBox().GetSystemProperties().GetMaxBootPosition(); ++i)
    313         {
    314             const KDeviceType enmDeviceType = comMachine.GetBootOrder(i);
    315             if (enmDeviceType == KDeviceType_Null)
    316                 continue;
    317             bootOrder << gpConverter->toString(enmDeviceType);
    318         }
    319         if (bootOrder.isEmpty())
    320             bootOrder << gpConverter->toString(KDeviceType_Null);
    321         table << UITextTableLine(QApplication::translate("UIDetails", "Boot Order", "details (system)"), bootOrder.join(", "));
     316        if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_RAM)
     317            table << UITextTableLine(QApplication::translate("UIDetails", "Base Memory", "details (system)"),
     318                                     QApplication::translate("UIDetails", "%1 MB", "details").arg(comMachine.GetMemorySize()));
     319
     320        /* Processors: */
     321        if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_CPUCount)
     322        {
     323            const int cCPU = comMachine.GetCPUCount();
     324            if (cCPU > 1)
     325                table << UITextTableLine(QApplication::translate("UIDetails", "Processors", "details (system)"),
     326                                         QString::number(cCPU));
     327        }
     328
     329        /* Execution cap: */
     330        if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_CPUExecutionCap)
     331        {
     332            const int iCPUExecutionCap = comMachine.GetCPUExecutionCap();
     333            if (iCPUExecutionCap < 100)
     334                table << UITextTableLine(QApplication::translate("UIDetails", "Execution Cap", "details (system)"),
     335                                         QApplication::translate("UIDetails", "%1%", "details").arg(iCPUExecutionCap));
     336        }
     337
     338        /* Boot order: */
     339        if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_BootOrder)
     340        {
     341            QStringList bootOrder;
     342            for (ulong i = 1; i <= vboxGlobal().virtualBox().GetSystemProperties().GetMaxBootPosition(); ++i)
     343            {
     344                const KDeviceType enmDeviceType = comMachine.GetBootOrder(i);
     345                if (enmDeviceType == KDeviceType_Null)
     346                    continue;
     347                bootOrder << gpConverter->toString(enmDeviceType);
     348            }
     349            if (bootOrder.isEmpty())
     350                bootOrder << gpConverter->toString(KDeviceType_Null);
     351            table << UITextTableLine(QApplication::translate("UIDetails", "Boot Order", "details (system)"), bootOrder.join(", "));
     352        }
    322353
    323354        /* Chipset type: */
    324         const KChipsetType enmChipsetType = comMachine.GetChipsetType();
    325         if (enmChipsetType == KChipsetType_ICH9)
    326             table << UITextTableLine(QApplication::translate("UIDetails", "Chipset Type", "details (system)"),
    327                                      gpConverter->toString(enmChipsetType));
    328 
    329         /* Firware type: */
    330         switch (comMachine.GetFirmwareType())
    331         {
    332             case KFirmwareType_EFI:
    333             case KFirmwareType_EFI32:
    334             case KFirmwareType_EFI64:
    335             case KFirmwareType_EFIDUAL:
    336             {
    337                 table << UITextTableLine(QApplication::translate("UIDetails", "EFI", "details (system)"),
    338                                          QApplication::translate("UIDetails", "Enabled", "details (system/EFI)"));
    339                 break;
    340             }
    341             default:
    342             {
    343                 // For NLS purpose:
    344                 QApplication::translate("UIDetails", "Disabled", "details (system/EFI)");
    345                 break;
     355        if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_ChipsetType)
     356        {
     357            const KChipsetType enmChipsetType = comMachine.GetChipsetType();
     358            if (enmChipsetType == KChipsetType_ICH9)
     359                table << UITextTableLine(QApplication::translate("UIDetails", "Chipset Type", "details (system)"),
     360                                         gpConverter->toString(enmChipsetType));
     361        }
     362
     363        /* EFI: */
     364        if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_Firmware)
     365        {
     366            switch (comMachine.GetFirmwareType())
     367            {
     368                case KFirmwareType_EFI:
     369                case KFirmwareType_EFI32:
     370                case KFirmwareType_EFI64:
     371                case KFirmwareType_EFIDUAL:
     372                {
     373                    table << UITextTableLine(QApplication::translate("UIDetails", "EFI", "details (system)"),
     374                                             QApplication::translate("UIDetails", "Enabled", "details (system/EFI)"));
     375                    break;
     376                }
     377                default:
     378                {
     379                    // For NLS purpose:
     380                    QApplication::translate("UIDetails", "Disabled", "details (system/EFI)");
     381                    break;
     382                }
    346383            }
    347384        }
    348385
    349386        /* Acceleration: */
    350         QStringList acceleration;
    351         if (vboxGlobal().virtualBox().GetHost().GetProcessorFeature(KProcessorFeature_HWVirtEx))
    352         {
    353             /* VT-x/AMD-V: */
    354             if (comMachine.GetHWVirtExProperty(KHWVirtExPropertyType_Enabled))
    355             {
    356                 acceleration << QApplication::translate("UIDetails", "VT-x/AMD-V", "details (system)");
    357                 /* Nested Paging (only when hw virt is enabled): */
    358                 if (comMachine.GetHWVirtExProperty(KHWVirtExPropertyType_NestedPaging))
    359                     acceleration << QApplication::translate("UIDetails", "Nested Paging", "details (system)");
    360             }
    361         }
    362         /* PAE/NX: */
    363         if (comMachine.GetCPUProperty(KCPUPropertyType_PAE))
    364             acceleration << QApplication::translate("UIDetails", "PAE/NX", "details (system)");
    365         /* Paravirtualization provider: */
    366         switch (comMachine.GetEffectiveParavirtProvider())
    367         {
    368             case KParavirtProvider_Minimal: acceleration << QApplication::translate("UIDetails", "Minimal Paravirtualization", "details (system)"); break;
    369             case KParavirtProvider_HyperV:  acceleration << QApplication::translate("UIDetails", "Hyper-V Paravirtualization", "details (system)"); break;
    370             case KParavirtProvider_KVM:     acceleration << QApplication::translate("UIDetails", "KVM Paravirtualization", "details (system)"); break;
    371             default: break;
    372         }
    373         if (!acceleration.isEmpty())
    374             table << UITextTableLine(QApplication::translate("UIDetails", "Acceleration", "details (system)"),
    375                                      acceleration.join(", "));
     387        if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_Acceleration)
     388        {
     389            QStringList acceleration;
     390            if (vboxGlobal().virtualBox().GetHost().GetProcessorFeature(KProcessorFeature_HWVirtEx))
     391            {
     392                /* VT-x/AMD-V: */
     393                if (comMachine.GetHWVirtExProperty(KHWVirtExPropertyType_Enabled))
     394                {
     395                    acceleration << QApplication::translate("UIDetails", "VT-x/AMD-V", "details (system)");
     396                    /* Nested Paging (only when hw virt is enabled): */
     397                    if (comMachine.GetHWVirtExProperty(KHWVirtExPropertyType_NestedPaging))
     398                        acceleration << QApplication::translate("UIDetails", "Nested Paging", "details (system)");
     399                }
     400            }
     401            /* PAE/NX: */
     402            if (comMachine.GetCPUProperty(KCPUPropertyType_PAE))
     403                acceleration << QApplication::translate("UIDetails", "PAE/NX", "details (system)");
     404            /* Paravirtualization provider: */
     405            switch (comMachine.GetEffectiveParavirtProvider())
     406            {
     407                case KParavirtProvider_Minimal: acceleration << QApplication::translate("UIDetails", "Minimal Paravirtualization", "details (system)"); break;
     408                case KParavirtProvider_HyperV:  acceleration << QApplication::translate("UIDetails", "Hyper-V Paravirtualization", "details (system)"); break;
     409                case KParavirtProvider_KVM:     acceleration << QApplication::translate("UIDetails", "KVM Paravirtualization", "details (system)"); break;
     410                default: break;
     411            }
     412            if (!acceleration.isEmpty())
     413                table << UITextTableLine(QApplication::translate("UIDetails", "Acceleration", "details (system)"),
     414                                         acceleration.join(", "));
     415        }
    376416    }
    377417    else
     
    381421    /* Save the table as property: */
    382422    setProperty("table", QVariant::fromValue(table));
     423}
     424
     425UIExtraDataMetaDefs::DetailsElementOptionTypeSystem UIDetailsElementSystem::parsedExtraDataOptions()
     426{
     427    UIExtraDataMetaDefs::DetailsElementOptionTypeSystem options = UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_Invalid;
     428    foreach (const QString &strOption, extraDataOptions())
     429    {
     430        const UIExtraDataMetaDefs::DetailsElementOptionTypeSystem enmOption =
     431            gpConverter->fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeSystem>(strOption);
     432        if (enmOption != UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_Invalid)
     433            options = static_cast<UIExtraDataMetaDefs::DetailsElementOptionTypeSystem>(options | enmOption);
     434    }
     435    if (options == UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_Invalid)
     436        options = UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_Default;
     437    return options;
    383438}
    384439
     
    398453    {
    399454        /* Video memory: */
    400         table << UITextTableLine(QApplication::translate("UIDetails", "Video Memory", "details (display)"),
    401                                  QApplication::translate("UIDetails", "%1 MB", "details").arg(comMachine.GetVRAMSize()));
    402 
    403         /* Screen count: */
    404         const int cGuestScreens = comMachine.GetMonitorCount();
    405         if (cGuestScreens > 1)
    406             table << UITextTableLine(QApplication::translate("UIDetails", "Screens", "details (display)"),
    407                                      QString::number(cGuestScreens));
     455        if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_VRAM)
     456            table << UITextTableLine(QApplication::translate("UIDetails", "Video Memory", "details (display)"),
     457                                     QApplication::translate("UIDetails", "%1 MB", "details").arg(comMachine.GetVRAMSize()));
     458
     459        /* Screens: */
     460        if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_ScreenCount)
     461        {
     462            const int cGuestScreens = comMachine.GetMonitorCount();
     463            if (cGuestScreens > 1)
     464                table << UITextTableLine(QApplication::translate("UIDetails", "Screens", "details (display)"),
     465                                         QString::number(cGuestScreens));
     466        }
    408467
    409468        /* Scale-factor: */
    410         const QString strScaleFactor = comMachine.GetExtraData(UIExtraDataDefs::GUI_ScaleFactor);
    411         {
    412             /* Try to convert loaded data to double: */
    413             bool fOk = false;
    414             double dValue = strScaleFactor.toDouble(&fOk);
    415             /* Invent the default value: */
    416             if (!fOk || !dValue)
    417                 dValue = 1.0;
    418             /* Append information: */
    419             if (dValue != 1.0)
    420                 table << UITextTableLine(QApplication::translate("UIDetails", "Scale-factor", "details (display)"),
    421                                          QString::number(dValue, 'f', 2));
     469        if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_ScaleFactor)
     470        {
     471            const QString strScaleFactor = comMachine.GetExtraData(UIExtraDataDefs::GUI_ScaleFactor);
     472            {
     473                /* Try to convert loaded data to double: */
     474                bool fOk = false;
     475                double dValue = strScaleFactor.toDouble(&fOk);
     476                /* Invent the default value: */
     477                if (!fOk || !dValue)
     478                    dValue = 1.0;
     479                /* Append information: */
     480                if (dValue != 1.0)
     481                    table << UITextTableLine(QApplication::translate("UIDetails", "Scale-factor", "details (display)"),
     482                                             QString::number(dValue, 'f', 2));
     483            }
    422484        }
    423485
    424486        /* Acceleration: */
    425         QStringList acceleration;
     487        if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_Acceleration)
     488        {
     489            QStringList acceleration;
    426490#ifdef VBOX_WITH_VIDEOHWACCEL
    427         /* 2D acceleration: */
    428         if (comMachine.GetAccelerate2DVideoEnabled())
    429             acceleration << QApplication::translate("UIDetails", "2D Video", "details (display)");
     491            /* 2D acceleration: */
     492            if (comMachine.GetAccelerate2DVideoEnabled())
     493                acceleration << QApplication::translate("UIDetails", "2D Video", "details (display)");
    430494#endif
    431         /* 3D acceleration: */
    432         if (comMachine.GetAccelerate3DEnabled())
    433             acceleration << QApplication::translate("UIDetails", "3D", "details (display)");
    434         if (!acceleration.isEmpty())
    435             table << UITextTableLine(QApplication::translate("UIDetails", "Acceleration", "details (display)"),
    436                                      acceleration.join(", "));
    437 
    438         /* VRDE: */
    439         const CVRDEServer comServer = comMachine.GetVRDEServer();
    440         if (!comServer.isNull())
    441         {
    442             if (comServer.GetEnabled())
    443                 table << UITextTableLine(QApplication::translate("UIDetails", "Remote Desktop Server Port", "details (display/vrde)"),
    444                                          comServer.GetVRDEProperty("TCP/Ports"));
     495            /* 3D acceleration: */
     496            if (comMachine.GetAccelerate3DEnabled())
     497                acceleration << QApplication::translate("UIDetails", "3D", "details (display)");
     498            if (!acceleration.isEmpty())
     499                table << UITextTableLine(QApplication::translate("UIDetails", "Acceleration", "details (display)"),
     500                                         acceleration.join(", "));
     501        }
     502
     503        /* Remote desktop server: */
     504        if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_VRDE)
     505        {
     506            const CVRDEServer comServer = comMachine.GetVRDEServer();
     507            if (!comServer.isNull())
     508            {
     509                if (comServer.GetEnabled())
     510                    table << UITextTableLine(QApplication::translate("UIDetails", "Remote Desktop Server Port", "details (display/vrde)"),
     511                                             comServer.GetVRDEProperty("TCP/Ports"));
     512                else
     513                    table << UITextTableLine(QApplication::translate("UIDetails", "Remote Desktop Server", "details (display/vrde)"),
     514                                             QApplication::translate("UIDetails", "Disabled", "details (display/vrde/VRDE server)"));
     515            }
     516        }
     517
     518        /* Recording: */
     519        if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_Recording)
     520        {
     521            CRecordingSettings comRecordingSettings = comMachine.GetRecordingSettings();
     522            if (comRecordingSettings.GetEnabled())
     523            {
     524                /* For now all screens have the same config: */
     525                const CRecordingScreenSettings comRecordingScreen0Settings = comRecordingSettings.GetScreenSettings(0);
     526
     527                /** @todo r=andy Refine these texts (wrt audio and/or video). */
     528                table << UITextTableLine(QApplication::translate("UIDetails", "Recording File", "details (display/recording)"),
     529                                         comRecordingScreen0Settings.GetFileName());
     530                table << UITextTableLine(QApplication::translate("UIDetails", "Recording Attributes", "details (display/recording)"),
     531                                         QApplication::translate("UIDetails", "Frame Size: %1x%2, Frame Rate: %3fps, Bit Rate: %4kbps")
     532                                             .arg(comRecordingScreen0Settings.GetVideoWidth()).arg(comRecordingScreen0Settings.GetVideoHeight())
     533                                             .arg(comRecordingScreen0Settings.GetVideoFPS()).arg(comRecordingScreen0Settings.GetVideoRate()));
     534            }
    445535            else
    446                 table << UITextTableLine(QApplication::translate("UIDetails", "Remote Desktop Server", "details (display/vrde)"),
    447                                          QApplication::translate("UIDetails", "Disabled", "details (display/vrde/VRDE server)"));
    448         }
    449 
    450         /* Recording info: */
    451         CRecordingSettings comRecordingSettings = comMachine.GetRecordingSettings();
    452         if (comRecordingSettings.GetEnabled())
    453         {
    454             /* For now all screens have the same config: */
    455             const CRecordingScreenSettings comRecordingScreen0Settings = comRecordingSettings.GetScreenSettings(0);
    456 
    457             /** @todo r=andy Refine these texts (wrt audio and/or video). */
    458             table << UITextTableLine(QApplication::translate("UIDetails", "Recording File", "details (display/recording)"),
    459                                      comRecordingScreen0Settings.GetFileName());
    460             table << UITextTableLine(QApplication::translate("UIDetails", "Recording Attributes", "details (display/recording)"),
    461                                      QApplication::translate("UIDetails", "Frame Size: %1x%2, Frame Rate: %3fps, Bit Rate: %4kbps")
    462                                          .arg(comRecordingScreen0Settings.GetVideoWidth()).arg(comRecordingScreen0Settings.GetVideoHeight())
    463                                          .arg(comRecordingScreen0Settings.GetVideoFPS()).arg(comRecordingScreen0Settings.GetVideoRate()));
    464         }
    465         else
    466         {
    467             table << UITextTableLine(QApplication::translate("UIDetails", "Recording", "details (display/recording)"),
    468                                      QApplication::translate("UIDetails", "Disabled", "details (display/recording)"));
     536            {
     537                table << UITextTableLine(QApplication::translate("UIDetails", "Recording", "details (display/recording)"),
     538                                         QApplication::translate("UIDetails", "Disabled", "details (display/recording)"));
     539            }
    469540        }
    470541    }
     
    474545    /* Save the table as property: */
    475546    setProperty("table", QVariant::fromValue(table));
     547}
     548
     549UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay UIDetailsElementDisplay::parsedExtraDataOptions()
     550{
     551    UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay options = UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_Invalid;
     552    foreach (const QString &strOption, extraDataOptions())
     553    {
     554        const UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay enmOption =
     555            gpConverter->fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay>(strOption);
     556        if (enmOption != UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_Invalid)
     557            options = static_cast<UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay>(options | enmOption);
     558    }
     559    if (options == UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_Invalid)
     560        options = UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_Default;
     561    return options;
    476562}
    477563
     
    502588                /* Acquire device type first of all: */
    503589                const KDeviceType enmDeviceType = attachment.GetType();
     590
     591                /* Ignore restricted device types: */
     592                if (   (   !(m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeStorage_HardDisks)
     593                        && enmDeviceType == KDeviceType_HardDisk)
     594                    || (   !(m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeStorage_OpticalDevices)
     595                        && enmDeviceType == KDeviceType_DVD)
     596                    || (   !(m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeStorage_FloppyDevices)
     597                        && enmDeviceType == KDeviceType_Floppy))
     598                    continue;
    504599
    505600                /* Prepare current storage slot: */
     
    561656}
    562657
     658UIExtraDataMetaDefs::DetailsElementOptionTypeStorage UIDetailsElementStorage::parsedExtraDataOptions()
     659{
     660    UIExtraDataMetaDefs::DetailsElementOptionTypeStorage options = UIExtraDataMetaDefs::DetailsElementOptionTypeStorage_Invalid;
     661    foreach (const QString &strOption, extraDataOptions())
     662    {
     663        const UIExtraDataMetaDefs::DetailsElementOptionTypeStorage enmOption =
     664            gpConverter->fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeStorage>(strOption);
     665        if (enmOption != UIExtraDataMetaDefs::DetailsElementOptionTypeStorage_Invalid)
     666            options = static_cast<UIExtraDataMetaDefs::DetailsElementOptionTypeStorage>(options | enmOption);
     667    }
     668    if (options == UIExtraDataMetaDefs::DetailsElementOptionTypeStorage_Invalid)
     669        options = UIExtraDataMetaDefs::DetailsElementOptionTypeStorage_Default;
     670    return options;
     671}
     672
    563673
    564674void UIDetailsUpdateTaskAudio::run()
     
    578688        if (comAudio.GetEnabled())
    579689        {
    580             /* Driver: */
    581             table << UITextTableLine(QApplication::translate("UIDetails", "Host Driver", "details (audio)"),
    582                                      gpConverter->toString(comAudio.GetAudioDriver()));
     690            /* Host driver: */
     691            if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeAudio_Driver)
     692                table << UITextTableLine(QApplication::translate("UIDetails", "Host Driver", "details (audio)"),
     693                                         gpConverter->toString(comAudio.GetAudioDriver()));
    583694
    584695            /* Controller: */
    585             table << UITextTableLine(QApplication::translate("UIDetails", "Controller", "details (audio)"),
    586                                      gpConverter->toString(comAudio.GetAudioController()));
     696            if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeAudio_Controller)
     697                table << UITextTableLine(QApplication::translate("UIDetails", "Controller", "details (audio)"),
     698                                         gpConverter->toString(comAudio.GetAudioController()));
    587699
    588700#ifdef VBOX_WITH_AUDIO_INOUT_INFO
    589             /* I/O: */
    590             table << UITextTableLine(QApplication::translate("UIDetails", "Audio Output", "details (audio)"),
    591                                      comAudio.GetEnabledOut() ?
    592                                      QApplication::translate("UIDetails", "Enabled", "details (audio/output)") :
    593                                      QApplication::translate("UIDetails", "Disabled", "details (audio/output)"));
    594             table << UITextTableLine(QApplication::translate("UIDetails", "Audio Input", "details (audio)"),
    595                                      comAudio.GetEnabledIn() ?
    596                                      QApplication::translate("UIDetails", "Enabled", "details (audio/input)") :
    597                                      QApplication::translate("UIDetails", "Disabled", "details (audio/input)"));
     701            /* Audio I/O: */
     702            if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeAudio_IO)
     703            {
     704                table << UITextTableLine(QApplication::translate("UIDetails", "Audio Input", "details (audio)"),
     705                                         comAudio.GetEnabledIn() ?
     706                                         QApplication::translate("UIDetails", "Enabled", "details (audio/input)") :
     707                                         QApplication::translate("UIDetails", "Disabled", "details (audio/input)"));
     708                table << UITextTableLine(QApplication::translate("UIDetails", "Audio Output", "details (audio)"),
     709                                         comAudio.GetEnabledOut() ?
     710                                         QApplication::translate("UIDetails", "Enabled", "details (audio/output)") :
     711                                         QApplication::translate("UIDetails", "Disabled", "details (audio/output)"));
     712            }
    598713#endif /* VBOX_WITH_AUDIO_INOUT_INFO */
    599714        }
     
    608723    /* Save the table as property: */
    609724    setProperty("table", QVariant::fromValue(table));
     725}
     726
     727UIExtraDataMetaDefs::DetailsElementOptionTypeAudio UIDetailsElementAudio::parsedExtraDataOptions()
     728{
     729    UIExtraDataMetaDefs::DetailsElementOptionTypeAudio options = UIExtraDataMetaDefs::DetailsElementOptionTypeAudio_Invalid;
     730    foreach (const QString &strOption, extraDataOptions())
     731    {
     732        const UIExtraDataMetaDefs::DetailsElementOptionTypeAudio enmOption =
     733            gpConverter->fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeAudio>(strOption);
     734        if (enmOption != UIExtraDataMetaDefs::DetailsElementOptionTypeAudio_Invalid)
     735            options = static_cast<UIExtraDataMetaDefs::DetailsElementOptionTypeAudio>(options | enmOption);
     736    }
     737    if (options == UIExtraDataMetaDefs::DetailsElementOptionTypeAudio_Invalid)
     738        options = UIExtraDataMetaDefs::DetailsElementOptionTypeAudio_Default;
     739    return options;
    610740}
    611741
     
    642772                case KNetworkAttachmentType_Bridged:
    643773                {
    644                     strAttachmentType = strAttachmentTemplate.arg(QApplication::translate("UIDetails", "Bridged Adapter, %1", "details (network)")
    645                                                                   .arg(comAdapter.GetBridgedInterface()));
     774                    if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_BridgetAdapter)
     775                        strAttachmentType = strAttachmentTemplate.arg(QApplication::translate("UIDetails", "Bridged Adapter, %1", "details (network)")
     776                                                                      .arg(comAdapter.GetBridgedInterface()));
    646777                    break;
    647778                }
    648779                case KNetworkAttachmentType_Internal:
    649780                {
    650                     strAttachmentType = strAttachmentTemplate.arg(QApplication::translate("UIDetails", "Internal Network, '%1'", "details (network)")
    651                                                                   .arg(comAdapter.GetInternalNetwork()));
     781                    if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_InternalNetwork)
     782                        strAttachmentType = strAttachmentTemplate.arg(QApplication::translate("UIDetails", "Internal Network, '%1'", "details (network)")
     783                                                                      .arg(comAdapter.GetInternalNetwork()));
    652784                    break;
    653785                }
    654786                case KNetworkAttachmentType_HostOnly:
    655787                {
    656                     strAttachmentType = strAttachmentTemplate.arg(QApplication::translate("UIDetails", "Host-only Adapter, '%1'", "details (network)")
    657                                                                   .arg(comAdapter.GetHostOnlyInterface()));
     788                    if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_HostOnlyAdapter)
     789                        strAttachmentType = strAttachmentTemplate.arg(QApplication::translate("UIDetails", "Host-only Adapter, '%1'", "details (network)")
     790                                                                      .arg(comAdapter.GetHostOnlyInterface()));
    658791                    break;
    659792                }
    660793                case KNetworkAttachmentType_Generic:
    661794                {
    662                     const QString strGenericDriverProperties(summarizeGenericProperties(comAdapter));
    663                     strAttachmentType = strGenericDriverProperties.isNull() ?
    664                         strAttachmentTemplate.arg(QApplication::translate("UIDetails", "Generic Driver, '%1'", "details (network)")
    665                                                   .arg(comAdapter.GetGenericDriver())) :
    666                         strAttachmentTemplate.arg(QApplication::translate("UIDetails", "Generic Driver, '%1' { %2 }", "details (network)")
    667                                                   .arg(comAdapter.GetGenericDriver(), strGenericDriverProperties));
     795                    if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_GenericDriver)
     796                    {
     797                        const QString strGenericDriverProperties(summarizeGenericProperties(comAdapter));
     798                        strAttachmentType = strGenericDriverProperties.isNull() ?
     799                            strAttachmentTemplate.arg(QApplication::translate("UIDetails", "Generic Driver, '%1'", "details (network)")
     800                                                      .arg(comAdapter.GetGenericDriver())) :
     801                            strAttachmentTemplate.arg(QApplication::translate("UIDetails", "Generic Driver, '%1' { %2 }", "details (network)")
     802                                                      .arg(comAdapter.GetGenericDriver(), strGenericDriverProperties));
     803                    }
    668804                    break;
    669805                }
    670806                case KNetworkAttachmentType_NATNetwork:
    671807                {
    672                     strAttachmentType = strAttachmentTemplate.arg(QApplication::translate("UIDetails", "NAT Network, '%1'", "details (network)")
    673                                                                   .arg(comAdapter.GetNATNetwork()));
     808                    if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_NAT)
     809                        strAttachmentType = strAttachmentTemplate.arg(QApplication::translate("UIDetails", "NAT Network, '%1'", "details (network)")
     810                                                                      .arg(comAdapter.GetNATNetwork()));
    674811                    break;
    675812                }
    676813                default:
    677814                {
    678                     strAttachmentType = strAttachmentTemplate.arg(gpConverter->toString(enmType));
     815                    if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_NotAttached)
     816                        strAttachmentType = strAttachmentTemplate.arg(gpConverter->toString(enmType));
    679817                    break;
    680818                }
     
    691829    /* Save the table as property: */
    692830    setProperty("table", QVariant::fromValue(table));
     831}
     832
     833UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork UIDetailsElementNetwork::parsedExtraDataOptions()
     834{
     835    UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork options = UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_Invalid;
     836    foreach (const QString &strOption, extraDataOptions())
     837    {
     838        const UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork enmOption =
     839            gpConverter->fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork>(strOption);
     840        if (enmOption != UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_Invalid)
     841            options = static_cast<UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork>(options | enmOption);
     842    }
     843    if (options == UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_Invalid)
     844        options = UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_Default;
     845    return options;
    693846}
    694847
     
    741894                case KPortMode_HostPipe:
    742895                {
    743                     strModeType = strModeTemplate + QString("%1 (%2)").arg(gpConverter->toString(enmMode)).arg(QDir::toNativeSeparators(comPort.GetPath()));
     896                    if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeSerial_HostPipe)
     897                        strModeType = strModeTemplate + QString("%1 (%2)").arg(gpConverter->toString(enmMode)).arg(QDir::toNativeSeparators(comPort.GetPath()));
    744898                    break;
    745899                }
    746900                case KPortMode_HostDevice:
    747901                {
    748                     strModeType = strModeTemplate + QString("%1 (%2)").arg(gpConverter->toString(enmMode)).arg(QDir::toNativeSeparators(comPort.GetPath()));
     902                    if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeSerial_HostDevice)
     903                        strModeType = strModeTemplate + QString("%1 (%2)").arg(gpConverter->toString(enmMode)).arg(QDir::toNativeSeparators(comPort.GetPath()));
    749904                    break;
    750905                }
    751906                case KPortMode_RawFile:
    752907                {
    753                     strModeType = strModeTemplate + QString("%1 (%2)").arg(gpConverter->toString(enmMode)).arg(QDir::toNativeSeparators(comPort.GetPath()));
     908                    if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeSerial_RawFile)
     909                        strModeType = strModeTemplate + QString("%1 (%2)").arg(gpConverter->toString(enmMode)).arg(QDir::toNativeSeparators(comPort.GetPath()));
    754910                    break;
    755911                }
    756912                case KPortMode_TCP:
    757913                {
    758                     strModeType = strModeTemplate + QString("%1 (%2)").arg(gpConverter->toString(enmMode)).arg(QDir::toNativeSeparators(comPort.GetPath()));
     914                    if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeSerial_TCP)
     915                        strModeType = strModeTemplate + QString("%1 (%2)").arg(gpConverter->toString(enmMode)).arg(QDir::toNativeSeparators(comPort.GetPath()));
    759916                    break;
    760917                }
    761918                default:
    762919                {
    763                     strModeType = strModeTemplate + gpConverter->toString(enmMode);
     920                    if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeSerial_Disconnected)
     921                        strModeType = strModeTemplate + gpConverter->toString(enmMode);
    764922                    break;
    765923                }
     
    776934    /* Save the table as property: */
    777935    setProperty("table", QVariant::fromValue(table));
     936}
     937
     938UIExtraDataMetaDefs::DetailsElementOptionTypeSerial UIDetailsElementSerial::parsedExtraDataOptions()
     939{
     940    UIExtraDataMetaDefs::DetailsElementOptionTypeSerial options = UIExtraDataMetaDefs::DetailsElementOptionTypeSerial_Invalid;
     941    foreach (const QString &strOption, extraDataOptions())
     942    {
     943        const UIExtraDataMetaDefs::DetailsElementOptionTypeSerial enmOption =
     944            gpConverter->fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeSerial>(strOption);
     945        if (enmOption != UIExtraDataMetaDefs::DetailsElementOptionTypeSerial_Invalid)
     946            options = static_cast<UIExtraDataMetaDefs::DetailsElementOptionTypeSerial>(options | enmOption);
     947    }
     948    if (options == UIExtraDataMetaDefs::DetailsElementOptionTypeSerial_Invalid)
     949        options = UIExtraDataMetaDefs::DetailsElementOptionTypeSerial_Default;
     950    return options;
    778951}
    779952
     
    799972            if (!controllers.isEmpty())
    800973            {
    801                 /* Controllers: */
    802                 QStringList controllersReadable;
    803                 foreach (const CUSBController &comController, controllers)
    804                     controllersReadable << gpConverter->toString(comController.GetType());
    805                 table << UITextTableLine(QApplication::translate("UIDetails", "USB Controller", "details (usb)"),
    806                                          controllersReadable.join(", "));
    807 
    808                 /* Device Filters: */
    809                 const CUSBDeviceFilterVector filters = comFilterObject.GetDeviceFilters();
    810                 uint uActive = 0;
    811                 for (int i = 0; i < filters.size(); ++i)
    812                     if (filters.at(i).GetActive())
    813                         ++uActive;
    814                 table << UITextTableLine(QApplication::translate("UIDetails", "Device Filters", "details (usb)"),
    815                                          QApplication::translate("UIDetails", "%1 (%2 active)", "details (usb)").arg(filters.size()).arg(uActive));
     974                /* USB controllers: */
     975                if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeUsb_Controller)
     976                {
     977                    QStringList controllersReadable;
     978                    foreach (const CUSBController &comController, controllers)
     979                        controllersReadable << gpConverter->toString(comController.GetType());
     980                    table << UITextTableLine(QApplication::translate("UIDetails", "USB Controller", "details (usb)"),
     981                                             controllersReadable.join(", "));
     982                }
     983
     984                /* Device filters: */
     985                if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeUsb_DeviceFilters)
     986                {
     987                    const CUSBDeviceFilterVector filters = comFilterObject.GetDeviceFilters();
     988                    uint uActive = 0;
     989                    for (int i = 0; i < filters.size(); ++i)
     990                        if (filters.at(i).GetActive())
     991                            ++uActive;
     992                    table << UITextTableLine(QApplication::translate("UIDetails", "Device Filters", "details (usb)"),
     993                                             QApplication::translate("UIDetails", "%1 (%2 active)", "details (usb)").arg(filters.size()).arg(uActive));
     994                }
    816995            }
    817996            else
     
    8261005    /* Save the table as property: */
    8271006    setProperty("table", QVariant::fromValue(table));
     1007}
     1008
     1009UIExtraDataMetaDefs::DetailsElementOptionTypeUsb UIDetailsElementUSB::parsedExtraDataOptions()
     1010{
     1011    UIExtraDataMetaDefs::DetailsElementOptionTypeUsb options = UIExtraDataMetaDefs::DetailsElementOptionTypeUsb_Invalid;
     1012    foreach (const QString &strOption, extraDataOptions())
     1013    {
     1014        const UIExtraDataMetaDefs::DetailsElementOptionTypeUsb enmOption =
     1015            gpConverter->fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeUsb>(strOption);
     1016        if (enmOption != UIExtraDataMetaDefs::DetailsElementOptionTypeUsb_Invalid)
     1017            options = static_cast<UIExtraDataMetaDefs::DetailsElementOptionTypeUsb>(options | enmOption);
     1018    }
     1019    if (options == UIExtraDataMetaDefs::DetailsElementOptionTypeUsb_Invalid)
     1020        options = UIExtraDataMetaDefs::DetailsElementOptionTypeUsb_Default;
     1021    return options;
    8281022}
    8291023
     
    8431037    {
    8441038        /* Summary: */
    845         const ulong uCount = comMachine.GetSharedFolders().size();
    846         if (uCount > 0)
    847             table << UITextTableLine(QApplication::translate("UIDetails", "Shared Folders", "details (shared folders)"), QString::number(uCount));
    848         else
    849             table << UITextTableLine(QApplication::translate("UIDetails", "None", "details (shared folders)"), QString());
     1039        if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders_Summary)
     1040        {
     1041            const ulong uCount = comMachine.GetSharedFolders().size();
     1042            if (uCount > 0)
     1043                table << UITextTableLine(QApplication::translate("UIDetails", "Shared Folders", "details (shared folders)"), QString::number(uCount));
     1044            else
     1045                table << UITextTableLine(QApplication::translate("UIDetails", "None", "details (shared folders)"), QString());
     1046        }
    8501047    }
    8511048    else
     
    8541051    /* Save the table as property: */
    8551052    setProperty("table", QVariant::fromValue(table));
     1053}
     1054
     1055UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders UIDetailsElementSF::parsedExtraDataOptions()
     1056{
     1057    UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders options = UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders_Invalid;
     1058    foreach (const QString &strOption, extraDataOptions())
     1059    {
     1060        const UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders enmOption =
     1061            gpConverter->fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders>(strOption);
     1062        if (enmOption != UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders_Invalid)
     1063            options = static_cast<UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders>(options | enmOption);
     1064    }
     1065    if (options == UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders_Invalid)
     1066        options = UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders_Default;
     1067    return options;
    8561068}
    8571069
     
    8721084#ifndef VBOX_WS_MAC
    8731085        /* Menu-bar: */
    874         const QString strMenubarEnabled = comMachine.GetExtraData(UIExtraDataDefs::GUI_MenuBar_Enabled);
    875         {
     1086        if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface_MenuBar)
     1087        {
     1088            const QString strMenubarEnabled = comMachine.GetExtraData(UIExtraDataDefs::GUI_MenuBar_Enabled);
    8761089            /* Try to convert loaded data to bool: */
    8771090            const bool fEnabled = !(   strMenubarEnabled.compare("false", Qt::CaseInsensitive) == 0
     
    8871100
    8881101        /* Status-bar: */
    889         const QString strStatusbarEnabled = comMachine.GetExtraData(UIExtraDataDefs::GUI_StatusBar_Enabled);
    890         {
     1102        if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface_StatusBar)
     1103        {
     1104            const QString strStatusbarEnabled = comMachine.GetExtraData(UIExtraDataDefs::GUI_StatusBar_Enabled);
    8911105            /* Try to convert loaded data to bool: */
    8921106            const bool fEnabled = !(   strStatusbarEnabled.compare("false", Qt::CaseInsensitive) == 0
     
    9021116#ifndef VBOX_WS_MAC
    9031117        /* Mini-toolbar: */
    904         const QString strMiniToolbarEnabled = comMachine.GetExtraData(UIExtraDataDefs::GUI_ShowMiniToolBar);
    905         {
     1118        if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface_MiniToolbar)
     1119        {
     1120            const QString strMiniToolbarEnabled = comMachine.GetExtraData(UIExtraDataDefs::GUI_ShowMiniToolBar);
    9061121            /* Try to convert loaded data to bool: */
    9071122            const bool fEnabled = !(   strMiniToolbarEnabled.compare("false", Qt::CaseInsensitive) == 0
     
    9451160}
    9461161
     1162UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface UIDetailsElementUI::parsedExtraDataOptions()
     1163{
     1164    UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface options = UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface_Invalid;
     1165    foreach (const QString &strOption, extraDataOptions())
     1166    {
     1167        const UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface enmOption =
     1168            gpConverter->fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface>(strOption);
     1169        if (enmOption != UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface_Invalid)
     1170            options = static_cast<UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface>(options | enmOption);
     1171    }
     1172    if (options == UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface_Invalid)
     1173        options = UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface_Default;
     1174    return options;
     1175}
     1176
    9471177
    9481178void UIDetailsUpdateTaskDescription::run()
     
    9601190    {
    9611191        /* Summary: */
    962         const QString strDescription = machine.GetDescription();
    963         if (!strDescription.isEmpty())
    964             table << UITextTableLine(strDescription, QString());
    965         else
    966             table << UITextTableLine(QApplication::translate("UIDetails", "None", "details (description)"), QString());
     1192        if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeDescription_Summary)
     1193        {
     1194            const QString strDescription = machine.GetDescription();
     1195            if (!strDescription.isEmpty())
     1196                table << UITextTableLine(strDescription, QString());
     1197            else
     1198                table << UITextTableLine(QApplication::translate("UIDetails", "None", "details (description)"), QString());
     1199        }
    9671200    }
    9681201    else
     
    9721205    setProperty("table", QVariant::fromValue(table));
    9731206}
     1207
     1208UIExtraDataMetaDefs::DetailsElementOptionTypeDescription UIDetailsElementDescription::parsedExtraDataOptions()
     1209{
     1210    UIExtraDataMetaDefs::DetailsElementOptionTypeDescription options = UIExtraDataMetaDefs::DetailsElementOptionTypeDescription_Invalid;
     1211    foreach (const QString &strOption, extraDataOptions())
     1212    {
     1213        const UIExtraDataMetaDefs::DetailsElementOptionTypeDescription enmOption =
     1214            gpConverter->fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeDescription>(strOption);
     1215        if (enmOption != UIExtraDataMetaDefs::DetailsElementOptionTypeDescription_Invalid)
     1216            options = static_cast<UIExtraDataMetaDefs::DetailsElementOptionTypeDescription>(options | enmOption);
     1217    }
     1218    if (options == UIExtraDataMetaDefs::DetailsElementOptionTypeDescription_Invalid)
     1219        options = UIExtraDataMetaDefs::DetailsElementOptionTypeDescription_Default;
     1220    return options;
     1221}
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/details/UIDetailsElements.h

    r75426 r75427  
    121121
    122122    /** Constructs update task passing @a comMachine to the base-class. */
    123     UIDetailsUpdateTaskGeneral(const CMachine &comMachine)
    124         : UIDetailsUpdateTask(comMachine) {}
    125 
    126 private:
    127 
    128     /** Contains update task body. */
    129     void run();
     123    UIDetailsUpdateTaskGeneral(const CMachine &comMachine, UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral fOptions)
     124        : UIDetailsUpdateTask(comMachine), m_fOptions(fOptions) {}
     125
     126private:
     127
     128    /** Contains update task body. */
     129    void run();
     130
     131    /** Holds the options. */
     132    UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral m_fOptions;
    130133};
    131134
     
    144147private:
    145148
    146     /** Creates update task for this element. */
    147     UITask *createUpdateTask() { return new UIDetailsUpdateTaskGeneral(machine()); }
     149    /** Returns parsed extra-data options. */
     150    UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral parsedExtraDataOptions();
     151
     152    /** Creates update task for this element. */
     153    UITask *createUpdateTask() { return new UIDetailsUpdateTaskGeneral(machine(), parsedExtraDataOptions()); }
    148154};
    149155
     
    157163
    158164    /** Constructs update task passing @a comMachine to the base-class. */
    159     UIDetailsUpdateTaskSystem(const CMachine &comMachine)
    160         : UIDetailsUpdateTask(comMachine) {}
    161 
    162 private:
    163 
    164     /** Contains update task body. */
    165     void run();
     165    UIDetailsUpdateTaskSystem(const CMachine &comMachine, UIExtraDataMetaDefs::DetailsElementOptionTypeSystem fOptions)
     166        : UIDetailsUpdateTask(comMachine), m_fOptions(fOptions) {}
     167
     168private:
     169
     170    /** Contains update task body. */
     171    void run();
     172
     173    /** Holds the options. */
     174    UIExtraDataMetaDefs::DetailsElementOptionTypeSystem m_fOptions;
    166175};
    167176
     
    180189private:
    181190
    182     /** Creates update task for this element. */
    183     UITask *createUpdateTask() { return new UIDetailsUpdateTaskSystem(machine()); }
     191    /** Returns parsed extra-data options. */
     192    UIExtraDataMetaDefs::DetailsElementOptionTypeSystem parsedExtraDataOptions();
     193
     194    /** Creates update task for this element. */
     195    UITask *createUpdateTask() { return new UIDetailsUpdateTaskSystem(machine(), parsedExtraDataOptions()); }
    184196};
    185197
     
    193205
    194206    /** Constructs update task passing @a comMachine to the base-class. */
    195     UIDetailsUpdateTaskDisplay(const CMachine &comMachine)
    196         : UIDetailsUpdateTask(comMachine) {}
    197 
    198 private:
    199 
    200     /** Contains update task body. */
    201     void run();
     207    UIDetailsUpdateTaskDisplay(const CMachine &comMachine, UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay fOptions)
     208        : UIDetailsUpdateTask(comMachine), m_fOptions(fOptions) {}
     209
     210private:
     211
     212    /** Contains update task body. */
     213    void run();
     214
     215    /** Holds the options. */
     216    UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay m_fOptions;
    202217};
    203218
     
    216231private:
    217232
    218     /** Creates update task for this element. */
    219     UITask *createUpdateTask() { return new UIDetailsUpdateTaskDisplay(machine()); }
     233    /** Returns parsed extra-data options. */
     234    UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay parsedExtraDataOptions();
     235
     236    /** Creates update task for this element. */
     237    UITask *createUpdateTask() { return new UIDetailsUpdateTaskDisplay(machine(), parsedExtraDataOptions()); }
    220238};
    221239
     
    229247
    230248    /** Constructs update task passing @a comMachine to the base-class. */
    231     UIDetailsUpdateTaskStorage(const CMachine &comMachine)
    232         : UIDetailsUpdateTask(comMachine) {}
    233 
    234 private:
    235 
    236     /** Contains update task body. */
    237     void run();
     249    UIDetailsUpdateTaskStorage(const CMachine &comMachine, UIExtraDataMetaDefs::DetailsElementOptionTypeStorage fOptions)
     250        : UIDetailsUpdateTask(comMachine), m_fOptions(fOptions) {}
     251
     252private:
     253
     254    /** Contains update task body. */
     255    void run();
     256
     257    /** Holds the options. */
     258    UIExtraDataMetaDefs::DetailsElementOptionTypeStorage m_fOptions;
    238259};
    239260
     
    252273private:
    253274
    254     /** Creates update task for this element. */
    255     UITask *createUpdateTask() { return new UIDetailsUpdateTaskStorage(machine()); }
     275    /** Returns parsed extra-data options. */
     276    UIExtraDataMetaDefs::DetailsElementOptionTypeStorage parsedExtraDataOptions();
     277
     278    /** Creates update task for this element. */
     279    UITask *createUpdateTask() { return new UIDetailsUpdateTaskStorage(machine(), parsedExtraDataOptions()); }
    256280};
    257281
     
    265289
    266290    /** Constructs update task passing @a comMachine to the base-class. */
    267     UIDetailsUpdateTaskAudio(const CMachine &comMachine)
    268         : UIDetailsUpdateTask(comMachine) {}
    269 
    270 private:
    271 
    272     /** Contains update task body. */
    273     void run();
     291    UIDetailsUpdateTaskAudio(const CMachine &comMachine, UIExtraDataMetaDefs::DetailsElementOptionTypeAudio fOptions)
     292        : UIDetailsUpdateTask(comMachine), m_fOptions(fOptions) {}
     293
     294private:
     295
     296    /** Contains update task body. */
     297    void run();
     298
     299    /** Holds the options. */
     300    UIExtraDataMetaDefs::DetailsElementOptionTypeAudio m_fOptions;
    274301};
    275302
     
    288315private:
    289316
    290     /** Creates update task for this element. */
    291     UITask *createUpdateTask() { return new UIDetailsUpdateTaskAudio(machine()); }
     317    /** Returns parsed extra-data options. */
     318    UIExtraDataMetaDefs::DetailsElementOptionTypeAudio parsedExtraDataOptions();
     319
     320    /** Creates update task for this element. */
     321    UITask *createUpdateTask() { return new UIDetailsUpdateTaskAudio(machine(), parsedExtraDataOptions()); }
    292322};
    293323
     
    301331
    302332    /** Constructs update task passing @a comMachine to the base-class. */
    303     UIDetailsUpdateTaskNetwork(const CMachine &comMachine)
    304         : UIDetailsUpdateTask(comMachine) {}
     333    UIDetailsUpdateTaskNetwork(const CMachine &comMachine, UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork fOptions)
     334        : UIDetailsUpdateTask(comMachine), m_fOptions(fOptions) {}
    305335
    306336private:
     
    311341    /** Summarizes generic properties. */
    312342    static QString summarizeGenericProperties(const CNetworkAdapter &adapter);
     343
     344    /** Holds the options. */
     345    UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork m_fOptions;
    313346};
    314347
     
    327360private:
    328361
    329     /** Creates update task for this element. */
    330     UITask *createUpdateTask() { return new UIDetailsUpdateTaskNetwork(machine()); }
     362    /** Returns parsed extra-data options. */
     363    UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork parsedExtraDataOptions();
     364
     365    /** Creates update task for this element. */
     366    UITask *createUpdateTask() { return new UIDetailsUpdateTaskNetwork(machine(), parsedExtraDataOptions()); }
    331367};
    332368
     
    340376
    341377    /** Constructs update task passing @a comMachine to the base-class. */
    342     UIDetailsUpdateTaskSerial(const CMachine &comMachine)
    343         : UIDetailsUpdateTask(comMachine) {}
    344 
    345 private:
    346 
    347     /** Contains update task body. */
    348     void run();
     378    UIDetailsUpdateTaskSerial(const CMachine &comMachine, UIExtraDataMetaDefs::DetailsElementOptionTypeSerial fOptions)
     379        : UIDetailsUpdateTask(comMachine), m_fOptions(fOptions) {}
     380
     381private:
     382
     383    /** Contains update task body. */
     384    void run();
     385
     386    /** Holds the options. */
     387    UIExtraDataMetaDefs::DetailsElementOptionTypeSerial m_fOptions;
    349388};
    350389
     
    363402private:
    364403
    365     /** Creates update task for this element. */
    366     UITask *createUpdateTask() { return new UIDetailsUpdateTaskSerial(machine()); }
     404    /** Returns parsed extra-data options. */
     405    UIExtraDataMetaDefs::DetailsElementOptionTypeSerial parsedExtraDataOptions();
     406
     407    /** Creates update task for this element. */
     408    UITask *createUpdateTask() { return new UIDetailsUpdateTaskSerial(machine(), parsedExtraDataOptions()); }
    367409};
    368410
     
    376418
    377419    /** Constructs update task passing @a comMachine to the base-class. */
    378     UIDetailsUpdateTaskUSB(const CMachine &comMachine)
    379         : UIDetailsUpdateTask(comMachine) {}
    380 
    381 private:
    382 
    383     /** Contains update task body. */
    384     void run();
     420    UIDetailsUpdateTaskUSB(const CMachine &comMachine, UIExtraDataMetaDefs::DetailsElementOptionTypeUsb fOptions)
     421        : UIDetailsUpdateTask(comMachine), m_fOptions(fOptions) {}
     422
     423private:
     424
     425    /** Contains update task body. */
     426    void run();
     427
     428    /** Holds the options. */
     429    UIExtraDataMetaDefs::DetailsElementOptionTypeUsb m_fOptions;
    385430};
    386431
     
    399444private:
    400445
    401     /** Creates update task for this element. */
    402     UITask *createUpdateTask() { return new UIDetailsUpdateTaskUSB(machine()); }
     446    /** Returns parsed extra-data options. */
     447    UIExtraDataMetaDefs::DetailsElementOptionTypeUsb parsedExtraDataOptions();
     448
     449    /** Creates update task for this element. */
     450    UITask *createUpdateTask() { return new UIDetailsUpdateTaskUSB(machine(), parsedExtraDataOptions()); }
    403451};
    404452
     
    412460
    413461    /** Constructs update task passing @a comMachine to the base-class. */
    414     UIDetailsUpdateTaskSF(const CMachine &comMachine)
    415         : UIDetailsUpdateTask(comMachine) {}
    416 
    417 private:
    418 
    419     /** Contains update task body. */
    420     void run();
     462    UIDetailsUpdateTaskSF(const CMachine &comMachine, UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders fOptions)
     463        : UIDetailsUpdateTask(comMachine), m_fOptions(fOptions) {}
     464
     465private:
     466
     467    /** Contains update task body. */
     468    void run();
     469
     470    /** Holds the options. */
     471    UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders m_fOptions;
    421472};
    422473
     
    435486private:
    436487
    437     /** Creates update task for this element. */
    438     UITask *createUpdateTask() { return new UIDetailsUpdateTaskSF(machine()); }
     488    /** Returns parsed extra-data options. */
     489    UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders parsedExtraDataOptions();
     490
     491    /** Creates update task for this element. */
     492    UITask *createUpdateTask() { return new UIDetailsUpdateTaskSF(machine(), parsedExtraDataOptions()); }
    439493};
    440494
     
    448502
    449503    /** Constructs update task passing @a comMachine to the base-class. */
    450     UIDetailsUpdateTaskUI(const CMachine &comMachine)
    451         : UIDetailsUpdateTask(comMachine) {}
    452 
    453 private:
    454 
    455     /** Contains update task body. */
    456     void run();
     504    UIDetailsUpdateTaskUI(const CMachine &comMachine, UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface fOptions)
     505        : UIDetailsUpdateTask(comMachine), m_fOptions(fOptions) {}
     506
     507private:
     508
     509    /** Contains update task body. */
     510    void run();
     511
     512    /** Holds the options. */
     513    UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface m_fOptions;
    457514};
    458515
     
    471528private:
    472529
    473     /** Creates update task for this element. */
    474     UITask *createUpdateTask() { return new UIDetailsUpdateTaskUI(machine()); }
     530    /** Returns parsed extra-data options. */
     531    UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface parsedExtraDataOptions();
     532
     533    /** Creates update task for this element. */
     534    UITask *createUpdateTask() { return new UIDetailsUpdateTaskUI(machine(), parsedExtraDataOptions()); }
    475535};
    476536
     
    484544
    485545    /** Constructs update task passing @a comMachine to the base-class. */
    486     UIDetailsUpdateTaskDescription(const CMachine &comMachine)
    487         : UIDetailsUpdateTask(comMachine) {}
    488 
    489 private:
    490 
    491     /** Contains update task body. */
    492     void run();
     546    UIDetailsUpdateTaskDescription(const CMachine &comMachine, UIExtraDataMetaDefs::DetailsElementOptionTypeDescription fOptions)
     547        : UIDetailsUpdateTask(comMachine), m_fOptions(fOptions) {}
     548
     549private:
     550
     551    /** Contains update task body. */
     552    void run();
     553
     554    /** Holds the options. */
     555    UIExtraDataMetaDefs::DetailsElementOptionTypeDescription m_fOptions;
    493556};
    494557
     
    507570private:
    508571
    509     /** Creates update task for this element. */
    510     UITask *createUpdateTask() { return new UIDetailsUpdateTaskDescription(machine()); }
     572    /** Returns parsed extra-data options. */
     573    UIExtraDataMetaDefs::DetailsElementOptionTypeDescription parsedExtraDataOptions();
     574
     575    /** Creates update task for this element. */
     576    UITask *createUpdateTask() { return new UIDetailsUpdateTaskDescription(machine(), parsedExtraDataOptions()); }
    511577};
    512578
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/details/UIDetailsModel.cpp

    r74681 r75427  
    129129
    130130void UIDetailsModel::sltHandleToggleFinished()
     131{
     132    m_pRoot->rebuildGroup();
     133}
     134
     135void UIDetailsModel::sltHandleExtraDataOptionsChange(DetailsElementType)
    131136{
    132137    m_pRoot->rebuildGroup();
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/details/UIDetailsModel.h

    r74942 r75427  
    9494    void sltHandleToggleFinished();
    9595
     96    /** Handle extra-data options change. */
     97    void sltHandleExtraDataOptionsChange(DetailsElementType enmType);
     98
    9699private slots:
    97100
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/details/UIDetailsSet.h

    r74942 r75427  
    7171          * @param  uStepId    Brings the step ID.
    7272          * @param  iStepNumber  Brings the step number. */
    73     /** @} */
    74     virtual void sltBuildStep(const QUuid &uStepId, int iStepNumber) /* override */;
     73        virtual void sltBuildStep(const QUuid &uStepId, int iStepNumber) /* override */;
     74    /** @} */
    7575
    7676protected:
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