#include "wx/intl.h"
#endif
+
#ifdef __WXGTK__
#include "wx/mdi.h"
#endif
#include "wx/choicdlg.h"
#include "wx/docview.h"
#include "wx/confbase.h"
+#include "wx/file.h"
#include <stdio.h>
#include <string.h>
static inline wxString FindExtension(const wxChar *path);
+// ----------------------------------------------------------------------------
+// local constants
+// ----------------------------------------------------------------------------
+
+static const char *s_MRUEntryFormat = _T("&%d %s");
+
// ============================================================================
// implementation
// ============================================================================
msgTitle = wxString(_("File error"));
#if wxUSE_STD_IOSTREAM
- ofstream store(file.fn_str());
+ ofstream store(wxString(file.fn_str()));
if (store.fail() || store.bad())
#else
- wxFileOutputStream store(file.fn_str());
+ wxFileOutputStream store(wxString(file.fn_str()));
if (store.LastError() != 0)
#endif
{
// Saving error
return FALSE;
}
- if (SaveObject(store)==FALSE)
+ if (!SaveObject(store))
{
(void)wxMessageBox(_("Sorry, could not save this file."), msgTitle, wxOK | wxICON_EXCLAMATION,
GetDocumentWindow());
msgTitle = wxString(_("File error"));
#if wxUSE_STD_IOSTREAM
- ifstream store(file.fn_str());
+ ifstream store(wxString(file.fn_str()));
if (store.fail() || store.bad())
#else
- wxFileInputStream store(file.fn_str());
+ wxFileInputStream store(wxString(file.fn_str()));
if (store.LastError() != 0)
#endif
{
GetDocumentWindow());
return FALSE;
}
- if (LoadObject(store)==FALSE)
+ if (!LoadObject(store))
{
(void)wxMessageBox(_("Sorry, could not open this file."), msgTitle, wxOK|wxICON_EXCLAMATION,
GetDocumentWindow());
#if wxUSE_STD_IOSTREAM
istream& wxDocument::LoadObject(istream& stream)
+#else
+wxInputStream& wxDocument::LoadObject(wxInputStream& stream)
+#endif
{
return stream;
}
+#if wxUSE_STD_IOSTREAM
ostream& wxDocument::SaveObject(ostream& stream)
-{
- return stream;
-}
#else
-bool wxDocument::LoadObject(wxInputStream& stream)
-{
- return TRUE;
-}
-
-bool wxDocument::SaveObject(wxOutputStream& stream)
+wxOutputStream& wxDocument::SaveObject(wxOutputStream& stream)
+#endif
{
- return TRUE;
+ return stream;
}
-#endif
bool wxDocument::Revert()
{
wxPrintDialogData data;
- wxPrintDialog printerDialog(parentWin, & data);
+ wxPrintDialog printerDialog(parentWin, &data);
printerDialog.GetPrintDialogData().SetSetupDialog(TRUE);
printerDialog.ShowModal();
#endif // wxUSE_PRINTING_ARCHITECTURE
m_fileHistory->AddFileToHistory(file);
}
+void wxDocManager::RemoveFileFromHistory(int i)
+{
+ if (m_fileHistory)
+ m_fileHistory->RemoveFileFromHistory(i);
+}
+
wxString wxDocManager::GetHistoryFile(int i) const
{
wxString histFile;
}
wxDocTemplate *theTemplate = (wxDocTemplate *)wxGetSingleChoiceData(_("Select a document template"), _("Templates"), n,
- strings, data);
+ strings, (char **)data);
delete[] strings;
delete[] data;
return theTemplate;
}
}
wxDocTemplate *theTemplate = (wxDocTemplate *)wxGetSingleChoiceData(_("Select a document view"), _("Views"), n,
- strings, data);
+ strings, (char **)data);
delete[] strings;
delete[] data;
return theTemplate;
void wxDocParentFrame::OnMRUFile(wxCommandEvent& event)
{
- wxString f(m_docManager->GetHistoryFile(event.GetSelection() - wxID_FILE1));
- if (f != _T(""))
- (void)m_docManager->CreateDocument(f, wxDOC_SILENT);
+ int n = event.GetSelection() - wxID_FILE1; // the index in MRU list
+ wxString filename(m_docManager->GetHistoryFile(n));
+ if ( !filename.IsEmpty() )
+ {
+ // verify that the file exists before doing anything else
+ if ( wxFile::Exists(filename) )
+ {
+ // try to open it
+ (void)m_docManager->CreateDocument(filename, wxDOC_SILENT);
+ }
+ else
+ {
+ // remove the bogus filename from the MRU list and notify the user
+ // about it
+ m_docManager->RemoveFileFromHistory(n);
+
+ wxLogError(_("The file '%s' doesn't exist and couldn't be opened.\n"
+ "It has been also removed from the MRU files list."),
+ filename.c_str());
+ }
+ }
}
// Extend event processing to search the view's event table
if (m_fileHistory[i])
{
wxString buf;
- buf.Printf(_T("&%d %s"), i+1, m_fileHistory[i]);
+ buf.Printf(s_MRUEntryFormat, i+1, m_fileHistory[i]);
wxNode* node = m_fileMenus.First();
while (node)
{
}
}
+void wxFileHistory::RemoveFileFromHistory(int i)
+{
+ wxCHECK_RET( i < m_fileHistoryN,
+ _T("invalid index in wxFileHistory::RemoveFileFromHistory") );
+
+ wxNode* node = m_fileMenus.First();
+ while ( node )
+ {
+ wxMenu* menu = (wxMenu*) node->Data();
+
+ // wxMenu::Delete() is missing from wxGTK, so this can't be done :-(
+#if 0
+ // delete the menu items
+ menu->Delete(wxID_FILE1 + i);
+#endif
+
+ // delete the element from the array (could use memmove() too...)
+ delete [] m_fileHistory[i];
+
+ int j;
+ for ( j = i; j < m_fileHistoryN - 1; j++ )
+ {
+ m_fileHistory[j] = m_fileHistory[j + 1];
+ }
+
+ // shuffle filenames up
+ wxString buf;
+ for ( j = i; j < m_fileHistoryN - 1; j++ )
+ {
+ buf.Printf(s_MRUEntryFormat, j + 1, m_fileHistory[j]);
+ menu->SetLabel(wxID_FILE1 + j, buf);
+ }
+
+ // to be removed as soon as wxMenu::Delete() is implemented
+#if 1
+ menu->SetLabel(wxID_FILE1 + m_fileHistoryN - 1, _T(""));
+#endif
+
+ node = node->Next();
+ }
+ m_fileHistoryN--;
+}
+
wxString wxFileHistory::GetHistoryFile(int i) const
{
if (i < m_fileHistoryN)
if (m_fileHistory[i])
{
wxString buf;
- buf.Printf(_T("&%d %s"), i+1, m_fileHistory[i]);
+ buf.Printf(s_MRUEntryFormat, i+1, m_fileHistory[i]);
menu->Append(wxID_FILE1+i, buf);
}
}
if (m_fileHistory[i])
{
wxString buf;
- buf.Printf(_T("&%d %s"), i+1, m_fileHistory[i]);
+ buf.Printf(s_MRUEntryFormat, i+1, m_fileHistory[i]);
menu->Append(wxID_FILE1+i, buf);
}
}