+bool wxDocument::DoSaveDocument(const wxString& file)
+{
+    wxString msgTitle;
+    if (wxTheApp->GetAppName() != wxT(""))
+        msgTitle = wxTheApp->GetAppName();
+    else
+        msgTitle = wxString(_("File error"));
+
+#if wxUSE_STD_IOSTREAM
+    wxSTD ofstream store(file.mb_str());
+    if (store.fail() || store.bad())
+#else
+    wxFileOutputStream store(file);
+    if (store.GetLastError() != wxSTREAM_NO_ERROR)
+#endif
+    {
+        (void)wxMessageBox(_("Sorry, could not open this file for saving."), msgTitle, wxOK | wxICON_EXCLAMATION,
+                           GetDocumentWindow());
+        // Saving error
+        return FALSE;
+    }
+    if (!SaveObject(store))
+    {
+        (void)wxMessageBox(_("Sorry, could not save this file."), msgTitle, wxOK | wxICON_EXCLAMATION,
+                           GetDocumentWindow());
+        // Saving error
+        return FALSE;
+    }
+
+    return TRUE;
+}
+
+bool wxDocument::DoOpenDocument(const wxString& file)
+{
+    wxString msgTitle;
+    if (wxTheApp->GetAppName() != wxT(""))
+        msgTitle = wxTheApp->GetAppName();
+    else
+        msgTitle = wxString(_("File error"));
+
+#if wxUSE_STD_IOSTREAM
+    wxSTD ifstream store(file.mb_str());
+    if (store.fail() || store.bad())
+#else
+    wxFileInputStream store(file);
+    if (store.GetLastError() != wxSTREAM_NO_ERROR)
+#endif
+    {
+        (void)wxMessageBox(_("Sorry, could not open this file."), msgTitle, wxOK|wxICON_EXCLAMATION,
+                           GetDocumentWindow());
+        return FALSE;
+    }
+#if wxUSE_STD_IOSTREAM
+    LoadObject(store);
+    if ( !store && !store.eof() )
+#else
+    int res = LoadObject(store).GetLastError();
+    if ((res != wxSTREAM_NO_ERROR) &&
+        (res != wxSTREAM_EOF))
+#endif
+    {
+        (void)wxMessageBox(_("Sorry, could not open this file."), msgTitle, wxOK|wxICON_EXCLAMATION,
+                           GetDocumentWindow());
+        return FALSE;
+    }
+
+    return TRUE;
+}
+
+