general docview.cpp code cleanup; use wxVector<> instead of manually-allocated arrays; refactor wxDocManager::CreateDocument() and allow using wxDOC_SILENT with wxDOC_NEW; cleanup wxFileHistory code

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@54965 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2008-08-04 00:37:00 +00:00
parent a470957ada
commit c77049a04b
3 changed files with 431 additions and 558 deletions

View File

@@ -40,14 +40,11 @@ class WXDLLIMPEXP_FWD_BASE wxConfigBase;
#include "wx/stream.h"
#endif
// Document manager flags
// Flags for wxDocManager (can be combined).
enum
{
wxDOC_SDI = 1,
wxDOC_MDI,
wxDOC_NEW,
wxDOC_SILENT,
wxDEFAULT_DOCMAN_FLAGS = wxDOC_SDI
wxDOC_NEW = 1,
wxDOC_SILENT = 2
};
// Document template flags
@@ -63,7 +60,7 @@ enum
class WXDLLIMPEXP_CORE wxDocument : public wxEvtHandler
{
public:
wxDocument(wxDocument *parent = (wxDocument *) NULL);
wxDocument(wxDocument *parent = NULL);
virtual ~wxDocument();
// accessors
@@ -129,7 +126,7 @@ public:
const wxList& GetViews() const { return m_documentViews; }
wxView *GetFirstView() const;
virtual void UpdateAllViews(wxView *sender = (wxView *) NULL, wxObject *hint = (wxObject *) NULL);
virtual void UpdateAllViews(wxView *sender = NULL, wxObject *hint = NULL);
virtual void NotifyClosing();
// Remove all views (because we're closing the document)
@@ -184,7 +181,6 @@ private:
class WXDLLIMPEXP_CORE wxView: public wxEvtHandler
{
public:
// wxView(wxDocument *doc = (wxDocument *) NULL);
wxView();
virtual ~wxView();
@@ -200,13 +196,14 @@ public:
virtual void OnActivateView(bool activate, wxView *activeView, wxView *deactiveView);
virtual void OnDraw(wxDC *dc) = 0;
virtual void OnPrint(wxDC *dc, wxObject *info);
virtual void OnUpdate(wxView *sender, wxObject *hint = (wxObject *) NULL);
virtual void OnUpdate(wxView *sender, wxObject *hint = NULL);
virtual void OnClosingDocument() {}
virtual void OnChangeFilename();
// Called by framework if created automatically by the default document
// manager class: gives view a chance to initialise
virtual bool OnCreate(wxDocument *WXUNUSED(doc), long WXUNUSED(flags)) { return true; }
virtual bool OnCreate(wxDocument *WXUNUSED(doc), long WXUNUSED(flags))
{ return true; }
// Checks if the view is the last one for the document; if so, asks user
// to confirm save data (if modified). If ok, deletes itself and returns
@@ -256,8 +253,8 @@ public:
const wxString& ext,
const wxString& docTypeName,
const wxString& viewTypeName,
wxClassInfo *docClassInfo = (wxClassInfo *) NULL,
wxClassInfo *viewClassInfo = (wxClassInfo *)NULL,
wxClassInfo *docClassInfo = NULL,
wxClassInfo *viewClassInfo = NULL,
long flags = wxDEFAULT_TEMPLATE_FLAGS);
virtual ~wxDocTemplate();
@@ -325,7 +322,8 @@ private:
class WXDLLIMPEXP_CORE wxDocManager: public wxEvtHandler
{
public:
wxDocManager(long flags = wxDEFAULT_DOCMAN_FLAGS, bool initialize = true);
// NB: flags are unused, don't pass wxDOC_XXX to this ctor
wxDocManager(long flags = 0, bool initialize = true);
virtual ~wxDocManager();
virtual bool Initialize();
@@ -345,17 +343,12 @@ public:
// Handlers for UI update commands
void OnUpdateFileOpen(wxUpdateUIEvent& event);
void OnUpdateFileClose(wxUpdateUIEvent& event);
void OnUpdateFileRevert(wxUpdateUIEvent& event);
void OnUpdateDisableIfNoDoc(wxUpdateUIEvent& event);
void OnUpdateFileNew(wxUpdateUIEvent& event);
void OnUpdateFileSave(wxUpdateUIEvent& event);
void OnUpdateFileSaveAs(wxUpdateUIEvent& event);
void OnUpdateUndo(wxUpdateUIEvent& event);
void OnUpdateRedo(wxUpdateUIEvent& event);
void OnUpdatePrint(wxUpdateUIEvent& event);
void OnUpdatePreview(wxUpdateUIEvent& event);
// Extend event processing to search the view's event table
virtual bool ProcessEvent(wxEvent& event);
@@ -449,7 +442,6 @@ public:
#endif // WXWIN_COMPATIBILITY_2_6
protected:
long m_flags;
int m_defaultDocumentNameCounter;
int m_maxDocsOpen;
wxList m_docs;
@@ -499,7 +491,7 @@ public:
wxView *GetView() const { return m_childView; }
void SetDocument(wxDocument *doc) { m_childDocument = doc; }
void SetView(wxView *view) { m_childView = view; }
bool Destroy() { m_childView = (wxView *)NULL; return wxFrame::Destroy(); }
bool Destroy() { m_childView = NULL; return wxFrame::Destroy(); }
protected:
wxDocument* m_childDocument;
@@ -564,7 +556,7 @@ private:
class WXDLLIMPEXP_CORE wxDocPrintout : public wxPrintout
{
public:
wxDocPrintout(wxView *view = (wxView *) NULL, const wxString& title = wxT("Printout"));
wxDocPrintout(wxView *view = NULL, const wxString& title = wxT("Printout"));
bool OnPrintPage(int page);
bool HasPage(int page);
bool OnBeginDocument(int startPage, int endPage);
@@ -589,7 +581,6 @@ class WXDLLIMPEXP_CORE wxFileHistory : public wxObject
{
public:
wxFileHistory(size_t maxFiles = 9, wxWindowID idBase = wxID_FILE1);
virtual ~wxFileHistory();
// Operations
virtual void AddFileToHistory(const wxString& file);
@@ -660,6 +651,18 @@ bool WXDLLIMPEXP_CORE wxTransferFileToStream(const wxString& filename, wxOutputS
bool WXDLLIMPEXP_CORE wxTransferStreamToFile(wxInputStream& stream, const wxString& filename);
#endif // wxUSE_STD_IOSTREAM
// these flags are not used anywhere by wxWidgets and kept only for an unlikely
// case of existing user code using them for its own purposes
#ifdef WXWIN_COMPATIBILITY_2_8
enum
{
wxDOC_SDI = 1,
wxDOC_MDI,
wxDEFAULT_DOCMAN_FLAGS = wxDOC_SDI
};
#endif // WXWIN_COMPATIBILITY_2_8
#endif // wxUSE_DOC_VIEW_ARCHITECTURE
#endif // _WX_DOCH__

View File

@@ -258,16 +258,18 @@ public:
Constructor. Create a document manager instance dynamically near the
start of your application before doing any document or view operations.
@a flags is currently unused.
If @a initialize is @true, the Initialize() function will be called to
create a default history list object. If you derive from wxDocManager,
you may wish to call the base constructor with @false, and then call
Initialize() in your own constructor, to allow your own Initialize() or
OnCreateFileHistory functions to be called.
@param flags
Currently unused.
@param initialize
Indicates whether Initialize() should be called by this ctor.
*/
wxDocManager(long flags = wxDEFAULT_DOCMAN_FLAGS,
bool initialize = true);
wxDocManager(long flags = 0, bool initialize = true);
/**
Destructor.
@@ -301,25 +303,42 @@ public:
bool CloseDocuments(bool force = true);
/**
Creates a new document in a manner determined by the @a flags
parameter, which can be:
Creates a new document.
- wxDOC_NEW - Creates a fresh document.
- wxDOC_SILENT - Silently loads the given document file.
This function can either create a document corresponding to a new
file or to an already existing one depending on whether @c wxDOC_NEW is
specified in the @a flags.
If wxDOC_NEW is present, a new document will be created and returned,
possibly after asking the user for a template to use if there is more
than one document template. If wxDOC_SILENT is present, a new document
will be created and the given file loaded into it. If neither of these
flags is present, the user will be presented with a file selector for
the file to load, and the template to use will be determined by the
extension (Windows) or by popping up a template choice list (other
platforms).
By default, this function asks the user for the type of document to
open and the path to its file if it's not specified, i.e. if @a path is
empty. Specifying @c wxDOC_SILENT flag suppresses any prompts and means
that the @a path must be non-empty and there must be a registered
document template handling the extension of this file, otherwise a
warning message is logged and the function returns @NULL. Notice that
@c wxDOC_SILENT can be combined with @c wxDOC_NEW, however in this case
the @a path must still be specified, even if the file with this path
typically won't exist.
If the maximum number of documents has been reached, this function will
delete the oldest currently loaded document before creating a new one.
Finally notice that if this document manager was configured to allow
only a limited number of simultaneously opened documents using
SetMaxDocsOpen(), this function will try to close the oldest existing
document if this number was reached before creating a new document.
And if closing the old document fails (e.g. because it was vetoed by
user), this function fails as well.
@param path
Path to a file or an empty string. If the path is empty, the user
will be asked to select it (thus, this is incompatible with the use
of @c wxDOC_SILENT). The file should exist unless @a flags includes
@c wxDOC_NEW.
@param flags
By default, none. May include @c wxDOC_NEW to indicate that the new
document corresponds to a new file and not an existing one and
@c wxDOC_SILENT to suppress any dialogs asking the user about the
file path and type.
@return a new document object or @NULL on failure.
*/
wxDocument* CreateDocument(const wxString& path, long flags);
wxDocument *CreateDocument(const wxString& path, long flags = 0);
/**
Creates a new view for the given document. If more than one view is
@@ -559,11 +578,12 @@ public:
/**
Sets the maximum number of documents that can be open at a time. By
default, this is 10,000. If you set it to 1, existing documents will be
saved and deleted when the user tries to open or create a new one
(similar to the behaviour of Windows Write, for example). Allowing
multiple documents gives behaviour more akin to MS Word and other
Multiple Document Interface applications.
default, this is @c INT_MAX, i.e. the number of documents is unlimited.
If you set it to 1, existing documents will be saved and deleted when
the user tries to open or create a new one (similar to the behaviour of
Windows Write, for example). Allowing multiple documents gives
behaviour more akin to MS Word and other Multiple Document Interface
applications.
*/
void SetMaxDocsOpen(int n);

File diff suppressed because it is too large Load Diff