Editor - base class for top-level windows in an application
#include <Unidraw/editor.h>
An editor provides a complete user interface for editing a
component subject. It unites one or more viewers with commands and tools
that act upon the component and its subcomponents. Editor is an abstract
class derived from MonoScene; the Editor class adds the protocol for
associating tools, commands, and viewers with the component(s) they affect.
A programmer normally derives one or more application-specific editors from
the Editor base class and defines their appearance with a composition of
interactors. Each window of a Unidraw application is usually an instance of
an editor subclass designed for the editing domain, and it is these windows
that the user recognizes as the application program.
- virtual
~Editor()
- Editors should not be deleted explicitly if the Unidraw object is used to
open and close them. Moreover, Editor subclasses should not explicitly
delete the component they edit. The Unidraw object will delete the
editor's component after the editor is closed, provided no other editor
references the component (or its relatives) and the component is not known
to the catalog.
- virtual void
Open()
- virtual void
Close()
- Open informs the editor that it has just become visible and accessible to
the user, in case it needs to know, and Close signals the editor that it
is no longer needed and should perform any final housekeeping operations.
For example, the editor may display a copyright message when it is first
opened, or it make take the opportunity when closed to warn the user to
save a modified component. These operations simply notify the editor of a
condition and are not usually called by the application; instead, the
application makes editors appear and disappear with the Unidraw object,
which calls these operations as appropriate.
- virtual void
Handle(Event&)
- Editor redefines Handle to interpret key events as keyboard equivalents
via the HandleKey operation (described below). This is appropriate in the
common case where the interactor composition that defines the editor's
appearance does not interpret keyboard events.
- virtual void
Update()
- By default, the editor's Update operation calls Update on its
viewer(s).
- virtual void
SetComponent(Component*)
- virtual void
SetViewer(Viewer*, int = 0)
- virtual void
SetSelection(Selection*)
- virtual void
SetKeyMap(Viewer*, int = 0)
- virtual void
SetCurTool(Tool*)
- virtual
Component* GetComponent()
- virtual Viewer*
GetViewer(int = 0)
- virtual KeyMap*
GetKeyMap()
- virtual
Selection* GetSelection()
- virtual Tool*
GetCurTool()
- Assign and return various objects managed by the editor. These operations
are undefined by default.
The component is the object that the user edits through the
editor. The editor can have any number of viewers, identified serially.
An editor can maintain a key map for defining keyboard equivalents and a
selection object for keeping track of selected components (typically
subcomponents of the component being edited). The editor also has a
notion of the tool that is currently engaged, that is, the tool that
would be used if the user clicked in a viewer. The SetCurTool and
GetCurTool operations assign and return this tool, respectively.
- virtual
StateVar* GetState(const char*)
- The editor may maintain a string-to-state variable mapping to provide
external access to any state variables it defines. The GetState operation
returns a state variable given an identifying string. Defining such a
mapping lets components query the editor for state variables that may
affect them without extending the editor protocol, potentially allowing
interchange of components from different applications. This operation
returns nil by default.
- virtual void
InsertDialog(Interactor*)
- virtual void
RemoveDialog(Interactor*)
- Insert or remove an interactor that provides a modal interface, such as a
dialog box. By default, these operations insert the dialog into the world
as a transient window centered atop the editor's canvas. Subclasses can
redefine them to insert and remove an interactor (suitably embellished
with a border, drop shadow, etc.) as needed. Subclasses should not assume
that two InsertDialog operations will always be separated by a
RemoveDialog operation; that is, multiple dialogs might be visible at
once.
Catalog(3U), Command(3U), Component(3U), Interactor(3I),
KeyMap(3U), MonoScene(3I), Selection(3U), StateVar(3U), Tool(3U),
Unidraw(3U), Viewer(3U), Window(3I), World(3I)