Mercurial > projects > mde
annotate mde/gui/widget/ParentContent.d @ 144:66c58e5b0062
Added a BoolContent-based collapsible widget.
author | Diggory Hardy <diggory.hardy@gmail.com> |
---|---|
date | Tue, 10 Feb 2009 12:57:09 +0000 |
parents | 2ac3e0012788 |
children | 783969f4665c |
rev | line source |
---|---|
108
c9fc2d303178
Added capability for border-less pop-up widgets. Simple pop-up menu.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
1 /* LICENSE BLOCK |
c9fc2d303178
Added capability for border-less pop-up widgets. Simple pop-up menu.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
2 Part of mde: a Modular D game-oriented Engine |
c9fc2d303178
Added capability for border-less pop-up widgets. Simple pop-up menu.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
3 Copyright © 2007-2008 Diggory Hardy |
c9fc2d303178
Added capability for border-less pop-up widgets. Simple pop-up menu.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
4 |
c9fc2d303178
Added capability for border-less pop-up widgets. Simple pop-up menu.
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 |
c9fc2d303178
Added capability for border-less pop-up widgets. Simple pop-up menu.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
6 of the GNU General Public License as published by the Free Software Foundation, either |
c9fc2d303178
Added capability for border-less pop-up widgets. Simple pop-up menu.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
7 version 2 of the License, or (at your option) any later version. |
c9fc2d303178
Added capability for border-less pop-up widgets. Simple pop-up menu.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
8 |
c9fc2d303178
Added capability for border-less pop-up widgets. Simple pop-up menu.
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; |
c9fc2d303178
Added capability for border-less pop-up widgets. Simple pop-up menu.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
10 without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
c9fc2d303178
Added capability for border-less pop-up widgets. Simple pop-up menu.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
11 See the GNU General Public License for more details. |
c9fc2d303178
Added capability for border-less pop-up widgets. Simple pop-up menu.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
12 |
c9fc2d303178
Added capability for border-less pop-up widgets. Simple pop-up menu.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
13 You should have received a copy of the GNU General Public License |
c9fc2d303178
Added capability for border-less pop-up widgets. Simple pop-up menu.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
14 along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
c9fc2d303178
Added capability for border-less pop-up widgets. Simple pop-up menu.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
15 |
131
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
121
diff
changeset
|
16 /****************************************************************************** |
143
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
17 * A pop-up widget and a switch (tab) widget (both parent widgets using |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
18 * content). |
131
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
121
diff
changeset
|
19 *****************************************************************************/ |
143
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
20 module mde.gui.widget.ParentContent; |
108
c9fc2d303178
Added capability for border-less pop-up widgets. Simple pop-up menu.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
21 |
131
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
121
diff
changeset
|
22 import mde.gui.widget.AParentWidget; |
138
3468e9bfded1
Popup widgets: are simpler to use and can show content fields like DisplayContentWidget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
137
diff
changeset
|
23 import mde.gui.widget.layout; |
143
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
24 import mde.content.AStringContent; |
113
9824bee909fd
Popup menu; works for simple menus except that clicking an item doesn't close it.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
112
diff
changeset
|
25 import mde.gui.exception; |
108
c9fc2d303178
Added capability for border-less pop-up widgets. Simple pop-up menu.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
26 |
113
9824bee909fd
Popup menu; works for simple menus except that clicking an item doesn't close it.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
112
diff
changeset
|
27 debug { |
9824bee909fd
Popup menu; works for simple menus except that clicking an item doesn't close it.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
112
diff
changeset
|
28 import tango.util.log.Log : Log, Logger; |
9824bee909fd
Popup menu; works for simple menus except that clicking an item doesn't close it.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
112
diff
changeset
|
29 private Logger logger; |
9824bee909fd
Popup menu; works for simple menus except that clicking an item doesn't close it.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
112
diff
changeset
|
30 static this () { |
143
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
31 logger = Log.getLogger ("mde.gui.widget.ParentContent"); |
113
9824bee909fd
Popup menu; works for simple menus except that clicking an item doesn't close it.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
112
diff
changeset
|
32 } |
9824bee909fd
Popup menu; works for simple menus except that clicking an item doesn't close it.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
112
diff
changeset
|
33 } |
9824bee909fd
Popup menu; works for simple menus except that clicking an item doesn't close it.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
112
diff
changeset
|
34 |
131
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
121
diff
changeset
|
35 /****************************************************************************** |
143
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
36 * Widget which pops up a ContentListWidget created with its content. |
138
3468e9bfded1
Popup widgets: are simpler to use and can show content fields like DisplayContentWidget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
137
diff
changeset
|
37 * |
3468e9bfded1
Popup widgets: are simpler to use and can show content fields like DisplayContentWidget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
137
diff
changeset
|
38 * Is a button displaying a content string, just like DisplayContentWidget. |
3468e9bfded1
Popup widgets: are simpler to use and can show content fields like DisplayContentWidget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
137
diff
changeset
|
39 * |
3468e9bfded1
Popup widgets: are simpler to use and can show content fields like DisplayContentWidget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
137
diff
changeset
|
40 * Popped up widget is a ContentListWidget created from the same creation data. |
131
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
121
diff
changeset
|
41 *****************************************************************************/ |
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
121
diff
changeset
|
42 class PopupMenuWidget : APopupParentWidget |
108
c9fc2d303178
Added capability for border-less pop-up widgets. Simple pop-up menu.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
43 { |
121
5b37d0400732
Widgets now receive and store their parent (IParentWidget). Infinite widget recursion checks. WidgetManager code redistributed.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
119
diff
changeset
|
44 this (IWidgetManager mgr, IParentWidget parent, widgetID id, WidgetData data, IContent c) { |
138
3468e9bfded1
Popup widgets: are simpler to use and can show content fields like DisplayContentWidget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
137
diff
changeset
|
45 content = cast(Content)c; |
3468e9bfded1
Popup widgets: are simpler to use and can show content fields like DisplayContentWidget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
137
diff
changeset
|
46 WDCMinCheck (data, 3,1, content); |
121
5b37d0400732
Widgets now receive and store their parent (IParentWidget). Infinite widget recursion checks. WidgetManager code redistributed.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
119
diff
changeset
|
47 super (mgr, parent, id); |
5b37d0400732
Widgets now receive and store their parent (IParentWidget). Infinite widget recursion checks. WidgetManager code redistributed.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
119
diff
changeset
|
48 |
138
3468e9bfded1
Popup widgets: are simpler to use and can show content fields like DisplayContentWidget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
137
diff
changeset
|
49 //popup = mgr.makeWidget (this, data.strings[0], content); |
3468e9bfded1
Popup widgets: are simpler to use and can show content fields like DisplayContentWidget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
137
diff
changeset
|
50 popup = new ContentListWidget (mgr, this, id, data, c); |
131
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
121
diff
changeset
|
51 subWidgets = [popup]; |
113
9824bee909fd
Popup menu; works for simple menus except that clicking an item doesn't close it.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
112
diff
changeset
|
52 |
138
3468e9bfded1
Popup widgets: are simpler to use and can show content fields like DisplayContentWidget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
137
diff
changeset
|
53 cIndex = data.ints[2]; |
3468e9bfded1
Popup widgets: are simpler to use and can show content fields like DisplayContentWidget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
137
diff
changeset
|
54 if (cIndex == 0) |
3468e9bfded1
Popup widgets: are simpler to use and can show content fields like DisplayContentWidget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
137
diff
changeset
|
55 content.addCallback (&updateVal); |
3468e9bfded1
Popup widgets: are simpler to use and can show content fields like DisplayContentWidget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
137
diff
changeset
|
56 adapter = mgr.renderer.getAdapter; |
3468e9bfded1
Popup widgets: are simpler to use and can show content fields like DisplayContentWidget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
137
diff
changeset
|
57 adapter.text = content.toString (cIndex); |
113
9824bee909fd
Popup menu; works for simple menus except that clicking an item doesn't close it.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
112
diff
changeset
|
58 adapter.getDimensions (mw, mh); |
9824bee909fd
Popup menu; works for simple menus except that clicking an item doesn't close it.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
112
diff
changeset
|
59 w = mw; |
9824bee909fd
Popup menu; works for simple menus except that clicking an item doesn't close it.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
112
diff
changeset
|
60 h = mh; |
9824bee909fd
Popup menu; works for simple menus except that clicking an item doesn't close it.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
112
diff
changeset
|
61 } |
9824bee909fd
Popup menu; works for simple menus except that clicking an item doesn't close it.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
112
diff
changeset
|
62 |
133
9fd705793568
Fixed menu popup bug, improved recursion detection.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
131
diff
changeset
|
63 override void recursionCheck (widgetID wID, IContent c) { |
9fd705793568
Fixed menu popup bug, improved recursion detection.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
131
diff
changeset
|
64 if (wID is id && c is content) |
9fd705793568
Fixed menu popup bug, improved recursion detection.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
131
diff
changeset
|
65 throw new WidgetRecursionException (wID); |
9fd705793568
Fixed menu popup bug, improved recursion detection.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
131
diff
changeset
|
66 parent.recursionCheck (wID, c); |
9fd705793568
Fixed menu popup bug, improved recursion detection.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
131
diff
changeset
|
67 } |
9fd705793568
Fixed menu popup bug, improved recursion detection.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
131
diff
changeset
|
68 |
114
b16a534f5302
Changes for tango r4201. Added override keyword in a lot of places.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
113
diff
changeset
|
69 override int clickEvent (wdabs, wdabs, ubyte b, bool state) { |
113
9824bee909fd
Popup menu; works for simple menus except that clicking an item doesn't close it.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
112
diff
changeset
|
70 if (b == 1 && state == true) { |
9824bee909fd
Popup menu; works for simple menus except that clicking an item doesn't close it.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
112
diff
changeset
|
71 if (!pushed) { |
131
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
121
diff
changeset
|
72 parentIPPW.addChildIPPW (this); |
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
121
diff
changeset
|
73 parentIPPW.menuActive = true; |
141
6f69a9c111eb
Fix for using BoolContentWidget in a menu. Made popups' widths match their parents under certain conditions.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
138
diff
changeset
|
74 if (popup.width != w && popup.minWidth <= w) |
6f69a9c111eb
Fix for using BoolContentWidget in a menu. Made popups' widths match their parents under certain conditions.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
138
diff
changeset
|
75 popup.setWidth (w, -1); // neatness |
131
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
121
diff
changeset
|
76 mgr.positionPopup (this, popup); |
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
121
diff
changeset
|
77 pushed = true; |
133
9fd705793568
Fixed menu popup bug, improved recursion detection.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
131
diff
changeset
|
78 } else if (!parentIPPW.parentMenuActive) { // if not a submenu |
131
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
121
diff
changeset
|
79 parentIPPW.removeChildIPPW (this); |
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
121
diff
changeset
|
80 } |
113
9824bee909fd
Popup menu; works for simple menus except that clicking an item doesn't close it.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
112
diff
changeset
|
81 } |
9824bee909fd
Popup menu; works for simple menus except that clicking an item doesn't close it.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
112
diff
changeset
|
82 return 0; |
9824bee909fd
Popup menu; works for simple menus except that clicking an item doesn't close it.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
112
diff
changeset
|
83 } |
9824bee909fd
Popup menu; works for simple menus except that clicking an item doesn't close it.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
112
diff
changeset
|
84 |
131
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
121
diff
changeset
|
85 override void removedIPPW () { |
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
121
diff
changeset
|
86 super.removedIPPW; |
113
9824bee909fd
Popup menu; works for simple menus except that clicking an item doesn't close it.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
112
diff
changeset
|
87 pushed = false; |
9824bee909fd
Popup menu; works for simple menus except that clicking an item doesn't close it.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
112
diff
changeset
|
88 } |
131
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
121
diff
changeset
|
89 |
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
121
diff
changeset
|
90 override void underMouse (bool state) { |
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
121
diff
changeset
|
91 if (state && !pushed && parentIPPW.menuActive) { |
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
121
diff
changeset
|
92 parentIPPW.addChildIPPW (this); |
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
121
diff
changeset
|
93 menuActive = true; |
141
6f69a9c111eb
Fix for using BoolContentWidget in a menu. Made popups' widths match their parents under certain conditions.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
138
diff
changeset
|
94 if (parentIPPW.parentMenuActive) |
6f69a9c111eb
Fix for using BoolContentWidget in a menu. Made popups' widths match their parents under certain conditions.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
138
diff
changeset
|
95 mgr.positionPopup (this, popup, 1); |
6f69a9c111eb
Fix for using BoolContentWidget in a menu. Made popups' widths match their parents under certain conditions.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
138
diff
changeset
|
96 else { |
6f69a9c111eb
Fix for using BoolContentWidget in a menu. Made popups' widths match their parents under certain conditions.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
138
diff
changeset
|
97 if (popup.width != w && popup.minWidth <= w) |
6f69a9c111eb
Fix for using BoolContentWidget in a menu. Made popups' widths match their parents under certain conditions.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
138
diff
changeset
|
98 popup.setWidth (w, -1); // neatness |
6f69a9c111eb
Fix for using BoolContentWidget in a menu. Made popups' widths match their parents under certain conditions.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
138
diff
changeset
|
99 mgr.positionPopup (this, popup); |
6f69a9c111eb
Fix for using BoolContentWidget in a menu. Made popups' widths match their parents under certain conditions.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
138
diff
changeset
|
100 } |
131
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
121
diff
changeset
|
101 pushed = true; |
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
121
diff
changeset
|
102 } |
117
aba2dd815a1f
Some tweaks to popup events and widgets.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
115
diff
changeset
|
103 } |
113
9824bee909fd
Popup menu; works for simple menus except that clicking an item doesn't close it.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
112
diff
changeset
|
104 |
114
b16a534f5302
Changes for tango r4201. Added override keyword in a lot of places.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
113
diff
changeset
|
105 override void draw () { |
113
9824bee909fd
Popup menu; works for simple menus except that clicking an item doesn't close it.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
112
diff
changeset
|
106 mgr.renderer.drawButton (x,y, w,h, pushed); |
9824bee909fd
Popup menu; works for simple menus except that clicking an item doesn't close it.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
112
diff
changeset
|
107 adapter.draw (x,y); |
9824bee909fd
Popup menu; works for simple menus except that clicking an item doesn't close it.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
112
diff
changeset
|
108 } |
9824bee909fd
Popup menu; works for simple menus except that clicking an item doesn't close it.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
112
diff
changeset
|
109 |
9824bee909fd
Popup menu; works for simple menus except that clicking an item doesn't close it.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
112
diff
changeset
|
110 protected: |
138
3468e9bfded1
Popup widgets: are simpler to use and can show content fields like DisplayContentWidget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
137
diff
changeset
|
111 void updateVal (Content) { // callback |
3468e9bfded1
Popup widgets: are simpler to use and can show content fields like DisplayContentWidget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
137
diff
changeset
|
112 adapter.text = content.toString(cIndex); |
3468e9bfded1
Popup widgets: are simpler to use and can show content fields like DisplayContentWidget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
137
diff
changeset
|
113 wdim omw = mw, omh = mh; |
3468e9bfded1
Popup widgets: are simpler to use and can show content fields like DisplayContentWidget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
137
diff
changeset
|
114 adapter.getDimensions (mw, mh); |
3468e9bfded1
Popup widgets: are simpler to use and can show content fields like DisplayContentWidget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
137
diff
changeset
|
115 if (omw != mw) |
3468e9bfded1
Popup widgets: are simpler to use and can show content fields like DisplayContentWidget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
137
diff
changeset
|
116 parent.minWChange (this, mw); |
3468e9bfded1
Popup widgets: are simpler to use and can show content fields like DisplayContentWidget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
137
diff
changeset
|
117 if (omh != mh) |
3468e9bfded1
Popup widgets: are simpler to use and can show content fields like DisplayContentWidget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
137
diff
changeset
|
118 parent.minHChange (this, mh); |
3468e9bfded1
Popup widgets: are simpler to use and can show content fields like DisplayContentWidget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
137
diff
changeset
|
119 } |
113
9824bee909fd
Popup menu; works for simple menus except that clicking an item doesn't close it.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
112
diff
changeset
|
120 bool pushed = false; |
9824bee909fd
Popup menu; works for simple menus except that clicking an item doesn't close it.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
112
diff
changeset
|
121 IRenderer.TextAdapter adapter; |
138
3468e9bfded1
Popup widgets: are simpler to use and can show content fields like DisplayContentWidget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
137
diff
changeset
|
122 Content content; |
3468e9bfded1
Popup widgets: are simpler to use and can show content fields like DisplayContentWidget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
137
diff
changeset
|
123 int cIndex; |
113
9824bee909fd
Popup menu; works for simple menus except that clicking an item doesn't close it.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
112
diff
changeset
|
124 } |
143
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
125 |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
126 /** A "tab" widget: it doesn't display the tabs, but shows one of a number of |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
127 * widgets dependant on an EnumContent. |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
128 * |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
129 * Sizability is set once. Min-size is updated when switching. */ |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
130 class SwitchWidget : AParentWidget |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
131 { |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
132 this (IWidgetManager mgr, IParentWidget parent, widgetID id, WidgetData data, IContent c) { |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
133 super (mgr, parent, id); |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
134 content = cast(EnumContent) c; |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
135 if (content is null || (subWidgets.length = content.list.length) == 0) |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
136 throw new ContentException (this); |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
137 WDCheck (data, 1, subWidgets.length); |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
138 |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
139 foreach (i,sc; content.list) |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
140 subWidgets[i] = mgr.makeWidget (this, data.strings[i], sc); |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
141 currentW = subWidgets[content()]; |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
142 |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
143 content.addCallback (&switchWidget); |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
144 } |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
145 |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
146 override bool setup (uint n, uint flags) { |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
147 bool r = super.setup (n, flags); |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
148 if (r) { |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
149 mw = currentW.minWidth; |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
150 mh = currentW.minHeight; |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
151 w = currentW.width; |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
152 h = currentW.height; |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
153 static if (SIZABILITY & SIZABILITY_ENUM.START_TRUE) |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
154 isWS = isHS = true; |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
155 foreach (i,sc; content.list) { |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
156 static if (SIZABILITY == SIZABILITY_ENUM.ANY_SUBWIDGETS) { |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
157 isWS |= subWidgets[i].isWSizable; |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
158 isHS |= subWidgets[i].isHSizable; |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
159 } else static if (SIZABILITY == SIZABILITY_ENUM.ALL_SUBWIDGETS) { |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
160 isWS &= subWidgets[i].isWSizable; |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
161 isHS &= subWidgets[i].isHSizable; |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
162 } |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
163 } |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
164 } |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
165 return r; |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
166 } |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
167 |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
168 override void minWChange (IChildWidget widget, wdim nmw) { |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
169 if (widget !is currentW) return; |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
170 mw = nmw; |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
171 parent.minWChange (this, nmw); |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
172 } |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
173 override void minHChange (IChildWidget widget, wdim nmh) { |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
174 if (widget !is currentW) return; |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
175 mh = nmh; |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
176 parent.minHChange (this, nmh); |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
177 } |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
178 |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
179 override bool isWSizable () { |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
180 return isWS; |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
181 } |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
182 override bool isHSizable () { |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
183 return isHS; |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
184 } |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
185 |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
186 override void setWidth (wdim nw, int dir) { |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
187 w = (nw >= mw ? nw : mw); |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
188 currentW.setWidth (w, dir); |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
189 } |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
190 override void setHeight (wdim nh, int dir) { |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
191 h = (nh >= mh ? nh : mh); |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
192 currentW.setHeight (h, dir); |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
193 } |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
194 |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
195 override void setPosition (wdim nx, wdim ny) { |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
196 x = nx; |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
197 y = ny; |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
198 currentW.setPosition (nx,ny); |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
199 } |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
200 |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
201 override IChildWidget getWidget (wdim cx, wdim cy) { |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
202 return currentW.getWidget (cx, cy); |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
203 } |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
204 |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
205 override void draw () { |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
206 currentW.draw; |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
207 } |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
208 |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
209 protected: |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
210 // callback on content |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
211 void switchWidget (Content) { |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
212 currentW = subWidgets[content()]; |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
213 mw = currentW.minWidth; |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
214 mh = currentW.minHeight; |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
215 parent.minWChange (this, mw); |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
216 parent.minHChange (this, mh); |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
217 // Parent may change size. If it doesn't, we must set child's size. |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
218 // We can't tell if it did, so do it (call will be fast if size isn't |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
219 // changed anyway). |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
220 currentW.setWidth (w, -1); |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
221 currentW.setHeight (h, -1); |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
222 currentW.setPosition (x,y); |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
223 } |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
224 |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
225 IChildWidget currentW; |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
226 EnumContent content; |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
227 |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
228 bool isWS, isHS; // no infrastructure for changing sizability, so need to fix it. |
2ac3e0012788
Added a simple Slider widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
141
diff
changeset
|
229 } |
144
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
230 |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
231 /** A collapsible widget: shows/hides a child dependant on a BoolContent. |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
232 * |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
233 * Sizability is set once. Min-size is changed (but cannot force size to 0). |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
234 * |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
235 * Uses its content as a switch, which means content cannot be passed through. |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
236 * A builtin button would improve this. */ |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
237 class CollapsibleWidget : AParentWidget |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
238 { |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
239 this (IWidgetManager mgr, IParentWidget parent, widgetID id, WidgetData data, IContent c) { |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
240 super (mgr, parent, id); |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
241 content = cast(BoolContent) c; |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
242 WDCCheck (data, 1, 1, content); |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
243 |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
244 subWidgets = [mgr.makeWidget (this, data.strings[0])]; |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
245 |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
246 content.addCallback (&collapse); |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
247 } |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
248 |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
249 override bool setup (uint n, uint flags) { |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
250 bool r = super.setup (n, flags); |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
251 if (r) { |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
252 collapsed = content(); |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
253 if (!collapsed) { |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
254 mw = subWidgets[0].minWidth; |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
255 mh = subWidgets[0].minHeight; |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
256 w = subWidgets[0].width; |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
257 h = subWidgets[0].height; |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
258 } |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
259 } |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
260 return r; |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
261 } |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
262 |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
263 override void minWChange (IChildWidget widget, wdim nmw) { |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
264 debug assert (widget is subWidgets[0]); |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
265 mw = nmw; |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
266 parent.minWChange (this, nmw); |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
267 } |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
268 override void minHChange (IChildWidget widget, wdim nmh) { |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
269 debug assert (widget is subWidgets[0]); |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
270 mh = nmh; |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
271 parent.minHChange (this, nmh); |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
272 } |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
273 |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
274 // Doesn't change: |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
275 override bool isWSizable () { |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
276 return subWidgets[0].isWSizable; |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
277 } |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
278 override bool isHSizable () { |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
279 return subWidgets[0].isHSizable; |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
280 } |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
281 |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
282 override void setWidth (wdim nw, int dir) { |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
283 w = (nw >= mw ? nw : mw); |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
284 if (!collapsed) subWidgets[0].setWidth (w, dir); |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
285 } |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
286 override void setHeight (wdim nh, int dir) { |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
287 h = (nh >= mh ? nh : mh); |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
288 if (!collapsed) subWidgets[0].setHeight (h, dir); |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
289 } |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
290 |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
291 override void setPosition (wdim nx, wdim ny) { |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
292 x = nx; |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
293 y = ny; |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
294 if (!collapsed) subWidgets[0].setPosition (nx,ny); |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
295 } |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
296 |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
297 override IChildWidget getWidget (wdim cx, wdim cy) { |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
298 if (!collapsed) |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
299 return subWidgets[0].getWidget (cx, cy); |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
300 else return this; |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
301 } |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
302 |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
303 override void draw () { |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
304 if (!collapsed) subWidgets[0].draw; |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
305 } |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
306 |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
307 protected: |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
308 // callback on content |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
309 void collapse (Content) { |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
310 collapsed = content(); |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
311 if (collapsed) { |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
312 mw = mh = 0; |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
313 } else { |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
314 mw = subWidgets[0].minWidth; |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
315 mh = subWidgets[0].minHeight; |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
316 } |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
317 parent.minWChange (this, mw); |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
318 parent.minHChange (this, mh); |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
319 if (collapsed) return; |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
320 // set incase parent didn't: |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
321 subWidgets[0].setWidth (w, -1); |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
322 subWidgets[0].setHeight (h, -1); |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
323 subWidgets[0].setPosition (x,y); |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
324 } |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
325 |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
326 bool collapsed = false; |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
327 BoolContent content; |
66c58e5b0062
Added a BoolContent-based collapsible widget.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
143
diff
changeset
|
328 } |