///////////////////////////////////////////////////////////////////////////// // 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); //@}