1 /**
2 Copyright: Copyright (c) 2013-2014 Andrey Penechko.
3 License: a$(WEB boost.org/LICENSE_1_0.txt, Boost License 1.0).
4 Authors: Andrey Penechko.
5 */
6
7 module anchovy.gui.templates.widgettemplate;
8
9 import anchovy.gui;
10 import std.algorithm;
11
12 class SubwidgetTemplate
13 {
14 Variant[string] properties;
15 SubwidgetTemplate[] subwidgets;
16 ForwardedProperty[] forwardedProperties;
17
18 override string toString()
19 {
20 return toStringImpl("");
21 }
22
23 string toStringImpl(string padding)
24 {
25 string result;
26 result ~= padding ~ to!string(properties["type"]);
27
28 foreach(key; properties.byKey)
29 {
30 result ~= " " ~ key ~ ":" ~ to!string(properties[key]);
31 }
32 foreach(fprop; forwardedProperties)
33 {
34 result ~= " alias " ~ fprop.propertyName ~" = " ~ fprop.targetPropertyName;
35 }
36 result ~= "\n";
37
38 foreach(sub; subwidgets)
39 {
40 result ~= sub.toStringImpl(padding ~ " ");
41 }
42
43 return result;
44 }
45 }
46
47 struct ForwardedProperty
48 {
49 string propertyName; // property that will be created in root.
50 string targetPropertyName; // property to bind to.
51 }
52
53 class WidgetTemplate
54 {
55 SubwidgetTemplate tree; // the widget itself.
56 SubwidgetTemplate[string] subwidgetsmap;
57 string baseType;
58 string name;
59 string container;
60
61 SubwidgetTemplate findSubwidgetByName(string name)
62 {
63 SubwidgetTemplate* subwidget;
64
65 subwidget = name in subwidgetsmap;
66
67 return *subwidget;
68 }
69
70 override string toString()
71 {
72 return tree.toString() ~
73 "base: " ~ baseType ~ " cont: " ~ container~"\n";
74 }
75 }