|
|
1.1 ! root 1: /* ! 2: Copyright (c) 2008 TrueCrypt Foundation. All rights reserved. ! 3: ! 4: Governed by the TrueCrypt License 2.4 the full text of which is contained ! 5: in the file License.txt included in TrueCrypt binary and source code ! 6: distribution packages. ! 7: */ ! 8: ! 9: #include "System.h" ! 10: #include "Main/Main.h" ! 11: #include "Main/GraphicUserInterface.h" ! 12: #include "MountOptionsDialog.h" ! 13: ! 14: namespace TrueCrypt ! 15: { ! 16: MountOptionsDialog::MountOptionsDialog (wxWindow *parent, MountOptions &options) ! 17: : MountOptionsDialogBase (parent, wxID_ANY, wxString() ! 18: #ifdef __WXGTK__ // GTK apparently needs wxRESIZE_BORDER to support dynamic resizing ! 19: , wxDefaultPosition, wxSize (-1,-1), wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER ! 20: #endif ! 21: ), Options (options) ! 22: { ! 23: if (options.Path && !options.Path->IsEmpty()) ! 24: this->SetTitle (StringFormatter (LangString["ENTER_PASSWORD_FOR"], wstring (*options.Path))); ! 25: else ! 26: this->SetTitle (LangString["ENTER_TC_VOL_PASSWORD"]); ! 27: ! 28: PasswordPanel = new VolumePasswordPanel (this, options.Password, options.Keyfiles, true); ! 29: PasswordPanel->SetCacheCheckBoxValidator (wxGenericValidator (&Options.CachePassword)); ! 30: ! 31: PasswordSizer->Add (PasswordPanel, 1, wxALL | wxEXPAND); ! 32: ! 33: #ifdef __WXGTK__ ! 34: FilesystemOptionsSizer->Remove (FilesystemSpacer); ! 35: OptionsPanel->Show (false); ! 36: Fit(); ! 37: Layout(); ! 38: SetMinSize (GetSize()); ! 39: #endif ! 40: ! 41: NoFilesystemCheckBox->SetValidator (wxGenericValidator (&Options.NoFilesystem)); ! 42: RemovableCheckBox->SetValidator (wxGenericValidator (&Options.Removable)); ! 43: ! 44: TransferDataToWindow(); ! 45: ! 46: if (Options.MountPoint && !Options.MountPoint->IsEmpty()) ! 47: MountPointTextCtrl->SetValue (wstring (*Options.MountPoint)); ! 48: ! 49: FilesystemOptionsTextCtrl->SetValue (Options.FilesystemOptions); ! 50: ! 51: ReadOnlyCheckBox->SetValue (Options.Protection == VolumeProtection::ReadOnly); ! 52: ProtectionCheckBox->SetValue (Options.Protection == VolumeProtection::HiddenVolumeReadOnly); ! 53: ! 54: OptionsButtonLabel = OptionsButton->GetLabel(); ! 55: OptionsButton->SetLabel (OptionsButtonLabel + L" >"); ! 56: OptionsPanel->Show (false); ! 57: ! 58: ProtectionPasswordPanel = new VolumePasswordPanel (OptionsPanel, options.ProtectionPassword, options.ProtectionKeyfiles, false, true, true, false, false, _("P&assword to hidden volume:")); ! 59: ProtectionPasswordSizer->Add (ProtectionPasswordPanel, 1, wxALL | wxEXPAND); ! 60: ! 61: UpdateDialog(); ! 62: Center(); ! 63: } ! 64: ! 65: void MountOptionsDialog::OnInitDialog (wxInitDialogEvent& event) ! 66: { ! 67: PasswordPanel->SetFocusToPasswordTextCtrl(); ! 68: } ! 69: ! 70: void MountOptionsDialog::OnMountPointButtonClick (wxCommandEvent& event) ! 71: { ! 72: DirectoryPath dir = Gui->SelectDirectory (this, wxEmptyString, false); ! 73: if (!dir.IsEmpty()) ! 74: MountPointTextCtrl->SetValue (wstring (dir)); ! 75: } ! 76: ! 77: void MountOptionsDialog::OnOKButtonClick (wxCommandEvent& event) ! 78: { ! 79: TransferDataFromWindow(); ! 80: ! 81: Options.Password = PasswordPanel->GetPassword(); ! 82: Options.Keyfiles = PasswordPanel->GetKeyfiles(); ! 83: ! 84: if (ReadOnlyCheckBox->IsChecked()) ! 85: { ! 86: Options.Protection = VolumeProtection::ReadOnly; ! 87: } ! 88: else if (ProtectionCheckBox->IsChecked()) ! 89: { ! 90: Options.Protection = VolumeProtection::HiddenVolumeReadOnly; ! 91: Options.ProtectionPassword = ProtectionPasswordPanel->GetPassword(); ! 92: Options.ProtectionKeyfiles = ProtectionPasswordPanel->GetKeyfiles(); ! 93: } ! 94: else ! 95: { ! 96: Options.Protection = VolumeProtection::None; ! 97: } ! 98: ! 99: wstring mountPoint (MountPointTextCtrl->GetValue()); ! 100: if (!mountPoint.empty()) ! 101: Options.MountPoint = make_shared <DirectoryPath> (mountPoint); ! 102: ! 103: Options.FilesystemOptions = FilesystemOptionsTextCtrl->GetValue(); ! 104: ! 105: try ! 106: { ! 107: if (Options.Password) ! 108: Options.Password->CheckPortability(); ! 109: } ! 110: catch (UnportablePassword &) ! 111: { ! 112: Gui->ShowWarning (LangString ["UNSUPPORTED_CHARS_IN_PWD_RECOM"]); ! 113: } ! 114: ! 115: EndModal (wxID_OK); ! 116: } ! 117: ! 118: void MountOptionsDialog::OnOptionsButtonClick (wxCommandEvent& event) ! 119: { ! 120: FreezeScope freeze (this); ! 121: OptionsPanel->Show (!OptionsPanel->IsShown()); ! 122: UpdateDialog(); ! 123: OptionsButton->SetLabel (OptionsButtonLabel + (OptionsPanel->IsShown() ? L" <" : L" >")); ! 124: } ! 125: ! 126: void MountOptionsDialog::OnProtectionCheckBoxClick (wxCommandEvent& event) ! 127: { ! 128: FreezeScope freeze (this); ! 129: ProtectionPasswordPanel->Show (event.IsChecked()); ! 130: Fit(); ! 131: Layout(); ! 132: ProtectionPasswordPanel->SetFocusToPasswordTextCtrl(); ! 133: } ! 134: ! 135: void MountOptionsDialog::OnProtectionHyperlinkClick (wxHyperlinkEvent& event) ! 136: { ! 137: Gui->OpenHomepageLink (this, L"hiddenvolprotection"); ! 138: } ! 139: ! 140: void MountOptionsDialog::UpdateDialog () ! 141: { ! 142: FreezeScope freeze (this); ! 143: ! 144: #ifdef TC_WINDOWS ! 145: FilesystemSizer->Show (false); ! 146: #else ! 147: FilesystemOptionsSizer->Show (!NoFilesystemCheckBox->IsChecked()); ! 148: ! 149: # ifdef TC_MACOSX ! 150: FilesystemOptionsStaticText->Show (false); ! 151: FilesystemOptionsTextCtrl->Show (false); ! 152: # endif ! 153: ! 154: if (!Options.Path || Options.Path->IsEmpty()) ! 155: { ! 156: MountPointTextCtrlStaticText->Show (false); ! 157: MountPointTextCtrl->Show (false); ! 158: MountPointButton->Show (false); ! 159: } ! 160: RemovableCheckBox->Show (false); ! 161: #endif ! 162: ProtectionSizer->Show (!ReadOnlyCheckBox->IsChecked()); ! 163: ProtectionPasswordPanel->Show (!ReadOnlyCheckBox->IsChecked() && ProtectionCheckBox->IsChecked()); ! 164: ! 165: Fit(); ! 166: Layout(); ! 167: } ! 168: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.