X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d0bdc3ca5f3e1d2adf70c8630b4b524bc53a798e..92049cd473c81fbce934e71796b2d841d5e605fa:/src/common/docview.cpp?ds=inline diff --git a/src/common/docview.cpp b/src/common/docview.cpp index 00c7bcc466..fed454d4e8 100644 --- a/src/common/docview.cpp +++ b/src/common/docview.cpp @@ -25,11 +25,7 @@ #include "wx/wxprec.h" #ifdef __BORLANDC__ - #pragma hdrstop -#endif - -#ifndef WX_PRECOMP - #include "wx/defs.h" + #pragma hdrstop #endif #if wxUSE_DOC_VIEW_ARCHITECTURE @@ -43,17 +39,21 @@ #include "wx/menu.h" #include "wx/list.h" #include "wx/filedlg.h" - #include + #include "wx/intl.h" #endif #ifdef __WXGTK__ #include "wx/mdi.h" #endif +#if wxUSE_PRINTING_ARCHITECTURE + #include "wx/prntbase.h" + #include "wx/printdlg.h" +#endif + #include "wx/msgdlg.h" #include "wx/choicdlg.h" #include "wx/docview.h" -#include "wx/printdlg.h" #include "wx/confbase.h" #include @@ -178,14 +178,14 @@ bool wxDocument::DeleteAllViews() return TRUE; } -wxView *wxDocument::GetFirstView(void) const +wxView *wxDocument::GetFirstView() const { if (m_documentViews.Number() == 0) return (wxView *) NULL; return (wxView *)m_documentViews.First()->Data(); } -wxDocManager *wxDocument::GetDocumentManager(void) const +wxDocManager *wxDocument::GetDocumentManager() const { return m_documentTemplate->GetDocumentManager(); } @@ -240,9 +240,7 @@ bool wxDocument::SaveAs() return FALSE; wxString fileName(tmp); - wxString path(""); - wxString name(""); - wxString ext(""); + wxString path, name, ext; wxSplitPath(fileName, & path, & name, & ext); if (ext.IsEmpty() || ext == _T("")) @@ -372,7 +370,7 @@ bool wxDocument::GetPrintableName(wxString& buf) const } } -wxWindow *wxDocument::GetDocumentWindow(void) const +wxWindow *wxDocument::GetDocumentWindow() const { wxView *view = GetFirstView(); if (view) @@ -576,7 +574,7 @@ wxPrintout *wxView::OnCreatePrintout() { return new wxDocPrintout(this); } -#endif +#endif // wxUSE_PRINTING_ARCHITECTURE // ---------------------------------------------------------------------------- // wxDocTemplate @@ -649,6 +647,13 @@ wxView *wxDocTemplate::CreateView(wxDocument *doc, long flags) } } +// The default (very primitive) format detection: check is the extension is +// that of the template +bool wxDocTemplate::FileMatchesTemplate(const wxString& path) +{ + return GetDefaultExtension().IsSameAs(FindExtension(path)); +} + // ---------------------------------------------------------------------------- // wxDocManager // ---------------------------------------------------------------------------- @@ -662,9 +667,11 @@ BEGIN_EVENT_TABLE(wxDocManager, wxEvtHandler) EVT_MENU(wxID_SAVEAS, wxDocManager::OnFileSaveAs) EVT_MENU(wxID_UNDO, wxDocManager::OnUndo) EVT_MENU(wxID_REDO, wxDocManager::OnRedo) +#if wxUSE_PRINTING_ARCHITECTURE EVT_MENU(wxID_PRINT, wxDocManager::OnPrint) EVT_MENU(wxID_PRINT_SETUP, wxDocManager::OnPrintSetup) EVT_MENU(wxID_PREVIEW, wxDocManager::OnPreview) +#endif END_EVENT_TABLE() wxDocManager::wxDocManager(long flags, bool initialize) @@ -780,6 +787,7 @@ void wxDocManager::OnFileSaveAs(wxCommandEvent& WXUNUSED(event)) void wxDocManager::OnPrint(wxCommandEvent& WXUNUSED(event)) { +#if wxUSE_PRINTING_ARCHITECTURE wxView *view = GetCurrentView(); if (!view) return; @@ -792,10 +800,12 @@ void wxDocManager::OnPrint(wxCommandEvent& WXUNUSED(event)) delete printout; } +#endif // wxUSE_PRINTING_ARCHITECTURE } void wxDocManager::OnPrintSetup(wxCommandEvent& WXUNUSED(event)) { +#if wxUSE_PRINTING_ARCHITECTURE wxWindow *parentWin = wxTheApp->GetTopWindow(); wxView *view = GetCurrentView(); if (view) @@ -806,10 +816,12 @@ void wxDocManager::OnPrintSetup(wxCommandEvent& WXUNUSED(event)) wxPrintDialog printerDialog(parentWin, & data); printerDialog.GetPrintDialogData().SetSetupDialog(TRUE); printerDialog.ShowModal(); +#endif // wxUSE_PRINTING_ARCHITECTURE } void wxDocManager::OnPreview(wxCommandEvent& WXUNUSED(event)) { +#if wxUSE_PRINTING_ARCHITECTURE wxView *view = GetCurrentView(); if (!view) return; @@ -827,6 +839,7 @@ void wxDocManager::OnPreview(wxCommandEvent& WXUNUSED(event)) frame->Initialize(); frame->Show(TRUE); } +#endif // wxUSE_PRINTING_ARCHITECTURE } void wxDocManager::OnUndo(wxCommandEvent& WXUNUSED(event)) @@ -847,7 +860,7 @@ void wxDocManager::OnRedo(wxCommandEvent& WXUNUSED(event)) doc->GetCommandProcessor()->Redo(); } -wxView *wxDocManager::GetCurrentView(void) const +wxView *wxDocManager::GetCurrentView() const { if (m_currentView) return m_currentView; @@ -1034,7 +1047,7 @@ bool wxDocManager::FlushDoc(wxDocument *WXUNUSED(doc)) return FALSE; } -wxDocument *wxDocManager::GetCurrentDocument(void) const +wxDocument *wxDocManager::GetCurrentDocument() const { if (m_currentView) return m_currentView->GetDocument(); @@ -1112,7 +1125,7 @@ void wxDocManager::FileHistoryAddFilesToMenu() m_fileHistory->AddFilesToMenu(); } -int wxDocManager::GetNoHistoryFiles(void) const +int wxDocManager::GetNoHistoryFiles() const { if (m_fileHistory) return m_fileHistory->GetNoHistoryFiles(); @@ -1121,24 +1134,18 @@ int wxDocManager::GetNoHistoryFiles(void) const } -// Given a path, try to find a matching template. Won't always work, of -// course. +// Find out the document template via matching in the document file format +// against that of the template wxDocTemplate *wxDocManager::FindTemplateForPath(const wxString& path) { - wxString theExt = FindExtension(path); - if (!theExt) - return (wxDocTemplate *) NULL; wxDocTemplate *theTemplate = (wxDocTemplate *) NULL; - if (m_templates.Number() == 1) - return (wxDocTemplate *)m_templates.First()->Data(); - // Find the template which this extension corresponds to int i; for (i = 0; i < m_templates.Number(); i++) { wxDocTemplate *temp = (wxDocTemplate *)m_templates.Nth(i)->Data(); - if (wxStrcmp(temp->GetDefaultExtension(), theExt) == 0) + if ( temp->FileMatchesTemplate(path) ) { theTemplate = temp; break; @@ -1153,7 +1160,11 @@ wxDocTemplate *wxDocManager::FindTemplateForPath(const wxString& path) // template extension. wxDocTemplate *wxDocManager::SelectDocumentPath(wxDocTemplate **templates, +#ifdef __WXMSW__ int noTemplates, +#else + int WXUNUSED(noTemplates), +#endif wxString& path, long WXUNUSED(flags), bool WXUNUSED(save)) @@ -1180,8 +1191,14 @@ wxDocTemplate *wxDocManager::SelectDocumentPath(wxDocTemplate **templates, wxString descrBuf = _T("*.*"); #endif - wxString pathTmp = wxFileSelector(_("Select a file"), _T(""), _T(""), _T(""), - descrBuf, 0, wxTheApp->GetTopWindow()); + int FilterIndex = 0; + wxString pathTmp = wxFileSelectorEx(_("Select a file"), + _T(""), + _T(""), + &FilterIndex, + descrBuf, + 0, + wxTheApp->GetTopWindow()); if (!pathTmp.IsEmpty()) { @@ -1195,6 +1212,9 @@ wxDocTemplate *wxDocManager::SelectDocumentPath(wxDocTemplate **templates, // one. We really want to know exactly which template was // chosen by using a more advanced file selector. wxDocTemplate *theTemplate = FindTemplateForPath(path); + if ( !theTemplate ) + theTemplate = templates[FilterIndex]; + return theTemplate; } else @@ -1654,14 +1674,14 @@ bool wxCommandProcessor::Redo() return FALSE; } -bool wxCommandProcessor::CanUndo(void) const +bool wxCommandProcessor::CanUndo() const { if (m_currentCommand) return ((wxCommand *)m_currentCommand->Data())->CanUndo(); return FALSE; } -bool wxCommandProcessor::CanRedo(void) const +bool wxCommandProcessor::CanRedo() const { if ((m_currentCommand != (wxNode*) NULL) && (m_currentCommand->Next() == (wxNode*) NULL)) return FALSE;