]>
git.saurik.com Git - wxWidgets.git/blob - interface/wx/cmdproc.h
1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: interface of wxCommandProcessor and wxCommand
4 // Author: wxWidgets team
5 // Licence: wxWindows licence
6 /////////////////////////////////////////////////////////////////////////////
11 wxCommand is a base class for modelling an application command, which is an
12 action usually performed by selecting a menu item, pressing a toolbar
13 button or any other means provided by the application to change the data or
19 @see @ref overview_docview_wxcommand
21 class wxCommand
: public wxObject
25 Constructor. wxCommand is an abstract class, so you will need to derive
26 a new class and call this constructor from your own constructor.
29 Tells the command processor whether this command is undo-able. You
30 can achieve the same functionality by overriding the CanUndo()
31 member function (if for example the criteria for undoability is
34 Must be supplied for the command processor to display the command
35 name in the application's edit menu.
37 wxCommand(bool canUndo
= false, const wxString
& name
= wxEmptyString
);
45 Returns @true if the command can be undone, @false otherwise.
47 virtual bool CanUndo() const;
50 Override this member function to execute the appropriate action when
53 @return @true to indicate that the action has taken place, @false
54 otherwise. Returning @false will indicate to the command
55 processor that the action is not undoable and should not be
56 added to the command history.
58 virtual bool Do() = 0;
61 Returns the command name.
63 virtual wxString
GetName() const;
66 Override this member function to un-execute a previous Do.
68 How you implement this command is totally application dependent, but
69 typical strategies include:
71 - Perform an inverse operation on the last modified piece of data in
72 the document. When redone, a copy of data stored in command is pasted
73 back or some operation reapplied. This relies on the fact that you
74 know the ordering of Undos; the user can never Undo at an arbitrary
75 position in the command history.
76 - Restore the entire document state (perhaps using document
77 transacting). Potentially very inefficient, but possibly easier to
78 code if the user interface and data are complex, and an "inverse
79 execute" operation is hard to write. The docview sample uses the
80 first method, to remove or restore segments in the drawing.
82 @return @true to indicate that the action has taken place, @false
83 otherwise. Returning @false will indicate to the command
84 processor that the action is not redoable and no change should
85 be made to the command history.
87 virtual bool Undo() = 0;
93 @class wxCommandProcessor
95 wxCommandProcessor is a class that maintains a history of wxCommands, with
96 undo/redo functionality built-in. Derive a new class from this if you want
102 @see @ref overview_docview_wxcommandproc, wxCommand
104 class wxCommandProcessor
: public wxObject
111 May be set to a positive integer to limit the number of commands
112 stored to it, otherwise (and by default) the list of commands can
115 wxCommandProcessor(int maxCommands
= -1);
120 virtual ~wxCommandProcessor();
123 Returns @true if the currently-active command can be undone, @false
126 virtual bool CanUndo() const;
129 Returns @true if the currently-active command can be redone, @false
132 virtual bool CanRedo() const;
135 Deletes all commands in the list and sets the current command pointer
138 virtual void ClearCommands();
141 Returns the list of commands.
143 wxList
& GetCommands();
146 Returns the current command.
148 wxCommand
*GetCurrentCommand() const;
151 Returns the edit menu associated with the command processor.
153 wxMenu
* GetEditMenu() const;
156 Returns the maximum number of commands that the command processor
159 int GetMaxCommands() const;
162 Returns the string that will be appended to the Redo menu item.
164 const wxString
& GetRedoAccelerator() const;
167 Returns the string that will be shown for the redo menu item.
169 wxString
GetRedoMenuLabel() const;
172 Returns the string that will be appended to the Undo menu item.
174 const wxString
& GetUndoAccelerator() const;
177 Returns the string that will be shown for the undo menu item.
179 wxString
GetUndoMenuLabel() const;
182 Initializes the command processor, setting the current command to the
183 last in the list (if any), and updating the edit menu (if one has been
186 virtual void Initialize();
189 Returns a boolean value that indicates if changes have been made since
190 the last save operation. This only works if MarkAsSaved() is called
191 whenever the project is saved.
193 virtual bool IsDirty() const;
196 You must call this method whenever the project is saved if you plan to
202 Executes (redoes) the current command (the command that has just been
208 Tells the command processor to update the Undo and Redo items on this
209 menu as appropriate. Set this to @NULL if the menu is about to be
210 destroyed and command operations may still be performed, or the command
211 processor may try to access an invalid pointer.
213 void SetEditMenu(wxMenu
* menu
);
216 Sets the menu labels according to the currently set menu and the
217 current command state.
219 virtual void SetMenuStrings();
222 Sets the string that will be appended to the Redo menu item.
224 void SetRedoAccelerator(const wxString
& accel
);
227 Sets the string that will be appended to the Undo menu item.
229 void SetUndoAccelerator(const wxString
& accel
);
232 Submits a new command to the command processor.
234 The command processor calls wxCommand::Do() to execute the command;
235 if it succeeds, the command is stored in the history list, and the
236 associated edit menu (if any) updated appropriately.
237 If it fails, the command is deleted immediately. Once Submit() has been
238 called, the passed command should not be deleted directly by the application.
241 The command to submit
243 Indicates whether the successful command should be stored in the
246 virtual bool Submit(wxCommand
* command
, bool storeIt
= true);
249 Just store the command without executing it. The command is stored in the
250 history list, and the associated edit menu (if any) updated appropriately.
252 virtual void Store(wxCommand
*command
);
255 Undoes the last command executed.