///////////////////////////////////////////////////////////////////////////// // Name: wconfirmcalibration.cpp // Purpose: // Author: Cesar Mauri Loba (cesar at crea-si dot com) // Modified by: // Created: // Copyright: (C) 2008 Cesar Mauri Loba - CREA Software Systems // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . ///////////////////////////////////////////////////////////////////////////// // For compilers that support precompilation, includes "wx/wx.h". #include "wx/wxprec.h" #ifdef __BORLANDC__ #pragma hdrstop #endif #ifndef WX_PRECOMP #include "wx/wx.h" #endif ////@begin includes ////@end includes #include "wconfirmcalibration.h" #include #include ////@begin XPM images ////@end XPM images #define TIMER_ID 1234 #define BUTTON_OK 1 #define BUTTON_CANCEL 2 #define BUTTON_REPEAT 3 #define CANCEL_TIME 10 #define OK_TIME 2 #define REPEAT_TIME 2 /*! * WConfirmCalibration type definition */ IMPLEMENT_DYNAMIC_CLASS( WConfirmCalibration, wxDialog ) /*! * WConfirmCalibration event table definition */ BEGIN_EVENT_TABLE( WConfirmCalibration, wxDialog ) ////@begin WConfirmCalibration event table entries EVT_MOTION( WConfirmCalibration::OnWindowMotion ) EVT_LEAVE_WINDOW( WConfirmCalibration::OnLeaveWindow ) EVT_BUTTON( ID_BUTTON1, WConfirmCalibration::OnButton1Click ) EVT_BUTTON( ID_BUTTON2, WConfirmCalibration::OnButton2Click ) EVT_BUTTON( ID_BUTTON3, WConfirmCalibration::OnButton3Click ) ////@end WConfirmCalibration event table entries EVT_TIMER(TIMER_ID, WConfirmCalibration::OnTimer) //EVT_LEAVE_WINDOW( WConfirmCalibration::OnLeaveOkButton ) END_EVENT_TABLE() /*! * WConfirmCalibration constructors */ WConfirmCalibration::WConfirmCalibration() : m_timer(this, TIMER_ID) { Init(); } WConfirmCalibration::WConfirmCalibration( wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style ) : m_timer(this, TIMER_ID) { Init(); Create(parent, id, caption, pos, size, style); } /*! * WConfirmCalibration creator */ bool WConfirmCalibration::Create( wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style ) { ////@begin WConfirmCalibration creation SetExtraStyle(wxWS_EX_BLOCK_EVENTS); wxDialog::Create( parent, id, caption, pos, size, style ); CreateControls(); if (GetSizer()) { GetSizer()->SetSizeHints(this); } Centre(); ////@end WConfirmCalibration creation return true; } /*! * WConfirmCalibration destructor */ WConfirmCalibration::~WConfirmCalibration() { ////@begin WConfirmCalibration destruction ////@end WConfirmCalibration destruction } /*! * Member initialisation */ void WConfirmCalibration::Init() { ////@begin WConfirmCalibration member initialisation m_buttonOk = NULL; m_buttonCancel = NULL; m_buttonRepeat = NULL; ////@end WConfirmCalibration member initialisation } /*! * Control creation for WConfirmCalibration */ void WConfirmCalibration::CreateControls() { ////@begin WConfirmCalibration content construction WConfirmCalibration* itemDialog1 = this; wxBoxSizer* itemBoxSizer2 = new wxBoxSizer(wxVERTICAL); itemDialog1->SetSizer(itemBoxSizer2); wxStaticText* itemStaticText3 = new wxStaticText( itemDialog1, wxID_STATIC, _("Move your head to see how it works"), wxDefaultPosition, wxDefaultSize, 0 ); itemBoxSizer2->Add(itemStaticText3, 0, wxGROW|wxALL, 5); wxStaticText* itemStaticText4 = new wxStaticText( itemDialog1, wxID_STATIC, _("Hover one of the buttons to select your choice"), wxDefaultPosition, wxDefaultSize, 0 ); itemBoxSizer2->Add(itemStaticText4, 0, wxGROW|wxALL, 5); itemBoxSizer2->Add(5, 5, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5); wxStaticText* itemStaticText6 = new wxStaticText( itemDialog1, wxID_STATIC, _("- \"Ok\" saves this configuration.\n- \"Cancel\" retains the old configuration.\n- \"Repeat\" starts again the calibration process."), wxDefaultPosition, wxDefaultSize, 0 ); itemBoxSizer2->Add(itemStaticText6, 0, wxGROW|wxALL, 5); wxBoxSizer* itemBoxSizer7 = new wxBoxSizer(wxHORIZONTAL); itemBoxSizer2->Add(itemBoxSizer7, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5); m_buttonOk = new wxButton( itemDialog1, ID_BUTTON1, _("Ok"), wxDefaultPosition, wxDefaultSize, 0 ); itemBoxSizer7->Add(m_buttonOk, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); m_buttonCancel = new wxButton( itemDialog1, ID_BUTTON2, _("Cancel"), wxDefaultPosition, wxDefaultSize, 0 ); itemBoxSizer7->Add(m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); m_buttonRepeat = new wxButton( itemDialog1, ID_BUTTON3, _("Repeat"), wxDefaultPosition, wxDefaultSize, 0 ); itemBoxSizer7->Add(m_buttonRepeat, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); // Connect events and objects m_buttonOk->Connect(ID_BUTTON1, wxEVT_MOTION, wxMouseEventHandler(WConfirmCalibration::OnOkButtonMotion), NULL, this); m_buttonRepeat->Connect(ID_BUTTON3, wxEVT_MOTION, wxMouseEventHandler(WConfirmCalibration::OnRepeatButtonMotion), NULL, this); ////@end WConfirmCalibration content construction m_timer.Start(1000); m_okCountdown = OK_TIME; m_cancelCountdown = CANCEL_TIME; m_repeatCountdown = REPEAT_TIME; m_activeButton = CANCEL; m_buttonCancel->SetLabel(_("Cancel") + wxString::Format(wxT(" %i"),CANCEL_TIME)); } /*! * Should we show tooltips? */ bool WConfirmCalibration::ShowToolTips() { return true; } /*! * Get bitmap resources */ wxBitmap WConfirmCalibration::GetBitmapResource( const wxString& name ) { // Bitmap retrieval ////@begin WConfirmCalibration bitmap retrieval wxUnusedVar(name); return wxNullBitmap; ////@end WConfirmCalibration bitmap retrieval } /*! * Get icon resources */ wxIcon WConfirmCalibration::GetIconResource( const wxString& name ) { // Icon retrieval ////@begin WConfirmCalibration icon retrieval wxUnusedVar(name); return wxNullIcon; ////@end WConfirmCalibration icon retrieval } /*! * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_BUTTON_OK */ void WConfirmCalibration::OnButton1Click( wxCommandEvent& event ) { m_timer.Stop(); EndModal(BUTTON_OK); event.Skip(); } /*! * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_BUTTON_CANCEL */ void WConfirmCalibration::OnButton2Click( wxCommandEvent& event ) { m_timer.Stop(); EndModal(BUTTON_CANCEL); event.Skip(); } /*! * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_BUTTON_REPEAT */ void WConfirmCalibration::OnButton3Click( wxCommandEvent& event ) { m_timer.Stop(); EndModal(BUTTON_REPEAT); event.Skip(); } void WConfirmCalibration::OnTimer(wxTimerEvent& event) { if (m_okCountdown == 0) { m_timer.Stop(); EndModal(BUTTON_OK); } else if (m_cancelCountdown == 0) { m_timer.Stop(); EndModal(BUTTON_CANCEL); } else if (m_repeatCountdown == 0) { m_timer.Stop(); EndModal(BUTTON_REPEAT); } else { switch (m_activeButton) { case OK: m_okCountdown--; m_buttonOk->SetLabel(_("Ok") + wxString::Format(wxT(" %i"), m_okCountdown)); m_buttonCancel->SetLabel(_("Cancel")); m_buttonRepeat->SetLabel(_("Repeat")); break; case CANCEL: m_cancelCountdown--; m_buttonOk->SetLabel(_("Ok")); m_buttonCancel->SetLabel(_("Cancel") + wxString::Format(wxT(" %i"), m_cancelCountdown)); m_buttonRepeat->SetLabel(_("Repeat")); break; case REPEAT: m_repeatCountdown--; m_buttonOk->SetLabel(_("Ok")); m_buttonCancel->SetLabel(_("Cancel")); m_buttonRepeat->SetLabel(_("Repeat") + wxString::Format(wxT(" %i"), m_repeatCountdown)); break; } m_timer.Stop(); m_timer.Start(1000); } event.Skip(false); } /*! * wxEVT_MOTION event handler for ID_WCONFIRMCALIBRATION */ void WConfirmCalibration::OnWindowMotion( wxMouseEvent& event ) { if (m_activeButton != CANCEL) { m_okCountdown = OK_TIME; m_repeatCountdown = REPEAT_TIME; m_activeButton = CANCEL; } event.Skip(false); } /*! * wxEVT_MOTION event handler for ID_BUTTON3 */ void WConfirmCalibration::OnRepeatButtonMotion( wxMouseEvent& event ) { if (m_activeButton != REPEAT) { m_okCountdown = OK_TIME; m_cancelCountdown = CANCEL_TIME; m_activeButton = REPEAT; } event.Skip(false); } /*! * wxEVT_MOTION event handler for ID_BUTTON1 */ void WConfirmCalibration::OnOkButtonMotion( wxMouseEvent& event ) { if (m_activeButton != OK) { m_repeatCountdown = REPEAT_TIME; m_cancelCountdown = CANCEL_TIME; m_activeButton = OK; } event.Skip(false); } /*! * wxEVT_LEAVE_WINDOW event handler for ID_WCONFIRMCALIBRATION */ void WConfirmCalibration::OnLeaveWindow( wxMouseEvent& event ) { if (m_activeButton != CANCEL) { m_okCountdown = OK_TIME; m_repeatCountdown = REPEAT_TIME; m_activeButton = CANCEL; } event.Skip(false); }