gdx-studio
git clone https://git.pyrossh.dev/gdx-studio
An IDE for creating Games using libgdx and Java supported on all platforms Android, iOS, Desktop
src/gdxstudio/panel/PropertyPanel.java
| a9b2a64 | 1 | package gdxstudio.panel; |
| a9b2a64 | 2 | import gdxstudio.Frame; |
| a9b2a64 | 3 | import gdxstudio.SceneEditor; |
| a9b2a64 | 4 | |
| a62d533 | 5 | import java.awt.Component; |
| a62d533 | 6 | import java.awt.Insets; |
| a62d533 | 7 | |
| a62d533 | 8 | import javax.swing.BorderFactory; |
| a62d533 | 9 | import javax.swing.DefaultCellEditor; |
| a62d533 | 10 | import javax.swing.JComboBox; |
| a62d533 | 11 | import javax.swing.JPanel; |
| a62d533 | 12 | import javax.swing.JTable; |
| a62d533 | 13 | |
| a9b2a64 | 14 | import scene2d.Asset; |
| a9b2a64 | 15 | import scene2d.ImageJson; |
| a9b2a64 | 16 | import scene2d.Scene; |
| a9b2a64 | 17 | import scene2d.Serializer; |
| a9b2a64 | 18 | import scene2d.Sprite; |
| a62d533 | 19 | import web.laf.lite.layout.ToolbarLayout; |
| a62d533 | 20 | import web.laf.lite.utils.UIUtils; |
| a62d533 | 21 | |
| a62d533 | 22 | import com.badlogic.gdx.graphics.Color; |
| a62d533 | 23 | import com.badlogic.gdx.scenes.scene2d.Actor; |
| 7c84877 | 24 | import com.badlogic.gdx.scenes.scene2d.Touchable; |
| a62d533 | 25 | import com.badlogic.gdx.scenes.scene2d.ui.CheckBox; |
| a62d533 | 26 | import com.badlogic.gdx.scenes.scene2d.ui.Dialog; |
| a62d533 | 27 | import com.badlogic.gdx.scenes.scene2d.ui.Label; |
| a62d533 | 28 | import com.badlogic.gdx.scenes.scene2d.ui.Slider; |
| a62d533 | 29 | import com.badlogic.gdx.scenes.scene2d.ui.TextButton; |
| a62d533 | 30 | import com.badlogic.gdx.scenes.scene2d.ui.TextField; |
| a62d533 | 31 | import com.badlogic.gdx.scenes.scene2d.ui.Touchpad; |
| a62d533 | 32 | |
| a62d533 | 33 | public class PropertyPanel extends BaseTable {
|
| a62d533 | 34 | private static final long serialVersionUID = 1L; |
| a62d533 | 35 | |
| a62d533 | 36 | JComboBox<String> fontcombo = createComboBox(); |
| a62d533 | 37 | JComboBox<String> texcombo = createComboBox(); |
| a62d533 | 38 | |
| a62d533 | 39 | static int rowCount = 0; |
| 7c84877 | 40 | static int noOfRows = 16; |
| a62d533 | 41 | |
| a62d533 | 42 | public PropertyPanel(){
|
| a62d533 | 43 | super("Properties", null, new PropertyRenderer());
|
| 7c84877 | 44 | editors.add(createTextFieldEditor()); //Name |
| a62d533 | 45 | editors.add(createIntegerSpinner("X"));
|
| a62d533 | 46 | editors.add(createIntegerSpinner("Y"));
|
| a62d533 | 47 | editors.add(createIntegerSpinner("Width"));
|
| a62d533 | 48 | editors.add(createIntegerSpinner("Height"));
|
| 7c84877 | 49 | editors.add(createIntegerSpinner("OriginX"));
|
| 7c84877 | 50 | editors.add(createIntegerSpinner("OriginY"));
|
| 7c84877 | 51 | editors.add(createIntegerSpinner("Rotation"));
|
| a62d533 | 52 | editors.add(createIntegerSpinner("Z-Index"));
|
| a62d533 | 53 | editors.add(new ColorEditor()); |
| 7c84877 | 54 | editors.add(createTouchableEditor()); //Touchable |
| 7c84877 | 55 | editors.add(createBooleanEditor()); //Visible |
| a62d533 | 56 | editors.add(createTextFieldEditor()); |
| a62d533 | 57 | editors.add(createTextFieldEditor()); |
| a62d533 | 58 | editors.add(createTextFieldEditor()); |
| a62d533 | 59 | editors.add(createTextFieldEditor()); |
| a62d533 | 60 | } |
| a62d533 | 61 | |
| a62d533 | 62 | @Override |
| a62d533 | 63 | public void clear(String... names){
|
| 7c84877 | 64 | super.clear("Name", "X", "Y", "Width", "Height", "OriginX", "OriginY", "Rotation", "Z-Index", "Color", "Touchable", "Visible", "", "", "", "");
|
| a62d533 | 65 | } |
| a62d533 | 66 | |
| a62d533 | 67 | @Override |
| a62d533 | 68 | public void update(String... names){
|
| a62d533 | 69 | rowCount = 0; |
| a9b2a64 | 70 | super.update("Name", ""+SceneEditor.selectedActor.getName(), "X", ""+SceneEditor.selectedActor.getX(),
|
| a9b2a64 | 71 | "Y", ""+SceneEditor.selectedActor.getY(), "Width", ""+SceneEditor.selectedActor.getWidth(), |
| a9b2a64 | 72 | "Height", ""+SceneEditor.selectedActor.getHeight(), "OriginX",""+SceneEditor.selectedActor.getOriginX(), |
| a9b2a64 | 73 | "OriginY",""+SceneEditor.selectedActor.getOriginY(),"Rotation",""+SceneEditor.selectedActor.getRotation(), |
| a9b2a64 | 74 | "Z-Index", ""+SceneEditor.selectedActor.getZIndex(), |
| 7c84877 | 75 | "Color", ""+SceneEditor.selectedActor.getColor().toString(), |
| 7c84877 | 76 | "Touchable", ""+SceneEditor.selectedActor.getTouchable().toString(), |
| 7c84877 | 77 | "Visible", ""+SceneEditor.selectedActor.isVisible() |
| 7c84877 | 78 | ); |
| 7c84877 | 79 | editors.set(12, createTextFieldEditor()); |
| 7c84877 | 80 | editors.set(13, createTextFieldEditor()); |
| 7c84877 | 81 | editors.set(14, createTextFieldEditor()); |
| 7c84877 | 82 | editors.set(15, createTextFieldEditor()); |
| a62d533 | 83 | |
| a62d533 | 84 | /* From here it varies for each type */ |
| a62d533 | 85 | if(SceneEditor.selectedActor instanceof ImageJson){
|
| a62d533 | 86 | addRow("Texture", ""+((ImageJson)SceneEditor.selectedActor).getTexName()); // row 7
|
| a62d533 | 87 | texcombo.removeAllItems(); |
| a62d533 | 88 | for(String tex: Asset.texMap.keys()) |
| a62d533 | 89 | texcombo.addItem(tex); |
| 7c84877 | 90 | editors.set(12, new DefaultCellEditor(texcombo)); |
| a62d533 | 91 | } |
| a62d533 | 92 | |
| a62d533 | 93 | /* FONTS */ |
| a62d533 | 94 | if(SceneEditor.selectedActor instanceof Label){
|
| a62d533 | 95 | addRow("Font", ""+Asset.fontMap.getKey(((Label)SceneEditor.selectedActor).getStyle().font, false)); // row 7
|
| a62d533 | 96 | addRow("Text", ""+((Label)SceneEditor.selectedActor).getText());
|
| a62d533 | 97 | fontcombo.removeAllItems(); |
| a62d533 | 98 | for(String font: Asset.fontMap.keys()) |
| a62d533 | 99 | fontcombo.addItem(font); |
| 7c84877 | 100 | editors.set(12, new DefaultCellEditor(fontcombo)); |
| a62d533 | 101 | } |
| a62d533 | 102 | |
| a62d533 | 103 | if(SceneEditor.selectedActor instanceof TextButton){
|
| a62d533 | 104 | addRow("Text", ""+((TextButton)SceneEditor.selectedActor).getText());
|
| a62d533 | 105 | } |
| a62d533 | 106 | |
| a62d533 | 107 | if(SceneEditor.selectedActor instanceof TextField){
|
| a62d533 | 108 | addRow("Text", ""+((TextField)SceneEditor.selectedActor).getText());
|
| a62d533 | 109 | addRow("MessageText", ""+((TextField)SceneEditor.selectedActor).getMessageText());
|
| a62d533 | 110 | //addRow("Password", ""+((TextFieldJson)Sink.selectedActor).getPasswordMode()});
|
| a62d533 | 111 | } |
| a62d533 | 112 | if(SceneEditor.selectedActor instanceof CheckBox) |
| a62d533 | 113 | addRow("Text", ""+((CheckBox)SceneEditor.selectedActor).getText());
|
| a62d533 | 114 | |
| a62d533 | 115 | if(SceneEditor.selectedActor instanceof Dialog){
|
| 7c84877 | 116 | editors.set(12, createBooleanEditor()); |
| 7c84877 | 117 | editors.set(13, createBooleanEditor()); |
| 7c84877 | 118 | editors.set(14, createBooleanEditor()); |
| a62d533 | 119 | addRow("Modal", ""+((Dialog)SceneEditor.selectedActor).isModal()); //7
|
| a62d533 | 120 | addRow("Moveble", ""+((Dialog)SceneEditor.selectedActor).isMovable()); //8
|
| a62d533 | 121 | addRow("Resizable", ""+((Dialog)SceneEditor.selectedActor).isResizable()); //9
|
| a62d533 | 122 | addRow("Text", ""+((Dialog)SceneEditor.selectedActor).getTitle());
|
| a62d533 | 123 | } |
| a62d533 | 124 | /* FONTS */ |
| a62d533 | 125 | |
| a62d533 | 126 | if(SceneEditor.selectedActor instanceof Touchpad){
|
| a62d533 | 127 | addRow("Deadzone", ""+Serializer.TouchpadSerializer.deadZoneRadius);
|
| a62d533 | 128 | } |
| a62d533 | 129 | |
| a62d533 | 130 | if(SceneEditor.selectedActor instanceof Slider){
|
| a62d533 | 131 | Slider slider = ((Slider)SceneEditor.selectedActor); |
| a62d533 | 132 | addRow("Min", ""+slider.getMinValue());
|
| a62d533 | 133 | addRow("Max", ""+slider.getMaxValue());
|
| a62d533 | 134 | addRow("Step", ""+slider.getStepSize());
|
| a62d533 | 135 | addRow("Value", ""+slider.getValue());
|
| a62d533 | 136 | } |
| a62d533 | 137 | if(SceneEditor.selectedActor instanceof Sprite){
|
| a62d533 | 138 | Sprite sprite = ((Sprite)SceneEditor.selectedActor); |
| 7c84877 | 139 | editors.set(12, createBooleanEditor()); |
| 7c84877 | 140 | editors.set(13, createBooleanEditor()); |
| a62d533 | 141 | addRow("Active", ""+sprite.isAnimationActive);
|
| a62d533 | 142 | addRow("Looping", ""+sprite.isAnimationLooping);
|
| a62d533 | 143 | addRow("Duration", ""+sprite.getDuration());
|
| a62d533 | 144 | addRow("Textures", ""+sprite.toString());
|
| a62d533 | 145 | } |
| a62d533 | 146 | int value = getRowCount(); |
| 7c84877 | 147 | for(int i=0;i<noOfRows-value;i++) |
| a62d533 | 148 | addRow("", "");
|
| a62d533 | 149 | } |
| a62d533 | 150 | |
| a62d533 | 151 | |
| a62d533 | 152 | @Override |
| a62d533 | 153 | public void setProperty(String key, String value){
|
| a62d533 | 154 | if(key.isEmpty() || value.isEmpty() || SceneEditor.selectedActor == null) |
| a62d533 | 155 | return ; |
| a62d533 | 156 | switch(key){
|
| a62d533 | 157 | case "Name": |
| a9b2a64 | 158 | for(Actor actor: Scene.getCurrentScene().getChildren()) |
| a62d533 | 159 | if(actor != null) |
| a62d533 | 160 | if(actor.getName() != null) |
| a62d533 | 161 | if(actor.getName().equals(value)){
|
| a62d533 | 162 | // Cant rename set back to old name |
| a62d533 | 163 | updateProperty("Name", SceneEditor.selectedActor.getName(), 0);
|
| a62d533 | 164 | return; |
| a62d533 | 165 | } |
| a62d533 | 166 | Frame.actorPanel.renameActor(SceneEditor.selectedActor.getName(), value); |
| a62d533 | 167 | SceneEditor.selectedActor.setName(value); |
| a62d533 | 168 | break; |
| a62d533 | 169 | case "X": SceneEditor.selectedActor.setX(Float.parseFloat(value));break; |
| a62d533 | 170 | case "Y": SceneEditor.selectedActor.setY(Float.parseFloat(value));break; |
| a62d533 | 171 | case "Width": SceneEditor.selectedActor.setWidth(Float.parseFloat(value));break; |
| a62d533 | 172 | case "Height": SceneEditor.selectedActor.setHeight(Float.parseFloat(value));break; |
| 7c84877 | 173 | case "OriginX": SceneEditor.selectedActor.setOriginX(Float.parseFloat(value));break; |
| 7c84877 | 174 | case "OriginY": SceneEditor.selectedActor.setOriginY(Float.parseFloat(value));break; |
| 7c84877 | 175 | case "Rotation": SceneEditor.selectedActor.setRotation(Float.parseFloat(value));break; |
| a62d533 | 176 | case "Z-Index": |
| a62d533 | 177 | int z = Integer.parseInt(value); |
| a9b2a64 | 178 | if(z>0 && z<Scene.getCurrentScene().getChildren().size){
|
| a62d533 | 179 | SceneEditor.selectedActor.setZIndex(z); |
| a9b2a64 | 180 | } |
| a9b2a64 | 181 | //updateProperty("Z-Index", ""+SceneEditor.selectedActor.getZIndex(), 0);
|
| a62d533 | 182 | break; |
| 7c84877 | 183 | case "Color": |
| 7c84877 | 184 | if(value.length() == 8 && value.matches("[0-9A-Fa-f]+"))
|
| 7c84877 | 185 | SceneEditor.selectedActor.setColor(Color.valueOf(value)); |
| 7c84877 | 186 | break; |
| 7c84877 | 187 | case "Touchable":SceneEditor.selectedActor.setTouchable(Touchable.valueOf(value));break; |
| 7c84877 | 188 | case "Visible":SceneEditor.selectedActor.setVisible(Boolean.parseBoolean(value));break; |
| 7c84877 | 189 | |
| 7c84877 | 190 | |
| 7c84877 | 191 | |
| a62d533 | 192 | case "Text": |
| a62d533 | 193 | if(SceneEditor.selectedActor instanceof Label){
|
| a62d533 | 194 | ((Label)SceneEditor.selectedActor).setText(value); |
| a62d533 | 195 | ((Label)SceneEditor.selectedActor).pack(); |
| a62d533 | 196 | } |
| a62d533 | 197 | if(SceneEditor.selectedActor instanceof TextButton){
|
| a62d533 | 198 | ((TextButton)SceneEditor.selectedActor).setText(value); |
| a62d533 | 199 | ((TextButton)SceneEditor.selectedActor).pack(); |
| a62d533 | 200 | } |
| a62d533 | 201 | if(SceneEditor.selectedActor instanceof TextField) |
| a62d533 | 202 | ((TextField)SceneEditor.selectedActor).setText(value); |
| a62d533 | 203 | if(SceneEditor.selectedActor instanceof CheckBox){
|
| a62d533 | 204 | ((CheckBox)SceneEditor.selectedActor).setText(value); |
| a62d533 | 205 | ((CheckBox)SceneEditor.selectedActor).pack(); |
| a62d533 | 206 | } |
| a62d533 | 207 | if(SceneEditor.selectedActor instanceof Dialog){
|
| a62d533 | 208 | ((Dialog)SceneEditor.selectedActor).setTitle(value); |
| a62d533 | 209 | ((Dialog)SceneEditor.selectedActor).pack(); |
| a62d533 | 210 | } |
| a62d533 | 211 | break; |
| a62d533 | 212 | |
| a62d533 | 213 | // TextField Related Properties |
| a62d533 | 214 | case "MessageText": ((TextField)SceneEditor.selectedActor).setMessageText(value);break; |
| a62d533 | 215 | case "Password": ((TextField)SceneEditor.selectedActor).setPasswordMode(Boolean.parseBoolean(value));break; |
| a62d533 | 216 | |
| a62d533 | 217 | |
| a62d533 | 218 | //Slider Related Properties |
| a62d533 | 219 | case "Value":((Slider)SceneEditor.selectedActor).setValue(Float.parseFloat(value));break; |
| a62d533 | 220 | case "Step":((Slider)SceneEditor.selectedActor).setStepSize(Float.parseFloat(value));break; |
| a62d533 | 221 | |
| a62d533 | 222 | //Dialog Related Properties |
| a62d533 | 223 | case "Modal": |
| a62d533 | 224 | ((Dialog)SceneEditor.selectedActor).setModal(Boolean.parseBoolean(value)); |
| a62d533 | 225 | break; |
| a62d533 | 226 | case "Movable": |
| a62d533 | 227 | ((Dialog)SceneEditor.selectedActor).setMovable(Boolean.parseBoolean(value)); |
| a62d533 | 228 | break; |
| a62d533 | 229 | case "Resizable": |
| a62d533 | 230 | ((Dialog)SceneEditor.selectedActor).setResizable(Boolean.parseBoolean(value)); |
| a62d533 | 231 | break; |
| a62d533 | 232 | |
| a62d533 | 233 | //Touchpad Related Properties |
| a62d533 | 234 | case "Deadzone":Serializer.TouchpadSerializer.deadZoneRadius = Float.parseFloat(value); |
| a62d533 | 235 | |
| a62d533 | 236 | case "Texture": |
| a62d533 | 237 | ImageJson img = (ImageJson)SceneEditor.selectedActor; |
| a62d533 | 238 | ImageJson newimg = new ImageJson(value); |
| a62d533 | 239 | newimg.setName(img.getName()); |
| a62d533 | 240 | newimg.setX(img.getX()); |
| a62d533 | 241 | newimg.setY(img.getY()); |
| a62d533 | 242 | newimg.setWidth(img.getWidth()); |
| a62d533 | 243 | newimg.setHeight(img.getHeight()); |
| a62d533 | 244 | if(img.getZIndex() < 0) |
| a62d533 | 245 | newimg.setZIndex(1); |
| a62d533 | 246 | else |
| a62d533 | 247 | newimg.setZIndex(img.getZIndex()); |
| a62d533 | 248 | newimg.setColor(img.getColor()); |
| a9b2a64 | 249 | Scene.getCurrentScene().removeActor(img); |
| a9b2a64 | 250 | Scene.getCurrentScene().addActor(newimg); |
| a62d533 | 251 | newimg.pack(); |
| a62d533 | 252 | SceneEditor.selectedActor = newimg; |
| a62d533 | 253 | break; |
| a62d533 | 254 | case "Font": |
| a62d533 | 255 | Label label = (Label)SceneEditor.selectedActor; |
| a62d533 | 256 | Label.LabelStyle ls = new Label.LabelStyle(); |
| a62d533 | 257 | ls.font = Asset.font(value); |
| a62d533 | 258 | label.setStyle(ls); |
| a62d533 | 259 | label.pack(); |
| a62d533 | 260 | break; |
| a62d533 | 261 | |
| a62d533 | 262 | case "Textures": |
| a62d533 | 263 | ((Sprite)SceneEditor.selectedActor).setTextures(value.split(","));
|
| a62d533 | 264 | break; |
| a62d533 | 265 | |
| a62d533 | 266 | case "Duration": |
| a62d533 | 267 | ((Sprite)SceneEditor.selectedActor).setDuration(Float.parseFloat((String)value)); |
| a62d533 | 268 | break; |
| a62d533 | 269 | |
| a62d533 | 270 | case "Active": |
| a62d533 | 271 | ((Sprite)SceneEditor.selectedActor).isAnimationActive= Boolean.parseBoolean(value); |
| a62d533 | 272 | break; |
| a62d533 | 273 | |
| a62d533 | 274 | case "Looping": |
| a62d533 | 275 | ((Sprite)SceneEditor.selectedActor).isAnimationLooping = Boolean.parseBoolean(value); |
| a62d533 | 276 | break; |
| a62d533 | 277 | } |
| a9b2a64 | 278 | Scene.isDirty = true; |
| a9b2a64 | 279 | Scene.getCurrentScene().outline(SceneEditor.selectedActor); |
| a62d533 | 280 | Frame.dashPanel.update(); |
| a62d533 | 281 | } |
| a62d533 | 282 | |
| a62d533 | 283 | @Override |
| a62d533 | 284 | public void updateProperty(String key, String value, int row){
|
| a62d533 | 285 | if(SceneEditor.selectedActor != null){
|
| a62d533 | 286 | switch(key){
|
| a62d533 | 287 | case "Name": super.updateProperty(key, value, 0);break; |
| a62d533 | 288 | case "X": super.updateProperty(key, value, 1);break; |
| a62d533 | 289 | case "Y": super.updateProperty(key, value, 2);break; |
| a62d533 | 290 | case "Width": super.updateProperty(key, value, 3);break; |
| a62d533 | 291 | case "Height": super.updateProperty(key, value, 4);break; |
| 7c84877 | 292 | case "Z-Index": super.updateProperty(key, value, 8);break; |
| a62d533 | 293 | } |
| a62d533 | 294 | } |
| a62d533 | 295 | } |
| a62d533 | 296 | } |
| a62d533 | 297 | |
| a62d533 | 298 | class PropertyRenderer extends BaseRenderer {
|
| a62d533 | 299 | private static final long serialVersionUID = 1L; |
| a62d533 | 300 | |
| a62d533 | 301 | @Override |
| a62d533 | 302 | public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
|
| a62d533 | 303 | /*if(value instanceof Boolean) { // Boolean
|
| a62d533 | 304 | checkBox.setSelected(((Boolean) value).booleanValue()); |
| a62d533 | 305 | checkBox.repaint(); |
| a62d533 | 306 | checkBox.setHorizontalAlignment(JLabel.CENTER); |
| a62d533 | 307 | return checkBox; |
| a62d533 | 308 | }*/ |
| 7c84877 | 309 | //try {
|
| a9b2a64 | 310 | // Boolean.parseBoolean(value.toString()); |
| 7c84877 | 311 | // } catch ( java.text.ParseException e ) {
|
| 7c84877 | 312 | // e.printStackTrace(); |
| 7c84877 | 313 | // } |
| a62d533 | 314 | setBorder(noFocusBorder); |
| a62d533 | 315 | if(column == 0) |
| a62d533 | 316 | return new HeaderLabel(value.toString()); |
| a62d533 | 317 | else {
|
| 7c84877 | 318 | if(row >= 1 && row <=8){
|
| a62d533 | 319 | if(!value.toString().isEmpty()) |
| 7c84877 | 320 | spinnerInteger.setValue((int)Float.parseFloat(value.toString())); |
| a62d533 | 321 | else |
| a62d533 | 322 | spinnerInteger.setValue(new Integer(0)); |
| a62d533 | 323 | return spinnerInteger; |
| a62d533 | 324 | } |
| 7c84877 | 325 | if(row == 9){
|
| a62d533 | 326 | label.setOpaque(true); |
| a62d533 | 327 | label.setBorder(BorderFactory.createLineBorder(java.awt.Color.gray)); |
| a62d533 | 328 | String colorString = (String) value; |
| a62d533 | 329 | if(colorString.length() == 8 && colorString.matches("[0-9A-Fa-f]+")){
|
| a62d533 | 330 | com.badlogic.gdx.graphics.Color cl = com.badlogic.gdx.graphics.Color.valueOf(colorString); |
| a62d533 | 331 | label.setBackground(new java.awt.Color(cl.r, cl.g, cl.b, cl.a)); |
| a62d533 | 332 | } |
| a62d533 | 333 | JPanel pan = new JPanel(new ToolbarLayout()); |
| a62d533 | 334 | pan.setOpaque(false); |
| a62d533 | 335 | UIUtils.setMargin(pan, new Insets(2,3,2,3)); |
| a62d533 | 336 | pan.add(label); |
| a62d533 | 337 | return pan; |
| a62d533 | 338 | } |
| a62d533 | 339 | } |
| a62d533 | 340 | return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); |
| a62d533 | 341 | } |
| a62d533 | 342 | } |