Changeset 95642 in vbox
- Timestamp:
- Jul 14, 2022 9:48:42 AM (3 years ago)
- svn:sync-xref-src-repo-rev:
- 152286
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsDisplay.cpp
r95639 r95642 15 15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. 16 16 */ 17 18 /* IPRT includes: */19 #include "iprt/path.h" /* For RTPATH_MAX in UIMachineSettingsDisplay::saveRecordingData(). */20 17 21 18 /* Qt includes: */ … … 1172 1169 bool fSuccess = true; 1173 1170 1171 /* Get old data from cache: */ 1172 const UIDataSettingsMachineDisplay &oldDisplayData = m_pCache->base(); 1174 1173 /* Get new data from cache: */ 1175 1174 const UIDataSettingsMachineDisplay &newDisplayData = m_pCache->data(); … … 1178 1177 Assert(recordingSettings.isNotNull()); 1179 1178 1180 CRecordingScreenSettingsVector comRecordingScreenSettingsVector = recordingSettings.GetScreens(); 1181 for (int idxScreen = 0; fSuccess && idxScreen < comRecordingScreenSettingsVector.size(); ++idxScreen) 1182 { 1183 CRecordingScreenSettings comRecordingScreenSettings = comRecordingScreenSettingsVector.at(idxScreen); 1184 1185 char szFileAbs[RTPATH_MAX] = ""; 1186 int vrc = RTStrCopy(szFileAbs, sizeof(szFileAbs), newDisplayData.m_strRecordingFilePath.toLocal8Bit().data()); 1187 if (RT_FAILURE(vrc)) 1188 { 1189 notifyOperationProgressError(QString("Copying path failed with %1").arg(vrc)); 1190 fSuccess = false; 1191 } 1192 1193 if (fSuccess) 1194 { 1195 comRecordingScreenSettings.SetFilename(szFileAbs); 1196 Assert(comRecordingScreenSettings.isOk()); 1197 fSuccess = comRecordingScreenSettings.isOk(); 1198 } 1199 1200 /** @todo r=andy We have to explicitly set all settings to the screen objects here, to keep things in 1201 * sync with the settings from screen 0. Optimize / change this when we have support for per-screen 1202 * recording settings in the GUI. See @bugref{10259} */ 1203 1204 /* Save recording frame width: */ 1205 if (fSuccess) 1206 { 1207 comRecordingScreenSettings.SetVideoWidth(newDisplayData.m_iRecordingVideoFrameWidth); 1208 Assert(comRecordingScreenSettings.isOk()); 1209 fSuccess = comRecordingScreenSettings.isOk(); 1210 } 1211 /* Save recording frame height: */ 1212 if (fSuccess) 1213 { 1214 comRecordingScreenSettings.SetVideoHeight(newDisplayData.m_iRecordingVideoFrameHeight); 1215 Assert(comRecordingScreenSettings.isOk()); 1216 fSuccess = comRecordingScreenSettings.isOk(); 1217 } 1218 /* Save recording frame rate: */ 1219 if (fSuccess) 1220 { 1221 comRecordingScreenSettings.SetVideoFPS(newDisplayData.m_iRecordingVideoFrameRate); 1222 Assert(comRecordingScreenSettings.isOk()); 1223 fSuccess = comRecordingScreenSettings.isOk(); 1224 } 1225 /* Save recording frame bit rate: */ 1226 if (fSuccess) 1227 { 1228 comRecordingScreenSettings.SetVideoRate(newDisplayData.m_iRecordingVideoBitRate); 1229 Assert(comRecordingScreenSettings.isOk()); 1230 fSuccess = comRecordingScreenSettings.isOk(); 1231 } 1232 /* Save recording options: */ 1233 if (fSuccess) 1234 { 1235 comRecordingScreenSettings.SetOptions(newDisplayData.m_strRecordingVideoOptions); 1236 Assert(comRecordingScreenSettings.isOk()); 1237 fSuccess = comRecordingScreenSettings.isOk(); 1238 } 1239 /* Finally, save the screen's recording state: */ 1240 /* Note: Must come last, as modifying options with an enabled recording state is not possible. */ 1241 if (fSuccess) 1242 { 1243 comRecordingScreenSettings.SetEnabled(newDisplayData.m_vecRecordingScreens[idxScreen]); 1244 Assert(comRecordingScreenSettings.isOk()); 1245 fSuccess = comRecordingScreenSettings.isOk(); 1246 } 1247 1248 if (!fSuccess) 1249 break; 1250 } 1251 1252 /* Save whether recording is enabled: 1253 * Do this last, as after enabling recording no changes via API aren't allowed anymore. */ 1254 if (fSuccess) 1255 { 1256 recordingSettings.SetEnabled(newDisplayData.m_fRecordingEnabled); 1257 Assert(recordingSettings.isOk()); 1258 fSuccess = recordingSettings.isOk(); 1179 /** @todo r=andy Make the code below more compact -- too much redundancy here. */ 1180 1181 /* Save new 'Recording' data for online case: */ 1182 if (isMachineOnline()) 1183 { 1184 /* If 'Recording' was *enabled*: */ 1185 if (oldDisplayData.m_fRecordingEnabled) 1186 { 1187 /* Save whether recording is enabled: */ 1188 if (fSuccess && newDisplayData.m_fRecordingEnabled != oldDisplayData.m_fRecordingEnabled) 1189 { 1190 recordingSettings.SetEnabled(newDisplayData.m_fRecordingEnabled); 1191 fSuccess = recordingSettings.isOk(); 1192 } 1193 1194 // We can still save the *screens* option. 1195 /* Save recording screens: */ 1196 if (fSuccess) 1197 { 1198 CRecordingScreenSettingsVector comRecordingScreenSettingsVector = recordingSettings.GetScreens(); 1199 for (int iScreenIndex = 0; fSuccess && iScreenIndex < comRecordingScreenSettingsVector.size(); ++iScreenIndex) 1200 { 1201 if (newDisplayData.m_vecRecordingScreens[iScreenIndex] == oldDisplayData.m_vecRecordingScreens[iScreenIndex]) 1202 continue; 1203 1204 CRecordingScreenSettings comRecordingScreenSettings = comRecordingScreenSettingsVector.at(iScreenIndex); 1205 comRecordingScreenSettings.SetEnabled(newDisplayData.m_vecRecordingScreens[iScreenIndex]); 1206 fSuccess = comRecordingScreenSettings.isOk(); 1207 } 1208 } 1209 } 1210 /* If 'Recording' was *disabled*: */ 1211 else 1212 { 1213 CRecordingScreenSettingsVector comRecordingScreenSettingsVector = recordingSettings.GetScreens(); 1214 for (int iScreenIndex = 0; fSuccess && iScreenIndex < comRecordingScreenSettingsVector.size(); ++iScreenIndex) 1215 { 1216 CRecordingScreenSettings comRecordingScreenSettings = comRecordingScreenSettingsVector.at(iScreenIndex); 1217 1218 // We should save all the options *before* 'Recording' activation. 1219 // And finally we should *enable* Recording if necessary. 1220 /* Save recording file path: */ 1221 if (fSuccess && newDisplayData.m_strRecordingFilePath != oldDisplayData.m_strRecordingFilePath) 1222 { 1223 comRecordingScreenSettings.SetFilename(newDisplayData.m_strRecordingFilePath); 1224 Assert(comRecordingScreenSettings.isOk()); 1225 fSuccess = comRecordingScreenSettings.isOk(); 1226 } 1227 /* Save recording frame width: */ 1228 if (fSuccess && newDisplayData.m_iRecordingVideoFrameWidth != oldDisplayData.m_iRecordingVideoFrameWidth) 1229 { 1230 comRecordingScreenSettings.SetVideoWidth(newDisplayData.m_iRecordingVideoFrameWidth); 1231 Assert(comRecordingScreenSettings.isOk()); 1232 fSuccess = comRecordingScreenSettings.isOk(); 1233 } 1234 /* Save recording frame height: */ 1235 if (fSuccess && newDisplayData.m_iRecordingVideoFrameHeight != oldDisplayData.m_iRecordingVideoFrameHeight) 1236 { 1237 comRecordingScreenSettings.SetVideoHeight(newDisplayData.m_iRecordingVideoFrameHeight); 1238 Assert(comRecordingScreenSettings.isOk()); 1239 fSuccess = comRecordingScreenSettings.isOk(); 1240 } 1241 /* Save recording frame rate: */ 1242 if (fSuccess && newDisplayData.m_iRecordingVideoFrameRate != oldDisplayData.m_iRecordingVideoFrameRate) 1243 { 1244 comRecordingScreenSettings.SetVideoFPS(newDisplayData.m_iRecordingVideoFrameRate); 1245 Assert(comRecordingScreenSettings.isOk()); 1246 fSuccess = comRecordingScreenSettings.isOk(); 1247 } 1248 /* Save recording frame bit rate: */ 1249 if (fSuccess && newDisplayData.m_iRecordingVideoBitRate != oldDisplayData.m_iRecordingVideoBitRate) 1250 { 1251 comRecordingScreenSettings.SetVideoRate(newDisplayData.m_iRecordingVideoBitRate); 1252 Assert(comRecordingScreenSettings.isOk()); 1253 fSuccess = comRecordingScreenSettings.isOk(); 1254 } 1255 /* Save recording options: */ 1256 if (fSuccess && newDisplayData.m_strRecordingVideoOptions != oldDisplayData.m_strRecordingVideoOptions) 1257 { 1258 comRecordingScreenSettings.SetOptions(newDisplayData.m_strRecordingVideoOptions); 1259 Assert(comRecordingScreenSettings.isOk()); 1260 fSuccess = comRecordingScreenSettings.isOk(); 1261 } 1262 /* Finally, save the screen's recording state: */ 1263 /* Note: Must come last, as modifying options with an enabled recording state is not possible. */ 1264 if (fSuccess && newDisplayData.m_vecRecordingScreens != oldDisplayData.m_vecRecordingScreens) 1265 { 1266 comRecordingScreenSettings.SetEnabled(newDisplayData.m_vecRecordingScreens[iScreenIndex]); 1267 Assert(comRecordingScreenSettings.isOk()); 1268 fSuccess = comRecordingScreenSettings.isOk(); 1269 } 1270 } 1271 1272 /* Save whether recording is enabled: 1273 * Do this last, as after enabling recording no changes via API aren't allowed anymore. */ 1274 if (fSuccess && newDisplayData.m_fRecordingEnabled != oldDisplayData.m_fRecordingEnabled) 1275 { 1276 recordingSettings.SetEnabled(newDisplayData.m_fRecordingEnabled); 1277 Assert(recordingSettings.isOk()); 1278 fSuccess = recordingSettings.isOk(); 1279 } 1280 } 1281 } 1282 /* Save new 'Recording' data for offline case: */ 1283 else 1284 { 1285 CRecordingScreenSettingsVector comRecordingScreenSettingsVector = recordingSettings.GetScreens(); 1286 for (int iScreenIndex = 0; fSuccess && iScreenIndex < comRecordingScreenSettingsVector.size(); ++iScreenIndex) 1287 { 1288 CRecordingScreenSettings comRecordingScreenSettings = comRecordingScreenSettingsVector.at(iScreenIndex); 1289 1290 /* Save recording file path: */ 1291 if (fSuccess && newDisplayData.m_strRecordingFilePath != oldDisplayData.m_strRecordingFilePath) 1292 { 1293 comRecordingScreenSettings.SetFilename(newDisplayData.m_strRecordingFilePath); 1294 Assert(comRecordingScreenSettings.isOk()); 1295 fSuccess = comRecordingScreenSettings.isOk(); 1296 } 1297 /* Save recording frame width: */ 1298 if (fSuccess && newDisplayData.m_iRecordingVideoFrameWidth != oldDisplayData.m_iRecordingVideoFrameWidth) 1299 { 1300 comRecordingScreenSettings.SetVideoWidth(newDisplayData.m_iRecordingVideoFrameWidth); 1301 Assert(comRecordingScreenSettings.isOk()); 1302 fSuccess = comRecordingScreenSettings.isOk(); 1303 } 1304 /* Save recording frame height: */ 1305 if (fSuccess && newDisplayData.m_iRecordingVideoFrameHeight != oldDisplayData.m_iRecordingVideoFrameHeight) 1306 { 1307 comRecordingScreenSettings.SetVideoHeight(newDisplayData.m_iRecordingVideoFrameHeight); 1308 Assert(comRecordingScreenSettings.isOk()); 1309 fSuccess = comRecordingScreenSettings.isOk(); 1310 } 1311 /* Save recording frame rate: */ 1312 if (fSuccess && newDisplayData.m_iRecordingVideoFrameRate != oldDisplayData.m_iRecordingVideoFrameRate) 1313 { 1314 comRecordingScreenSettings.SetVideoFPS(newDisplayData.m_iRecordingVideoFrameRate); 1315 Assert(comRecordingScreenSettings.isOk()); 1316 fSuccess = comRecordingScreenSettings.isOk(); 1317 } 1318 /* Save recording frame bit rate: */ 1319 if (fSuccess && newDisplayData.m_iRecordingVideoBitRate != oldDisplayData.m_iRecordingVideoBitRate) 1320 { 1321 comRecordingScreenSettings.SetVideoRate(newDisplayData.m_iRecordingVideoBitRate); 1322 Assert(comRecordingScreenSettings.isOk()); 1323 fSuccess = comRecordingScreenSettings.isOk(); 1324 } 1325 /* Save capture options: */ 1326 if (fSuccess && newDisplayData.m_strRecordingVideoOptions != oldDisplayData.m_strRecordingVideoOptions) 1327 { 1328 comRecordingScreenSettings.SetOptions(newDisplayData.m_strRecordingVideoOptions); 1329 Assert(comRecordingScreenSettings.isOk()); 1330 fSuccess = comRecordingScreenSettings.isOk(); 1331 } 1332 /* Finally, save the screen's recording state: */ 1333 /* Note: Must come last, as modifying options with an enabled recording state is not possible. */ 1334 if (fSuccess && newDisplayData.m_vecRecordingScreens != oldDisplayData.m_vecRecordingScreens) 1335 { 1336 comRecordingScreenSettings.SetEnabled(newDisplayData.m_vecRecordingScreens[iScreenIndex]); 1337 Assert(comRecordingScreenSettings.isOk()); 1338 fSuccess = comRecordingScreenSettings.isOk(); 1339 } 1340 } 1341 1342 /* Save whether recording is enabled: 1343 * Do this last, as after enabling recording no changes via API aren't allowed anymore. */ 1344 if (fSuccess && newDisplayData.m_fRecordingEnabled != oldDisplayData.m_fRecordingEnabled) 1345 { 1346 recordingSettings.SetEnabled(newDisplayData.m_fRecordingEnabled); 1347 Assert(recordingSettings.isOk()); 1348 fSuccess = recordingSettings.isOk(); 1349 } 1259 1350 } 1260 1351 1261 1352 /* Show error message if necessary: */ 1262 1353 if (!fSuccess) 1263 { 1264 if (!m_machine.isOk()) /* Did we already warn above? */ 1265 notifyOperationProgressError(UIErrorString::formatErrorInfo(m_machine)); 1266 } 1354 notifyOperationProgressError(UIErrorString::formatErrorInfo(m_machine)); 1267 1355 1268 1356 /* Return result: */
Note:
See TracChangeset
for help on using the changeset viewer.