VirtualBox

Changeset 66359 in vbox for trunk


Ignore:
Timestamp:
Mar 30, 2017 12:42:32 PM (8 years ago)
Author:
vboxsync
Message:

FE/Qt: Machine settings: Network page: Proper loading, caching, saving.

Location:
trunk/src/VBox/Frontends/VirtualBox/src/settings/machine
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsNetwork.cpp

    r66345 r66359  
    137137{
    138138    /** Constructs data. */
    139     UIDataSettingsMachineNetwork() {}
     139    UIDataSettingsMachineNetwork()
     140        : m_adapters(QList<UIDataSettingsMachineNetworkAdapter>())
     141    {}
    140142
    141143    /** Returns whether the @a other passed data is equal to this one. */
    142     bool operator==(const UIDataSettingsMachineNetwork & /* other */) const { return true; }
     144    bool equal(const UIDataSettingsMachineNetwork &other) const
     145    {
     146        return true
     147               && (m_adapters == other.m_adapters)
     148               ;
     149    }
     150
     151    /** Returns whether the @a other passed data is equal to this one. */
     152    bool operator==(const UIDataSettingsMachineNetwork &other) const { return equal(other); }
    143153    /** Returns whether the @a other passed data is different from this one. */
    144     bool operator!=(const UIDataSettingsMachineNetwork & /* other */) const { return false; }
     154    bool operator!=(const UIDataSettingsMachineNetwork &other) const { return !equal(other); }
     155
     156    /** Holds the adapter list. */
     157    QList<UIDataSettingsMachineNetworkAdapter> m_adapters;
    145158};
    146159
     
    158171
    159172    /* Load / Save API: */
    160     void fetchAdapterCache(const UISettingsCacheMachineNetworkAdapter &adapterCache);
    161     void uploadAdapterCache(UISettingsCacheMachineNetworkAdapter &adapterCache);
     173    void loadAdapterData(const UIDataSettingsMachineNetworkAdapter &adapterData);
     174    void saveAdapterData(UIDataSettingsMachineNetworkAdapter &adapterData);
    162175
    163176    /** Performs validation, updates @a messages list if something is wrong. */
     
    273286}
    274287
    275 void UIMachineSettingsNetwork::fetchAdapterCache(const UISettingsCacheMachineNetworkAdapter &adapterCache)
    276 {
    277     /* Get adapter data: */
    278     const UIDataSettingsMachineNetworkAdapter &adapterData = adapterCache.base();
    279 
     288void UIMachineSettingsNetwork::loadAdapterData(const UIDataSettingsMachineNetworkAdapter &adapterData)
     289{
    280290    /* Load slot number: */
    281291    m_iSlot = adapterData.m_iSlot;
     
    312322}
    313323
    314 void UIMachineSettingsNetwork::uploadAdapterCache(UISettingsCacheMachineNetworkAdapter &adapterCache)
    315 {
    316     /* Prepare adapter data: */
    317     UIDataSettingsMachineNetworkAdapter adapterData = adapterCache.base();
    318 
     324void UIMachineSettingsNetwork::saveAdapterData(UIDataSettingsMachineNetworkAdapter &adapterData)
     325{
    319326    /* Save adapter activity state: */
    320327    adapterData.m_fAdapterEnabled = m_pEnableAdapterCheckBox->isChecked();
     
    360367    /* Save port forwarding rules: */
    361368    adapterData.m_redirects = m_portForwardingRules;
    362 
    363     /* Cache adapter data: */
    364     adapterCache.cacheCurrentData(adapterData);
    365369}
    366370
     
    10341038    refreshNATNetworkList();
    10351039
     1040    /* Prepare initial data: */
     1041    UIDataSettingsMachineNetwork initialData;
     1042
    10361043    /* For each network adapter: */
    10371044    for (int iSlot = 0; iSlot < m_pTabWidget->count(); ++iSlot)
    10381045    {
    1039         /* Prepare adapter data: */
    1040         UIDataSettingsMachineNetworkAdapter adapterData;
     1046        /* Prepare initial adapter data: */
     1047        UIDataSettingsMachineNetworkAdapter initialAdapterData;
    10411048
    10421049        /* Check if adapter is valid: */
     
    10451052        {
    10461053            /* Gather main options: */
    1047             adapterData.m_iSlot = iSlot;
    1048             adapterData.m_fAdapterEnabled = adapter.GetEnabled();
    1049             adapterData.m_attachmentType = adapter.GetAttachmentType();
    1050             adapterData.m_strBridgedAdapterName = wipedOutString(adapter.GetBridgedInterface());
    1051             adapterData.m_strInternalNetworkName = wipedOutString(adapter.GetInternalNetwork());
    1052             adapterData.m_strHostInterfaceName = wipedOutString(adapter.GetHostOnlyInterface());
    1053             adapterData.m_strGenericDriverName = wipedOutString(adapter.GetGenericDriver());
    1054             adapterData.m_strNATNetworkName = wipedOutString(adapter.GetNATNetwork());
     1054            initialAdapterData.m_iSlot = iSlot;
     1055            initialAdapterData.m_fAdapterEnabled = adapter.GetEnabled();
     1056            initialAdapterData.m_attachmentType = adapter.GetAttachmentType();
     1057            initialAdapterData.m_strBridgedAdapterName = wipedOutString(adapter.GetBridgedInterface());
     1058            initialAdapterData.m_strInternalNetworkName = wipedOutString(adapter.GetInternalNetwork());
     1059            initialAdapterData.m_strHostInterfaceName = wipedOutString(adapter.GetHostOnlyInterface());
     1060            initialAdapterData.m_strGenericDriverName = wipedOutString(adapter.GetGenericDriver());
     1061            initialAdapterData.m_strNATNetworkName = wipedOutString(adapter.GetNATNetwork());
    10551062
    10561063            /* Gather advanced options: */
    1057             adapterData.m_adapterType = adapter.GetAdapterType();
    1058             adapterData.m_promiscuousMode = adapter.GetPromiscModePolicy();
    1059             adapterData.m_strMACAddress = adapter.GetMACAddress();
    1060             adapterData.m_strGenericProperties = loadGenericProperties(adapter);
    1061             adapterData.m_fCableConnected = adapter.GetCableConnected();
     1064            initialAdapterData.m_adapterType = adapter.GetAdapterType();
     1065            initialAdapterData.m_promiscuousMode = adapter.GetPromiscModePolicy();
     1066            initialAdapterData.m_strMACAddress = adapter.GetMACAddress();
     1067            initialAdapterData.m_strGenericProperties = loadGenericProperties(adapter);
     1068            initialAdapterData.m_fCableConnected = adapter.GetCableConnected();
    10621069
    10631070            /* Gather redirect options: */
    1064             QVector<QString> redirects = adapter.GetNATEngine().GetRedirects();
    1065             for (int i = 0; i < redirects.size(); ++i)
     1071            foreach (const QString &redirect, adapter.GetNATEngine().GetRedirects())
    10661072            {
    1067                 QStringList redirectData = redirects[i].split(',');
     1073                const QStringList redirectData = redirect.split(',');
    10681074                AssertMsg(redirectData.size() == 6, ("Redirect rule should be composed of 6 parts!\n"));
    1069                 adapterData.m_redirects << UIPortForwardingData(redirectData[0],
    1070                                                                 (KNATProtocol)redirectData[1].toUInt(),
    1071                                                                 redirectData[2],
    1072                                                                 redirectData[3].toUInt(),
    1073                                                                 redirectData[4],
    1074                                                                 redirectData[5].toUInt());
     1075                initialAdapterData.m_redirects << UIPortForwardingData(redirectData[0],
     1076                                                                       (KNATProtocol)redirectData[1].toUInt(),
     1077                                                                       redirectData[2],
     1078                                                                       redirectData[3].toUInt(),
     1079                                                                       redirectData[4],
     1080                                                                       redirectData[5].toUInt());
    10751081            }
    10761082        }
    10771083
    1078         /* Cache adapter data: */
    1079         m_pCache->child(iSlot).cacheInitialData(adapterData);
    1080     }
     1084        /* Append initial adapter data: */
     1085        initialData.m_adapters << initialAdapterData;
     1086    }
     1087
     1088    /* Cache initial data: */
     1089    m_pCache->cacheInitialData(initialData);
    10811090
    10821091    /* Upload machine to data: */
     
    10871096{
    10881097    /* Setup tab order: */
    1089     Assert(firstWidget());
     1098    AssertPtrReturnVoid(firstWidget());
    10901099    setTabOrder(firstWidget(), m_pTabWidget->focusProxy());
    10911100    QWidget *pLastFocusWidget = m_pTabWidget->focusProxy();
     
    10971106        UIMachineSettingsNetwork *pTab = qobject_cast<UIMachineSettingsNetwork*>(m_pTabWidget->widget(iSlot));
    10981107
    1099         /* Load adapter data to page: */
    1100         pTab->fetchAdapterCache(m_pCache->child(iSlot));
     1108        /* Load initial adapter data to page: */
     1109        pTab->loadAdapterData(m_pCache->base().m_adapters.at(iSlot));
    11011110
    11021111        /* Setup tab order: */
     
    11161125void UIMachineSettingsNetworkPage::putToCache()
    11171126{
     1127    /* Prepare current data: */
     1128    UIDataSettingsMachineNetwork currentData;
     1129
    11181130    /* For each network adapter: */
    11191131    for (int iSlot = 0; iSlot < m_pTabWidget->count(); ++iSlot)
     
    11221134        UIMachineSettingsNetwork *pTab = qobject_cast<UIMachineSettingsNetwork*>(m_pTabWidget->widget(iSlot));
    11231135
    1124         /* Gather & cache adapter data: */
    1125         pTab->uploadAdapterCache(m_pCache->child(iSlot));
    1126     }
     1136        /* Prepare current adapter data: */
     1137        UIDataSettingsMachineNetworkAdapter currentAdapterData;
     1138
     1139        /* Gather current adapter data: */
     1140        pTab->saveAdapterData(currentAdapterData);
     1141
     1142        /* Cache current adapter data: */
     1143        currentData.m_adapters << currentAdapterData;
     1144    }
     1145
     1146    /* Cache adapter data: */
     1147    m_pCache->cacheCurrentData(currentData);
    11271148}
    11281149
     
    11391160        {
    11401161            /* Check if adapter data was changed: */
    1141             const UISettingsCacheMachineNetworkAdapter &adapterCache = m_pCache->child(iSlot);
    1142             if (adapterCache.wasChanged())
     1162            const UIDataSettingsMachineNetworkAdapter &initialAdapterData = m_pCache->base().m_adapters.at(iSlot);
     1163            const UIDataSettingsMachineNetworkAdapter &currentAdapterData = m_pCache->data().m_adapters.at(iSlot);
     1164            if (currentAdapterData != initialAdapterData)
    11431165            {
    11441166                /* Check if adapter still valid: */
     
    11461168                if (!adapter.isNull())
    11471169                {
    1148                     /* Get adapter data from cache: */
    1149                     const UIDataSettingsMachineNetworkAdapter &adapterData = adapterCache.data();
    1150 
    11511170                    /* Store adapter data: */
    11521171                    if (isMachineOffline())
    11531172                    {
    1154                         /* Basic attributes: */
    1155                         adapter.SetEnabled(adapterData.m_fAdapterEnabled);
    1156                         adapter.SetAdapterType(adapterData.m_adapterType);
    1157                         adapter.SetMACAddress(adapterData.m_strMACAddress);
     1173                        /* Whether the adapter is enabled: */
     1174                        if (   adapter.isOk()
     1175                            && currentAdapterData.m_fAdapterEnabled != initialAdapterData.m_fAdapterEnabled)
     1176                            adapter.SetEnabled(currentAdapterData.m_fAdapterEnabled);
     1177                        /* Adapter type: */
     1178                        if (   adapter.isOk()
     1179                            && currentAdapterData.m_adapterType != initialAdapterData.m_adapterType)
     1180                            adapter.SetAdapterType(currentAdapterData.m_adapterType);
     1181                        /* Adapter MAC address: */
     1182                        if (   adapter.isOk()
     1183                            && currentAdapterData.m_strMACAddress != initialAdapterData.m_strMACAddress)
     1184                            adapter.SetMACAddress(currentAdapterData.m_strMACAddress);
    11581185                    }
    11591186                    if (isMachineInValidMode())
    11601187                    {
    1161                         /* Attachment type: */
    1162                         switch (adapterData.m_attachmentType)
     1188                        /* Adapter attachment type: */
     1189                        switch (currentAdapterData.m_attachmentType)
    11631190                        {
    11641191                            case KNetworkAttachmentType_Bridged:
    1165                                 adapter.SetBridgedInterface(adapterData.m_strBridgedAdapterName);
     1192                            {
     1193                                if (   adapter.isOk()
     1194                                    && currentAdapterData.m_strBridgedAdapterName != initialAdapterData.m_strBridgedAdapterName)
     1195                                    adapter.SetBridgedInterface(currentAdapterData.m_strBridgedAdapterName);
    11661196                                break;
     1197                            }
    11671198                            case KNetworkAttachmentType_Internal:
    1168                                 adapter.SetInternalNetwork(adapterData.m_strInternalNetworkName);
     1199                            {
     1200                                if (   adapter.isOk()
     1201                                    && currentAdapterData.m_strInternalNetworkName != initialAdapterData.m_strInternalNetworkName)
     1202                                    adapter.SetInternalNetwork(currentAdapterData.m_strInternalNetworkName);
    11691203                                break;
     1204                            }
    11701205                            case KNetworkAttachmentType_HostOnly:
    1171                                 adapter.SetHostOnlyInterface(adapterData.m_strHostInterfaceName);
     1206                            {
     1207                                if (   adapter.isOk()
     1208                                    && currentAdapterData.m_strHostInterfaceName != initialAdapterData.m_strHostInterfaceName)
     1209                                    adapter.SetHostOnlyInterface(currentAdapterData.m_strHostInterfaceName);
    11721210                                break;
     1211                            }
    11731212                            case KNetworkAttachmentType_Generic:
    1174                                 adapter.SetGenericDriver(adapterData.m_strGenericDriverName);
    1175                                 saveGenericProperties(adapter, adapterData.m_strGenericProperties);
     1213                            {
     1214                                if (   adapter.isOk()
     1215                                    && currentAdapterData.m_strGenericDriverName != initialAdapterData.m_strGenericDriverName)
     1216                                    adapter.SetGenericDriver(currentAdapterData.m_strGenericDriverName);
     1217                                if (   adapter.isOk()
     1218                                    && currentAdapterData.m_strGenericProperties != initialAdapterData.m_strGenericProperties)
     1219                                    saveGenericProperties(adapter, currentAdapterData.m_strGenericProperties);
    11761220                                break;
     1221                            }
    11771222                            case KNetworkAttachmentType_NATNetwork:
    1178                                 adapter.SetNATNetwork(adapterData.m_strNATNetworkName);
     1223                            {
     1224                                if (   adapter.isOk()
     1225                                    && currentAdapterData.m_strNATNetworkName != initialAdapterData.m_strNATNetworkName)
     1226                                    adapter.SetNATNetwork(currentAdapterData.m_strNATNetworkName);
    11791227                                break;
     1228                            }
    11801229                            default:
    11811230                                break;
    11821231                        }
    1183                         adapter.SetAttachmentType(adapterData.m_attachmentType);
    1184                         /* Advanced attributes: */
    1185                         adapter.SetPromiscModePolicy(adapterData.m_promiscuousMode);
    1186                         /* Cable connected flag: */
    1187                         adapter.SetCableConnected(adapterData.m_fCableConnected);
    1188                         /* Redirect options: */
    1189                         if (adapterCache.base().m_attachmentType == KNetworkAttachmentType_NAT ||
    1190                             adapterCache.data().m_attachmentType == KNetworkAttachmentType_NAT)
     1232                        if (   adapter.isOk()
     1233                            && currentAdapterData.m_attachmentType != initialAdapterData.m_attachmentType)
     1234                            adapter.SetAttachmentType(currentAdapterData.m_attachmentType);
     1235                        /* Adapter promiscuous mode: */
     1236                        if (   adapter.isOk()
     1237                            && currentAdapterData.m_promiscuousMode != initialAdapterData.m_promiscuousMode)
     1238                            adapter.SetPromiscModePolicy(currentAdapterData.m_promiscuousMode);
     1239                        /* Whether the adapter cable connected: */
     1240                        if (   adapter.isOk()
     1241                            && currentAdapterData.m_fCableConnected != initialAdapterData.m_fCableConnected)
     1242                            adapter.SetCableConnected(currentAdapterData.m_fCableConnected);
     1243                        /* Adapter redirect options: */
     1244                        if (   adapter.isOk()
     1245                            && currentAdapterData.m_redirects != initialAdapterData.m_redirects
     1246                            && (   initialAdapterData.m_attachmentType == KNetworkAttachmentType_NAT
     1247                                || currentAdapterData.m_attachmentType == KNetworkAttachmentType_NAT))
    11911248                        {
    1192                             QVector<QString> oldRedirects = adapter.GetNATEngine().GetRedirects();
    1193                             for (int i = 0; i < oldRedirects.size(); ++i)
    1194                                 adapter.GetNATEngine().RemoveRedirect(oldRedirects[i].section(',', 0, 0));
    1195                             UIPortForwardingDataList newRedirects = adapterData.m_redirects;
    1196                             for (int i = 0; i < newRedirects.size(); ++i)
    1197                             {
    1198                                 UIPortForwardingData newRedirect = newRedirects[i];
     1249                            foreach (const QString &strOldRedirect, adapter.GetNATEngine().GetRedirects())
     1250                                adapter.GetNATEngine().RemoveRedirect(strOldRedirect.section(',', 0, 0));
     1251                            foreach (const UIPortForwardingData &newRedirect, currentAdapterData.m_redirects)
    11991252                                adapter.GetNATEngine().AddRedirect(newRedirect.name, newRedirect.protocol,
    12001253                                                                   newRedirect.hostIp, newRedirect.hostPort.value(),
    12011254                                                                   newRedirect.guestIp, newRedirect.guestPort.value());
    1202                             }
    12031255                        }
    12041256                    }
     
    12461298    {
    12471299        m_pTabWidget->setTabEnabled(iSlot,
    1248                                             isMachineOffline() ||
    1249                                             (isMachineInValidMode() && m_pCache->child(iSlot).base().m_fAdapterEnabled));
     1300                                    isMachineOffline() ||
     1301                                    (isMachineInValidMode() && m_pCache->base().m_adapters.at(iSlot).m_fAdapterEnabled));
    12501302        UIMachineSettingsNetwork *pTab = qobject_cast<UIMachineSettingsNetwork*>(m_pTabWidget->widget(iSlot));
    12511303        pTab->polishTab();
  • trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsNetwork.h

    r66345 r66359  
    2626/* Forward declarations: */
    2727class QITabWidget;
    28 class UIMachineSettingsNetworkPage;
    2928struct UIDataSettingsMachineNetwork;
    30 struct UIDataSettingsMachineNetworkAdapter;
    31 typedef UISettingsCache<UIDataSettingsMachineNetworkAdapter> UISettingsCacheMachineNetworkAdapter;
    32 typedef UISettingsCachePool<UIDataSettingsMachineNetwork, UISettingsCacheMachineNetworkAdapter> UISettingsCacheMachineNetwork;
     29typedef UISettingsCache<UIDataSettingsMachineNetwork> UISettingsCacheMachineNetwork;
    3330
    3431
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