#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
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);
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"));
}
// 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,
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")
topsizer->Fit( this );
Centre( wxBOTH );
+
+ 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))
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?"),
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());