#include #include "associatedialog.h" BEGIN_EVENT_TABLE ( AssociateDialog, wxDialog ) EVT_BUTTON ( wxID_OK, AssociateDialog::OnOk ) EVT_BUTTON ( ID_BROWSE, AssociateDialog::OnBrowse ) EVT_HELP_RANGE ( ID_URL, ID_AUX, AssociateDialog::OnContextHelp ) EVT_HELP ( wxID_OK, AssociateDialog::OnContextHelp ) EVT_HELP ( wxID_CANCEL, AssociateDialog::OnContextHelp ) EVT_UPDATE_UI ( wxID_OK, AssociateDialog::OnUpdateOk ) END_EVENT_TABLE() AssociateDialog::AssociateDialog ( wxWindow *parent, const wxString& titleParameter, const wxString& labelParameter, const wxString& typeParameter, const wxString& extensionParameter, const wxString& urlParameter, bool auxNeededParameter, const wxString& auxLabelTextParameter, const wxString& auxParameter ) : wxDialog(), title ( titleParameter ), label ( labelParameter ), type ( typeParameter ), extension ( extensionParameter ), url ( urlParameter ), auxNeeded ( auxNeededParameter ), auxLabelText ( auxLabelTextParameter ), aux ( auxParameter ) { SetExtraStyle ( wxDIALOG_EX_CONTEXTHELP ); Create ( parent, wxID_ANY, title, wxDefaultPosition, wxSize ( -1, -1 ), wxDEFAULT_DIALOG_STYLE ); wxBoxSizer *dialogSizer = new wxBoxSizer ( wxVERTICAL ); wxBoxSizer *horizontalSizer = new wxBoxSizer ( wxHORIZONTAL ); auxCtrl = NULL; // may or may not be used urlLabel = new wxStaticText ( this, ID_URL, label ); urlCtrl = new wxTextCtrl ( this, ID_URL, url, wxDefaultPosition, wxSize ( 240, -1 ) ); browseButton = new wxButton ( this, ID_BROWSE, _ ( "Browse" ) ); horizontalSizer->Add ( urlCtrl, 0, wxLEFT, 0 ); horizontalSizer->Add ( browseButton, 0, wxLEFT, 5 ); if ( auxNeeded ) { auxLabel = new wxStaticText ( this, ID_AUX, auxLabelText ); auxCtrl = new wxTextCtrl ( this, ID_AUX, aux, wxDefaultPosition, wxSize ( 240, -1 ) ); dialogSizer->Add ( auxLabel, 0, wxLEFT | wxTOP | wxALIGN_LEFT, 10 ); dialogSizer->Add ( auxCtrl, 0, wxALL, 5 ); } dialogSizer->Add ( urlLabel, 0, wxTOP | wxLEFT | wxALIGN_LEFT, 10 ); dialogSizer->Add ( horizontalSizer, 0, wxALL, 5 ); dialogSizer->Add ( CreateButtonSizer ( wxOK | wxCANCEL ), 0, wxTOP | wxBOTTOM | wxALIGN_RIGHT, 10 ); this->SetSizer ( dialogSizer ); dialogSizer->SetSizeHints ( this ); if ( auxNeeded ) auxCtrl->SetFocus(); else urlCtrl->SetFocus(); } AssociateDialog::~AssociateDialog() { } void AssociateDialog::OnOk ( wxCommandEvent& e ) { url = urlCtrl->GetValue(); if ( auxCtrl ) aux = auxCtrl->GetValue(); e.Skip(); } void AssociateDialog::OnContextHelp ( wxHelpEvent& e ) { wxTipWindow *tw; int id = e.GetId(); if ( id == ID_URL ) tw = new wxTipWindow ( this, _ ( "Provides a space for you to type the path of the file" ) ); else if ( id == ID_BROWSE ) tw = new wxTipWindow ( this, _ ( "Opens a standard file dialog" ) ); else if ( id == ID_AUX ) tw = new wxTipWindow ( this, _ ( "Provides a space for you to type additional information" ) ); else if ( id == wxID_CANCEL ) tw = new wxTipWindow ( this, _ ( "Closes this dialog without making any changes" ) ); else if ( id == wxID_OK ) tw = new wxTipWindow ( this, _ ( "Selects the file specified" ) ); else { } e.Skip(); } void AssociateDialog::OnUpdateOk ( wxUpdateUIEvent& e ) { e.Enable ( !urlCtrl->GetValue().empty() ); } wxString AssociateDialog::getUrl() { return url; } wxString AssociateDialog::getAux() { return aux; } void AssociateDialog::OnBrowse ( wxCommandEvent& e ) { wxString extensionArgument; extensionArgument = type + _T ( " (" ) + extension + _T ( ")|" ) + extension + _ ( "|All files (*.*)|*.*" ); std::auto_ptr fd ( new wxFileDialog ( this, _ ( "Select " ) + type, _T ( "" ), _T ( "" ), extensionArgument, wxOPEN | wxFILE_MUST_EXIST | wxCHANGE_DIR ) ); if ( fd->ShowModal() == wxID_OK ) { wxString newValue = fd->GetPath(); newValue.Replace ( _T ( "\\" ), _T ( "/" ), true ); newValue.Replace ( _T ( " " ), _T ( "%20" ), true ); urlCtrl->SetValue ( newValue ); } }