void UIMachineSettingsGeneral::putToCache() { /* Prepare general data: */ UIDataSettingsMachineGeneral generalData = m_cache.base(); /* 'Basic' tab data: */ AssertPtrReturnVoid(m_pNameAndSystemEditor); generalData.m_strName = m_pNameAndSystemEditor->name(); generalData.m_strGuestOsTypeId = m_pNameAndSystemEditor->type().GetId(); /* 'Advanced' tab data: */ AssertPtrReturnVoid(mPsSnapshot); AssertPtrReturnVoid(mCbClipboard); AssertPtrReturnVoid(mCbDragAndDrop); generalData.m_strSnapshotsFolder = mPsSnapshot->path(); generalData.m_clipboardMode = (KClipboardMode)mCbClipboard->currentIndex(); generalData.m_dndMode = (KDnDMode)mCbDragAndDrop->currentIndex(); /* 'Description' tab data: */ AssertPtrReturnVoid(mTeDescription); generalData.m_strDescription = mTeDescription->toPlainText().isEmpty() ? QString::null : mTeDescription->toPlainText(); /* 'Encryption' tab data: */ AssertPtrReturnVoid(m_pCheckBoxEncryption); AssertPtrReturnVoid(m_pComboCipher); AssertPtrReturnVoid(m_pEditorEncryptionPassword); generalData.m_fEncryptionEnabled = m_pCheckBoxEncryption->isChecked(); generalData.m_fEncryptionCipherChanged = m_fEncryptionCipherChanged; generalData.m_fEncryptionPasswordChanged = m_fEncryptionPasswordChanged; generalData.m_iEncryptionCipherIndex = m_pComboCipher->currentIndex(); generalData.m_strEncryptionPassword = m_pEditorEncryptionPassword->text(); /* If encryption status, cipher or password is changed: */ if (generalData.m_fEncryptionEnabled != m_cache.base().m_fEncryptionEnabled || generalData.m_fEncryptionCipherChanged != m_cache.base().m_fEncryptionCipherChanged || generalData.m_fEncryptionPasswordChanged != m_cache.base().m_fEncryptionPasswordChanged) { /* Ask for the disk encryption passwords if necessary: */ if (!m_cache.base().m_encryptedMediums.isEmpty()) { /* Create corresponding dialog: */ QWidget *pDlgParent = windowManager().realParentWindow(window()); QPointer<UIAddDiskEncryptionPasswordDialog> pDlg = new UIAddDiskEncryptionPasswordDialog(pDlgParent, generalData.m_strName, generalData.m_encryptedMediums); /* Execute it and acquire the result: */ if (pDlg->exec() == QDialog::Accepted) generalData.m_encryptionPasswords = pDlg->encryptionPasswords(); /* Delete dialog if still valid: */ if (pDlg) delete pDlg; } } /* Cache general data: */ m_cache.cacheCurrentData(generalData); }
bool UIWizardExportApp::exportVMs(CAppliance &appliance) { /* Get the map of the password IDs: */ EncryptedMediumMap encryptedMediums; foreach (const QString &strPasswordId, appliance.GetPasswordIds()) foreach (const QString &strMediumId, appliance.GetMediumIdsForPasswordId(strPasswordId)) encryptedMediums.insert(strPasswordId, strMediumId); /* Ask for the disk encryption passwords if necessary: */ if (!encryptedMediums.isEmpty()) { /* Create corresponding dialog: */ QPointer<UIAddDiskEncryptionPasswordDialog> pDlg = new UIAddDiskEncryptionPasswordDialog(this, window()->windowTitle(), encryptedMediums); /* Execute the dialog: */ if (pDlg->exec() == QDialog::Accepted) { /* Acquire the passwords provided: */ const EncryptionPasswordMap encryptionPasswords = pDlg->encryptionPasswords(); /* Delete the dialog: */ delete pDlg; /* Make sure the passwords were really provided: */ AssertReturn(!encryptionPasswords.isEmpty(), false); /* Provide appliance with passwords if possible: */ appliance.AddPasswords(encryptionPasswords.keys().toVector(), encryptionPasswords.values().toVector()); if (!appliance.isOk()) { /* Warn the user about failure: */ msgCenter().cannotAddDiskEncryptionPassword(appliance); return false; } } else { /* Any modal dialog can be destroyed in own event-loop * as a part of application termination procedure.. * We have to check if the dialog still valid. */ if (pDlg) { /* Delete the dialog: */ delete pDlg; } return false; } } /* Write the appliance: */ QVector<KExportOptions> options; if (field("manifestSelected").toBool()) options.append(KExportOptions_CreateManifest); CProgress progress = appliance.Write(field("format").toString(), options, uri()); bool fResult = appliance.isOk(); if (fResult) { /* Show some progress, so the user know whats going on: */ msgCenter().showModalProgressDialog(progress, QApplication::translate("UIWizardExportApp", "Exporting Appliance ..."), ":/progress_export_90px.png", this); if (progress.GetCanceled()) return false; if (!progress.isOk() || progress.GetResultCode() != 0) { msgCenter().cannotExportAppliance(progress, appliance.GetPath(), this); return false; } else return true; } if (!fResult) msgCenter().cannotExportAppliance(appliance, this); return false; }