00001
00002
00003
00004
00005
00006
00007
00008
00010
00011 #ifdef __GNUG__
00012 #pragma implementation "ModalDialogTimer.h"
00013 #endif
00014
00015 #include <wxGuiTest/ModalDialogTimer.h>
00016
00017 #include <wx/dialog.h>
00018
00019 #include <wxGuiTest/ModalDialogInteractionInterface.h>
00020
00021 #include <stdexcept>
00022
00023 namespace wxTst {
00024
00025
00026 ModalDialogTimer::ModalDialogTimer (int retCode) :
00027 m_retCode (retCode)
00028 {
00029 m_interactor = NULL;
00030 }
00031
00032
00033 ModalDialogTimer::~ModalDialogTimer ()
00034 {
00035 if (m_interactor) {
00036
00037 delete m_interactor;
00038 }
00039 }
00040
00041
00042 void ModalDialogTimer::SetModalDialog (wxDialog *dialog)
00043 {
00044 m_dialog = dialog;
00045 }
00046
00047
00048 void ModalDialogTimer::SetModalDialogInteractor (ModalDialogInteractionInterface *interactor)
00049 {
00050 m_interactor = interactor;
00051 }
00052
00053
00054 bool ModalDialogTimer::Start (int milliseconds, bool oneShot)
00055 {
00056 if (oneShot == false) {
00057
00058 throw std::invalid_argument("Only one-shot timer is allowed");
00059 }
00060 return wxTimer::Start (milliseconds, oneShot);
00061 }
00062
00063
00064 void ModalDialogTimer::Notify ()
00065 {
00066
00067
00068 if (!wxThread::IsMain()) {
00069 throw std::logic_error("not main thread");
00070 }
00071
00072 if (m_interactor) {
00073
00074 m_interactor->Execute ();
00075 }
00076
00077 wxCommandEvent event;
00078 if (m_retCode == wxID_CANCEL) {
00079
00080
00081
00082 this->EndDialog ();
00083
00084 } else if (m_retCode == wxID_OK) {
00085
00086
00087
00088 if (m_dialog->Validate () && m_dialog->TransferDataFromWindow ()) {
00089
00090 this->EndDialog ();
00091 }
00092
00093 } else {
00094
00095 wxFAIL_MSG (_T("Invalid return code"));
00096 }
00097 }
00098
00099
00100 void ModalDialogTimer::EndDialog ()
00101 {
00102 if (m_dialog->IsModal ())
00103 m_dialog->EndModal (m_retCode);
00104 else
00105 m_dialog->Hide ();
00106 }
00107
00108 }