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 }