Mercurial > projects > mde
comparison mde/gui/WidgetDataSet.d @ 128:41582439a42b
Added support for dynamic EnumContent loading and saving, with translation loading.
WMScreen.init removed; code moved to this() since class is now created by main() instead of a static this().
Fix for SwitchWidget not passing events. Still some resizing bugs evident in SwitchWidget :-(
author | Diggory Hardy <diggory.hardy@gmail.com> |
---|---|
date | Wed, 14 Jan 2009 20:24:14 +0000 |
parents | 08a4ae11454b |
children | 9f035cd139c6 |
comparison
equal
deleted
inserted
replaced
127:3328c6fb77ca | 128:41582439a42b |
---|---|
26 * changes and previous changes saved to the use file, before saving to the user file. | 26 * changes and previous changes saved to the use file, before saving to the user file. |
27 *************************************************************************************************/ | 27 *************************************************************************************************/ |
28 module mde.gui.WidgetDataSet; | 28 module mde.gui.WidgetDataSet; |
29 | 29 |
30 public import mde.gui.types; | 30 public import mde.gui.types; |
31 import mde.content.AStringContent; | |
32 import Items = mde.content.Items; | |
31 | 33 |
32 // For loading from file: | 34 // For loading from file: |
33 import mt = mde.file.mergetag.DataSet; | 35 import mt = mde.file.mergetag.DataSet; |
34 import mt = mde.file.mergetag.DefaultData; | 36 import mt = mde.file.mergetag.DefaultData; |
35 import mde.file.serialize; | 37 import mde.file.serialize; |
38 | |
36 import tango.util.log.Log : Log, Logger; | 39 import tango.util.log.Log : Log, Logger; |
37 | 40 |
38 private Logger logger; | 41 private Logger logger; |
39 static this () { | 42 static this () { |
40 logger = Log.getLogger ("mde.gui.WidgetDataSet"); | 43 logger = Log.getLogger ("mde.gui.WidgetDataSet"); |
50 // Priority is HIGH_LOW. Only load tag if it doesn't already exist. | 53 // Priority is HIGH_LOW. Only load tag if it doesn't already exist. |
51 if (tp == "WidgetData" && (id in widgetData) is null) { | 54 if (tp == "WidgetData" && (id in widgetData) is null) { |
52 widgetData[id] = deserialize!(WidgetData) (dt); | 55 widgetData[id] = deserialize!(WidgetData) (dt); |
53 } else if (tp == "WDims" && (id in dimData) is null) { | 56 } else if (tp == "WDims" && (id in dimData) is null) { |
54 dimData[id] = cast(wdims) deserialize!(int[]) (dt); | 57 dimData[id] = cast(wdims) deserialize!(int[]) (dt); |
58 } else if (tp == "EnumContent" && (id in enumContent) is null) { | |
59 // Add dynamic content. NOTE: could confict with content from another design/section. | |
60 EnumContent a = new EnumContent (id, deserialize!(EnumContent.EnumCStruct) (dt)); | |
61 enumContent[id] = a; | |
62 Items.addContent (a); | |
55 } | 63 } |
56 } | 64 } |
57 // Only WidgetDataChanges is used for writing. | 65 // Only WidgetDataChanges is used for writing. |
58 void writeAll (ItemDelg dlg) {} | 66 void writeAll (ItemDelg dlg) {} |
59 //END Mergetag code | 67 //END Mergetag code |
75 } | 83 } |
76 | 84 |
77 protected: | 85 protected: |
78 WidgetData[widgetID] widgetData; // Per-widget data | 86 WidgetData[widgetID] widgetData; // Per-widget data |
79 wdims[widgetID] dimData; // Per-widget sizes | 87 wdims[widgetID] dimData; // Per-widget sizes |
88 EnumContent[char[]] enumContent; | |
80 } | 89 } |
81 | 90 |
82 /************************************************************************************************* | 91 /************************************************************************************************* |
83 * Contains changes to widget data. | 92 * Contains changes to widget data. |
84 * | 93 * |
86 *************************************************************************************************/ | 95 *************************************************************************************************/ |
87 class WidgetDataChanges : WidgetDataSet | 96 class WidgetDataChanges : WidgetDataSet |
88 { | 97 { |
89 /** | 98 /** |
90 * Params: | 99 * Params: |
91 * wds = The base WidgetDataSet these changes are applied against. */ | 100 * wds = The base WidgetDataSet these changes are applied against. |
101 * | |
102 * Base's enumContent is used directly; this.enumContent is null. */ | |
92 this (WidgetDataSet wds) { | 103 this (WidgetDataSet wds) { |
93 base = wds; | 104 base = wds; |
94 } | 105 } |
95 | 106 |
96 //BEGIN Mergetag code | 107 //BEGIN Mergetag code |
99 void writeAll (ItemDelg dlg) { | 110 void writeAll (ItemDelg dlg) { |
100 foreach (id,data; widgetData) | 111 foreach (id,data; widgetData) |
101 dlg ("WidgetData", id, serialize!(WidgetData) (data)); | 112 dlg ("WidgetData", id, serialize!(WidgetData) (data)); |
102 foreach (id,dim; dimData) | 113 foreach (id,dim; dimData) |
103 dlg ("WDims", id, serialize!(int[]) (cast(int[]) dim)); | 114 dlg ("WDims", id, serialize!(int[]) (cast(int[]) dim)); |
115 foreach (id,c; base.enumContent) | |
116 dlg ("EnumContent", id, serialize (c.structOf)); | |
104 } | 117 } |
105 //END Mergetag code | 118 //END Mergetag code |
106 | 119 |
107 /** Set the widget data for widget i. | 120 /** Set the widget data for widget i. |
108 */ | 121 */ |
116 dimData[id] = d; | 129 dimData[id] = d; |
117 base.dimData[id] = d; | 130 base.dimData[id] = d; |
118 } | 131 } |
119 | 132 |
120 /** Do any changes exist? True if no changes have been stored. */ | 133 /** Do any changes exist? True if no changes have been stored. */ |
121 bool none () { | 134 bool noChanges () { |
122 return widgetData.length == 0; | 135 return widgetData.length == 0 && dimData.length == 0 && enumContent.length == 0; |
123 } | 136 } |
124 | 137 |
125 protected WidgetDataSet base; | 138 protected WidgetDataSet base; |
126 } | 139 } |