Mercurial > projects > dynamin
diff dynamin/gui/action.d @ 0:aa4efef0f0b1
Initial commit of code.
author | Jordan Miner <jminer7@gmail.com> |
---|---|
date | Mon, 15 Jun 2009 22:10:48 -0500 |
parents | |
children | 73060bc3f004 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dynamin/gui/action.d Mon Jun 15 22:10:48 2009 -0500 @@ -0,0 +1,97 @@ +// Written in the D programming language +// www.digitalmars.com/d/ + +/* + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is the Dynamin library. + * + * The Initial Developer of the Original Code is Jordan Miner. + * Portions created by the Initial Developer are Copyright (C) 2008 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Jordan Miner <jminer7@gmail.com> + * + */ + +module dynamin.gui.action; + +import dynamin.all_core; +import dynamin.all_gui; +import tango.util.collection.HashMap; + +/** + * TODO: change to struct with D 2.0 and use ref return on ActionMap.addAction + * might not be possible...probably have to keep class + */ +class Action { + /// The non-visible name of the action + string name; // no setter for this ...set with constructor + /// The text displayed on the menu item, tool bar button, etc. + string text; + /// + string shortcut; // TODO: how to store string and key/modifiers? + /** + * The icon displayed on the menu item, tool bar button, etc. + * Icons for disabled and hot controls are created automatically + * using the current theme. + */ + string icon; // TODO: allow setting hot and disabled icons to override + /// + void delegate() invoke; + /** + * If toggle is true, then this action can be selected and deselected. + */ + bool toggle = false; + /** + * Has no effect unless toggle is set to true. + * If the group is the default, the action can be selected/deselected + * regardless of other actions. If the group is set to another value, then + * selecting this action will deselect other actions with the same group. + */ + // TODO: the deselecting of other actions w/same group should look through + // the ActionMap...will need ref + int group = -1; // TODO: a string is a lot easier to avoid conflicts + /// + bool selected = false; + /// + bool enabled; + // TODO: need to make getters and setters...have to fire event when changed +} + +/** + * Example: + * ----- + * with(actionMap.addAction("data-viewer")) { + * text = "Data Viewer"; + * shortcut = "Ctrl+D"; + * icon = "data-viewer.png"; + * toggle = true; + * group = 2; + * invoke = { + * new DataViewerDialog().show(); + * }; + * } + * ----- + */ +class ActionMap : HashMap!(string, Action) { + Action addAction(string name) { + assert(!name.contains(' '), "action name cannot contain space"); + Action a = new Action(name); + add(name, a); + } +} + +unittest { + // +} +