| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- ///////////////////////////////////////////////////////////////////////////////
- // Name: wx/cmdproc.h
- // Purpose: undo/redo capable command processing framework
- // Author: Julian Smart (extracted from docview.h by VZ)
- // Modified by:
- // Created: 05.11.00
- // Copyright: (c) wxWidgets team
- // Licence: wxWindows licence
- ///////////////////////////////////////////////////////////////////////////////
- #ifndef _WX_CMDPROC_H_
- #define _WX_CMDPROC_H_
- #include "wx/defs.h"
- #include "wx/object.h"
- #include "wx/list.h"
- class WXDLLIMPEXP_FWD_CORE wxMenu;
- // ----------------------------------------------------------------------------
- // wxCommand: a single command capable of performing itself
- // ----------------------------------------------------------------------------
- class WXDLLIMPEXP_CORE wxCommand : public wxObject
- {
- public:
- wxCommand(bool canUndoIt = false, const wxString& name = wxEmptyString);
- virtual ~wxCommand(){}
- // Override this to perform a command
- virtual bool Do() = 0;
- // Override this to undo a command
- virtual bool Undo() = 0;
- virtual bool CanUndo() const { return m_canUndo; }
- virtual wxString GetName() const { return m_commandName; }
- protected:
- bool m_canUndo;
- wxString m_commandName;
- private:
- DECLARE_CLASS(wxCommand)
- };
- // ----------------------------------------------------------------------------
- // wxCommandProcessor: wxCommand manager
- // ----------------------------------------------------------------------------
- class WXDLLIMPEXP_CORE wxCommandProcessor : public wxObject
- {
- public:
- // if max number of commands is -1, it is unlimited
- wxCommandProcessor(int maxCommands = -1);
- virtual ~wxCommandProcessor();
- // Pass a command to the processor. The processor calls Do(); if
- // successful, is appended to the command history unless storeIt is false.
- virtual bool Submit(wxCommand *command, bool storeIt = true);
- // just store the command without executing it
- virtual void Store(wxCommand *command);
- virtual bool Undo();
- virtual bool Redo();
- virtual bool CanUndo() const;
- virtual bool CanRedo() const;
- // Initialises the current command and menu strings.
- virtual void Initialize();
- // Sets the Undo/Redo menu strings for the current menu.
- virtual void SetMenuStrings();
- // Gets the current Undo menu label.
- wxString GetUndoMenuLabel() const;
- // Gets the current Undo menu label.
- wxString GetRedoMenuLabel() const;
- #if wxUSE_MENUS
- // Call this to manage an edit menu.
- void SetEditMenu(wxMenu *menu) { m_commandEditMenu = menu; }
- wxMenu *GetEditMenu() const { return m_commandEditMenu; }
- #endif // wxUSE_MENUS
- // command list access
- wxList& GetCommands() { return m_commands; }
- const wxList& GetCommands() const { return m_commands; }
- wxCommand *GetCurrentCommand() const
- {
- return (wxCommand *)(m_currentCommand ? m_currentCommand->GetData() : NULL);
- }
- int GetMaxCommands() const { return m_maxNoCommands; }
- virtual void ClearCommands();
- // Has the current project been changed?
- virtual bool IsDirty() const;
- // Mark the current command as the one where the last save took place
- void MarkAsSaved()
- {
- m_lastSavedCommand = m_currentCommand;
- }
- // By default, the accelerators are "\tCtrl+Z" and "\tCtrl+Y"
- const wxString& GetUndoAccelerator() const { return m_undoAccelerator; }
- const wxString& GetRedoAccelerator() const { return m_redoAccelerator; }
- void SetUndoAccelerator(const wxString& accel) { m_undoAccelerator = accel; }
- void SetRedoAccelerator(const wxString& accel) { m_redoAccelerator = accel; }
- protected:
- // for further flexibility, command processor doesn't call wxCommand::Do()
- // and Undo() directly but uses these functions which can be overridden in
- // the derived class
- virtual bool DoCommand(wxCommand& cmd);
- virtual bool UndoCommand(wxCommand& cmd);
- int m_maxNoCommands;
- wxList m_commands;
- wxList::compatibility_iterator m_currentCommand,
- m_lastSavedCommand;
- #if wxUSE_MENUS
- wxMenu* m_commandEditMenu;
- #endif // wxUSE_MENUS
- wxString m_undoAccelerator;
- wxString m_redoAccelerator;
- private:
- DECLARE_DYNAMIC_CLASS(wxCommandProcessor)
- wxDECLARE_NO_COPY_CLASS(wxCommandProcessor);
- };
- #endif // _WX_CMDPROC_H_
|