|
|
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/GraphicUserInterface.h" ! 11: #include "Main/Resources.h" ! 12: #include "WizardFrame.h" ! 13: ! 14: namespace TrueCrypt ! 15: { ! 16: WizardFrame::WizardFrame (wxWindow* parent) ! 17: : WizardFrameBase (parent), ! 18: CurrentPage (nullptr), ! 19: CurrentStep (-1), ! 20: MaxStaticTextWidth (-1), ! 21: WorkInProgress (false) ! 22: { ! 23: SetIcon (Resources::GetTrueCryptIcon()); ! 24: ! 25: PageTitleStaticText->SetFont (wxFont ( ! 26: #ifdef TC_WINDOWS ! 27: 16 ! 28: #elif defined(TC_MACOSX) ! 29: 18 ! 30: #elif defined(__WXGTK__) ! 31: 12 ! 32: #endif ! 33: * Gui->GetCharHeight (this) / 13, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, L"Times New Roman")); ! 34: ! 35: UpdateControls(); ! 36: this->SetDefaultItem (NextButton); ! 37: NextButton->SetFocus(); ! 38: ! 39: foreach (wxWindow *c, MainPanel->GetChildren()) ! 40: c->Connect (wxEVT_MOTION, wxMouseEventHandler (WizardFrame::OnMouseMotion), nullptr, this); ! 41: } ! 42: ! 43: WizardFrame::~WizardFrame () ! 44: { ! 45: if (CurrentPage) ! 46: CurrentPage->Destroy(); ! 47: } ! 48: ! 49: void WizardFrame::ClearHistory () ! 50: { ! 51: StepHistory.clear(); ! 52: UpdateControls(); ! 53: } ! 54: ! 55: void WizardFrame::OnClose (wxCloseEvent& event) ! 56: { ! 57: if (WorkInProgress) ! 58: return; ! 59: ! 60: event.Skip(); ! 61: } ! 62: ! 63: void WizardFrame::OnHelpButtonClick (wxCommandEvent& event) ! 64: { ! 65: Gui->OpenUserGuide (this); ! 66: } ! 67: ! 68: void WizardFrame::OnNextButtonClick (wxCommandEvent& event) ! 69: { ! 70: if (CurrentPage->IsValid()) ! 71: { ! 72: WizardStep nextStep = ProcessPageChangeRequest (true); ! 73: if (nextStep != CurrentStep) ! 74: SetStep (nextStep); ! 75: } ! 76: } ! 77: ! 78: void WizardFrame::OnPreviousButtonClick (wxCommandEvent& event) ! 79: { ! 80: ProcessPageChangeRequest (false); ! 81: ! 82: if (!StepHistory.empty()) ! 83: { ! 84: WizardStep prevStep = *StepHistory.rbegin(); ! 85: StepHistory.pop_back(); ! 86: SetStep (prevStep, false); ! 87: } ! 88: } ! 89: ! 90: void WizardFrame::SetCancelButtonText (const wxString &text) ! 91: { ! 92: CancelButton->SetLabel (text.empty() ? wxString (_("Cancel")) : text); ! 93: } ! 94: ! 95: void WizardFrame::SetImage (const wxBitmap &bitmap) ! 96: { ! 97: WizardBitmap->SetBitmap (bitmap); ! 98: } ! 99: ! 100: void WizardFrame::SetMaxStaticTextWidth (size_t charCount) ! 101: { ! 102: MaxStaticTextWidth = Gui->GetCharWidth (this) * charCount; ! 103: } ! 104: ! 105: void WizardFrame::SetStep (WizardStep newStep) ! 106: { ! 107: SetStep (newStep, true); ! 108: } ! 109: ! 110: void WizardFrame::SetStep (WizardStep newStep, bool forward) ! 111: { ! 112: bool init = false; ! 113: FreezeScope freeze (this); ! 114: ! 115: #ifdef TC_WINDOWS ! 116: HelpButton->Disable(); // Prevent Help button from getting default focus ! 117: NextButton->Enable(); ! 118: #endif ! 119: if (CurrentPage) ! 120: { ! 121: if (forward) ! 122: StepHistory.push_back (CurrentStep); ! 123: ! 124: CurrentPage->OnPageChanging (forward); ! 125: CurrentPage->Destroy(); ! 126: CurrentPage = nullptr; ! 127: } ! 128: else ! 129: init = true; ! 130: ! 131: CurrentStep = newStep; ! 132: CurrentPage = GetPage (newStep); ! 133: ! 134: CurrentPage->PageUpdatedEvent.Connect (EventConnector <WizardFrame> (this, &WizardFrame::OnPageUpdated)); ! 135: ! 136: CurrentPage->Connect (wxEVT_MOTION, wxMouseEventHandler (WizardFrame::OnMouseMotion), nullptr, this); ! 137: foreach (wxWindow *c, CurrentPage->GetChildren()) ! 138: c->Connect (wxEVT_MOTION, wxMouseEventHandler (WizardFrame::OnMouseMotion), nullptr, this); ! 139: ! 140: if (MaxStaticTextWidth > 0) ! 141: CurrentPage->SetMaxStaticTextWidth (MaxStaticTextWidth); ! 142: ! 143: PageTitleStaticText->SetLabel (CurrentPage->GetPageTitle()); ! 144: PageSizer->Add (CurrentPage, 1, wxALL | wxEXPAND); ! 145: ! 146: if (init) ! 147: { ! 148: Fit(); ! 149: Layout(); ! 150: Center(); ! 151: } ! 152: else ! 153: MainPanel->Layout(); ! 154: ! 155: CurrentPage->SetFocus(); ! 156: ! 157: wxString nextButtonText = CurrentPage->GetNextButtonText(); ! 158: if (nextButtonText.empty()) ! 159: NextButton->SetLabel (_("&Next >")); ! 160: else ! 161: NextButton->SetLabel (nextButtonText); ! 162: ! 163: #ifdef TC_WINDOWS ! 164: HelpButton->Enable(); ! 165: #endif ! 166: UpdateControls(); ! 167: } ! 168: ! 169: void WizardFrame::SetWorkInProgress (bool state) ! 170: { ! 171: WorkInProgress = state; ! 172: UpdateControls(); ! 173: } ! 174: ! 175: void WizardFrame::UpdateControls () ! 176: { ! 177: CancelButton->Enable (!WorkInProgress); ! 178: HelpButton->Enable (!WorkInProgress); ! 179: NextButton->Enable (!WorkInProgress && CurrentPage != nullptr && CurrentPage->IsValid()); ! 180: PreviousButton->Enable (!WorkInProgress && !StepHistory.empty()); ! 181: } ! 182: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.