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 }