X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/93763ad5ba900aecb9220a36ebe7447313ea3e31..eb7f97f8d60ac6279f9335424a5fc91a8b1e809a:/src/generic/dirdlgg.cpp diff --git a/src/generic/dirdlgg.cpp b/src/generic/dirdlgg.cpp index 9419cbc73f..5fb5435056 100644 --- a/src/generic/dirdlgg.cpp +++ b/src/generic/dirdlgg.cpp @@ -26,13 +26,13 @@ #include "wx/intl.h" #include "wx/log.h" #include "wx/msgdlg.h" + #include "wx/bmpbuttn.h" #endif #include "wx/statline.h" #include "wx/dirctrl.h" #include "wx/generic/dirdlgg.h" #include "wx/artprov.h" -#include "wx/bmpbuttn.h" // ---------------------------------------------------------------------------- // constants @@ -78,11 +78,23 @@ END_EVENT_TABLE() wxGenericDirDialog::wxGenericDirDialog(wxWindow* parent, const wxString& title, const wxString& defaultPath, long style, const wxPoint& pos, const wxSize& sz, - const wxString& name): - wxDialog(parent, ID_DIRCTRL, title, pos, sz, style, name) + const wxString& name) +{ + Create(parent, title, defaultPath, style, pos, sz, name); +} + +bool wxGenericDirDialog::Create(wxWindow* parent, + const wxString& title, + const wxString& defaultPath, long style, + const wxPoint& pos, + const wxSize& sz, + const wxString& name) { wxBusyCursor cursor; + if (!wxDirDialogBase::Create(parent, title, defaultPath, style, pos, sz, name)) + return false; + m_path = defaultPath; if (m_path == wxT("~")) wxGetHomeDir(&m_path); @@ -97,7 +109,7 @@ wxGenericDirDialog::wxGenericDirDialog(wxWindow* parent, const wxString& title, wxMenu *dirMenu = new wxMenu; dirMenu->Append(ID_GO_HOME, _("Home")); - if (style & wxDD_NEW_DIR_BUTTON) + if (!HasFlag(wxDD_DIR_MUST_EXIST)) { dirMenu->Append(ID_NEW, _("New directory")); } @@ -121,7 +133,7 @@ wxGenericDirDialog::wxGenericDirDialog(wxWindow* parent, const wxString& title, // I'm not convinced we need a New button, and we tend to get annoying // accidental-editing with label editing enabled. - if (style & wxDD_NEW_DIR_BUTTON) + if (!HasFlag(wxDD_DIR_MUST_EXIST)) { wxBitmapButton* newButton = new wxBitmapButton(this, ID_NEW, @@ -146,7 +158,7 @@ wxGenericDirDialog::wxGenericDirDialog(wxWindow* parent, const wxString& title, long dirStyle = wxDIRCTRL_DIR_ONLY | wxDEFAULT_CONTROL_BORDER; #ifdef __WXMSW__ - if (style & wxDD_NEW_DIR_BUTTON) + if (!HasFlag(wxDD_DIR_MUST_EXIST)) { // Only under Windows do we need the wxTR_EDIT_LABEL tree control style // before we can call EditLabel (required for "New directory") @@ -193,12 +205,21 @@ wxGenericDirDialog::wxGenericDirDialog(wxWindow* parent, const wxString& title, SetAutoLayout( true ); SetSizer( topsizer ); -#if !defined(__SMARTPHONE__) && !defined(__POCKETPC__) topsizer->SetSizeHints( this ); topsizer->Fit( this ); Centre( wxBOTH ); -#endif + + return true; +} + +void wxGenericDirDialog::EndModal(int retCode) +{ + // before proceeding, change the current working directory if user asked so + if (retCode == wxID_OK && HasFlag(wxDD_CHANGE_DIR)) + wxSetWorkingDirectory(m_path); + + wxDialog::EndModal(retCode); } void wxGenericDirDialog::OnCloseWindow(wxCloseEvent& WXUNUSED(event)) @@ -209,12 +230,15 @@ void wxGenericDirDialog::OnCloseWindow(wxCloseEvent& WXUNUSED(event)) void wxGenericDirDialog::OnOK(wxCommandEvent& WXUNUSED(event)) { m_path = m_input->GetValue(); + // Does the path exist? (User may have typed anything in m_input) - if (wxDirExists(m_path)) { + if (wxDirExists(m_path)) + { // OK, path exists, we're done. EndModal(wxID_OK); return; } + // Interact with user, find out if the dir is a typo or to be created wxString msg; msg.Printf(_("The directory '%s' does not exist\nCreate it now?"), @@ -222,15 +246,18 @@ void wxGenericDirDialog::OnOK(wxCommandEvent& WXUNUSED(event)) wxMessageDialog dialog(this, msg, _("Directory does not exist"), wxYES_NO | wxICON_WARNING); - if ( dialog.ShowModal() == wxID_YES ) { + if ( dialog.ShowModal() == wxID_YES ) + { // Okay, let's make it wxLogNull log; - if (wxMkdir(m_path)) { + if (wxMkdir(m_path)) + { // The new dir was created okay. EndModal(wxID_OK); return; } - else { + else + { // Trouble... msg.Printf(_("Failed to create directory '%s'\n(Do you have the required permissions?)"), m_path.c_str());