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 	BitmapAttrib attributes;
42 	this(Editor e){
43 		super(Coordinate(0, 0, 410, 410), "TileLayer");
44 		tileList = new ListBox("tileList",Coordinate(5, 20, 320, 244), null, new ListBoxHeader(["ID", "Name", "Source"], [32, 80, 320]), 16);
45 		addElement(tileList, EventProperties.MOUSE | EventProperties.SCROLL);
46 		button_Add = new Button("Add", "button_Add", Coordinate(325, 20, 405, 40));
47 		addElement(button_Add, EventProperties.MOUSE);
48 		button_Add.onMouseLClickRel = &button_Add_onMouseLClickRel;
49 		button_rem = new Button("Remove", "button_rem", Coordinate(325, 45, 405, 65));
50 		addElement(button_rem, EventProperties.MOUSE);
51 		button_rem.onMouseLClickRel = &button_rem_onMouseLClickRel;
52 		button_rrem = new Button("Rec.rem", "button_rrem", Coordinate(325, 70, 405, 90));
53 		addElement(button_rrem, EventProperties.MOUSE);
54 		button_rrem.onMouseLClickRel = &button_rrem_onMouseLClickRel;
55 		button_rep = new Button("Replace", "button_rep", Coordinate(325, 95, 405, 115));
56 		addElement(button_rep, EventProperties.MOUSE);
57 		button_rep.onMouseLClickRel = &button_rep_onMouseLClickRel;
58 		button_imp = new Button("Import", "button_imp", Coordinate(325, 130, 405, 150));
59 		addElement(button_imp, EventProperties.MOUSE);
60 		button_imp.onMouseLClickRel = &button_imp_onMouseLClickRel;
61 		button_res = new Button("Resize", "button_res", Coordinate(325, 165, 405, 185));
62 		addElement(button_res, EventProperties.MOUSE);
63 		button_res.onMouseLClickRel = &button_res_onMouseLClickRel;
64 		checkBox_hm = new CheckBox("horizMir", "checkBox_hm", Coordinate(5, 255, 125, 275));
65 		addElement(checkBox_hm, EventProperties.MOUSE);
66 		checkBox_hm.onToggle = &checkBox_hm_onToggle;
67 		checkBox_vm = new CheckBox("vertMir", "checkBox_vm", Coordinate(100, 255, 265, 275));
68 		addElement(checkBox_vm, EventProperties.MOUSE);
69 		checkBox_vm.onToggle = &checkBox_vm_onToggle;
70 		checkBox_overwrite = new CheckBox("Disable overwrite on non-null characters", "checkBox_overwrite", Coordinate(5, 280, 350, 300));
71 		addElement(checkBox_overwrite, EventProperties.MOUSE);
72 		checkBox_overwrite.onToggle = &checkBox_overwrite_onToggle;
73 		label1 = new Label("pri/flags(0-63):", "label1", Coordinate(190, 253, 328, 269));
74 		addElement(label1, EventProperties.MOUSE);
75 		textBox_pri = new TextBox("0", "textBox_pri", Coordinate(325, 250, 405, 270));
76 		addElement(textBox_pri, EventProperties.MOUSE);
77 		textBox_pri.onTextInput = &textBox_pri_onTextInput;
78 		label2 = new Label("sXRate:", "label2", Coordinate(5, 307, 73, 325));
79 		addElement(label2, EventProperties.MOUSE);
80 		label3 = new Label("sYRate:", "label3", Coordinate(175, 307, 240, 325));
81 		addElement(label3, EventProperties.MOUSE);
82 		label4 = new Label("sXOffset:", "label4", Coordinate(5, 332, 80, 350));
83 		addElement(label4, EventProperties.MOUSE);
84 		label5 = new Label("sYOffset:", "label5", Coordinate(175, 332, 264, 350));
85 		addElement(label5, EventProperties.MOUSE);
86 		sXRate = new TextBox("0.0", "sXRate", Coordinate(80, 305, 170, 325));
87 		addElement(sXRate, EventProperties.MOUSE);
88 		sXRate.onTextInput = &sXRate_onTextInput;
89 		sXOffset = new TextBox("0", "sXOffset", Coordinate(80, 330, 170, 350));
90 		addElement(sXOffset, EventProperties.MOUSE);
91 		sXOffset.onTextInput = &sXOffset_onTextInput;
92 		sYRate = new TextBox("0.0", "sYRate", Coordinate(250, 305, 340, 325));
93 		addElement(sYRate, EventProperties.MOUSE);
94 		sYRate.onTextInput = &sYRate_onTextInput;
95 		sYOffset = new TextBox("0", "sYOffset", Coordinate(250, 330, 340, 350));
96 		addElement(sYOffset, EventProperties.MOUSE);
97 		sYOffset.onTextInput = &sYOffset_onTextInput;
98 		checkBox_vis = new CheckBox("Visible", "checkBox_vis", Coordinate(5, 355, 135, 371));
99 		addElement(checkBox_vis, EventProperties.MOUSE);
100 		checkBox_vis.onToggle = &checkBox_vis_onToggle;
101 		checkBox_solo = new CheckBox("Solo", "checkBox_solo", Coordinate(80, 355, 164, 371));
102 		addElement(checkBox_solo, EventProperties.MOUSE);
103 		checkBox_solo.onToggle = &checkBox_solo_onToggle;
104 		checkBox_warp = new CheckBox("arp", "checkBox_warp", Coordinate(130, 355, 210, 371));
105 		addElement(checkBox_warp, EventProperties.MOUSE);
106 		checkBox_warp.onToggle = &checkBox_warp_onToggle;
107 		button_prev = new Button("Previous", "button_prev", Coordinate(325, 380, 400, 400));
108 		addElement(button_prev, EventProperties.MOUSE);
109 		button_prev.onMouseLClickRel = &button_prev_onMouseLClickRel;
110 		button_next = new Button("Next", "button_next", Coordinate(325, 355, 400, 375));
111 		addElement(button_next, EventProperties.MOUSE);
112 		button_next.onMouseLClickRel = &button_next_onMouseLClickRel;
113 		button_down = new Button("Down", "button_down", Coordinate(345, 330, 400, 350));
114 		addElement(button_down, EventProperties.MOUSE);
115 		button_down.onMouseLClickRel = &button_down_onMouseLClickRel;
116 		button_up = new Button("Up", "button_up", Coordinate(345, 305, 400, 325));
117 		addElement(button_up, EventProperties.MOUSE);
118 		button_up.onMouseLClickRel = &button_up_onMouseLClickRel;
119 		label6 = new Label("Layername:", "label6", Coordinate(5, 382, 95, 403));
120 		addElement(label6, EventProperties.MOUSE);
121 		layerName = new TextBox("tilelayer1", "layerName", Coordinate(100, 380, 320, 400));
122 		addElement(layerName, EventProperties.MOUSE);
123 		//layerName.onTextInput ~= la;
124 		edi = e;
125 	}
126 
127 	private void checkBox_hm_onToggle(Event ev){
128 		attributes.horizMirror = ev.value != 0;
129 	}
130 	private void checkBox_vm_onToggle(Event ev){
131 		attributes.vertMirror = ev.value != 0;
132 	}
133 	private void checkBox_overwrite_onToggle(Event ev){
134 
135 	}
136 	private void checkBox_vis_onToggle(Event ev){
137 
138 	}
139 	private void checkBox_solo_onToggle(Event ev){
140 
141 	}
142 	private void checkBox_warp_onToggle(Event ev){
143 
144 	}
145 	private void sXRate_onTextInput(Event ev){
146 		import std..string;
147 		if(isNumeric(sXRate.getText())){
148 			edi.document.tld[selectedLayer].sX = to!double(sXRate.getText());
149 		}else{
150 			parent.messageWindow("Input error!", "Please enter a numeric value into field sXRate!");
151 		}
152 	}
153 	private void sYRate_onTextInput(Event ev){
154 		import std..string;
155 		if(isNumeric(sYRate.getText())){
156 			edi.document.tld[selectedLayer].sY = to!double(sYRate.getText());
157 		}else{
158 			parent.messageWindow("Input error!", "Please enter a numeric value into field sYRate!");
159 		}
160 	}
161 	private void sXOffset_onTextInput(Event ev){
162 		import PixelPerfectEngine.system.etc;
163 		if(isInteger(sXOffset.getText())){
164 			edi.document.tld[selectedLayer].sXOffset = to!double(sXOffset.getText());
165 		}else{
166 			parent.messageWindow("Input error!", "Please enter a numeric value into field sXOffset!");
167 		}
168 	}
169 	private void sYOffset_onTextInput(Event ev){
170 		import PixelPerfectEngine.system.etc;
171 		if(isInteger(sYOffset.getText())){
172 			edi.document.tld[selectedLayer].sYOffset = to!double(sYOffset.getText());
173 		}else{
174 			parent.messageWindow("Input error!", "Please enter a numeric value into field sYOffset!");
175 		}
176 	}
177 	private void textBox_pri_onTextInput(Event ev){
178 
179 	}
180 	private void button_rem_onMouseLClickRel(Event ev){
181 
182 	}
183 	private void button_rrem_onMouseLClickRel(Event ev){
184 
185 	}
186 	private void button_rep_onMouseLClickRel(Event ev){
187 
188 	}
189 	private void button_imp_onMouseLClickRel(Event ev){
190 		FileDialog f = new FileDialog("Import resources from file", "resImp", &onResourceImport, [FileDialog.FileAssociationDescriptor("MAP file", ["*.map"])], "./");
191 	}
192 	private void button_Add_onMouseLClickRel(Event ev){
193 		FileDialog f = new FileDialog("Add new tile", "tileAdd", &onAddTile, [FileDialog.FileAssociationDescriptor("XMP file", ["*.xmp"])], "./");
194 		parent.addWindow(f);
195 	}
196 	private void button_res_onMouseLClickRel(Event ev){
197 
198 	}
199 	private void button_prev_onMouseLClickRel(Event ev){
200 		selectedLayer = edi.getPreviousTileLayer(selectedLayer);
201 		layerName.setText(to!dstring(edi.document.tld[selectedLayer].name));
202 		sXRate.setText(to!dstring(edi.document.tld[selectedLayer].sX));
203 		sYRate.setText(to!dstring(edi.document.tld[selectedLayer].sY));
204 		sXOffset.setText(to!dstring(edi.document.tld[selectedLayer].sXOffset));
205 		sYOffset.setText(to!dstring(edi.document.tld[selectedLayer].sYOffset));
206 		checkBox_warp.value = edi.document.tld[selectedLayer].warp;
207 	}
208 	private void button_next_onMouseLClickRel(Event ev){
209 		selectedLayer = edi.getNextTileLayer(selectedLayer);
210 		layerName.setText(to!dstring(edi.document.tld[selectedLayer].name));
211 		sXRate.setText(to!dstring(edi.document.tld[selectedLayer].sX));
212 		sYRate.setText(to!dstring(edi.document.tld[selectedLayer].sY));
213 		sXOffset.setText(to!dstring(edi.document.tld[selectedLayer].sXOffset));
214 		sYOffset.setText(to!dstring(edi.document.tld[selectedLayer].sYOffset));
215 		checkBox_warp.value = edi.document.tld[selectedLayer].warp;
216 	}
217 	private void button_down_onMouseLClickRel(Event ev){
218 		selectedLayer = edi.moveLayerDown(selectedLayer);
219 	}
220 	private void button_up_onMouseLClickRel(Event ev){
221 		selectedLayer = edi.moveLayerUp(selectedLayer);
222 	}
223 	private void onAddTile(Event ev){
224 		import PixelPerfectEngine.extbmp.extbmp;
225 		Window w = new AddTiles(new ExtendibleBitmap(ev.path ~ ev.filename),edi.document,AddTiles.AcceptedBMPType.ALL,
226 					edi.document.tld[selectedLayer].tX,edi.document.tld[selectedLayer].tY,selectedLayer,edi.backgroundLayers[selectedLayer],edi.palman);
227 		parent.addWindow(w);
228 	}
229 	private void onResourceImport(Event ev){
230 
231 	}
232 }