gdx-studio

#libgdx#java#desktop

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
}