]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/docview.cpp
* Fixed two memory leaks.
[wxWidgets.git] / src / common / docview.cpp
index e22c78dd1421d27ef19b9fc53c6299415d674080..cec8525fabab4e2cef99f614416f70241b81eff6 100644 (file)
@@ -27,6 +27,7 @@
 #if USE_DOC_VIEW_ARCHITECTURE
 
 #ifndef WX_PRECOMP
+#include "wx/string.h"
 #include "wx/utils.h"
 #include "wx/app.h"
 #include "wx/dc.h"
 #include "wx/menu.h"
 #include "wx/list.h"
 #include "wx/filedlg.h"
+#include <wx/intl.h>
+#endif
+
+#ifdef __WXGTK__
+#include "wx/mdi.h"
 #endif
 
 #include "wx/msgdlg.h"
 #include "wx/generic/prntdlgg.h"
 #include "wx/generic/printps.h"
 
-/*
-#ifdef __WINDOWS__
-#include "wx/mdi.h"
-#endif
-*/
-
 #include <stdio.h>
 #include <string.h>
 
@@ -86,7 +86,7 @@ wxDocument::wxDocument(wxDocument *parent)
   m_documentFile="";
   m_documentTitle="";
   m_documentParent=parent;
-  m_documentTemplate = NULL;
+  m_documentTemplate = (wxDocTemplate *) NULL;
   m_documentTypeName = "";
   m_savedYet = FALSE;
 }
@@ -149,7 +149,7 @@ bool wxDocument::DeleteAllViews(void)
 wxView *wxDocument::GetFirstView(void) const
 {
   if (m_documentViews.Number() == 0)
-    return NULL;
+    return (wxView *) NULL;
   return (wxView *)m_documentViews.First()->Data();
 }
 
@@ -196,18 +196,30 @@ bool wxDocument::SaveAs(void)
   if (!docTemplate)
     return FALSE;
   
-  char *tmp = wxFileSelector("Save as", docTemplate->GetDirectory(), GetFilename(),
+  char *tmp = wxFileSelector(_("Save as"), docTemplate->GetDirectory(), GetFilename(),
     docTemplate->GetDefaultExtension(), docTemplate->GetFileFilter(),
-    0, GetDocumentWindow());
+    wxSAVE|wxOVERWRITE_PROMPT, GetDocumentWindow());
     
   if (!tmp)
     return FALSE;
   else
   {
-    SetFilename(tmp);
-    SetTitle(wxFileNameFromPath(tmp));
+    wxString fileName(tmp);
+    wxString path("");
+    wxString name("");
+    wxString ext("");
+    wxSplitPath(fileName, & path, & name, & ext);
+
+    if (ext.IsEmpty() || ext == "")
+    {
+        fileName += ".";
+        fileName += docTemplate->GetDefaultExtension();
+    }
+
+    SetFilename(fileName);
+    SetTitle(wxFileNameFromPath(fileName));
     
-    GetDocumentManager()->AddFileToHistory(tmp);
+    GetDocumentManager()->AddFileToHistory(fileName);
 
     // Notify the views that the filename has changed
     wxNode *node = m_documentViews.First();
@@ -230,19 +242,19 @@ bool wxDocument::OnSaveDocument(const wxString& file)
   if (wxTheApp->GetAppName() != "")
     msgTitle = wxTheApp->GetAppName();
   else
-    msgTitle = wxString("File error");
+    msgTitle = wxString(_("File error"));
 
   ofstream store(file);
   if (store.fail() || store.bad())
   {
-    (void)wxMessageBox("Sorry, could not open this file for saving.", msgTitle, wxOK | wxICON_EXCLAMATION,
+    (void)wxMessageBox(_("Sorry, could not open this file for saving."), msgTitle, wxOK | wxICON_EXCLAMATION,
       GetDocumentWindow());
     // Saving error
     return FALSE;
   }
   if (SaveObject(store)==FALSE)
   {
-    (void)wxMessageBox("Sorry, could not save this file.", msgTitle, wxOK | wxICON_EXCLAMATION,
+    (void)wxMessageBox(_("Sorry, could not save this file."), msgTitle, wxOK | wxICON_EXCLAMATION,
       GetDocumentWindow());
     // Saving error
     return FALSE;
@@ -261,18 +273,18 @@ bool wxDocument::OnOpenDocument(const wxString& file)
   if (wxTheApp->GetAppName() != "")
     msgTitle = wxTheApp->GetAppName();
   else
-    msgTitle = wxString("File error");
+    msgTitle = wxString(_("File error"));
 
   ifstream store(file);
   if (store.fail() || store.bad())
   {
-    (void)wxMessageBox("Sorry, could not open this file.", msgTitle, wxOK|wxICON_EXCLAMATION,
+    (void)wxMessageBox(_("Sorry, could not open this file."), msgTitle, wxOK|wxICON_EXCLAMATION,
      GetDocumentWindow());
     return FALSE;
   }
   if (LoadObject(store)==FALSE)
   {
-    (void)wxMessageBox("Sorry, could not open this file.", msgTitle, wxOK|wxICON_EXCLAMATION,
+    (void)wxMessageBox(_("Sorry, could not open this file."), msgTitle, wxOK|wxICON_EXCLAMATION,
       GetDocumentWindow());
     return FALSE;
   }
@@ -319,7 +331,7 @@ bool wxDocument::GetPrintableName(wxString& buf) const
   }
   else
   {
-    buf = "unnamed";
+    buf = _("unnamed");
     return TRUE;
   }
 }
@@ -351,9 +363,9 @@ bool wxDocument::OnSaveModified(void)
     if (wxTheApp->GetAppName() != "")
       msgTitle = wxTheApp->GetAppName();
     else
-      msgTitle = wxString("Warning");
+      msgTitle = wxString(_("Warning"));
 
-    sprintf(buf, "Do you want to save changes to document %s?", (const char *)title);
+    sprintf(buf, _("Do you want to save changes to document %s?"), (const char *)title);
     int res = wxMessageBox(buf, msgTitle, wxYES_NO|wxCANCEL|wxICON_QUESTION,
       GetDocumentWindow());
     if (res == wxNO)
@@ -450,7 +462,7 @@ wxView::wxView(wxDocument *doc)
   SetDocument(doc);
   
   m_viewTypeName = "";
-  m_viewFrame = NULL;
+  m_viewFrame = (wxFrame *) NULL;
 }
 
 wxView::~wxView(void)
@@ -488,28 +500,7 @@ void wxView::OnChangeFilename(void)
     wxString name;
     GetDocument()->GetPrintableName(name);
 
-    // If the frame is an MDI child, just set the title
-    // to the name.
-    // Otherwise, append the document name to the name of the application
-#ifdef __WINDOWS__
-    if (GetFrame()->IsKindOf(CLASSINFO(wxMDIChildFrame)))
-#else
-    if (FALSE)
-#endif
-    {
-      GetFrame()->SetTitle(name);
-    }
-    else
-    {
-      if (wxTheApp->GetAppName() != "")
-      {
-        char buf[400];
-        sprintf(buf, "%s - %s", (const char *)wxTheApp->GetAppName(), (const char *)name);
-        GetFrame()->SetTitle(buf);
-      }
-      else
-        GetFrame()->SetTitle(name);
-    }
+    GetFrame()->SetTitle(name);
   }
 }
 
@@ -584,7 +575,7 @@ wxDocTemplate::~wxDocTemplate(void)
 wxDocument *wxDocTemplate::CreateDocument(const wxString& path, long flags)
 {
   if (!m_docClassInfo)
-    return NULL;
+    return (wxDocument *) NULL;
   wxDocument *doc = (wxDocument *)m_docClassInfo->CreateObject();
   doc->SetFilename(path);
   doc->SetDocumentTemplate(this);
@@ -596,14 +587,14 @@ wxDocument *wxDocTemplate::CreateDocument(const wxString& path, long flags)
   else
   {
     delete doc;
-    return NULL;
+    return (wxDocument *) NULL;
   }
 }
 
 wxView *wxDocTemplate::CreateView(wxDocument *doc, long flags)
 {
   if (!m_viewClassInfo)
-    return NULL;
+    return (wxView *) NULL;
   wxView *view = (wxView *)m_viewClassInfo->CreateObject();
   view->SetDocument(doc);
   if (view->OnCreate(doc, flags))
@@ -613,7 +604,7 @@ wxView *wxDocTemplate::CreateView(wxDocument *doc, long flags)
   else
   {
     delete view;
-    return NULL;
+    return (wxView *) NULL;
   }
 }
 
@@ -635,9 +626,9 @@ wxDocManager::wxDocManager(long flags, bool initialize)
 {
   m_defaultDocumentNameCounter = 1;
   m_flags = flags;
-  m_currentView = NULL;
+  m_currentView = (wxView *) NULL;
   m_maxDocsOpen = 10000;
-  m_fileHistory = NULL;
+  m_fileHistory = (wxFileHistory *) NULL;
   if (initialize)
     Initialize();
 }
@@ -753,7 +744,7 @@ void wxDocManager::OnPrint(wxCommandEvent& WXUNUSED(event))
   {
     // TODO: trouble about this is that it pulls in the postscript
     // code unecessarily
-#ifdef __WINDOWS__
+#ifdef __WXMSW__
     if ( wxTheApp->GetPrintMode() == wxPRINT_WINDOWS )
     {
       wxWindowsPrinter printer;
@@ -779,7 +770,7 @@ void wxDocManager::OnPrintSetup(wxCommandEvent& WXUNUSED(event))
 
   wxPrintData data;
 
-#ifdef __WINDOWS__
+#ifdef __WXMSW__
   if ( wxTheApp->GetPrintMode() == wxPRINT_WINDOWS )
   {
     wxPrintDialog printerDialog(parentWin, & data);
@@ -805,15 +796,15 @@ void wxDocManager::OnPreview(wxCommandEvent& WXUNUSED(event))
   if (printout)
   {
     // Pass two printout objects: for preview, and possible printing.
-    wxPrintPreviewBase *preview = NULL;
-#ifdef __WINDOWS__
+    wxPrintPreviewBase *preview = (wxPrintPreviewBase *) NULL;
+#ifdef __WXMSW__
     if ( wxTheApp->GetPrintMode() == wxPRINT_WINDOWS )
         preview = new wxWindowsPrintPreview(printout, view->OnCreatePrintout());
     else
 #endif
-        preview = new wxPostScriptPrintPreview(printout, view->OnCreatePrintout());
+       preview = new wxPostScriptPrintPreview(printout, view->OnCreatePrintout());
 
-    wxPreviewFrame *frame = new wxPreviewFrame(preview, (wxFrame *)wxTheApp->GetTopWindow(), "Print Preview",
+    wxPreviewFrame *frame = new wxPreviewFrame(preview, (wxFrame *)wxTheApp->GetTopWindow(), _("Print Preview"),
                wxPoint(100, 100), wxSize(600, 650));
     frame->Centre(wxBOTH);
     frame->Initialize();
@@ -839,6 +830,30 @@ void wxDocManager::OnRedo(wxCommandEvent& WXUNUSED(event))
     doc->GetCommandProcessor()->Redo();
 }
 
+wxView *wxDocManager::GetCurrentView(void) const
+{
+    if (m_currentView)
+        return m_currentView;
+    if (m_docs.Number() == 1)
+    {
+        wxDocument* doc = (wxDocument*) m_docs.First()->Data();
+        return doc->GetFirstView();
+    }
+    return (wxView *) NULL;
+}
+
+// Extend event processing to search the view's event table
+bool wxDocManager::ProcessEvent(wxEvent& event)
+{
+    wxView* view = GetCurrentView();
+    if (view)
+    {
+        if (view->ProcessEvent(event))
+            return TRUE;
+    }
+    return wxEvtHandler::ProcessEvent(event);
+}
+
 wxDocument *wxDocManager::CreateDocument(const wxString& path, long flags)
 {
   wxDocTemplate **templates = new wxDocTemplate *[m_templates.Number()];
@@ -856,7 +871,7 @@ wxDocument *wxDocManager::CreateDocument(const wxString& path, long flags)
   if (n == 0)
   {
     delete[] templates;
-    return NULL;
+    return (wxDocument *) NULL;
   }
 
   // If we've reached the max number of docs, close the
@@ -875,7 +890,7 @@ wxDocument *wxDocManager::CreateDocument(const wxString& path, long flags)
         delete doc;
     }
     else
-      return NULL;
+      return (wxDocument *) NULL;
   }
   
   // New document: user chooses a template, unless there's only one.
@@ -909,11 +924,11 @@ wxDocument *wxDocManager::CreateDocument(const wxString& path, long flags)
       return newDoc;
     }
     else
-      return NULL;
+      return (wxDocument *) NULL;
   }
 
   // Existing document
-  wxDocTemplate *temp = NULL;
+  wxDocTemplate *temp = (wxDocTemplate *) NULL;
 
   wxString path2("");
   if (path != "")
@@ -936,14 +951,14 @@ wxDocument *wxDocManager::CreateDocument(const wxString& path, long flags)
       if (!newDoc->OnOpenDocument(path2))
       {
         delete newDoc;
-        return NULL;
+        return (wxDocument *) NULL;
       }
       AddFileToHistory(path2);
     }
     return newDoc;
   }
   else
-    return NULL;
+    return (wxDocument *) NULL;
 }
 
 wxView *wxDocManager::CreateView(wxDocument *doc, long flags)
@@ -966,7 +981,7 @@ wxView *wxDocManager::CreateView(wxDocument *doc, long flags)
   if (n == 0)
   {
     delete[] templates;
-    return NULL;
+    return (wxView *) NULL;
   }
   if (n == 1)
   {
@@ -988,7 +1003,7 @@ wxView *wxDocManager::CreateView(wxDocument *doc, long flags)
     return view;
   }
   else
-    return NULL;
+    return (wxView *) NULL;
 }
 
 // Not yet implemented
@@ -1007,14 +1022,14 @@ wxDocument *wxDocManager::GetCurrentDocument(void) const
   if (m_currentView)
     return m_currentView->GetDocument();
   else
-    return NULL;
+    return (wxDocument *) NULL;
 }
 
 // Make a default document name
 bool wxDocManager::MakeDefaultName(wxString& name)
 {
   char buf[256];
-  sprintf(buf, "unnamed%d", m_defaultDocumentNameCounter);
+  sprintf(buf, _("unnamed%d"), m_defaultDocumentNameCounter);
   m_defaultDocumentNameCounter ++;
   name = buf;
   return TRUE;
@@ -1023,7 +1038,7 @@ bool wxDocManager::MakeDefaultName(wxString& name)
 // Not yet implemented
 wxDocTemplate *wxDocManager::MatchTemplate(const wxString& WXUNUSED(path))
 {
-  return NULL;
+  return (wxDocTemplate *) NULL;
 }
 
 // File history management
@@ -1086,9 +1101,9 @@ static char *FindExtension(char *path)
       return ext;
     }
     else
-      return NULL;
+      return (char *) NULL;
   }
-  else return NULL;
+  else return (char *) NULL;
 }
 
 
@@ -1098,8 +1113,8 @@ wxDocTemplate *wxDocManager::FindTemplateForPath(const wxString& path)
 {
   char *theExt = FindExtension((char *)(const char *)path);
   if (!theExt)
-    return NULL;
-  wxDocTemplate *theTemplate = NULL;
+    return (wxDocTemplate *) NULL;
+  wxDocTemplate *theTemplate = (wxDocTemplate *) NULL;
 
   if (m_templates.Number() == 1)
     return (wxDocTemplate *)m_templates.First()->Data();
@@ -1126,7 +1141,7 @@ wxDocTemplate *wxDocManager::SelectDocumentPath(wxDocTemplate **templates,
     int noTemplates, wxString& path, long WXUNUSED(flags), bool WXUNUSED(save))
 {
   // We can only have multiple filters in Windows
-#ifdef __WINDOWS__
+#ifdef __WXMSW__
   char *descrBuf = new char[1000];
   descrBuf[0] = 0;
   int i;
@@ -1148,14 +1163,14 @@ wxDocTemplate *wxDocManager::SelectDocumentPath(wxDocTemplate **templates,
     // Omit final "|"
     descrBuf[len-1] = 0;
 
-  char *pathTmp = wxFileSelector("Select a file", "", "", "", descrBuf, 0, wxTheApp->GetTopWindow());
+  char *pathTmp = wxFileSelector(_("Select a file"), "", "", "", descrBuf, 0, wxTheApp->GetTopWindow());
   delete[] descrBuf;
   if (pathTmp)
   {
     path = pathTmp;
     char *theExt = FindExtension((char *)(const char *)path);
     if (!theExt)
-      return NULL;
+      return (wxDocTemplate *) NULL;
 
     // This is dodgy in that we're selecting the template on the
     // basis of the file extension, which may not be a standard
@@ -1167,7 +1182,7 @@ wxDocTemplate *wxDocManager::SelectDocumentPath(wxDocTemplate **templates,
   else
   {
     path = "";
-    return NULL;
+    return (wxDocTemplate *) NULL;
   }
 #else
   // In all other windowing systems, until we have more advanced
@@ -1175,9 +1190,9 @@ wxDocTemplate *wxDocManager::SelectDocumentPath(wxDocTemplate **templates,
   // _then_ pop up the file selector.
   wxDocTemplate *temp = SelectDocumentType(templates, noTemplates);
   if (!temp)
-    return NULL;
+    return (wxDocTemplate *) NULL;
 
-  char *pathTmp = wxFileSelector("Select a file", "", "",
+  char *pathTmp = wxFileSelector(_("Select a file"), "", "",
      temp->GetDefaultExtension(),
      temp->GetFileFilter(),
      0, wxTheApp->GetTopWindow());
@@ -1188,7 +1203,7 @@ wxDocTemplate *wxDocManager::SelectDocumentPath(wxDocTemplate **templates,
     return temp;
   }
   else
-    return NULL;
+    return (wxDocTemplate *) NULL;
 #endif
 }
 
@@ -1212,7 +1227,7 @@ wxDocTemplate *wxDocManager::SelectDocumentType(wxDocTemplate **templates,
   {
     delete[] strings;
     delete[] data;
-    return NULL;
+    return (wxDocTemplate *) NULL;
   }
   else if (n == 1)
   {
@@ -1222,7 +1237,7 @@ wxDocTemplate *wxDocManager::SelectDocumentType(wxDocTemplate **templates,
     return temp;
   }
   
-  wxDocTemplate *theTemplate = (wxDocTemplate *)wxGetSingleChoiceData("Select a document template", "Templates", n,
+  wxDocTemplate *theTemplate = (wxDocTemplate *)wxGetSingleChoiceData(_("Select a document template"), _("Templates"), n,
     strings, data);
   delete[] strings;
   delete[] data;
@@ -1245,7 +1260,7 @@ wxDocTemplate *wxDocManager::SelectViewType(wxDocTemplate **templates,
       n ++;
     }
   }
-  wxDocTemplate *theTemplate = (wxDocTemplate *)wxGetSingleChoiceData("Select a document view", "Views", n,
+  wxDocTemplate *theTemplate = (wxDocTemplate *)wxGetSingleChoiceData(_("Select a document view"), _("Views"), n,
     strings, data);
   delete[] strings;
   delete[] data;
@@ -1295,7 +1310,7 @@ void wxDocManager::ActivateView(wxView *view, bool activate, bool WXUNUSED(delet
     if (activate)
       m_currentView = view;
     else
-      m_currentView = NULL;
+      m_currentView = (wxView *) NULL;
   }
 }
 
@@ -1307,9 +1322,9 @@ BEGIN_EVENT_TABLE(wxDocChildFrame, wxFrame)
     EVT_ACTIVATE(wxDocChildFrame::OnActivate)
 END_EVENT_TABLE()
 
-wxDocChildFrame::wxDocChildFrame(wxDocument *doc, wxView *view, wxFrame *frame, const wxString& title,
-  const wxPoint& pos, const wxSize& size, const long style, const wxString& name):
-    wxFrame(frame, -1, title, pos, size, style, name)
+wxDocChildFrame::wxDocChildFrame(wxDocument *doc, wxView *view, wxFrame *frame, wxWindowID id, const wxString& title,
+  const wxPoint& pos, const wxSize& size, long style, const wxString& name):
+    wxFrame(frame, id, title, pos, size, style, name)
 {
   m_childDocument = doc;
   m_childView = view;
@@ -1339,18 +1354,6 @@ bool wxDocChildFrame::ProcessEvent(wxEvent& event)
                return TRUE;
 }
 
-/*
-// Intercept menu commands
-void wxDocChildFrame::OldOnMenuCommand(int id)
-{
-  if (m_childView)
-    m_childView->Activate(TRUE);
-
-  if (GetParent())
-    ((wxFrame *)GetParent())->OldOnMenuCommand(id);
-}
-*/
-
 void wxDocChildFrame::OnActivate(wxActivateEvent& event)
 {
   wxFrame::OnActivate(event);
@@ -1370,8 +1373,8 @@ bool wxDocChildFrame::OnClose(void)
     {
       m_childView->Activate(FALSE);
       delete m_childView;
-      m_childView = NULL;
-      m_childDocument = NULL;
+      m_childView = (wxView *) NULL;
+      m_childDocument = (wxDocument *) NULL;
     }
     
     return ans;
@@ -1385,12 +1388,12 @@ bool wxDocChildFrame::OnClose(void)
 
 BEGIN_EVENT_TABLE(wxDocParentFrame, wxFrame)
     EVT_MENU(wxID_EXIT, wxDocParentFrame::OnExit)
-    EVT_MENU_RANGE(wxID_FILE1, wxID_FILE2, wxDocParentFrame::OnMRUFile)
+    EVT_MENU_RANGE(wxID_FILE1, wxID_FILE9, wxDocParentFrame::OnMRUFile)
 END_EVENT_TABLE()
 
-wxDocParentFrame::wxDocParentFrame(wxDocManager *manager, wxFrame *frame, const wxString& title,
-  const wxPoint& pos, const wxSize& size, const long style, const wxString& name):
-  wxFrame(frame, -1, title, pos, size, style, name)
+wxDocParentFrame::wxDocParentFrame(wxDocManager *manager, wxFrame *frame, wxWindowID id, const wxString& title,
+  const wxPoint& pos, const wxSize& size, long style, const wxString& name):
+  wxFrame(frame, id, title, pos, size, style, name)
 {
   m_docManager = manager;
 }
@@ -1417,40 +1420,6 @@ bool wxDocParentFrame::ProcessEvent(wxEvent& event)
         return TRUE;
 }
 
-/*
-// Intercept menu commands
-void wxDocParentFrame::OldOnMenuCommand(int id)
-{
-  switch (id)
-  {
-    case wxID_EXIT:
-    {
-      Close();
-      break;
-    }
-    case wxID_FILE1:
-    case wxID_FILE2:
-    case wxID_FILE3:
-    case wxID_FILE4:
-    case wxID_FILE5:
-    case wxID_FILE6:
-    case wxID_FILE7:
-    case wxID_FILE8:
-    case wxID_FILE9:
-    {
-      wxString f(m_docManager->GetHistoryFile(id-wxID_FILE1));
-      if (f != "")
-        (void)m_docManager->CreateDocument(f, wxDOC_SILENT);
-      break;
-    }
-    default:
-    {
-      m_docManager->OldOnMenuCommand(id);
-    }
-  }
-}
-*/
-
 // Define the behaviour for the frame closing
 // - must delete all frames except for the main one.
 bool wxDocParentFrame::OnClose(void)
@@ -1543,8 +1512,8 @@ wxCommand::~wxCommand(void)
 wxCommandProcessor::wxCommandProcessor(int maxCommands)
 {
   m_maxNoCommands = maxCommands;
-  m_currentCommand = NULL;
-  m_commandEditMenu = NULL;
+  m_currentCommand = (wxNode *) NULL;
+  m_commandEditMenu = (wxMenu *) NULL;
 }
 
 wxCommandProcessor::~wxCommandProcessor(void)
@@ -1612,8 +1581,8 @@ bool wxCommandProcessor::Undo(void)
 
 bool wxCommandProcessor::Redo(void)
 {
-  wxCommand *redoCommand = NULL;
-  wxNode *redoNode = NULL;
+  wxCommand *redoCommand = (wxCommand *) NULL;
+  wxNode *redoNode = (wxNode *) NULL;
   if (m_currentCommand && m_currentCommand->Next())
   {
     redoCommand = (wxCommand *)m_currentCommand->Next()->Data();
@@ -1663,12 +1632,12 @@ void wxCommandProcessor::SetMenuStrings(void)
     {
       wxCommand *command = (wxCommand *)m_currentCommand->Data();
       wxString commandName(command->GetName());
-      if (commandName == "") commandName = "Unnamed command";
+      if (commandName == "") commandName = _("Unnamed command");
       bool canUndo = command->CanUndo();
       if (canUndo)
-        buf = wxString("&Undo ") + commandName;
+        buf = wxString(_("&Undo ")) + commandName;
       else
-        buf = wxString("Can't &Undo ") + commandName;
+        buf = wxString(_("Can't &Undo ")) + commandName;
         
       m_commandEditMenu->SetLabel(wxID_UNDO, buf);
       m_commandEditMenu->Enable(wxID_UNDO, canUndo);
@@ -1678,25 +1647,25 @@ void wxCommandProcessor::SetMenuStrings(void)
       {
         wxCommand *redoCommand = (wxCommand *)m_currentCommand->Next()->Data();
         wxString redoCommandName(redoCommand->GetName());
-        if (redoCommandName == "") redoCommandName = "Unnamed command";
-        buf = wxString("&Redo ") + redoCommandName;
+        if (redoCommandName == "") redoCommandName = _("Unnamed command");
+        buf = wxString(_("&Redo ")) + redoCommandName;
         m_commandEditMenu->SetLabel(wxID_REDO, buf);
         m_commandEditMenu->Enable(wxID_REDO, TRUE);
       }
       else
       {
-        m_commandEditMenu->SetLabel(wxID_REDO, "&Redo");
+        m_commandEditMenu->SetLabel(wxID_REDO, _("&Redo"));
         m_commandEditMenu->Enable(wxID_REDO, FALSE);
       }
     }
     else
     {
-      m_commandEditMenu->SetLabel(wxID_UNDO, "&Undo");
+      m_commandEditMenu->SetLabel(wxID_UNDO, _("&Undo"));
       m_commandEditMenu->Enable(wxID_UNDO, FALSE);
 
       if (m_commands.Number() == 0)
       {
-        m_commandEditMenu->SetLabel(wxID_REDO, "&Redo");
+        m_commandEditMenu->SetLabel(wxID_REDO, _("&Redo"));
         m_commandEditMenu->Enable(wxID_REDO, FALSE);
       }
       else
@@ -1705,8 +1674,8 @@ void wxCommandProcessor::SetMenuStrings(void)
         // we've undone to the start of the list, but can redo the first.
         wxCommand *redoCommand = (wxCommand *)m_commands.First()->Data();
         wxString redoCommandName(redoCommand->GetName());
-        if (!redoCommandName) redoCommandName = "Unnamed command";
-        buf = wxString("&Redo ") + redoCommandName;
+        if (!redoCommandName) redoCommandName = _("Unnamed command");
+        buf = wxString(_("&Redo ")) + redoCommandName;
         m_commandEditMenu->SetLabel(wxID_REDO, buf);
         m_commandEditMenu->Enable(wxID_REDO, TRUE);
       }
@@ -1724,7 +1693,7 @@ void wxCommandProcessor::ClearCommands(void)
     delete node;
     node = m_commands.First();
   }
-  m_currentCommand = NULL;
+  m_currentCommand = (wxNode *) NULL;
 }
 
 
@@ -1735,7 +1704,7 @@ void wxCommandProcessor::ClearCommands(void)
 wxFileHistory::wxFileHistory(int maxFiles)
 {
   m_fileMaxFiles = maxFiles;
-  m_fileMenu = NULL;
+  m_fileMenu = (wxMenu *) NULL;
   m_fileHistoryN = 0;
   m_fileHistory = new char *[m_fileMaxFiles];
 }
@@ -1770,13 +1739,13 @@ void wxFileHistory::AddFileToHistory(const wxString& file)
   if (m_fileHistoryN == m_fileMaxFiles)
   {
     delete[] m_fileHistory[m_fileMaxFiles-1];
-    m_fileHistory[m_fileMaxFiles-1] = NULL;
+    m_fileHistory[m_fileMaxFiles-1] = (char *) NULL;
   }
   if (m_fileHistoryN < m_fileMaxFiles)
   {
     if (m_fileHistoryN == 0)
       m_fileMenu->AppendSeparator();
-    m_fileMenu->Append(wxID_FILE1+m_fileHistoryN, "[EMPTY]");
+    m_fileMenu->Append(wxID_FILE1+m_fileHistoryN, _("[EMPTY]"));
     m_fileHistoryN ++;
   }
   // Shuffle filenames down
@@ -1814,14 +1783,14 @@ void wxFileHistory::FileHistoryLoad(const wxString& resourceFile, const wxString
   m_fileHistoryN = 0;
   char buf[400];
   sprintf(buf, "file%d", m_fileHistoryN+1);
-  char *historyFile = NULL;
+  char *historyFile = (char *) NULL;
   while ((m_fileHistoryN <= m_fileMaxFiles) && wxGetResource(section, buf, &historyFile, resourceFile) && historyFile)
   {
     // wxGetResource allocates memory so this is o.k.
     m_fileHistory[m_fileHistoryN] = historyFile;
     m_fileHistoryN ++;
     sprintf(buf, "file%d", m_fileHistoryN+1);
-    historyFile = NULL;
+    historyFile = (char *) NULL;
   }
 #endif
 }