| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: cmdproc.h
- // Purpose: interface of wxCommandProcessor and wxCommand
- // Author: wxWidgets team
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- /**
- @class wxCommand
- wxCommand is a base class for modelling an application command, which is an
- action usually performed by selecting a menu item, pressing a toolbar
- button or any other means provided by the application to change the data or
- view.
- @library{wxcore}
- @category{docview}
- @see @ref overview_docview_wxcommand
- */
- class wxCommand : public wxObject
- {
- public:
- /**
- Constructor. wxCommand is an abstract class, so you will need to derive
- a new class and call this constructor from your own constructor.
- @param canUndo
- Tells the command processor whether this command is undo-able. You
- can achieve the same functionality by overriding the CanUndo()
- member function (if for example the criteria for undoability is
- context-dependent).
- @param name
- Must be supplied for the command processor to display the command
- name in the application's edit menu.
- */
- wxCommand(bool canUndo = false, const wxString& name = wxEmptyString);
- /**
- Destructor.
- */
- virtual ~wxCommand();
- /**
- Returns @true if the command can be undone, @false otherwise.
- */
- virtual bool CanUndo() const;
- /**
- Override this member function to execute the appropriate action when
- called.
- @return @true to indicate that the action has taken place, @false
- otherwise. Returning @false will indicate to the command
- processor that the action is not undoable and should not be
- added to the command history.
- */
- virtual bool Do() = 0;
- /**
- Returns the command name.
- */
- virtual wxString GetName() const;
- /**
- Override this member function to un-execute a previous Do.
- How you implement this command is totally application dependent, but
- typical strategies include:
- - Perform an inverse operation on the last modified piece of data in
- the document. When redone, a copy of data stored in command is pasted
- back or some operation reapplied. This relies on the fact that you
- know the ordering of Undos; the user can never Undo at an arbitrary
- position in the command history.
- - Restore the entire document state (perhaps using document
- transacting). Potentially very inefficient, but possibly easier to
- code if the user interface and data are complex, and an "inverse
- execute" operation is hard to write. The docview sample uses the
- first method, to remove or restore segments in the drawing.
- @return @true to indicate that the action has taken place, @false
- otherwise. Returning @false will indicate to the command
- processor that the action is not redoable and no change should
- be made to the command history.
- */
- virtual bool Undo() = 0;
- };
- /**
- @class wxCommandProcessor
- wxCommandProcessor is a class that maintains a history of wxCommands, with
- undo/redo functionality built-in. Derive a new class from this if you want
- different behaviour.
- @library{wxcore}
- @category{docview}
- @see @ref overview_docview_wxcommandproc, wxCommand
- */
- class wxCommandProcessor : public wxObject
- {
- public:
- /**
- Constructor.
- @param maxCommands
- May be set to a positive integer to limit the number of commands
- stored to it, otherwise (and by default) the list of commands can
- grow arbitrarily.
- */
- wxCommandProcessor(int maxCommands = -1);
- /**
- Destructor.
- */
- virtual ~wxCommandProcessor();
- /**
- Returns @true if the currently-active command can be undone, @false
- otherwise.
- */
- virtual bool CanUndo() const;
- /**
- Returns @true if the currently-active command can be redone, @false
- otherwise.
- */
- virtual bool CanRedo() const;
- /**
- Deletes all commands in the list and sets the current command pointer
- to @NULL.
- */
- virtual void ClearCommands();
- /**
- Returns the list of commands.
- */
- wxList& GetCommands();
- /**
- Returns the current command.
- */
- wxCommand *GetCurrentCommand() const;
- /**
- Returns the edit menu associated with the command processor.
- */
- wxMenu* GetEditMenu() const;
- /**
- Returns the maximum number of commands that the command processor
- stores.
- */
- int GetMaxCommands() const;
- /**
- Returns the string that will be appended to the Redo menu item.
- */
- const wxString& GetRedoAccelerator() const;
- /**
- Returns the string that will be shown for the redo menu item.
- */
- wxString GetRedoMenuLabel() const;
- /**
- Returns the string that will be appended to the Undo menu item.
- */
- const wxString& GetUndoAccelerator() const;
- /**
- Returns the string that will be shown for the undo menu item.
- */
- wxString GetUndoMenuLabel() const;
- /**
- Initializes the command processor, setting the current command to the
- last in the list (if any), and updating the edit menu (if one has been
- specified).
- */
- virtual void Initialize();
- /**
- Returns a boolean value that indicates if changes have been made since
- the last save operation. This only works if MarkAsSaved() is called
- whenever the project is saved.
- */
- virtual bool IsDirty() const;
- /**
- You must call this method whenever the project is saved if you plan to
- use IsDirty().
- */
- void MarkAsSaved();
- /**
- Executes (redoes) the current command (the command that has just been
- undone if any).
- */
- virtual bool Redo();
- /**
- Tells the command processor to update the Undo and Redo items on this
- menu as appropriate. Set this to @NULL if the menu is about to be
- destroyed and command operations may still be performed, or the command
- processor may try to access an invalid pointer.
- */
- void SetEditMenu(wxMenu* menu);
- /**
- Sets the menu labels according to the currently set menu and the
- current command state.
- */
- virtual void SetMenuStrings();
- /**
- Sets the string that will be appended to the Redo menu item.
- */
- void SetRedoAccelerator(const wxString& accel);
- /**
- Sets the string that will be appended to the Undo menu item.
- */
- void SetUndoAccelerator(const wxString& accel);
- /**
- Submits a new command to the command processor.
- The command processor calls wxCommand::Do() to execute the command;
- if it succeeds, the command is stored in the history list, and the
- associated edit menu (if any) updated appropriately.
- If it fails, the command is deleted immediately. Once Submit() has been
- called, the passed command should not be deleted directly by the application.
- @param command
- The command to submit
- @param storeIt
- Indicates whether the successful command should be stored in the
- history list.
- */
- virtual bool Submit(wxCommand* command, bool storeIt = true);
- /**
- Just store the command without executing it. The command is stored in the
- history list, and the associated edit menu (if any) updated appropriately.
- */
- virtual void Store(wxCommand *command);
- /**
- Undoes the last command executed.
- */
- virtual bool Undo();
- };
|