Mercurial > projects > mde
annotate mde/gui/gui.d @ 29:f985c28c0ec9
A new GUI widget plus changes to the init system.
GUI: Implemented a GridWidget to layout several sub-widgets.
Improved log messages about init functions.
Moved all dynamic-library loading into a separate init stage.
committer: Diggory Hardy <diggory.hardy@gmail.com>
author | Diggory Hardy <diggory.hardy@gmail.com> |
---|---|
date | Sat, 12 Apr 2008 14:10:13 +0100 |
parents | b5fadd8d930b |
children | 467c74d4804d |
rev | line source |
---|---|
27
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
1 /* LICENSE BLOCK |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
2 Part of mde: a Modular D game-oriented Engine |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
3 Copyright © 2007-2008 Diggory Hardy |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
4 |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
5 This program is free software: you can redistribute it and/or modify it under the terms |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
6 of the GNU General Public License as published by the Free Software Foundation, either |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
7 version 2 of the License, or (at your option) any later version. |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
8 |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
9 This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
10 without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
11 See the GNU General Public License for more details. |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
12 |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
13 You should have received a copy of the GNU General Public License |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
14 along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
15 |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
16 /// Base GUI module. |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
17 module mde.gui.gui; |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
18 |
28
b5fadd8d930b
Small addition to GUI, paths work-around for Windows.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
27
diff
changeset
|
19 import mde.gui.IWindow; |
27
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
20 import mde.gui.Widget; |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
21 import mde.gui.exception; |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
22 |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
23 import mt = mde.mergetag.DataSet; |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
24 import mt = mde.mergetag.exception; |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
25 import mde.mergetag.Reader; |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
26 |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
27 import mde.resource.paths; |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
28 import mde.scheduler.InitFunctions; |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
29 |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
30 import tango.scrapple.text.convert.parseTo : parseTo; |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
31 import tango.scrapple.text.convert.parseFrom : parseFrom; |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
32 |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
33 private Logger logger; |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
34 static this () { |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
35 logger = Log.getLogger ("mde.gui.gui"); |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
36 |
29
f985c28c0ec9
A new GUI widget plus changes to the init system.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
28
diff
changeset
|
37 init.addFunc (&GUI.load, "GUI.load"); |
27
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
38 } |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
39 |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
40 struct GUI { |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
41 static: |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
42 private const fileName = "gui"; |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
43 void load() { |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
44 if (!confDir.exists (fileName)) { |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
45 logger.error ("Unable to load GUI: no config file!"); |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
46 return; // not a fatal error (so long as the game can run without a GUI!) |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
47 } |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
48 |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
49 IReader reader; |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
50 try { |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
51 reader = confDir.makeMTReader (fileName, PRIORITY.HIGH_ONLY); |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
52 reader.dataSecCreator = delegate mt.IDataSection(mt.ID) { |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
53 return new Window; |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
54 }; |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
55 reader.read; |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
56 } catch (mt.MTException e) { |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
57 logger.error ("Loading GUI aborted:"); |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
58 logger.error (e.msg); |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
59 |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
60 return; |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
61 } |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
62 |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
63 // get list |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
64 windows.length = reader.dataset.sec.length; // pre-allocate |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
65 windows.length = 0; |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
66 foreach (sec; reader.dataset.sec) { |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
67 Window w = cast(Window) sec; |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
68 if (w !is null) { // extra safety |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
69 windows ~= w; |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
70 try { |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
71 w.finalise(); |
28
b5fadd8d930b
Small addition to GUI, paths work-around for Windows.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
27
diff
changeset
|
72 |
b5fadd8d930b
Small addition to GUI, paths work-around for Windows.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
27
diff
changeset
|
73 gl.addDrawCallback (&w.draw); |
27
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
74 } catch (WindowLoadException e) { |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
75 logger.error ("Window failed to load: " ~ e.msg); |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
76 } |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
77 } |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
78 } |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
79 } |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
80 |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
81 private: |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
82 Window[] windows; |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
83 } |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
84 |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
85 package: // Nothing else here is for external use. |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
86 |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
87 /** GUI Window class |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
88 * |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
89 * A window class instance does two things: (1) specify a region of the screen upon which the window |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
90 * and its associated widgets are drawn, and (2) load, save, and generally manage all its widgets. |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
91 * |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
92 * Let the window load a table of widget data, of type int[][widgetID]. Each widget will, when |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
93 * created, be given its int[] of data, which this() must confirm is valid (or throw). |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
94 */ |
28
b5fadd8d930b
Small addition to GUI, paths work-around for Windows.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
27
diff
changeset
|
95 class Window : mt.IDataSection, IWindow |
27
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
96 { |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
97 alias int widgetID; // Widget ID type. Each ID is unique under this window. Type is int since this is the widget data type. |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
98 private int[][widgetID] widgetData; // Data for all widgets under this window. |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
99 private Widget[widgetID] widgets; // List of all widgets under this window (created on demand). |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
100 |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
101 Widget widget; // The primary widget in this window. |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
102 int x,y; // Window position |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
103 int w,h; // Window size (calculated from Widgets) |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
104 |
28
b5fadd8d930b
Small addition to GUI, paths work-around for Windows.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
27
diff
changeset
|
105 const BORDER_WIDTH = 8; // Temporary way to handle window decorations |
27
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
106 |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
107 |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
108 // Call after loading is finished to setup the window and confirm that it's valid. |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
109 void finalise () { |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
110 // Create the widget, throwing on error: |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
111 widget = getWidget (0); // primary widget always has ID 0. |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
112 widget.getSize (w,h); // Find the initial size |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
113 w += BORDER_WIDTH * 2; // Adjust for border |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
114 h += BORDER_WIDTH * 2; |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
115 } |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
116 |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
117 Widget getWidget (widgetID i) { |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
118 // See if it's already been created: |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
119 Widget* p = i in widgets; |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
120 if (p !is null) return *p; // yes |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
121 else { // no |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
122 int[]* d = i in widgetData; |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
123 if (d is null) throw new WindowLoadException ("Widget not found"); |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
124 |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
125 // Throws WidgetDataException (a WindowLoadException) if bad data: |
28
b5fadd8d930b
Small addition to GUI, paths work-around for Windows.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
27
diff
changeset
|
126 Widget w = createWidget (this, *d); |
27
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
127 widgets[i] = w; |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
128 return w; |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
129 } |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
130 } |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
131 |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
132 void draw () { |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
133 //BEGIN Window border/back |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
134 gl.setColor (0.0f, 0.0f, 0.5f); |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
135 gl.drawBox (x,x+w, y,y+h); |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
136 //END Window border/back |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
137 |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
138 // Tell the widget to draw itself: |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
139 widget.draw(x + BORDER_WIDTH, y + BORDER_WIDTH); |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
140 } |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
141 |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
142 //BEGIN Mergetag code |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
143 void addTag (char[] tp, mt.ID id, char[] dt) { |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
144 if (tp == "int[][int]") { |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
145 if (id == "widgetData") { |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
146 widgetData = cast(int[][widgetID]) parseTo!(int[][int]) (dt); |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
147 } |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
148 } else if (tp == "int") { |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
149 if (id == "x") { |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
150 x = parseTo!(int) (dt); |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
151 } else if (id == "y") { |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
152 y = parseTo!(int) (dt); |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
153 } |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
154 } |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
155 } |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
156 void writeAll (ItemDelg dlg) { |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
157 } |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
158 //END Mergetag code |
0aa621b3e070
Some GUI work, plus a small fix in the paths module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
159 } |