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 }