class fwt::Command
sys::Obj fwt::Command
@Js
Command packages up the diplay name, icon, execution, and undo support for a user command. You can create a command two ways:
If the command supports undo, then you must create a a subclass and override undo
.
Commands are often used to centralize control of multiple widgets. For example if a Command is associated with both a menu item and a toolbar button, then disabling the command will disable both the menu item and toolbar button.
See pod doc for details.
- accelerator
-
Key? accelerator
Accelerator of the command or null.
- enabled
-
Bool enabled := true
The enable state of the command automatically controls the enabled state of all the registered widgets.
- icon
-
Image? icon
Icon of the command or null. Typically a 16x16.
- invoke
-
Invoke the command. If the user event is known then is passed, otherwise it might be null.
- invoked
-
protected virtual Void invoked(Event? event)
Subclass hook to handle invoke event.
- make
-
new make(Str name := "", Image? icon := null, |Event|? onInvoke := null)
Construct a command with the specified onInvoke function. If onInvoke is not specified, then the
invoke
method must be overridden to execute the command. - makeLocale
-
new makeLocale(Pod pod, Str keyBase, |Event|? onInvoke := null)
Construct a localized command using the specified pod name and keyBase. The command is initialized from the following
localized
properties:- "{keyBase}.name.{plat}": text string for the command
- "{keyBase}.icon.{plat}": uri for the icon image
- "{keyBase}.accelerator.{plat}": string representation of Key
The
{plat}
string comes fromDesktop.platform
. If the paltform specific key is not found, then we attempt to fallback to a generic key. For example:back.name=Back back.accelerator=Alt+Left back.accelerator.mac=Command+[
On all platforms the command name would be "Back". On Macs the accelerator would be
Command+[
, and all others it would beAlt+Left
. If running on a Mac and an explicit ".mac" property was not specified, then we automatically swizzle Ctrl to Command. - mode
-
CommandMode mode := CommandMode.push
The command mode determines who associated widgets are visualized. The CommandMode maps to the
ButtonMode
andMenuItemMode
. The default ispush
. - name
-
Str name
Name of the command.
- onInvoke
-
EventListeners onInvoke()
The function to invoke when the command is executed. If empty, then
invoke
must be overridden. - onInvokeErr
-
protected virtual Void onInvokeErr(Event? event, Err err)
Subclass hook to handle when an exception is raised by invoke. Default implementation raises an error dialog.
- redo
-
virtual Void redo()
This method is invoked when the command invoked as a redo. It is not called on the first invocation. Default calls
invoke
with a null event. - register
-
Register a widget with this command. This is done automatically by the widget. You only need to call this method if you are developing a custom widget.
- selected
-
Bool selected := false
If this command is using toggle mode, then set the selected state and update all the registered widgets.
- toStr
-
virtual override Str toStr()
Return name.
- undo
-
virtual Void undo()
This method is invoked to undo the command. This method is only used if
undoable
returns true. - undoable
-
virtual Bool undoable()
Return if the command can be undone. Default implementation returns true if the
undo
method has been overridden. - unregister
-
Unregister a widget with this command. This is done automatically by the widget. You only need to call this method if you are developing a custom widget.
- widgets
-
Widget[] widgets()
Get the associated widgets with this command. Widgets are automatically associated with their command field is set.
- window
-
Window? window()
Get the window associated with this command. If this command is being used as the action of a dialog, then return the dialog. Otherwise try to map to a window via one of the widgets bound to this command. Return null if no associated window can be found.