0bbe61b8c1
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@52813 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
1498 lines
45 KiB
Objective-C
1498 lines
45 KiB
Objective-C
/////////////////////////////////////////////////////////////////////////////
|
|
// Name: docview.h
|
|
// Purpose: interface of wxDocTemplate
|
|
// Author: wxWidgets team
|
|
// RCS-ID: $Id$
|
|
// Licence: wxWindows license
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
/**
|
|
@class wxDocTemplate
|
|
@wxheader{docview.h}
|
|
|
|
The wxDocTemplate class is used to model the relationship between a
|
|
document class and a view class.
|
|
|
|
@library{wxcore}
|
|
@category{dvf}
|
|
|
|
@see @ref overview_wxdoctemplateoverview "wxDocTemplate overview", wxDocument,
|
|
wxView
|
|
*/
|
|
class wxDocTemplate : public wxObject
|
|
{
|
|
public:
|
|
/**
|
|
Constructor. Create instances dynamically near the start of your application
|
|
after creating
|
|
a wxDocManager instance, and before doing any document or view operations.
|
|
@a manager is the document manager object which manages this template.
|
|
@a descr is a short description of what the template is for. This string will
|
|
be displayed in the
|
|
file filter list of Windows file selectors.
|
|
@a filter is an appropriate file filter such as @c *.txt.
|
|
@a dir is the default directory to use for file selectors.
|
|
@a ext is the default file extension (such as txt).
|
|
@a docTypeName is a name that should be unique for a given type of document,
|
|
used for
|
|
gathering a list of views relevant to a particular document.
|
|
@a viewTypeName is a name that should be unique for a given view.
|
|
@a docClassInfo is a pointer to the run-time document class information as
|
|
returned
|
|
by the CLASSINFO macro, e.g. CLASSINFO(MyDocumentClass). If this is not
|
|
supplied,
|
|
you will need to derive a new wxDocTemplate class and override the
|
|
CreateDocument
|
|
member to return a new document instance on demand.
|
|
@a viewClassInfo is a pointer to the run-time view class information as returned
|
|
by the CLASSINFO macro, e.g. CLASSINFO(MyViewClass). If this is not supplied,
|
|
you will need to derive a new wxDocTemplate class and override the CreateView
|
|
member to return a new view instance on demand.
|
|
@a flags is a bit list of the following:
|
|
wxTEMPLATE_VISIBLE The template may be displayed to the user in dialogs.
|
|
wxTEMPLATE_INVISIBLE The template may not be displayed to the user in dialogs.
|
|
wxDEFAULT_TEMPLATE_FLAGS Defined as wxTEMPLATE_VISIBLE.
|
|
|
|
|
|
@b Wx::DocTemplate-new( docmgr, descr, filter, dir,
|
|
ext, docTypeName, viewTypeName, docClassInfo, viewClassInfo, flags
|
|
)
|
|
|
|
will construct document and view objects from the class information
|
|
|
|
@b Wx::DocTemplate-new( docmgr, descr, filter, dir,
|
|
ext, docTypeName, viewTypeName, docClassName, viewClassName, flags
|
|
)
|
|
|
|
will construct document and view objects from perl packages
|
|
|
|
@b Wx::DocTemplate-new( docmgr, descr, filter, dir,
|
|
ext, docTypeName, viewTypeName )
|
|
|
|
@c Wx::DocTemplate::CreateDocument() and
|
|
@c Wx::DocTemplate::CreateView() must be overridden
|
|
*/
|
|
wxDocTemplate(wxDocManager* manager, const wxString& descr,
|
|
const wxString& filter,
|
|
const wxString& dir,
|
|
const wxString& ext,
|
|
const wxString& docTypeName,
|
|
const wxString& viewTypeName,
|
|
wxClassInfo* docClassInfo = NULL,
|
|
wxClassInfo* viewClassInfo = NULL,
|
|
long flags = wxDEFAULT_TEMPLATE_FLAGS);
|
|
|
|
/**
|
|
Destructor.
|
|
*/
|
|
~wxDocTemplate();
|
|
|
|
/**
|
|
Creates a new instance of the associated document class. If you have not
|
|
supplied
|
|
a wxClassInfo parameter to the template constructor, you will need to override
|
|
this
|
|
function to return an appropriate document instance.
|
|
This function calls InitDocument() which in turns
|
|
calls wxDocument::OnCreate.
|
|
*/
|
|
wxDocument* CreateDocument(const wxString& path, long flags = 0);
|
|
|
|
/**
|
|
Creates a new instance of the associated view class. If you have not supplied
|
|
a wxClassInfo parameter to the template constructor, you will need to override
|
|
this
|
|
function to return an appropriate view instance.
|
|
*/
|
|
wxView* CreateView(wxDocument* doc, long flags = 0);
|
|
|
|
/**
|
|
Returns the default file extension for the document data, as passed to the
|
|
document template constructor.
|
|
*/
|
|
wxString GetDefaultExtension();
|
|
|
|
/**
|
|
Returns the text description of this template, as passed to the document
|
|
template constructor.
|
|
*/
|
|
wxString GetDescription();
|
|
|
|
/**
|
|
Returns the default directory, as passed to the document template constructor.
|
|
*/
|
|
wxString GetDirectory();
|
|
|
|
/**
|
|
Returns a pointer to the document manager instance for which this template was
|
|
created.
|
|
*/
|
|
wxDocManager* GetDocumentManager();
|
|
|
|
/**
|
|
Returns the document type name, as passed to the document template constructor.
|
|
*/
|
|
wxString GetDocumentName();
|
|
|
|
/**
|
|
Returns the file filter, as passed to the document template constructor.
|
|
*/
|
|
wxString GetFileFilter();
|
|
|
|
/**
|
|
Returns the flags, as passed to the document template constructor.
|
|
*/
|
|
long GetFlags();
|
|
|
|
/**
|
|
Returns the view type name, as passed to the document template constructor.
|
|
*/
|
|
wxString GetViewName();
|
|
|
|
/**
|
|
Initialises the document, calling wxDocument::OnCreate. This is called from
|
|
CreateDocument().
|
|
*/
|
|
bool InitDocument(wxDocument* doc, const wxString& path,
|
|
long flags = 0);
|
|
|
|
/**
|
|
Returns @true if the document template can be shown in user dialogs, @false
|
|
otherwise.
|
|
*/
|
|
bool IsVisible();
|
|
|
|
/**
|
|
Sets the default file extension.
|
|
*/
|
|
void SetDefaultExtension(const wxString& ext);
|
|
|
|
/**
|
|
Sets the template description.
|
|
*/
|
|
void SetDescription(const wxString& descr);
|
|
|
|
/**
|
|
Sets the default directory.
|
|
*/
|
|
void SetDirectory(const wxString& dir);
|
|
|
|
/**
|
|
Sets the pointer to the document manager instance for which this template was
|
|
created.
|
|
Should not be called by the application.
|
|
*/
|
|
void SetDocumentManager(wxDocManager* manager);
|
|
|
|
/**
|
|
Sets the file filter.
|
|
*/
|
|
void SetFileFilter(const wxString& filter);
|
|
|
|
/**
|
|
Sets the internal document template flags (see the constructor description for
|
|
more details).
|
|
*/
|
|
void SetFlags(long flags);
|
|
|
|
/**
|
|
wxString m_defaultExt
|
|
The default extension for files of this type.
|
|
*/
|
|
|
|
|
|
/**
|
|
wxString m_description
|
|
A short description of this template.
|
|
*/
|
|
|
|
|
|
/**
|
|
wxString m_directory
|
|
The default directory for files of this type.
|
|
*/
|
|
|
|
|
|
/**
|
|
wxClassInfo* m_docClassInfo
|
|
Run-time class information that allows document instances to be constructed
|
|
dynamically.
|
|
*/
|
|
|
|
|
|
/**
|
|
wxString m_docTypeName
|
|
The named type of the document associated with this template.
|
|
*/
|
|
|
|
|
|
/**
|
|
wxDocTemplate* m_documentManager
|
|
A pointer to the document manager for which this template was created.
|
|
*/
|
|
|
|
|
|
/**
|
|
wxString m_fileFilter
|
|
The file filter (such as @c *.txt) to be used in file selector dialogs.
|
|
*/
|
|
|
|
|
|
/**
|
|
long m_flags
|
|
The flags passed to the constructor.
|
|
*/
|
|
|
|
|
|
/**
|
|
wxClassInfo* m_viewClassInfo
|
|
Run-time class information that allows view instances to be constructed
|
|
dynamically.
|
|
*/
|
|
|
|
|
|
/**
|
|
wxString m_viewTypeName
|
|
The named type of the view associated with this template.
|
|
*/
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
@class wxDocManager
|
|
@wxheader{docview.h}
|
|
|
|
The wxDocManager class is part of the document/view framework supported by
|
|
wxWidgets,
|
|
and cooperates with the wxView, wxDocument
|
|
and wxDocTemplate classes.
|
|
|
|
@library{wxcore}
|
|
@category{dvf}
|
|
|
|
@see @ref overview_wxdocmanageroverview "wxDocManager overview", wxDocument,
|
|
wxView, wxDocTemplate, wxFileHistory
|
|
*/
|
|
class wxDocManager : public wxEvtHandler
|
|
{
|
|
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.
|
|
*/
|
|
wxDocManager(long flags = wxDEFAULT_DOCMAN_FLAGS,
|
|
bool initialize = true);
|
|
|
|
/**
|
|
Destructor.
|
|
*/
|
|
~wxDocManager();
|
|
|
|
/**
|
|
Sets the current view.
|
|
*/
|
|
void ActivateView(wxView* doc, bool activate = true);
|
|
|
|
/**
|
|
Adds the document to the list of documents.
|
|
*/
|
|
void AddDocument(wxDocument* doc);
|
|
|
|
/**
|
|
Adds a file to the file history list, if we have a pointer to an appropriate
|
|
file menu.
|
|
*/
|
|
void AddFileToHistory(const wxString& filename);
|
|
|
|
/**
|
|
Adds the template to the document manager's template list.
|
|
*/
|
|
void AssociateTemplate(wxDocTemplate* temp);
|
|
|
|
/**
|
|
Closes all currently opened documents.
|
|
*/
|
|
bool CloseDocuments(bool force = true);
|
|
|
|
/**
|
|
Creates a new document in a manner determined by the @a flags parameter, which
|
|
can be:
|
|
wxDOC_NEW Creates a fresh document.
|
|
wxDOC_SILENT Silently loads the given document file.
|
|
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).
|
|
If the maximum number of documents has been reached, this function
|
|
will delete the oldest currently loaded document before creating a new one.
|
|
*/
|
|
wxDocument* CreateDocument(const wxString& path, long flags);
|
|
|
|
/**
|
|
Creates a new view for the given document. If more than one view is allowed for
|
|
the
|
|
document (by virtue of multiple templates mentioning the same document type), a
|
|
choice
|
|
of view is presented to the user.
|
|
*/
|
|
wxView* CreateView(wxDocument* doc, long flags);
|
|
|
|
/**
|
|
Removes the template from the list of templates.
|
|
*/
|
|
void DisassociateTemplate(wxDocTemplate* temp);
|
|
|
|
//@{
|
|
/**
|
|
Appends the files in the history list, to the given menu only.
|
|
*/
|
|
void FileHistoryAddFilesToMenu();
|
|
void FileHistoryAddFilesToMenu(wxMenu* menu);
|
|
//@}
|
|
|
|
/**
|
|
Loads the file history from a config object.
|
|
|
|
@see wxConfig()
|
|
*/
|
|
void FileHistoryLoad(wxConfigBase& config);
|
|
|
|
/**
|
|
Removes the given menu from the list of menus managed by the file history
|
|
object.
|
|
*/
|
|
void FileHistoryRemoveMenu(wxMenu* menu);
|
|
|
|
/**
|
|
Saves the file history into a config object. This must be called
|
|
explicitly by the application.
|
|
|
|
@see wxConfig()
|
|
*/
|
|
void FileHistorySave(wxConfigBase& resourceFile);
|
|
|
|
/**
|
|
Use this menu for appending recently-visited document filenames, for convenient
|
|
access. Calling this function with a valid menu pointer enables the history
|
|
list functionality.
|
|
Note that you can add multiple menus using this function, to be managed by the
|
|
file history object.
|
|
*/
|
|
void FileHistoryUseMenu(wxMenu* menu);
|
|
|
|
/**
|
|
Given a path, try to find template that matches the extension. This is only
|
|
an approximate method of finding a template for creating a document.
|
|
*/
|
|
wxDocTemplate* FindTemplateForPath(const wxString& path);
|
|
|
|
/**
|
|
Returns the document associated with the currently active view (if any).
|
|
*/
|
|
wxDocument* GetCurrentDocument();
|
|
|
|
/**
|
|
Returns the currently active view
|
|
*/
|
|
wxView* GetCurrentView();
|
|
|
|
/**
|
|
Returns a reference to the list of documents.
|
|
*/
|
|
wxList GetDocuments();
|
|
|
|
/**
|
|
Returns a pointer to file history.
|
|
*/
|
|
wxFileHistory* GetFileHistory();
|
|
|
|
/**
|
|
Returns the number of files currently stored in the file history.
|
|
*/
|
|
size_t GetHistoryFilesCount();
|
|
|
|
/**
|
|
Returns the directory last selected by the user when opening a file. Initially
|
|
empty.
|
|
*/
|
|
wxString GetLastDirectory() const;
|
|
|
|
/**
|
|
Returns the number of documents that can be open simultaneously.
|
|
*/
|
|
int GetMaxDocsOpen();
|
|
|
|
/**
|
|
Returns a reference to the list of associated templates.
|
|
*/
|
|
wxList GetTemplates();
|
|
|
|
/**
|
|
Initializes data; currently just calls OnCreateFileHistory. Some data cannot
|
|
always be initialized in the constructor because the programmer must be given
|
|
the opportunity to override functionality. If OnCreateFileHistory was called
|
|
from the constructor, an overridden virtual OnCreateFileHistory would not be
|
|
called due to C++'s 'interesting' constructor semantics. In fact Initialize
|
|
@e is called from the wxDocManager constructor, but this can be
|
|
vetoed by passing @false to the second argument, allowing the derived class's
|
|
constructor to call Initialize, possibly calling a different OnCreateFileHistory
|
|
from the default.
|
|
The bottom line: if you're not deriving from Initialize, forget it and
|
|
construct wxDocManager with no arguments.
|
|
*/
|
|
bool Initialize();
|
|
|
|
/**
|
|
Return a string containing a suitable default name for a new document. By
|
|
default this is implemented by appending an integer counter to the string
|
|
@b unnamed but can be overridden in the derived classes to do something more
|
|
appropriate.
|
|
*/
|
|
wxString MakeNewDocumentName();
|
|
|
|
/**
|
|
A hook to allow a derived class to create a different type of file history.
|
|
Called
|
|
from Initialize().
|
|
*/
|
|
wxFileHistory* OnCreateFileHistory();
|
|
|
|
/**
|
|
Closes and deletes the currently active document.
|
|
*/
|
|
void OnFileClose(wxCommandEvent& event);
|
|
|
|
/**
|
|
Closes and deletes all the currently opened documents.
|
|
*/
|
|
void OnFileCloseAll(wxCommandEvent& event);
|
|
|
|
/**
|
|
Creates a document from a list of templates (if more than one template).
|
|
*/
|
|
void OnFileNew(wxCommandEvent& event);
|
|
|
|
/**
|
|
Creates a new document and reads in the selected file.
|
|
*/
|
|
void OnFileOpen(wxCommandEvent& event);
|
|
|
|
/**
|
|
Reverts the current document by calling wxDocument::Revert for the current
|
|
document.
|
|
*/
|
|
void OnFileRevert(wxCommandEvent& event);
|
|
|
|
/**
|
|
Saves the current document by calling wxDocument::Save for the current document.
|
|
*/
|
|
void OnFileSave(wxCommandEvent& event);
|
|
|
|
/**
|
|
Calls wxDocument::SaveAs for the current document.
|
|
*/
|
|
void OnFileSaveAs(wxCommandEvent& event);
|
|
|
|
/**
|
|
Removes the document from the list of documents.
|
|
*/
|
|
void RemoveDocument(wxDocument* doc);
|
|
|
|
/**
|
|
Under Windows, pops up a file selector with a list of filters corresponding to
|
|
document templates.
|
|
The wxDocTemplate corresponding to the selected file's extension is returned.
|
|
On other platforms, if there is more than one document template a choice list
|
|
is popped up,
|
|
followed by a file selector.
|
|
This function is used in CreateDocument().
|
|
(doctemplate, path) = My::DocManager-SelectDocumentPath( ... );
|
|
*/
|
|
wxDocTemplate* SelectDocumentPath(wxDocTemplate** templates,
|
|
int noTemplates,
|
|
wxString& path,
|
|
long flags,
|
|
bool save);
|
|
|
|
/**
|
|
Returns a document template by asking the user (if there is more than one
|
|
template).
|
|
This function is used in CreateDocument().
|
|
|
|
@param templates
|
|
Pointer to an array of templates from which to choose a desired template.
|
|
@param noTemplates
|
|
Number of templates being pointed to by the templates pointer.
|
|
@param sort
|
|
If more than one template is passed in in templates,
|
|
then this parameter indicates whether the list of templates that the user
|
|
will have to choose from is sorted or not when shown the choice box dialog.
|
|
|
|
Default is @false.
|
|
*/
|
|
wxDocTemplate* SelectDocumentType(wxDocTemplate** templates,
|
|
int noTemplates,
|
|
bool sort = false);
|
|
|
|
/**
|
|
Returns a document template by asking the user (if there is more than one
|
|
template),
|
|
displaying a list of valid views. This function is used in CreateView().
|
|
The dialog normally will not appear because the array of templates only contains
|
|
those relevant to the document in question, and often there will only be one
|
|
such.
|
|
|
|
@param templates
|
|
Pointer to an array of templates from which to choose a desired template.
|
|
@param noTemplates
|
|
Number of templates being pointed to by the templates pointer.
|
|
@param sort
|
|
If more than one template is passed in in templates,
|
|
then this parameter indicates whether the list of templates that the user
|
|
will have to choose from is sorted or not when shown the choice box dialog.
|
|
|
|
Default is @false.
|
|
*/
|
|
wxDocTemplate* SelectViewType(wxDocTemplate** templates,
|
|
int noTemplates,
|
|
bool sort = false);
|
|
|
|
/**
|
|
Sets the directory to be displayed to the user when opening a file. Initially
|
|
this is empty.
|
|
*/
|
|
void SetLastDirectory(const wxString& dir);
|
|
|
|
/**
|
|
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.
|
|
*/
|
|
void SetMaxDocsOpen(int n);
|
|
|
|
/**
|
|
wxView* m_currentView
|
|
The currently active view.
|
|
*/
|
|
|
|
|
|
/**
|
|
int m_defaultDocumentNameCounter
|
|
Stores the integer to be used for the next default document name.
|
|
*/
|
|
|
|
|
|
/**
|
|
wxList m_docs
|
|
A list of all documents.
|
|
*/
|
|
|
|
|
|
/**
|
|
wxFileHistory* m_fileHistory
|
|
A pointer to an instance of wxFileHistory,
|
|
which manages the history of recently-visited files on the File menu.
|
|
*/
|
|
|
|
|
|
/**
|
|
long m_flags
|
|
Stores the flags passed to the constructor.
|
|
*/
|
|
|
|
|
|
/**
|
|
The directory last selected by the user when opening a file.
|
|
wxFileHistory* m_fileHistory
|
|
*/
|
|
|
|
|
|
/**
|
|
int m_maxDocsOpen
|
|
Stores the maximum number of documents that can be opened before
|
|
existing documents are closed. By default, this is 10,000.
|
|
*/
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
@class wxView
|
|
@wxheader{docview.h}
|
|
|
|
The view class can be used to model the viewing and editing component of
|
|
an application's file-based data. It is part of the document/view framework
|
|
supported by wxWidgets,
|
|
and cooperates with the wxDocument, wxDocTemplate
|
|
and wxDocManager classes.
|
|
|
|
@library{wxcore}
|
|
@category{dvf}
|
|
|
|
@see @ref overview_wxviewoverview "wxView overview", wxDocument, wxDocTemplate,
|
|
wxDocManager
|
|
*/
|
|
class wxView : public wxEvtHandler
|
|
{
|
|
public:
|
|
/**
|
|
Constructor. Define your own default constructor to initialize
|
|
application-specific
|
|
data.
|
|
*/
|
|
wxView();
|
|
|
|
/**
|
|
Destructor. Removes itself from the document's list of views.
|
|
*/
|
|
~wxView();
|
|
|
|
/**
|
|
Call this from your view frame's OnActivate member to tell the framework which
|
|
view is
|
|
currently active. If your windowing system doesn't call OnActivate, you may
|
|
need to
|
|
call this function from any place where you know the view must
|
|
be active, and the framework will need to get the current view.
|
|
The prepackaged view frame wxDocChildFrame calls Activate() from its OnActivate
|
|
member.
|
|
This function calls OnActivateView().
|
|
*/
|
|
virtual void Activate(bool activate);
|
|
|
|
/**
|
|
Closes the view by calling OnClose. If @a deleteWindow is @true, this function
|
|
should
|
|
delete the window associated with the view.
|
|
*/
|
|
virtual bool Close(bool deleteWindow = true);
|
|
|
|
/**
|
|
Gets a pointer to the document associated with the view.
|
|
*/
|
|
wxDocument* GetDocument() const;
|
|
|
|
/**
|
|
Returns a pointer to the document manager instance associated with this view.
|
|
*/
|
|
wxDocManager* GetDocumentManager() const;
|
|
|
|
/**
|
|
Gets the frame associated with the view (if any). Note that this "frame'' is
|
|
not a wxFrame at all in the generic MDI implementation which uses the notebook
|
|
pages instead of the frames and this is why this method returns a wxWindow and
|
|
not a wxFrame.
|
|
*/
|
|
wxWindow* GetFrame();
|
|
|
|
/**
|
|
Gets the name associated with the view (passed to the wxDocTemplate
|
|
constructor).
|
|
Not currently used by the framework.
|
|
*/
|
|
wxString GetViewName() const;
|
|
|
|
/**
|
|
Called when a view is activated by means of Activate(). The default
|
|
implementation does
|
|
nothing.
|
|
*/
|
|
virtual void OnActivateView(bool activate, wxView* activeView,
|
|
wxView* deactiveView);
|
|
|
|
/**
|
|
Called when the filename has changed. The default implementation constructs a
|
|
suitable title and sets the title of the view frame (if any).
|
|
*/
|
|
virtual void OnChangeFilename();
|
|
|
|
/**
|
|
Implements closing behaviour. The default implementation calls wxDocument::Close
|
|
to close the associated document. Does not delete the view. The application
|
|
may wish to do some cleaning up operations in this function, @e if a
|
|
call to wxDocument::Close succeeded. For example, if your views
|
|
all share the same window, you need to disassociate the window from the view
|
|
and perhaps clear the window. If @a deleteWindow is @true, delete the
|
|
frame associated with the view.
|
|
*/
|
|
virtual bool OnClose(bool deleteWindow);
|
|
|
|
/**
|
|
Override this to clean up the view when the document is being
|
|
closed.
|
|
*/
|
|
virtual void OnClosingDocument();
|
|
|
|
/**
|
|
wxDocManager or wxDocument creates a wxView via a wxDocTemplate.
|
|
Just after the wxDocTemplate creates the wxView, it calls
|
|
OnCreate(). In its OnCreate member function, the wxView can create a
|
|
wxDocChildFrame
|
|
or a derived class. This wxDocChildFrame provides user interface
|
|
elements to view and/or edit the contents of the wxDocument.
|
|
By default, simply returns @true. If the function returns @false, the
|
|
view will be deleted.
|
|
*/
|
|
virtual bool OnCreate(wxDocument* doc, long flags);
|
|
|
|
/**
|
|
If the printing framework is enabled in the library, this function returns a
|
|
wxPrintout object for the purposes of printing. It should create a new object
|
|
every time it is called; the framework will delete objects it creates.
|
|
By default, this function returns an instance of wxDocPrintout, which prints
|
|
and previews one page by calling OnDraw().
|
|
Override to return an instance of a class other than wxDocPrintout.
|
|
*/
|
|
virtual wxPrintout* OnCreatePrintout();
|
|
|
|
/**
|
|
Override this function to render the view on the given device context.
|
|
*/
|
|
virtual void OnDraw(wxDC* dc);
|
|
|
|
/**
|
|
Called when the view should be updated. @a sender is a pointer to the view
|
|
that sent the update request, or @NULL if no single view requested the update
|
|
(for instance,
|
|
when the document is opened). @a hint is as yet unused but may in future contain
|
|
application-specific information for making updating more efficient.
|
|
*/
|
|
virtual void OnUpdate(wxView* sender, wxObject* hint);
|
|
|
|
/**
|
|
Associates the given document with the view. Normally called by the
|
|
framework.
|
|
*/
|
|
void SetDocument(wxDocument* doc);
|
|
|
|
/**
|
|
Sets the frame associated with this view. The application should call this
|
|
if possible, to tell the view about the frame.
|
|
See GetFrame() for the explanation about the mismatch
|
|
between the "Frame'' in the method name and the type of its parameter.
|
|
*/
|
|
void SetFrame(wxWindow* frame);
|
|
|
|
/**
|
|
Sets the view type name. Should only be called by the framework.
|
|
*/
|
|
void SetViewName(const wxString& name);
|
|
|
|
/**
|
|
wxDocument* m_viewDocument
|
|
The document associated with this view. There may be more than one view per
|
|
document, but there can never be more than one document for one view.
|
|
*/
|
|
|
|
|
|
/**
|
|
wxFrame* m_viewFrame
|
|
Frame associated with the view, if any.
|
|
*/
|
|
|
|
|
|
/**
|
|
wxString m_viewTypeName
|
|
The view type name given to the wxDocTemplate constructor, copied to this
|
|
variable when the view is created. Not currently used by the framework.
|
|
*/
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
@class wxDocChildFrame
|
|
@wxheader{docview.h}
|
|
|
|
The wxDocChildFrame class provides a default frame for displaying documents
|
|
on separate windows. This class can only be used for SDI (not MDI) child frames.
|
|
|
|
The class is part of the document/view framework supported by wxWidgets,
|
|
and cooperates with the wxView, wxDocument,
|
|
wxDocManager and wxDocTemplate classes.
|
|
|
|
See the example application in @c samples/docview.
|
|
|
|
@library{wxcore}
|
|
@category{dvf}
|
|
|
|
@see @ref overview_docviewoverview, wxFrame
|
|
*/
|
|
class wxDocChildFrame : public wxFrame
|
|
{
|
|
public:
|
|
/**
|
|
Constructor.
|
|
*/
|
|
wxDocChildFrame(wxDocument* doc, wxView* view, wxFrame* parent,
|
|
wxWindowID id,
|
|
const wxString& title,
|
|
const wxPoint& pos = wxDefaultPosition,
|
|
const wxSize& size = wxDefaultSize,
|
|
long style = wxDEFAULT_FRAME_STYLE,
|
|
const wxString& name = "frame");
|
|
|
|
/**
|
|
Destructor.
|
|
*/
|
|
~wxDocChildFrame();
|
|
|
|
/**
|
|
Returns the document associated with this frame.
|
|
*/
|
|
wxDocument* GetDocument() const;
|
|
|
|
/**
|
|
Returns the view associated with this frame.
|
|
*/
|
|
wxView* GetView() const;
|
|
|
|
/**
|
|
Sets the currently active view to be the frame's view. You may need
|
|
to override (but still call) this function in order to set the keyboard
|
|
focus for your subwindow.
|
|
*/
|
|
void OnActivate(wxActivateEvent event);
|
|
|
|
/**
|
|
Closes and deletes the current view and document.
|
|
*/
|
|
void OnCloseWindow(wxCloseEvent& event);
|
|
|
|
/**
|
|
Sets the document for this frame.
|
|
*/
|
|
void SetDocument(wxDocument* doc);
|
|
|
|
/**
|
|
Sets the view for this frame.
|
|
*/
|
|
void SetView(wxView* view);
|
|
|
|
/**
|
|
wxDocument* m_childDocument
|
|
The document associated with the frame.
|
|
*/
|
|
|
|
|
|
/**
|
|
wxView* m_childView
|
|
The view associated with the frame.
|
|
*/
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
@class wxDocParentFrame
|
|
@wxheader{docview.h}
|
|
|
|
The wxDocParentFrame class provides a default top-level frame for
|
|
applications using the document/view framework. This class can only be used for
|
|
SDI (not MDI) parent frames.
|
|
|
|
It cooperates with the wxView, wxDocument,
|
|
wxDocManager and wxDocTemplates() classes.
|
|
|
|
See the example application in @c samples/docview.
|
|
|
|
@library{wxcore}
|
|
@category{dvf}
|
|
|
|
@see @ref overview_docviewoverview, wxFrame
|
|
*/
|
|
class wxDocParentFrame : public wxFrame
|
|
{
|
|
public:
|
|
//@{
|
|
/**
|
|
Constructor.
|
|
*/
|
|
wxDocParentFrame();
|
|
wxDocParentFrame(wxDocManager* manager, wxFrame* parent,
|
|
wxWindowID id,
|
|
const wxString& title,
|
|
const wxPoint& pos = wxDefaultPosition,
|
|
const wxSize& size = wxDefaultSize,
|
|
long style = wxDEFAULT_FRAME_STYLE,
|
|
const wxString& name = "frame");
|
|
//@}
|
|
|
|
/**
|
|
Destructor.
|
|
*/
|
|
~wxDocParentFrame();
|
|
|
|
/**
|
|
Used in two-step construction.
|
|
*/
|
|
bool Create(wxDocManager* manager, wxFrame* parent,
|
|
wxWindowID id, const wxString& title,
|
|
const wxPoint& pos = wxDefaultPosition,
|
|
const wxSize& size = wxDefaultSize,
|
|
long style = wxDEFAULT_FRAME_STYLE,
|
|
const wxString& name = "frame");
|
|
|
|
/**
|
|
Returns the associated @ref overview_wxdocmanager "document manager object".
|
|
*/
|
|
wxDocManager* GetDocumentManager() const;
|
|
|
|
/**
|
|
Deletes all views and documents. If no user input cancelled the
|
|
operation, the frame will be destroyed and the application will exit.
|
|
Since understanding how document/view clean-up takes place can be difficult,
|
|
the implementation of this function is shown below.
|
|
*/
|
|
void OnCloseWindow(wxCloseEvent& event);
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
@class wxDocument
|
|
@wxheader{docview.h}
|
|
|
|
The document class can be used to model an application's file-based
|
|
data. It is part of the document/view framework supported by wxWidgets,
|
|
and cooperates with the wxView, wxDocTemplate
|
|
and wxDocManager classes.
|
|
|
|
@library{wxcore}
|
|
@category{dvf}
|
|
|
|
@see @ref overview_wxdocumentoverview "wxDocument overview", wxView,
|
|
wxDocTemplate, wxDocManager
|
|
*/
|
|
class wxDocument : public wxEvtHandler
|
|
{
|
|
public:
|
|
/**
|
|
Constructor. Define your own default constructor to initialize
|
|
application-specific
|
|
data.
|
|
*/
|
|
wxDocument();
|
|
|
|
/**
|
|
Destructor. Removes itself from the document manager.
|
|
*/
|
|
~wxDocument();
|
|
|
|
/**
|
|
If the view is not already in the list of views, adds the view and calls
|
|
OnChangedViewList.
|
|
*/
|
|
virtual bool AddView(wxView* view);
|
|
|
|
/**
|
|
Closes the document, by calling OnSaveModified and then (if this returned @true)
|
|
OnCloseDocument.
|
|
This does not normally delete the document object: use DeleteAllViews to do
|
|
this implicitly.
|
|
*/
|
|
virtual bool Close();
|
|
|
|
/**
|
|
Calls wxView::Close and deletes each view. Deleting the final view will
|
|
implicitly
|
|
delete the document itself, because the wxView destructor calls RemoveView. This
|
|
in turns calls OnChangedViewList(), whose default implemention is to
|
|
save and delete the document if no views exist.
|
|
*/
|
|
virtual bool DeleteAllViews();
|
|
|
|
/**
|
|
Returns a pointer to the command processor associated with this document.
|
|
See wxCommandProcessor.
|
|
*/
|
|
wxCommandProcessor* GetCommandProcessor() const;
|
|
|
|
/**
|
|
Gets a pointer to the associated document manager.
|
|
*/
|
|
wxDocManager* GetDocumentManager() const;
|
|
|
|
/**
|
|
Gets the document type name for this document. See the comment for
|
|
documentTypeName().
|
|
*/
|
|
wxString GetDocumentName() const;
|
|
|
|
/**
|
|
Gets a pointer to the template that created the document.
|
|
*/
|
|
wxDocTemplate* GetDocumentTemplate() const;
|
|
|
|
/**
|
|
Intended to return a suitable window for using as a parent for document-related
|
|
dialog boxes. By default, uses the frame associated with the first view.
|
|
*/
|
|
wxWindow* GetDocumentWindow() const;
|
|
|
|
/**
|
|
Gets the filename associated with this document, or "" if none is
|
|
associated.
|
|
*/
|
|
wxString GetFilename() const;
|
|
|
|
/**
|
|
A convenience function to get the first view for a document, because
|
|
in many cases a document will only have a single view.
|
|
See also: GetViews()
|
|
*/
|
|
wxView* GetFirstView() const;
|
|
|
|
/**
|
|
Gets the title for this document. The document title is used for an associated
|
|
frame (if any), and is usually constructed by the framework from
|
|
the filename.
|
|
*/
|
|
wxString GetTitle() const;
|
|
|
|
/**
|
|
Return the document name suitable to be shown to the user. The default
|
|
implementation uses the document title, if any, of the name part of the
|
|
document filename if it was set or, otherwise, the string @b unnamed.
|
|
*/
|
|
virtual wxString GetUserReadableName() const;
|
|
|
|
/**
|
|
Returns the list whose elements are the views on the document.
|
|
See also: GetFirstView()
|
|
*/
|
|
wxList GetViews() const;
|
|
|
|
/**
|
|
Returns @true if the document has been modified since the last save, @false
|
|
otherwise.
|
|
You may need to override this if your document view maintains its own
|
|
record of being modified (for example if using wxTextWindow to view and edit
|
|
the document).
|
|
See also Modify().
|
|
*/
|
|
virtual bool IsModified() const;
|
|
|
|
//@{
|
|
/**
|
|
Override this function and call it from your own LoadObject before
|
|
streaming your own data. LoadObject is called by the framework
|
|
automatically when the document contents need to be loaded.
|
|
Note that only one of these forms exists, depending on how wxWidgets
|
|
was configured.
|
|
*/
|
|
virtual istream LoadObject(istream& stream);
|
|
virtual wxInputStream LoadObject(wxInputStream& stream);
|
|
//@}
|
|
|
|
/**
|
|
Call with @true to mark the document as modified since the last save, @false
|
|
otherwise.
|
|
You may need to override this if your document view maintains its own
|
|
record of being modified (for example if using wxTextWindow to view and edit
|
|
the document).
|
|
See also IsModified().
|
|
*/
|
|
virtual void Modify(bool modify);
|
|
|
|
/**
|
|
Called when a view is added to or deleted from this document. The default
|
|
implementation saves and deletes the document if no views exist (the last
|
|
one has just been removed).
|
|
*/
|
|
virtual void OnChangedViewList();
|
|
|
|
/**
|
|
The default implementation calls DeleteContents (an empty implementation)
|
|
sets the modified flag to @false. Override this to
|
|
supply additional behaviour when the document is closed with Close.
|
|
*/
|
|
virtual bool OnCloseDocument();
|
|
|
|
/**
|
|
Called just after the document object is created to give it a chance
|
|
to initialize itself. The default implementation uses the
|
|
template associated with the document to create an initial view.
|
|
If this function returns @false, the document is deleted.
|
|
*/
|
|
virtual bool OnCreate(const wxString& path, long flags);
|
|
|
|
/**
|
|
Override this function if you want a different (or no) command processor
|
|
to be created when the document is created. By default, it returns
|
|
an instance of wxCommandProcessor.
|
|
See wxCommandProcessor.
|
|
*/
|
|
virtual wxCommandProcessor* OnCreateCommandProcessor();
|
|
|
|
/**
|
|
The default implementation calls OnSaveModified and DeleteContents, makes a
|
|
default title for the
|
|
document, and notifies the views that the filename (in fact, the title) has
|
|
changed.
|
|
*/
|
|
virtual bool OnNewDocument();
|
|
|
|
/**
|
|
Constructs an input file stream for the given filename (which must not be
|
|
empty),
|
|
and calls LoadObject. If LoadObject returns @true, the document is set to
|
|
unmodified; otherwise, an error message box is displayed. The document's
|
|
views are notified that the filename has changed, to give windows an opportunity
|
|
to update their titles. All of the document's views are then updated.
|
|
*/
|
|
virtual bool OnOpenDocument(const wxString& filename);
|
|
|
|
/**
|
|
Constructs an output file stream for the given filename (which must not be
|
|
empty),
|
|
and calls SaveObject. If SaveObject returns @true, the document is set to
|
|
unmodified; otherwise, an error message box is displayed.
|
|
*/
|
|
virtual bool OnSaveDocument(const wxString& filename);
|
|
|
|
/**
|
|
If the document has been modified, prompts the user to ask if the changes should
|
|
be changed. If the user replies Yes, the Save function is called. If No, the
|
|
document is marked as unmodified and the function succeeds. If Cancel, the
|
|
function fails.
|
|
*/
|
|
virtual bool OnSaveModified();
|
|
|
|
/**
|
|
Removes the view from the document's list of views, and calls OnChangedViewList.
|
|
*/
|
|
virtual bool RemoveView(wxView* view);
|
|
|
|
/**
|
|
Saves the document by calling OnSaveDocument if there is an associated filename,
|
|
or SaveAs if there is no filename.
|
|
*/
|
|
virtual bool Save();
|
|
|
|
/**
|
|
Prompts the user for a file to save to, and then calls OnSaveDocument.
|
|
*/
|
|
virtual bool SaveAs();
|
|
|
|
//@{
|
|
/**
|
|
Override this function and call it from your own SaveObject before
|
|
streaming your own data. SaveObject is called by the framework
|
|
automatically when the document contents need to be saved.
|
|
Note that only one of these forms exists, depending on how wxWidgets
|
|
was configured.
|
|
*/
|
|
virtual ostream SaveObject(ostream& stream);
|
|
virtual wxOutputStream SaveObject(wxOutputStream& stream);
|
|
//@}
|
|
|
|
/**
|
|
Sets the command processor to be used for this document. The document will then
|
|
be responsible
|
|
for its deletion. Normally you should not call this; override
|
|
OnCreateCommandProcessor
|
|
instead.
|
|
See wxCommandProcessor.
|
|
*/
|
|
virtual void SetCommandProcessor(wxCommandProcessor* processor);
|
|
|
|
/**
|
|
Sets the document type name for this document. See the comment for
|
|
documentTypeName().
|
|
*/
|
|
void SetDocumentName(const wxString& name);
|
|
|
|
/**
|
|
Sets the pointer to the template that created the document. Should only be
|
|
called by the
|
|
framework.
|
|
*/
|
|
void SetDocumentTemplate(wxDocTemplate* templ);
|
|
|
|
/**
|
|
Sets the filename for this document. Usually called by the framework.
|
|
If @a notifyViews is @true, wxView::OnChangeFilename is called for all views.
|
|
*/
|
|
void SetFilename(const wxString& filename,
|
|
bool notifyViews = false);
|
|
|
|
/**
|
|
Sets the title for this document. The document title is used for an associated
|
|
frame (if any), and is usually constructed by the framework from
|
|
the filename.
|
|
*/
|
|
void SetTitle(const wxString& title);
|
|
|
|
/**
|
|
Updates all views. If @a sender is non-@NULL, does not update this view.
|
|
@a hint represents optional information to allow a view to optimize its update.
|
|
*/
|
|
void UpdateAllViews(wxView* sender = NULL, wxObject* hint = NULL);
|
|
|
|
protected:
|
|
/**
|
|
This method is called by OnSaveDocument() to really save the document
|
|
contents to the specified file.
|
|
|
|
Base class version creates a file-based stream and calls SaveObject().
|
|
Override this if you need to do something else or prefer not to use
|
|
SaveObject() at all.
|
|
*/
|
|
virtual bool DoSaveDocument(const wxString& file);
|
|
|
|
/**
|
|
This method is called by OnOpenDocument() to really load the document
|
|
contents from the specified file.
|
|
|
|
Base class version creates a file-based stream and calls LoadObject().
|
|
Override this if you need to do something else or prefer not to use
|
|
LoadObject() at all.
|
|
*/
|
|
virtual bool DoOpenDocument(const wxString& file);
|
|
|
|
|
|
/**
|
|
wxCommandProcessor* m_commandProcessor
|
|
A pointer to the command processor associated with this document.
|
|
*/
|
|
|
|
|
|
/**
|
|
wxString m_documentFile
|
|
Filename associated with this document ("" if none).
|
|
*/
|
|
|
|
|
|
/**
|
|
bool m_documentModified
|
|
@true if the document has been modified, @false otherwise.
|
|
*/
|
|
|
|
|
|
/**
|
|
wxDocTemplate * m_documentTemplate
|
|
A pointer to the template from which this document was created.
|
|
*/
|
|
|
|
|
|
/**
|
|
wxString m_documentTitle
|
|
Document title. The document title is used for an associated
|
|
frame (if any), and is usually constructed by the framework from
|
|
the filename.
|
|
*/
|
|
|
|
|
|
/**
|
|
wxString m_documentTypeName
|
|
The document type name given to the wxDocTemplate constructor, copied to this
|
|
variable when the document is created. If several document templates are
|
|
created that use the same document type, this variable is used in
|
|
wxDocManager::CreateView
|
|
to collate a list of alternative view types that can be used on this kind of
|
|
document. Do not change the value of this variable.
|
|
*/
|
|
|
|
|
|
/**
|
|
wxList m_documentViews
|
|
List of wxView instances associated with this document.
|
|
*/
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
@class wxFileHistory
|
|
@wxheader{docview.h}
|
|
|
|
The wxFileHistory encapsulates a user interface convenience, the
|
|
list of most recently visited files as shown on a menu (usually the File menu).
|
|
|
|
wxFileHistory can manage one or more file menus. More than one menu may be
|
|
required
|
|
in an MDI application, where the file history should appear on each MDI child
|
|
menu
|
|
as well as the MDI parent frame.
|
|
|
|
@library{wxcore}
|
|
@category{FIXME}
|
|
|
|
@see @ref overview_wxfilehistoryoverview "wxFileHistory overview", wxDocManager
|
|
*/
|
|
class wxFileHistory : public wxObject
|
|
{
|
|
public:
|
|
/**
|
|
Constructor. Pass the maximum number of files that should be stored and
|
|
displayed.
|
|
@a idBase defaults to wxID_FILE1 and represents the id given to the first
|
|
history menu item. Since menu items can't share the same ID you should change
|
|
idBase (To one of your own defined IDs) when using more than one wxFileHistory
|
|
in your application.
|
|
*/
|
|
wxFileHistory(size_t maxFiles = 9,
|
|
wxWindowID idBase = wxID_FILE1);
|
|
|
|
/**
|
|
Destructor.
|
|
*/
|
|
~wxFileHistory();
|
|
|
|
/**
|
|
Adds a file to the file history list, if the object has a pointer to an
|
|
appropriate file menu.
|
|
*/
|
|
void AddFileToHistory(const wxString& filename);
|
|
|
|
//@{
|
|
/**
|
|
Appends the files in the history list, to the given menu only.
|
|
*/
|
|
void AddFilesToMenu();
|
|
void AddFilesToMenu(wxMenu* menu);
|
|
//@}
|
|
|
|
/**
|
|
Returns the base identifier for the range used for appending items.
|
|
*/
|
|
wxWindowID GetBaseId() const;
|
|
|
|
/**
|
|
Returns the number of files currently stored in the file history.
|
|
*/
|
|
size_t GetCount() const;
|
|
|
|
/**
|
|
Returns the file at this index (zero-based).
|
|
*/
|
|
wxString GetHistoryFile(size_t index) const;
|
|
|
|
/**
|
|
Returns the maximum number of files that can be stored.
|
|
*/
|
|
int GetMaxFiles() const;
|
|
|
|
/**
|
|
Returns the list of menus that are managed by this file history object.
|
|
|
|
@see UseMenu()
|
|
*/
|
|
const wxList GetMenus() const;
|
|
|
|
/**
|
|
Loads the file history from the given config object. This function should be
|
|
called explicitly by the application.
|
|
|
|
@see wxConfig()
|
|
*/
|
|
void Load(wxConfigBase& config);
|
|
|
|
/**
|
|
Removes the specified file from the history.
|
|
*/
|
|
void RemoveFileFromHistory(size_t i);
|
|
|
|
/**
|
|
Removes this menu from the list of those managed by this object.
|
|
*/
|
|
void RemoveMenu(wxMenu* menu);
|
|
|
|
/**
|
|
Saves the file history into the given config object. This must be called
|
|
explicitly by the application.
|
|
|
|
@see wxConfig()
|
|
*/
|
|
void Save(wxConfigBase& config);
|
|
|
|
/**
|
|
Sets the base identifier for the range used for appending items.
|
|
*/
|
|
void SetBaseId(wxWindowID baseId);
|
|
|
|
/**
|
|
Adds this menu to the list of those menus that are managed by this file history
|
|
object.
|
|
Also see AddFilesToMenu() for
|
|
initializing the menu with filenames that are already in the history when this
|
|
function is called, as this is not done automatically.
|
|
*/
|
|
void UseMenu(wxMenu* menu);
|
|
|
|
/**
|
|
char** m_fileHistory
|
|
A character array of strings corresponding to the most recently opened
|
|
files.
|
|
*/
|
|
|
|
|
|
/**
|
|
size_t m_fileHistoryN
|
|
The number of files stored in the history array.
|
|
*/
|
|
|
|
|
|
/**
|
|
size_t m_fileMaxFiles
|
|
The maximum number of files to be stored and displayed on the menu.
|
|
*/
|
|
|
|
|
|
/**
|
|
wxMenu* m_fileMenu
|
|
The file menu used to display the file history list (if enabled).
|
|
*/
|
|
};
|
|
|
|
|
|
|
|
// ============================================================================
|
|
// Global functions/macros
|
|
// ============================================================================
|
|
|
|
/** @ingroup group_funcmacro_file */
|
|
//@{
|
|
|
|
/**
|
|
Copies the given file to @a stream. Useful when converting an old
|
|
application to use streams (within the document/view framework, for
|
|
example).
|
|
|
|
@header{wx/docview.h}
|
|
*/
|
|
bool wxTransferFileToStream(const wxString& filename,
|
|
ostream& stream);
|
|
|
|
/**
|
|
Copies the given stream to the file @a filename. Useful when converting an
|
|
old application to use streams (within the document/view framework, for
|
|
example).
|
|
|
|
@header{wx/docview.h}
|
|
*/
|
|
bool wxTransferStreamToFile(istream& stream,
|
|
const wxString& filename);
|
|
|
|
//@}
|
|
|