#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/printdlg.h"
#include "wx/generic/prntdlgg.h"
#include "wx/generic/printps.h"
+#include "wx/confbase.h"
#include <stdio.h>
#include <string.h>
m_documentFile="";
m_documentTitle="";
m_documentParent=parent;
- m_documentTemplate = NULL;
+ m_documentTemplate = (wxDocTemplate *) NULL;
m_documentTypeName = "";
m_savedYet = FALSE;
}
wxView *wxDocument::GetFirstView(void) const
{
if (m_documentViews.Number() == 0)
- return NULL;
+ return (wxView *) NULL;
return (wxView *)m_documentViews.First()->Data();
}
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();
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;
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;
}
SetFilename(file, TRUE);
Modify(FALSE);
+ m_savedYet = TRUE;
UpdateAllViews();
}
else
{
- buf = "unnamed";
+ buf = _("unnamed");
return TRUE;
}
}
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)
SetDocument(doc);
m_viewTypeName = "";
- m_viewFrame = NULL;
+ m_viewFrame = (wxFrame *) NULL;
}
wxView::~wxView(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
- // I have to do an illegal cast because in wxGTK, wxMDIChildFrame
- // doesn't inherited from wxFrame, Robert Roebling
-
- wxFrame *frame = NULL;
- wxMDIChildFrame *mdi_frame = NULL;
-#ifdef __WXGTK__
- if (GetFrame()->IsKindOf(CLASSINFO(wxMDIChildFrame)))
- mdi_frame = (wxMDIChildFrame*)GetFrame();
- else
-#endif
- frame = GetFrame();
-
- if (frame)
- {
- frame->SetTitle(name);
- return;
- }
-#ifdef __WXGTK__
- if (mdi_frame)
- {
- if (wxTheApp->GetAppName() != "")
- {
- char buf[400];
- sprintf(buf, "%s - %s", (const char *)wxTheApp->GetAppName(), (const char *)name);
- mdi_frame->SetTitle(buf);
- }
- else
- mdi_frame->SetTitle(name);
- }
-#endif
+ GetFrame()->SetTitle(name);
}
}
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);
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))
else
{
delete view;
- return NULL;
+ return (wxView *) NULL;
}
}
{
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();
}
if (printout)
{
// Pass two printout objects: for preview, and possible printing.
- wxPrintPreviewBase *preview = NULL;
+ wxPrintPreviewBase *preview = (wxPrintPreviewBase *) NULL;
#ifdef __WXMSW__
if ( wxTheApp->GetPrintMode() == wxPRINT_WINDOWS )
preview = new wxWindowsPrintPreview(printout, view->OnCreatePrintout());
#endif
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();
wxDocument* doc = (wxDocument*) m_docs.First()->Data();
return doc->GetFirstView();
}
- return NULL;
+ return (wxView *) NULL;
}
// Extend event processing to search the view's event table
if (n == 0)
{
delete[] templates;
- return NULL;
+ return (wxDocument *) NULL;
}
// If we've reached the max number of docs, close the
delete doc;
}
else
- return NULL;
+ return (wxDocument *) NULL;
}
// New document: user chooses a template, unless there's only one.
return newDoc;
}
else
- return NULL;
+ return (wxDocument *) NULL;
}
// Existing document
- wxDocTemplate *temp = NULL;
+ wxDocTemplate *temp = (wxDocTemplate *) NULL;
wxString path2("");
if (path != "")
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)
if (n == 0)
{
delete[] templates;
- return NULL;
+ return (wxView *) NULL;
}
if (n == 1)
{
return view;
}
else
- return NULL;
+ return (wxView *) NULL;
}
// Not yet implemented
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;
// Not yet implemented
wxDocTemplate *wxDocManager::MatchTemplate(const wxString& WXUNUSED(path))
{
- return NULL;
+ return (wxDocTemplate *) NULL;
}
// File history management
void wxDocManager::FileHistoryUseMenu(wxMenu *menu)
{
if (m_fileHistory)
- m_fileHistory->FileHistoryUseMenu(menu);
+ m_fileHistory->UseMenu(menu);
+}
+
+void wxDocManager::FileHistoryRemoveMenu(wxMenu *menu)
+{
+ if (m_fileHistory)
+ m_fileHistory->RemoveMenu(menu);
}
-void wxDocManager::FileHistoryLoad(const wxString& resourceFile, const wxString& section)
+void wxDocManager::FileHistoryLoad(wxConfigBase& config)
{
if (m_fileHistory)
- m_fileHistory->FileHistoryLoad(resourceFile, section);
+ m_fileHistory->Load(config);
}
-void wxDocManager::FileHistorySave(const wxString& resourceFile, const wxString& section)
+void wxDocManager::FileHistorySave(wxConfigBase& config)
{
if (m_fileHistory)
- m_fileHistory->FileHistorySave(resourceFile, section);
+ m_fileHistory->Save(config);
+}
+
+void wxDocManager::FileHistoryAddFilesToMenu(wxMenu* menu)
+{
+ if (m_fileHistory)
+ m_fileHistory->AddFilesToMenu(menu);
+}
+
+void wxDocManager::FileHistoryAddFilesToMenu()
+{
+ if (m_fileHistory)
+ m_fileHistory->AddFilesToMenu();
}
int wxDocManager::GetNoHistoryFiles(void) const
return ext;
}
else
- return NULL;
+ return (char *) NULL;
}
- else return NULL;
+ else return (char *) NULL;
}
{
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();
// 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
else
{
path = "";
- return NULL;
+ return (wxDocTemplate *) NULL;
}
#else
// In all other windowing systems, until we have more advanced
// _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());
return temp;
}
else
- return NULL;
+ return (wxDocTemplate *) NULL;
#endif
}
{
delete[] strings;
delete[] data;
- return NULL;
+ return (wxDocTemplate *) NULL;
}
else if (n == 1)
{
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;
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;
if (activate)
m_currentView = view;
else
- m_currentView = NULL;
+ m_currentView = (wxView *) NULL;
}
}
{
m_childView->Activate(FALSE);
delete m_childView;
- m_childView = NULL;
- m_childDocument = NULL;
+ m_childView = (wxView *) NULL;
+ m_childDocument = (wxDocument *) NULL;
}
return ans;
wxCommandProcessor::wxCommandProcessor(int maxCommands)
{
m_maxNoCommands = maxCommands;
- m_currentCommand = NULL;
- m_commandEditMenu = NULL;
+ m_currentCommand = (wxNode *) NULL;
+ m_commandEditMenu = (wxMenu *) NULL;
}
wxCommandProcessor::~wxCommandProcessor(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();
return FALSE;
}
-bool wxCommandProcessor::CanUndo(void)
+bool wxCommandProcessor::CanUndo(void) const
{
if (m_currentCommand)
return ((wxCommand *)m_currentCommand->Data())->CanUndo();
return FALSE;
}
+bool wxCommandProcessor::CanRedo(void) const
+{
+ return ((m_currentCommand && m_currentCommand->Next()));
+}
+
void wxCommandProcessor::Initialize(void)
{
m_currentCommand = m_commands.Last();
{
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);
{
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
// 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);
}
delete node;
node = m_commands.First();
}
- m_currentCommand = NULL;
+ m_currentCommand = (wxNode *) NULL;
}
wxFileHistory::wxFileHistory(int maxFiles)
{
m_fileMaxFiles = maxFiles;
- m_fileMenu = NULL;
m_fileHistoryN = 0;
m_fileHistory = new char *[m_fileMaxFiles];
}
// File history management
void wxFileHistory::AddFileToHistory(const wxString& file)
{
- if (!m_fileMenu)
- return;
-
int i;
-
// Check we don't already have this file
for (i = 0; i < m_fileHistoryN; i++)
{
- if (m_fileHistory[i] && wxString(m_fileHistory[i]) == file)
- return;
+ if (m_fileHistory[i] && wxString(m_fileHistory[i]) == file)
+ return;
}
-
+
// Add to the project file history:
// Move existing files (if any) down so we can insert file at beginning.
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]");
+ wxNode* node = m_fileMenus.First();
+ while (node)
+ {
+ wxMenu* menu = (wxMenu*) node->Data();
+ if (m_fileHistoryN == 0)
+ menu->AppendSeparator();
+ menu->Append(wxID_FILE1+m_fileHistoryN, _("[EMPTY]"));
+ node = node->Next();
+ }
m_fileHistoryN ++;
}
// Shuffle filenames down
{
char buf[400];
sprintf(buf, "&%d %s", i+1, m_fileHistory[i]);
- m_fileMenu->SetLabel(wxID_FILE1+i, buf);
+ wxNode* node = m_fileMenus.First();
+ while (node)
+ {
+ wxMenu* menu = (wxMenu*) node->Data();
+ menu->SetLabel(wxID_FILE1+i, buf);
+ node = node->Next();
+ }
}
}
return wxString("");
}
-void wxFileHistory::FileHistoryUseMenu(wxMenu *menu)
+void wxFileHistory::UseMenu(wxMenu *menu)
{
- m_fileMenu = menu;
+ if (!m_fileMenus.Member(menu))
+ m_fileMenus.Append(menu);
}
-void wxFileHistory::FileHistoryLoad(const wxString& resourceFile, const wxString& section)
+void wxFileHistory::RemoveMenu(wxMenu *menu)
+{
+ m_fileMenus.DeleteObject(menu);
+}
+
+void wxFileHistory::Load(wxConfigBase& config)
{
-#if USE_RESOURCES
m_fileHistoryN = 0;
char buf[400];
sprintf(buf, "file%d", m_fileHistoryN+1);
- char *historyFile = NULL;
- while ((m_fileHistoryN <= m_fileMaxFiles) && wxGetResource(section, buf, &historyFile, resourceFile) && historyFile)
+ wxString historyFile("");
+ while ((m_fileHistoryN <= m_fileMaxFiles) && config.Read(buf, &historyFile) && (historyFile != ""))
{
- // wxGetResource allocates memory so this is o.k.
- m_fileHistory[m_fileHistoryN] = historyFile;
+ m_fileHistory[m_fileHistoryN] = copystring((const char*) historyFile);
m_fileHistoryN ++;
sprintf(buf, "file%d", m_fileHistoryN+1);
- historyFile = NULL;
+ historyFile = "";
}
-#endif
+ AddFilesToMenu();
}
-void wxFileHistory::FileHistorySave(const wxString& resourceFile, const wxString& section)
+void wxFileHistory::Save(wxConfigBase& config)
{
-#if USE_RESOURCES
- char buf[400];
int i;
for (i = 0; i < m_fileHistoryN; i++)
{
- sprintf(buf, "file%d", i+1);
- wxWriteResource(section, buf, m_fileHistory[i], resourceFile);
+ wxString buf;
+ buf.Printf("file%d", i+1);
+ config.Write(buf, wxString(m_fileHistory[i]));
}
-#endif
+}
+
+void wxFileHistory::AddFilesToMenu()
+{
+ if (m_fileHistoryN > 0)
+ {
+ wxNode* node = m_fileMenus.First();
+ while (node)
+ {
+ wxMenu* menu = (wxMenu*) node->Data();
+ menu->AppendSeparator();
+ int i;
+ for (i = 0; i < m_fileHistoryN; i++)
+ {
+ if (m_fileHistory[i])
+ {
+ wxString buf;
+ buf.Printf("&%d %s", i+1, m_fileHistory[i]);
+ menu->Append(wxID_FILE1+i, buf);
+ }
+ }
+ node = node->Next();
+ }
+ }
+}
+
+void wxFileHistory::AddFilesToMenu(wxMenu* menu)
+{
+ if (m_fileHistoryN > 0)
+ {
+ menu->AppendSeparator();
+ int i;
+ for (i = 0; i < m_fileHistoryN; i++)
+ {
+ if (m_fileHistory[i])
+ {
+ wxString buf;
+ buf.Printf("&%d %s", i+1, m_fileHistory[i]);
+ menu->Append(wxID_FILE1+i, buf);
+ }
+ }
+ }
}
#if 0