UNPKG

@qooxdoo/framework

Version:

The JS Framework for Coders

213 lines (171 loc) 5 kB
/* ************************************************************************ qooxdoo - the new era of web development http://qooxdoo.org Copyright: 2004-2014 1&1 Internet AG, Germany, http://www.1und1.de License: MIT: https://opensource.org/licenses/MIT See the LICENSE file in the project's top-level directory for details. Authors: * Martin Wittemann (martinwittemann) * Mustafa Sak (msak) ************************************************************************ */ /** * Commands can be used to globally define keyboard shortcuts. They could * also be used to assign an execution of a command sequence to multiple * widgets. It is possible to use the same Command in a MenuButton and * ToolBarButton for example. * * NOTE: Instances of this class must be disposed of after use * */ qx.Class.define("qx.ui.command.Command", { extend : qx.core.Object, /** * @param shortcut {String} Shortcuts can be composed of optional modifier * keys Control, Alt, Shift, Meta and a non modifier key. * If no non modifier key is specified, the second parameter is evaluated. * The key must be separated by a <code>+</code> or <code>-</code> character. * Examples: Alt+F1, Control+C, Control+Alt+Delete */ construct : function(shortcut) { this.base(arguments); this._shortcut = new qx.bom.Shortcut(shortcut); this._shortcut.addListener("execute", this.execute, this); if (shortcut !== undefined) { this.setShortcut(shortcut); } }, events : { /** * Fired when the command is executed. Sets the "data" property of the * event to the object that issued the command. */ "execute" : "qx.event.type.Data" }, properties : { /** Whether the command should be activated. If 'false' execute event * wouldn't fire. This property will be used by command groups when * activating/deactivating all commands of the group.*/ active : { init : true, check : "Boolean", event : "changeActive", apply : "_applyActive" }, /** Whether the command should be respected/enabled. If 'false' execute event * wouldn't fire. If value of property {@link qx.ui.command.Command#active} * is 'false', enabled value can be set but has no effect until * {@link qx.ui.command.Command#active} will be set to 'true'.*/ enabled : { init : true, check : "Boolean", event : "changeEnabled", apply : "_applyEnabled" }, /** The command shortcut as a string */ shortcut : { check : "String", apply : "_applyShortcut", nullable : true }, /** The label, which will be set in all connected widgets (if available) */ label : { check : "String", nullable : true, event : "changeLabel" }, /** The icon, which will be set in all connected widgets (if available) */ icon : { check : "String", nullable : true, event : "changeIcon" }, /** * The tooltip text, which will be set in all connected * widgets (if available) */ toolTipText : { check : "String", nullable : true, event : "changeToolTipText" }, /** The value of the connected widgets */ value : { nullable : true, event : "changeValue" }, /** The menu, which will be set in all connected widgets (if available) */ menu : { check : "qx.ui.menu.Menu", nullable : true, event : "changeMenu" } }, members : { _shortcut : null, // property apply _applyActive : function(value) { if (value === false) { this._shortcut.setEnabled(false); } else { // synchronize value with current "enabled" value of this command this._shortcut.setEnabled(this.getEnabled()); } }, // property apply _applyEnabled : function(value) { if (this.getActive()) { this._shortcut.setEnabled(value); } }, // property apply _applyShortcut : function(value) { this._shortcut.setShortcut(value); }, /** * Fire the "execute" event on this command. If property * <code>active</code> and <code>enabled</code> set to * <code>true</code>. * @param target {Object?} Object which issued the execute event */ execute : function(target) { if (this.getActive() && this.getEnabled()) { this.fireDataEvent("execute", target); } }, /** * Returns the used shortcut as string using the currently selected locale. * * @return {String} shortcut */ toString : function() { if (this._shortcut) { return this._shortcut.toString(); } return this.base(arguments); } }, destruct : function() { this._shortcut.removeListener("execute", this.execute, this); this._disposeObjects("_shortcut"); } });