1  module tileLayer;
2 
3  import PixelPerfectEngine.concrete.window;
4  import PixelPerfectEngine.graphics.common;
5  import editor;
6  import addTiles;
7  import std.conv;
8  
9  public class TileLayerEditor : Window { 
10 	ListBox tileList;
11 	Button button_Add;
12 	Button button_rem;
13 	Button button_rrem;
14 	Button button_rep;
15 	Button button_imp;
16 	Button button_res;
17 	CheckBox checkBox_hm;
18 	CheckBox checkBox_vm;
19 	CheckBox checkBox_overwrite;
20 	Label label1;
21 	TextBox textBox_pri;
22 	Label label2;
23 	Label label3;
24 	Label label4;
25 	Label label5;
26 	TextBox sXRate;
27 	TextBox sXOffset;
28 	TextBox sYRate;
29 	TextBox sYOffset;
30 	CheckBox checkBox_vis;
31 	CheckBox checkBox_solo;
32 	CheckBox checkBox_warp;
33 	Button button_prev;
34 	Button button_next;
35 	Button button_down;
36 	Button button_up;
37 	Label label6;
38 	TextBox layerName;
39 	Editor edi;
40 	int selectedLayer;
41 	this(Editor e){
42 		super(Coordinate(0, 0, 410, 410), "TileLayer"w);
43 		tileList = new ListBox("tileList",Coordinate(5, 20, 320, 244), null, new ListBoxHeader(["ID"w, "Name"w, "Source"w], [32, 80, 320]), 16);
44 		addElement(tileList, EventProperties.MOUSE | EventProperties.SCROLL);
45 		button_Add = new Button("Add"w, "button_Add", Coordinate(325, 20, 405, 40));
46 		addElement(button_Add, EventProperties.MOUSE);
47 		button_Add.onMouseLClickRel = &button_Add_onMouseLClickRel;
48 		button_rem = new Button("Remove"w, "button_rem", Coordinate(325, 45, 405, 65));
49 		addElement(button_rem, EventProperties.MOUSE);
50 		button_rem.onMouseLClickRel = &button_rem_onMouseLClickRel;
51 		button_rrem = new Button("Rec.rem"w, "button_rrem", Coordinate(325, 70, 405, 90));
52 		addElement(button_rrem, EventProperties.MOUSE);
53 		button_rrem.onMouseLClickRel = &button_rrem_onMouseLClickRel;
54 		button_rep = new Button("Replace"w, "button_rep", Coordinate(325, 95, 405, 115));
55 		addElement(button_rep, EventProperties.MOUSE);
56 		button_rep.onMouseLClickRel = &button_rep_onMouseLClickRel;
57 		button_imp = new Button("Import"w, "button_imp", Coordinate(325, 130, 405, 150));
58 		addElement(button_imp, EventProperties.MOUSE);
59 		button_imp.onMouseLClickRel = &button_imp_onMouseLClickRel;
60 		button_res = new Button("Resize"w, "button_res", Coordinate(325, 165, 405, 185));
61 		addElement(button_res, EventProperties.MOUSE);
62 		button_res.onMouseLClickRel = &button_res_onMouseLClickRel;
63 		checkBox_hm = new CheckBox("horizMir"w, "checkBox_hm", Coordinate(5, 255, 125, 275));
64 		addElement(checkBox_hm, EventProperties.MOUSE);
65 		checkBox_hm.onToggle = &checkBox_hm_onToggle;
66 		checkBox_vm = new CheckBox("vertMir"w, "checkBox_vm", Coordinate(100, 255, 265, 275));
67 		addElement(checkBox_vm, EventProperties.MOUSE);
68 		checkBox_vm.onToggle = &checkBox_vm_onToggle;
69 		checkBox_overwrite = new CheckBox("Disable overwrite on non-null characters"w, "checkBox_overwrite", Coordinate(5, 280, 350, 300));
70 		addElement(checkBox_overwrite, EventProperties.MOUSE);
71 		checkBox_overwrite.onToggle = &checkBox_overwrite_onToggle;
72 		label1 = new Label("pri/flags(0-63):"w, "label1", Coordinate(190, 253, 328, 269));
73 		addElement(label1, EventProperties.MOUSE);
74 		textBox_pri = new TextBox("0"w, "textBox_pri", Coordinate(325, 250, 405, 270));
75 		addElement(textBox_pri, EventProperties.MOUSE);
76 		textBox_pri.onTextInput = &textBox_pri_onTextInput;
77 		label2 = new Label("sXRate:"w, "label2", Coordinate(5, 307, 73, 325));
78 		addElement(label2, EventProperties.MOUSE);
79 		label3 = new Label("sYRate:"w, "label3", Coordinate(175, 307, 240, 325));
80 		addElement(label3, EventProperties.MOUSE);
81 		label4 = new Label("sXOffset:"w, "label4", Coordinate(5, 332, 80, 350));
82 		addElement(label4, EventProperties.MOUSE);
83 		label5 = new Label("sYOffset:"w, "label5", Coordinate(175, 332, 264, 350));
84 		addElement(label5, EventProperties.MOUSE);
85 		sXRate = new TextBox("0.0"w, "sXRate", Coordinate(80, 305, 170, 325));
86 		addElement(sXRate, EventProperties.MOUSE);
87 		sXRate.onTextInput = &sXRate_onTextInput;
88 		sXOffset = new TextBox("0"w, "sXOffset", Coordinate(80, 330, 170, 350));
89 		addElement(sXOffset, EventProperties.MOUSE);
90 		sXOffset.onTextInput = &sXOffset_onTextInput;
91 		sYRate = new TextBox("0.0"w, "sYRate", Coordinate(250, 305, 340, 325));
92 		addElement(sYRate, EventProperties.MOUSE);
93 		sYRate.onTextInput = &sYRate_onTextInput;
94 		sYOffset = new TextBox("0"w, "sYOffset", Coordinate(250, 330, 340, 350));
95 		addElement(sYOffset, EventProperties.MOUSE);
96 		sYOffset.onTextInput = &sYOffset_onTextInput;
97 		checkBox_vis = new CheckBox("Visible"w, "checkBox_vis", Coordinate(5, 355, 135, 371));
98 		addElement(checkBox_vis, EventProperties.MOUSE);
99 		checkBox_vis.onToggle = &checkBox_vis_onToggle;
100 		checkBox_solo = new CheckBox("Solo"w, "checkBox_solo", Coordinate(80, 355, 164, 371));
101 		addElement(checkBox_solo, EventProperties.MOUSE);
102 		checkBox_solo.onToggle = &checkBox_solo_onToggle;
103 		checkBox_warp = new CheckBox("Warp"w, "checkBox_warp", Coordinate(130, 355, 210, 371));
104 		addElement(checkBox_warp, EventProperties.MOUSE);
105 		checkBox_warp.onToggle = &checkBox_warp_onToggle;
106 		button_prev = new Button("Previous"w, "button_prev", Coordinate(325, 380, 400, 400));
107 		addElement(button_prev, EventProperties.MOUSE);
108 		button_prev.onMouseLClickRel = &button_prev_onMouseLClickRel;
109 		button_next = new Button("Next"w, "button_next", Coordinate(325, 355, 400, 375));
110 		addElement(button_next, EventProperties.MOUSE);
111 		button_next.onMouseLClickRel = &button_next_onMouseLClickRel;
112 		button_down = new Button("Down"w, "button_down", Coordinate(345, 330, 400, 350));
113 		addElement(button_down, EventProperties.MOUSE);
114 		button_down.onMouseLClickRel = &button_down_onMouseLClickRel;
115 		button_up = new Button("Up"w, "button_up", Coordinate(345, 305, 400, 325));
116 		addElement(button_up, EventProperties.MOUSE);
117 		button_up.onMouseLClickRel = &button_up_onMouseLClickRel;
118 		label6 = new Label("Layername:"w, "label6", Coordinate(5, 382, 95, 403));
119 		addElement(label6, EventProperties.MOUSE);
120 		layerName = new TextBox("tilelayer1"w, "layerName", Coordinate(100, 380, 320, 400));
121 		addElement(layerName, EventProperties.MOUSE);
122 		//layerName.onTextInput ~= la;
123 		edi = e;
124 	}
125 	/+public void actionEvent(Event event){
126 		import PixelPerfectEngine.system.etc;
127 		import std.string;
128 		switch(event.source){
129 			case "sXRate":
130 				if(isNumeric(sXRate.getText())){
131 					edi.document.tld[selectedLayer].sX = to!double(sXRate.getText());
132 				}else{
133 					parent.messageWindow("Input error!", "Please enter a numeric value into field sXRate!");
134 				}
135 				break;
136 			case "sYRate":
137 				if(isNumeric(sYRate.getText())){
138 					edi.document.tld[selectedLayer].sY = to!double(sYRate.getText());
139 				}else{
140 					parent.messageWindow("Input error!", "Please enter a numeric value into field sYRate!");
141 				}
142 				break;
143 			case "sXOffset":
144 				if(isInteger(sXOffset.getText())){
145 					edi.document.tld[selectedLayer].sXOffset = to!double(sXOffset.getText());
146 				}else{
147 					parent.messageWindow("Input error!", "Please enter a numeric value into field sXOffset!");
148 				}
149 				break;
150 			case "sYOffset":
151 				if(isInteger(sYOffset.getText())){
152 					edi.document.tld[selectedLayer].sYOffset = to!double(sYOffset.getText());
153 				}else{
154 					parent.messageWindow("Input error!", "Please enter a numeric value into field sYOffset!");
155 				}
156 				break;
157 			case "button_Add":
158 				FileDialog f = new FileDialog("Add new tile"w, "tileAdd", this, [FileDialog.FileAssociationDescriptor("XMP file"w, ["*.xmp"])], "./");
159 				break;
160 			case "button_rem":
161 				break;
162 			case "button_rrem":
163 				break;
164 			case "button_rep":
165 				break;
166 			case "button_imp":
167 				break;
168 			case "button_res":
169 				break;
170 			case "checkBox_hm":
171 				break;
172 			case "checkBox_vm":
173 				break;
174 			case "checkBox_overwrite":
175 				break;
176 			case "textBox_pri":
177 				break;
178 			case "checkBox_vis":
179 				break;
180 			case "checkBox_solo":
181 				break;
182 			case "checkBox_warp":
183 				break;
184 			case "button_prev":
185 				selectedLayer = edi.getPreviousTileLayer(selectedLayer);
186 				layerName.setText(to!wstring(edi.document.tld[selectedLayer].name));
187 				sXRate.setText(to!wstring(edi.document.tld[selectedLayer].sX));
188 				sYRate.setText(to!wstring(edi.document.tld[selectedLayer].sY));
189 				sXOffset.setText(to!wstring(edi.document.tld[selectedLayer].sXOffset));
190 				sYOffset.setText(to!wstring(edi.document.tld[selectedLayer].sYOffset));
191 				checkBox_warp.value = edi.document.tld[selectedLayer].warp;
192 				break;
193 			case "button_next":
194 				selectedLayer = edi.getNePreviousTileLayer(selectedLayer);
195 				layerName.setText(to!wstring(edi.document.tld[selectedLayer].name));
196 				sXRate.setText(to!wstring(edi.document.tld[selectedLayer].sX));
197 				sYRate.setText(to!wstring(edi.document.tld[selectedLayer].sY));
198 				sXOffset.setText(to!wstring(edi.document.tld[selectedLayer].sXOffset));
199 				sYOffset.setText(to!wstring(edi.document.tld[selectedLayer].sYOffset));
200 				checkBox_warp.value = edi.document.tld[selectedLayer].warp;
201 				break;
202 			case "button_down":
203 				selectedLayer = edi.moveLayerDown(selectedLayer);
204 				break;
205 			case "button_up":
206 				selectedLayer = edi.moveLayerUp(selectedLayer);
207 				break;
208 			default: break;
209 		}
210 	}+/
211 	private void checkBox_hm_onToggle(Event ev){
212 	
213 	}
214 	private void checkBox_vm_onToggle(Event ev){
215 	
216 	}
217 	private void checkBox_overwrite_onToggle(Event ev){
218 	
219 	}
220 	private void checkBox_vis_onToggle(Event ev){
221 	
222 	}
223 	private void checkBox_solo_onToggle(Event ev){
224 	
225 	}
226 	private void checkBox_warp_onToggle(Event ev){
227 	
228 	}
229 	private void sXRate_onTextInput(Event ev){
230 		import std..string;
231 		if(isNumeric(sXRate.getText())){
232 			edi.document.tld[selectedLayer].sX = to!double(sXRate.getText());
233 		}else{
234 			parent.messageWindow("Input error!", "Please enter a numeric value into field sXRate!");
235 		}
236 	}
237 	private void sYRate_onTextInput(Event ev){
238 		import std..string;
239 		if(isNumeric(sYRate.getText())){
240 			edi.document.tld[selectedLayer].sY = to!double(sYRate.getText());
241 		}else{
242 			parent.messageWindow("Input error!", "Please enter a numeric value into field sYRate!");
243 		}
244 	}
245 	private void sXOffset_onTextInput(Event ev){
246 		import PixelPerfectEngine.system.etc;
247 		if(isInteger(sXOffset.getText())){
248 			edi.document.tld[selectedLayer].sXOffset = to!double(sXOffset.getText());
249 		}else{
250 			parent.messageWindow("Input error!", "Please enter a numeric value into field sXOffset!");
251 		}
252 	}
253 	private void sYOffset_onTextInput(Event ev){
254 		import PixelPerfectEngine.system.etc;
255 		if(isInteger(sYOffset.getText())){
256 			edi.document.tld[selectedLayer].sYOffset = to!double(sYOffset.getText());
257 		}else{
258 			parent.messageWindow("Input error!", "Please enter a numeric value into field sYOffset!");
259 		}
260 	}
261 	private void textBox_pri_onTextInput(Event ev){
262 	
263 	}
264 	private void button_rem_onMouseLClickRel(Event ev){
265 	
266 	}
267 	private void button_rrem_onMouseLClickRel(Event ev){
268 	
269 	}
270 	private void button_rep_onMouseLClickRel(Event ev){
271 	
272 	}
273 	private void button_imp_onMouseLClickRel(Event ev){
274 		FileDialog f = new FileDialog("Import resources from file"w, "resImp", &onResourceImport, [FileDialog.FileAssociationDescriptor("MAP file"w, ["*.map"])], "./");
275 	}
276 	private void button_Add_onMouseLClickRel(Event ev){
277 		FileDialog f = new FileDialog("Add new tile"w, "tileAdd", &onAddTile, [FileDialog.FileAssociationDescriptor("XMP file"w, ["*.xmp"])], "./");
278 		parent.addWindow(f);
279 	}
280 	private void button_res_onMouseLClickRel(Event ev){
281 	
282 	}
283 	private void button_prev_onMouseLClickRel(Event ev){
284 		selectedLayer = edi.getPreviousTileLayer(selectedLayer);
285 		layerName.setText(to!wstring(edi.document.tld[selectedLayer].name));
286 		sXRate.setText(to!wstring(edi.document.tld[selectedLayer].sX));
287 		sYRate.setText(to!wstring(edi.document.tld[selectedLayer].sY));
288 		sXOffset.setText(to!wstring(edi.document.tld[selectedLayer].sXOffset));
289 		sYOffset.setText(to!wstring(edi.document.tld[selectedLayer].sYOffset));
290 		checkBox_warp.value = edi.document.tld[selectedLayer].warp;
291 	}
292 	private void button_next_onMouseLClickRel(Event ev){
293 		selectedLayer = edi.getNextTileLayer(selectedLayer);
294 		layerName.setText(to!wstring(edi.document.tld[selectedLayer].name));
295 		sXRate.setText(to!wstring(edi.document.tld[selectedLayer].sX));
296 		sYRate.setText(to!wstring(edi.document.tld[selectedLayer].sY));
297 		sXOffset.setText(to!wstring(edi.document.tld[selectedLayer].sXOffset));
298 		sYOffset.setText(to!wstring(edi.document.tld[selectedLayer].sYOffset));
299 		checkBox_warp.value = edi.document.tld[selectedLayer].warp;
300 	}
301 	private void button_down_onMouseLClickRel(Event ev){
302 		selectedLayer = edi.moveLayerDown(selectedLayer);
303 	}
304 	private void button_up_onMouseLClickRel(Event ev){
305 		selectedLayer = edi.moveLayerUp(selectedLayer);
306 	}
307 	private void onAddTile(Event ev){
308 		import PixelPerfectEngine.extbmp.extbmp;
309 		Window w = new AddTiles(new ExtendibleBitmap(ev.path ~ ev.filename),edi.document,AddTiles.AcceptedBMPType.ALL,
310 					edi.document.tld[selectedLayer].tX,edi.document.tld[selectedLayer].tY,selectedLayer,edi.backgroundLayers[selectedLayer],edi.palman);
311 		parent.addWindow(w);
312 	}
313 	private void onResourceImport(Event ev){
314 	
315 	}
316 }