- /* Figure out height of DirCtrl, which is what is left over by
- * the textctrl and the buttons. Manually, because I can't seem
- * to get the constraints stuff to do this */
- int w,h,h2;
-
- GetClientSize(&w, &h);
- m_input->GetSize(&w,&h2); h -= h2;
- m_ok->GetSize(&w, &h2); h -= h2;
- //m_check->GetSize(&w, &h2); h -= h2;
- h -= 30;
-
- wxLayoutConstraints *c = new wxLayoutConstraints;
- c->left.SameAs (this, wxLeft,5);
- c->right.SameAs (this, wxRight,5);
- c->height.Absolute (h);
- c->top.SameAs (this, wxTop,5);
- m_dir->SetConstraints(c);
-
- c = new wxLayoutConstraints;
- c->left.SameAs (this, wxLeft,5);
- c->right.SameAs (this, wxRight,5);
- c->height.AsIs ();
- c->top.Below (m_dir,5);
- m_input->SetConstraints(c);
-
- /* c = new wxLayoutConstraints;
- c->left.SameAs (this, wxLeft,5);
- c->right.SameAs (this, wxRight,5);
- c->height.AsIs ();
- c->top.Below (m_input,5);
- m_check->SetConstraints(c); */
-
- c = new wxLayoutConstraints;
- c->width.SameAs (m_cancel, wxWidth);
- c->height.AsIs ();
- c->top.Below (m_input,10);
- c->centreX.PercentOf (this, wxWidth, 20);
- m_ok->SetConstraints(c);
-
- c = new wxLayoutConstraints;
- c->width.SameAs (m_cancel, wxWidth);
- c->height.AsIs ();
- c->top.Below (m_input,10);
- c->bottom.SameAs (this, wxBottom, 5);
- c->centreX.PercentOf (this, wxWidth, 50);
- m_new->SetConstraints(c);
-
- c = new wxLayoutConstraints;
- c->width.AsIs ();
- c->height.AsIs ();
- c->top.Below (m_input,10);
- c->centreX.PercentOf (this, wxWidth, 80);
- m_cancel->SetConstraints(c);
-
- Layout();
+ m_path = m_input->GetValue();
+
+ // Does the path exist? (User may have typed anything in m_input)
+ 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?"),
+ m_path.c_str());
+ wxMessageDialog dialog(this, msg, _("Directory does not exist"),
+ wxYES_NO | wxICON_WARNING);
+
+ if ( dialog.ShowModal() == wxID_YES )
+ {
+ // Okay, let's make it
+ wxLogNull log;
+ if (wxMkdir(m_path))
+ {
+ // The new dir was created okay.
+ EndModal(wxID_OK);
+ return;
+ }
+ else
+ {
+ // Trouble...
+ msg.Printf(_("Failed to create directory '%s'\n(Do you have the required permissions?)"),
+ m_path.c_str());
+ wxMessageDialog errmsg(this, msg, _("Error creating directory"), wxOK | wxICON_ERROR);
+ errmsg.ShowModal();
+ // We still don't have a valid dir. Back to the main dialog.
+ }
+ }
+ // User has answered NO to create dir.