1 module windows.layerlist; 2 3 import pixelperfectengine.concrete.window; 4 import app; 5 import std.utf : toUTF32, toUTF8; 6 import std.conv : to; 7 import pixelperfectengine.graphics.layers; 8 import pixelperfectengine.map.mapformat : LayerInfo; 9 10 public class LayerList : Window { 11 //ListBox listBox_layers; 12 ListView listView_layers; 13 SmallButton[] buttons; 14 CheckBox checkBox_Hide; 15 CheckBox checkBox_Solo; 16 public this(int x, int y, void delegate() onClose){ 17 //super(Coordinate(0 + x, 16 + y, 98 + x, 213 + y), "Layers"d); 18 super(Coordinate(0 + x, 0 + y, 129 + x, 213 + y), "Layers"d); 19 this.onClose = onClose; 20 //StyleSheet ss = getStyleSheet(); 21 /+listBox_layers = new ListBox("listBox0", Coordinate(1, 17, 129, 180), [], new ListBoxHeader(["Pri"d ,"Type"d, "Name"d], 22 [24, 24, 96]));+/ 23 listView_layers = new ListView( 24 new ListViewHeader(16, [24, 24, 96], ["Pri"d ,"Type"d, "Name"d]), null, "listView_layers", Box(1, 17, 128, 179) 25 ); 26 listView_layers.editEnable = true; 27 listView_layers.multicellEditEnable = true; 28 addElement(listView_layers); 29 listView_layers.onItemSelect = &listBox_layers_onItemSelect; 30 listView_layers.onTextInput = &layerList_TextEdit; 31 {//0 32 SmallButton sb = new SmallButton("trashButtonB", "trashButtonA", "trash", Box(113, 197, 129, 213)); 33 sb.onMouseLClick = &button_trash_onClick; 34 buttons ~= sb; 35 } 36 {//1 37 SmallButton sb = new SmallButton("settingsButtonB", "settingsButtonA", "editMat", Box(97, 197, 113, 213)); 38 //sb.onMouseLClickRel = &button_trash_onClick; 39 buttons ~= sb; 40 } 41 {//2 42 SmallButton sb = new SmallButton("newTileLayerButtonB", "newTileLayerButtonA", "newTileLayer", 43 Box(1, 181, 16, 196)); 44 sb.onMouseLClick = &button_newTileLayer_onClick; 45 buttons ~= sb; 46 } 47 {//3 48 SmallButton sb = new SmallButton("newSpriteLayerButtonB", "newSpriteLayerButtonA", "newSpriteLayer", 49 Box(17, 181, 32, 196)); 50 sb.onMouseLClick = &button_newSpriteLayer_onClick; 51 buttons ~= sb; 52 } 53 {//4 54 SmallButton sb = new SmallButton("newTransformableTileLayerButtonB", "newTransformableTileLayerButtonA", 55 "newTransformableTileLayer", Box(33, 181, 48, 196)); 56 sb.onMouseLClick = &button_newTransformableTileLayer_onClick; 57 buttons ~= sb; 58 } 59 {//5 60 SmallButton sb = new SmallButton("importMaterialDataButtonB", "importMaterialDataButtonA", "importMat", 61 Box(97, 181, 113, 196)); 62 sb.onMouseLClick = &button_importMaterialData_onClick; 63 buttons ~= sb; 64 } 65 {//6 66 SmallButton sb = new SmallButton("importLayerDataButtonB", "importLayerDataButtonA", "importLayer", 67 Box(113, 181, 129, 196)); 68 sb.onMouseLClick = &button_importLayerData_onClick; 69 buttons ~= sb; 70 } 71 checkBox_Hide = new CheckBox("visibilityButtonB", "visibilityButtonA", "checkBox_Hide", Box(1, 197, 16, 212)); 72 checkBox_Hide.onToggle = &checkBox_Hide_onToggle; 73 addElement(checkBox_Hide); 74 checkBox_Solo = new CheckBox("soloButtonB", "soloButtonA", "checkBox_Solo", Box(17, 197, 32, 212)); 75 checkBox_Solo.onToggle = &checkBox_Solo_onToggle; 76 addElement(checkBox_Solo); 77 /+{ 78 SmallButton sb = new SmallButton("upArrowB", "upArrowA", "moveLayerUp", Coordinate(1, 197, 16, 212)); 79 sb.onMouseLClick = &button_moveLayerUp_onClick; 80 buttons ~= sb; 81 } 82 { 83 SmallButton sb = new SmallButton("downArrowB", "downArrowA", "moveLayerDown", Coordinate(17, 197, 32, 212)); 84 sb.onMouseLClick = &button_moveLayerDown_onClick; 85 buttons ~= sb; 86 }+/ 87 foreach(sb ; buttons){ 88 addElement(sb); 89 } 90 //CheckBox_Visible = new CheckBox("Visible"d, "CheckBox0", Coordinate(1, 180, 97, 196)); 91 } 92 private void listBox_layers_onItemSelect(Event ev){ 93 if (prg.selDoc !is null) { 94 ListViewItem lbi = cast(ListViewItem)ev.aux; 95 const int selectedLayer = to!int(lbi.fields[0].text.text); 96 prg.selDoc.selectedLayer = selectedLayer; 97 prg.selDoc.updateMaterialList(); 98 if (selectedLayer in prg.selDoc.outputWindow.hiddenLayers) 99 checkBox_Hide.check(); 100 else 101 checkBox_Hide.unCheck(); 102 if (selectedLayer in prg.selDoc.outputWindow.soloedLayers) 103 checkBox_Solo.check(); 104 else 105 checkBox_Solo.unCheck(); 106 } 107 } 108 private void button_trash_onClick(Event ev){ 109 if (prg.selDoc !is null) { 110 prg.selDoc.removeLayer(); 111 } 112 } 113 private void button_newTileLayer_onClick(Event ev){ 114 prg.initNewTileLayer; 115 } 116 private void button_newSpriteLayer_onClick(Event ev){ 117 118 } 119 private void button_newTransformableTileLayer_onClick(Event ev){ 120 121 } 122 private void button_importMaterialData_onClick(Event ev){ 123 124 } 125 private void button_importLayerData_onClick(Event ev){ 126 127 } 128 private void checkBox_Hide_onToggle(Event ev){ 129 if (prg.selDoc !is null) { 130 const int selectedLayer = to!int(listView_layers[listView_layers.value][0].text.text); 131 if (checkBox_Hide.isChecked) 132 prg.selDoc.outputWindow.hiddenLayers.put(selectedLayer); 133 else 134 prg.selDoc.outputWindow.hiddenLayers.removeByElem(selectedLayer); 135 } 136 } 137 private void checkBox_Solo_onToggle(Event ev){ 138 if (prg.selDoc !is null) { 139 const int selectedLayer = to!int(listView_layers[listView_layers.value][0].text.text); 140 if (checkBox_Hide.isChecked) 141 prg.selDoc.outputWindow.soloedLayers.put(selectedLayer); 142 else 143 prg.selDoc.outputWindow.soloedLayers.removeByElem(selectedLayer); 144 } 145 } 146 public void updateLayerList(LayerInfo[] items) { 147 //ListViewItem[] list; 148 listView_layers.clear(); 149 foreach (i ; items) { 150 //list ~= new ListViewItem(16, [to!dstring(i.pri), to!dstring(i.type), toUTF32(i.name)]); 151 ListViewItem lvi = new ListViewItem(16, [to!dstring(i.pri), to!dstring(i.type), toUTF32(i.name)]); 152 lvi[0].editable = true; 153 lvi[0].integer = true; 154 lvi[2].editable = true; 155 listView_layers ~= lvi; 156 } 157 listView_layers.refresh; 158 //listView_layers.(list); 159 } 160 private void layerList_TextEdit(Event ev) { 161 import pixelperfectengine.system.etc : isInteger; 162 CellEditEvent cee = cast(CellEditEvent)ev; 163 if (prg.selDoc !is null) { 164 if (cee.column == 2) { //Rename 165 prg.selDoc.renameLayer(toUTF8(cee.text.text)); 166 } else if (isInteger(cee.text.text)) { //Set new priority 167 prg.selDoc.changeLayerPriority(to!int(cee.text.text)); 168 } 169 } 170 } 171 public override void close(){ 172 if(onClose !is null){ 173 onClose(); 174 } 175 super.close; 176 } 177 public void nextLayer() { 178 if (prg.selDoc !is null) { 179 listView_layers.value = listView_layers.value + 1; 180 const int selectedLayer = to!int(listView_layers[listView_layers.value][0].text.text); 181 prg.selDoc.selectedLayer = selectedLayer; 182 prg.selDoc.updateMaterialList(); 183 if (selectedLayer in prg.selDoc.outputWindow.hiddenLayers) 184 checkBox_Hide.check(); 185 else 186 checkBox_Hide.unCheck(); 187 if (selectedLayer in prg.selDoc.outputWindow.soloedLayers) 188 checkBox_Solo.check(); 189 else 190 checkBox_Solo.unCheck(); 191 } 192 } 193 public void prevLayer() { 194 if (prg.selDoc !is null) { 195 listView_layers.value = listView_layers.value - 1; 196 const int selectedLayer = to!int(listView_layers[listView_layers.value][0].text.text); 197 prg.selDoc.selectedLayer = selectedLayer; 198 prg.selDoc.updateMaterialList(); 199 if (selectedLayer in prg.selDoc.outputWindow.hiddenLayers) 200 checkBox_Hide.check(); 201 else 202 checkBox_Hide.unCheck(); 203 if (selectedLayer in prg.selDoc.outputWindow.soloedLayers) 204 checkBox_Solo.check(); 205 else 206 checkBox_Solo.unCheck(); 207 } 208 } 209 }