- Timestamp:
- Mar 30, 2017 12:42:32 PM (8 years ago)
- Location:
- trunk/src/VBox/Frontends/VirtualBox/src/settings/machine
- Files:
-
- 2 edited
-
UIMachineSettingsNetwork.cpp (modified) (14 diffs)
-
UIMachineSettingsNetwork.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsNetwork.cpp
r66345 r66359 137 137 { 138 138 /** Constructs data. */ 139 UIDataSettingsMachineNetwork() {} 139 UIDataSettingsMachineNetwork() 140 : m_adapters(QList<UIDataSettingsMachineNetworkAdapter>()) 141 {} 140 142 141 143 /** 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); } 143 153 /** 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; 145 158 }; 146 159 … … 158 171 159 172 /* 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); 162 175 163 176 /** Performs validation, updates @a messages list if something is wrong. */ … … 273 286 } 274 287 275 void UIMachineSettingsNetwork::fetchAdapterCache(const UISettingsCacheMachineNetworkAdapter &adapterCache) 276 { 277 /* Get adapter data: */ 278 const UIDataSettingsMachineNetworkAdapter &adapterData = adapterCache.base(); 279 288 void UIMachineSettingsNetwork::loadAdapterData(const UIDataSettingsMachineNetworkAdapter &adapterData) 289 { 280 290 /* Load slot number: */ 281 291 m_iSlot = adapterData.m_iSlot; … … 312 322 } 313 323 314 void UIMachineSettingsNetwork::uploadAdapterCache(UISettingsCacheMachineNetworkAdapter &adapterCache) 315 { 316 /* Prepare adapter data: */ 317 UIDataSettingsMachineNetworkAdapter adapterData = adapterCache.base(); 318 324 void UIMachineSettingsNetwork::saveAdapterData(UIDataSettingsMachineNetworkAdapter &adapterData) 325 { 319 326 /* Save adapter activity state: */ 320 327 adapterData.m_fAdapterEnabled = m_pEnableAdapterCheckBox->isChecked(); … … 360 367 /* Save port forwarding rules: */ 361 368 adapterData.m_redirects = m_portForwardingRules; 362 363 /* Cache adapter data: */364 adapterCache.cacheCurrentData(adapterData);365 369 } 366 370 … … 1034 1038 refreshNATNetworkList(); 1035 1039 1040 /* Prepare initial data: */ 1041 UIDataSettingsMachineNetwork initialData; 1042 1036 1043 /* For each network adapter: */ 1037 1044 for (int iSlot = 0; iSlot < m_pTabWidget->count(); ++iSlot) 1038 1045 { 1039 /* Prepare adapter data: */1040 UIDataSettingsMachineNetworkAdapter adapterData;1046 /* Prepare initial adapter data: */ 1047 UIDataSettingsMachineNetworkAdapter initialAdapterData; 1041 1048 1042 1049 /* Check if adapter is valid: */ … … 1045 1052 { 1046 1053 /* 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()); 1055 1062 1056 1063 /* 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(); 1062 1069 1063 1070 /* 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()) 1066 1072 { 1067 QStringList redirectData = redirects[i].split(',');1073 const QStringList redirectData = redirect.split(','); 1068 1074 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()); 1075 1081 } 1076 1082 } 1077 1083 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); 1081 1090 1082 1091 /* Upload machine to data: */ … … 1087 1096 { 1088 1097 /* Setup tab order: */ 1089 Assert (firstWidget());1098 AssertPtrReturnVoid(firstWidget()); 1090 1099 setTabOrder(firstWidget(), m_pTabWidget->focusProxy()); 1091 1100 QWidget *pLastFocusWidget = m_pTabWidget->focusProxy(); … … 1097 1106 UIMachineSettingsNetwork *pTab = qobject_cast<UIMachineSettingsNetwork*>(m_pTabWidget->widget(iSlot)); 1098 1107 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)); 1101 1110 1102 1111 /* Setup tab order: */ … … 1116 1125 void UIMachineSettingsNetworkPage::putToCache() 1117 1126 { 1127 /* Prepare current data: */ 1128 UIDataSettingsMachineNetwork currentData; 1129 1118 1130 /* For each network adapter: */ 1119 1131 for (int iSlot = 0; iSlot < m_pTabWidget->count(); ++iSlot) … … 1122 1134 UIMachineSettingsNetwork *pTab = qobject_cast<UIMachineSettingsNetwork*>(m_pTabWidget->widget(iSlot)); 1123 1135 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); 1127 1148 } 1128 1149 … … 1139 1160 { 1140 1161 /* 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 ¤tAdapterData = m_pCache->data().m_adapters.at(iSlot); 1164 if (currentAdapterData != initialAdapterData) 1143 1165 { 1144 1166 /* Check if adapter still valid: */ … … 1146 1168 if (!adapter.isNull()) 1147 1169 { 1148 /* Get adapter data from cache: */1149 const UIDataSettingsMachineNetworkAdapter &adapterData = adapterCache.data();1150 1151 1170 /* Store adapter data: */ 1152 1171 if (isMachineOffline()) 1153 1172 { 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); 1158 1185 } 1159 1186 if (isMachineInValidMode()) 1160 1187 { 1161 /* A ttachment type: */1162 switch ( adapterData.m_attachmentType)1188 /* Adapter attachment type: */ 1189 switch (currentAdapterData.m_attachmentType) 1163 1190 { 1164 1191 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); 1166 1196 break; 1197 } 1167 1198 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); 1169 1203 break; 1204 } 1170 1205 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); 1172 1210 break; 1211 } 1173 1212 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); 1176 1220 break; 1221 } 1177 1222 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); 1179 1227 break; 1228 } 1180 1229 default: 1181 1230 break; 1182 1231 } 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)) 1191 1248 { 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) 1199 1252 adapter.GetNATEngine().AddRedirect(newRedirect.name, newRedirect.protocol, 1200 1253 newRedirect.hostIp, newRedirect.hostPort.value(), 1201 1254 newRedirect.guestIp, newRedirect.guestPort.value()); 1202 }1203 1255 } 1204 1256 } … … 1246 1298 { 1247 1299 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)); 1250 1302 UIMachineSettingsNetwork *pTab = qobject_cast<UIMachineSettingsNetwork*>(m_pTabWidget->widget(iSlot)); 1251 1303 pTab->polishTab(); -
trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsNetwork.h
r66345 r66359 26 26 /* Forward declarations: */ 27 27 class QITabWidget; 28 class UIMachineSettingsNetworkPage;29 28 struct UIDataSettingsMachineNetwork; 30 struct UIDataSettingsMachineNetworkAdapter; 31 typedef UISettingsCache<UIDataSettingsMachineNetworkAdapter> UISettingsCacheMachineNetworkAdapter; 32 typedef UISettingsCachePool<UIDataSettingsMachineNetwork, UISettingsCacheMachineNetworkAdapter> UISettingsCacheMachineNetwork; 29 typedef UISettingsCache<UIDataSettingsMachineNetwork> UISettingsCacheMachineNetwork; 33 30 34 31
Note:
See TracChangeset
for help on using the changeset viewer.

