5d924be
diff -up 0ad-0.0.13-alpha/source/tools/atlas/AtlasUI/ScenarioEditor/ScenarioEditor.cpp.orig 0ad-0.0.13-alpha/source/tools/atlas/AtlasUI/ScenarioEditor/ScenarioEditor.cpp
5d924be
--- 0ad-0.0.13-alpha/source/tools/atlas/AtlasUI/ScenarioEditor/ScenarioEditor.cpp.orig	2013-04-03 10:15:59.888408219 -0300
5d924be
+++ 0ad-0.0.13-alpha/source/tools/atlas/AtlasUI/ScenarioEditor/ScenarioEditor.cpp	2013-04-03 10:16:13.753408750 -0300
5d924be
@@ -692,30 +692,20 @@ bool ScenarioEditor::OpenFile(const wxSt
879053e
 
879053e
 void ScenarioEditor::OnOpen(wxCommandEvent& WXUNUSED(event))
879053e
 {
879053e
-	wxFileDialog dlg (NULL, wxFileSelectorPromptStr,
879053e
-		Datafile::GetDataDirectory() + _T("/mods/public/maps/scenarios"), m_OpenFilename,
879053e
-		_T("PMP files (*.pmp)|*.pmp|All files (*.*)|*.*"),
879053e
-		wxFD_OPEN);
879053e
-	// Set default filter
879053e
-	dlg.SetFilterIndex(0);
879053e
-
879053e
-	wxString cwd = wxFileName::GetCwd();
879053e
-
879053e
-	if (dlg.ShowModal() == wxID_OK)
879053e
-	{
879053e
-		// TODO: Handle maps in subdirectories of maps/scenarios
879053e
-		wxFileName filename(dlg.GetFilename());
879053e
-		if (!OpenFile(filename.GetName(), filename.GetFullName()))
879053e
-		{
879053e
-			wxLogError(_("Map '%ls' does not exist"), filename.GetName().c_str());
879053e
-		}
879053e
-		
879053e
-		// paranoia - MSDN says OFN_NOCHANGEDIR (used when we don't give wxCHANGE_DIR)
879053e
-		// "is ineffective for GetOpenFileName", but it seems to work anyway
879053e
-		wxCHECK_RET(cwd == wxFileName::GetCwd(), _T("cwd changed"));
879053e
+    wxFileName filename(m_OpenFilename);
879053e
+    wxFileName dirname(_T("/usr/share/0ad/mods/public/maps/scenarios"));
879053e
+    wxString string = wxGetTextFromUser(dirname.GetFullPath() + _T("/"),
879053e
+					_T("Choose filename"),
879053e
+					filename.GetName());
879053e
+    if (!string.IsEmpty()) {
879053e
+	filename.Assign(dirname.GetFullPath() + _("/") + string);
879053e
+	filename.SetExt(_T("pmp"));
879053e
+
879053e
+	if (!OpenFile(filename.GetName(), filename.GetFullName())) {
879053e
+	    wxLogError(_("Map '%ls' does not exist"),
879053e
+		       filename.GetName().c_str());
879053e
 	}
879053e
-
879053e
-	// TODO: Make this a non-undoable command
879053e
+    }
879053e
 }
879053e
 
879053e
 void ScenarioEditor::OnImportHeightmap(wxCommandEvent& WXUNUSED(event))
5d924be
@@ -779,40 +769,57 @@ void ScenarioEditor::OnSave(wxCommandEve
879053e
 
879053e
 void ScenarioEditor::OnSaveAs(wxCommandEvent& WXUNUSED(event))
879053e
 {
879053e
-	wxFileDialog dlg (NULL, wxFileSelectorPromptStr,
879053e
-		Datafile::GetDataDirectory() + _T("/mods/public/maps/scenarios"), m_OpenFilename,
879053e
-		_T("PMP files (*.pmp)|*.pmp|All files (*.*)|*.*"),
879053e
-		wxFD_SAVE | wxFD_OVERWRITE_PROMPT);
879053e
-	// Set default filter
879053e
-	dlg.SetFilterIndex(0);
879053e
-
879053e
-	if (dlg.ShowModal() == wxID_OK)
879053e
-	{
879053e
-		// On wxMSW the extension is automatically set to pmp if that filter is selected
879053e
-		// but not on wxGTK or wxOSX. Set it explicitly since it's the only possible format.
879053e
-		wxFileName filename(dlg.GetFilename());
879053e
-		filename.SetExt(_T("pmp"));
879053e
-		if (!filename.IsOk())
879053e
-		{	// Shouldn't happen
879053e
-			wxLogError(_("Invalid filename '%ls'"), filename.GetFullName().c_str());
879053e
-			return;
879053e
-		}
879053e
+    wxFileName filename(m_OpenFilename);
879053e
+    wxFileName dirname(_T("/usr/share/0ad/mods/public/maps/scenarios"));
879053e
+    wxString string = wxGetTextFromUser(dirname.GetFullPath() + _T("/"),
879053e
+					_T("Choose filename"),
879053e
+					filename.GetName());
879053e
+    if (!string.IsEmpty()) {
879053e
+	filename.Assign(dirname.GetFullPath() + _("/") + string);
879053e
+	filename.SetExt(_T("pmp"));
879053e
+
879053e
+	if (!dirname.DirExists(dirname.GetFullPath())) {
879053e
+	    wxLogError(_("Directory '%ls' does not exist"),
879053e
+		       dirname.GetFullPath().c_str());
879053e
+	    return;
879053e
+	}
879053e
+	if (!dirname.IsDirWritable(dirname.GetFullPath())) {
879053e
+	    wxLogError(_("Directory '%ls' is not writable"),
879053e
+		       dirname.GetFullPath().c_str());
879053e
+	    return;
879053e
+	}
879053e
+	if (!filename.IsOk()) {
879053e
+	    wxLogError(_("Invalid filename '%ls'"),
879053e
+		       filename.GetFullName().c_str());
879053e
+	    return;
879053e
+	}
879053e
+	if (filename.FileExists(filename.GetFullPath())) {
879053e
+	    if (wxMessageBox(_("File ") + filename.GetFullPath() +
879053e
+			     _(" exists, overwrite?"),
879053e
+			     _("Confirm"), wxOK | wxCANCEL) != wxOK)
879053e
+		return;
879053e
+	    if (!filename.IsFileWritable(filename.GetFullPath())) {
879053e
+		wxLogError(_("File '%ls' is not writable"),
879053e
+			   filename.GetFullPath().c_str());
879053e
+		return;
879053e
+	    }
879053e
+	}
879053e
 
879053e
-		wxBusyInfo busy(_("Saving ") + filename.GetFullName());
879053e
-		wxBusyCursor busyc;
879053e
+	wxBusyInfo busy(_("Saving ") + filename.GetFullName());
879053e
+	wxBusyCursor busyc;
879053e
 
879053e
-		m_ToolManager.SetCurrentTool(_T(""));
879053e
+	m_ToolManager.SetCurrentTool(_T(""));
879053e
 
879053e
-		// TODO: Handle maps in subdirectories of maps/scenarios
879053e
-		std::wstring map(filename.GetFullName().wc_str());
879053e
-		POST_MESSAGE(SaveMap, (map));
879053e
+	// TODO: Handle maps in subdirectories of maps/scenarios
879053e
+	std::wstring map(filename.GetFullName().wc_str());
879053e
+	POST_MESSAGE(SaveMap, (map));
879053e
 
879053e
-		SetOpenFilename(filename.GetFullName());
879053e
+	SetOpenFilename(filename.GetFullName());
879053e
 
879053e
-		// Wait for it to finish saving
879053e
-		qPing qry;
879053e
-		qry.Post();
879053e
-	}
879053e
+	// Wait for it to finish saving
879053e
+	qPing qry;
879053e
+	qry.Post();
879053e
+    }
879053e
 }
879053e
 
879053e
 void ScenarioEditor::SetOpenFilename(const wxString& filename)