2001-06-26 16:59:19 -04:00
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
// 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
|
|
|
|
// RCS-ID: $Id$
|
2004-05-23 10:56:36 -04:00
|
|
|
// Copyright: (c) wxWidgets team
|
2004-05-23 16:53:33 -04:00
|
|
|
// Licence: wxWindows licence
|
2001-06-26 16:59:19 -04:00
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
#ifndef _WX_CMDPROC_H_
|
|
|
|
#define _WX_CMDPROC_H_
|
|
|
|
|
2003-08-09 08:38:21 -04:00
|
|
|
#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
|
2001-06-26 16:59:19 -04:00
|
|
|
#pragma interface "cmdproc.h"
|
|
|
|
#endif
|
|
|
|
|
2003-07-18 15:47:19 -04:00
|
|
|
#include "wx/defs.h"
|
2001-06-26 16:59:19 -04:00
|
|
|
#include "wx/object.h"
|
|
|
|
#include "wx/list.h"
|
|
|
|
|
2003-02-25 07:43:06 -05:00
|
|
|
class WXDLLEXPORT wxMenu;
|
|
|
|
|
2001-06-26 16:59:19 -04:00
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// wxCommand: a single command capable of performing itself
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
class WXDLLEXPORT wxCommand : public wxObject
|
|
|
|
{
|
|
|
|
public:
|
2004-09-10 08:56:07 -04:00
|
|
|
wxCommand(bool canUndoIt = false, const wxString& name = wxEmptyString);
|
2004-10-12 16:48:22 -04:00
|
|
|
~wxCommand(){}
|
2001-06-26 16:59:19 -04:00
|
|
|
|
|
|
|
// 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 WXDLLEXPORT 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
|
2004-09-10 08:56:07 -04:00
|
|
|
// successful, is appended to the command history unless storeIt is false.
|
|
|
|
virtual bool Submit(wxCommand *command, bool storeIt = true);
|
2001-06-26 16:59:19 -04:00
|
|
|
|
|
|
|
// 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;
|
|
|
|
|
2002-12-20 05:15:06 -05:00
|
|
|
// Initialises the current command and menu strings.
|
2001-06-26 16:59:19 -04:00
|
|
|
virtual void Initialize();
|
2002-12-20 05:15:06 -05:00
|
|
|
|
|
|
|
// Sets the Undo/Redo menu strings for the current menu.
|
2001-06-26 16:59:19 -04:00
|
|
|
virtual void SetMenuStrings();
|
|
|
|
|
2002-12-20 05:15:06 -05:00
|
|
|
// Gets the current Undo menu label.
|
|
|
|
wxString GetUndoMenuLabel() const;
|
|
|
|
|
|
|
|
// Gets the current Undo menu label.
|
|
|
|
wxString GetRedoMenuLabel() const;
|
|
|
|
|
2001-06-26 16:59:19 -04:00
|
|
|
#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() const { return (wxList&) m_commands; }
|
|
|
|
wxCommand *GetCurrentCommand() const
|
|
|
|
{
|
2003-01-13 00:17:41 -05:00
|
|
|
return (wxCommand *)(m_currentCommand ? m_currentCommand->GetData() : NULL);
|
2001-06-26 16:59:19 -04:00
|
|
|
}
|
|
|
|
int GetMaxCommands() const { return m_maxNoCommands; }
|
|
|
|
virtual void ClearCommands();
|
|
|
|
|
2002-04-11 12:50:55 -04:00
|
|
|
// 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; }
|
|
|
|
|
2001-06-26 16:59:19 -04:00
|
|
|
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;
|
2003-07-10 15:55:12 -04:00
|
|
|
wxList::compatibility_iterator m_currentCommand;
|
2001-06-26 16:59:19 -04:00
|
|
|
|
|
|
|
#if wxUSE_MENUS
|
|
|
|
wxMenu* m_commandEditMenu;
|
|
|
|
#endif // wxUSE_MENUS
|
|
|
|
|
2002-04-11 12:50:55 -04:00
|
|
|
wxString m_undoAccelerator;
|
|
|
|
wxString m_redoAccelerator;
|
|
|
|
|
2001-06-26 16:59:19 -04:00
|
|
|
private:
|
|
|
|
DECLARE_DYNAMIC_CLASS(wxCommandProcessor)
|
2003-01-02 18:38:11 -05:00
|
|
|
DECLARE_NO_COPY_CLASS(wxCommandProcessor)
|
2001-06-26 16:59:19 -04:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif // _WX_CMDPROC_H_
|