Mercurial > projects > mde
view mde/gui/widget/createWidget.d @ 34:6b4116e6355c
Work on the Gui: some of the framework for drag & drop. Also made Window an IWidget.
Implemented getWidget(x,y) to find the widget under this location for IWidgets (but not Gui).
Made Window an IWidget and made it work a little more similarly to widgets.
Implemented callbacks on the Gui for mouse events (enabling drag & drop, etc.).
committer: Diggory Hardy <diggory.hardy@gmail.com>
author | Diggory Hardy <diggory.hardy@gmail.com> |
---|---|
date | Fri, 02 May 2008 16:03:52 +0100 |
parents | 316b0230a849 |
children | 052df9b2fe07 |
line wrap: on
line source
/* LICENSE BLOCK Part of mde: a Modular D game-oriented Engine Copyright © 2007-2008 Diggory Hardy This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ /// GUI Widget module. module mde.gui.widget.createWidget; // Widgets to create: import mde.gui.widget.layout; import mde.gui.widget.Widget; import mde.gui.exception : WidgetDataException; //BEGIN createWidget /// Widget types. Start high so they can be reordered easily later. enum WIDGET_TYPE : int { BOX = 1001, GRID, BUTTON } /** Create a widget of type data[0] (see enum WIDGET_TYPES) for _window window, with initialisation * data [1..$]. */ IWidget createWidget (IWindow window, IWidget parent, int[] data) in { assert (window !is null, "createWidget: window is null"); assert (parent !is null, "createWidget: parent is null"); } body { if (data.length < 1) throw new WidgetDataException ("No widget data"); int type = data[0]; // type is first element of data data = data[1..$]; // the rest is passed to the Widget if (type == WIDGET_TYPE.BOX) return new BoxWidget (window, parent, data); else if (type == WIDGET_TYPE.GRID) return new GridWidget (window, parent, data); else if (type == WIDGET_TYPE.BUTTON) return new ButtonWidget (window, parent, data); else throw new WidgetDataException ("Bad widget type"); } //END createWidget