package gdxstudio.panel; import gdxstudio.Frame; import gdxstudio.SceneEditor; import java.awt.Component; import java.awt.Insets; import javax.swing.BorderFactory; import javax.swing.DefaultCellEditor; import javax.swing.JComboBox; import javax.swing.JPanel; import javax.swing.JTable; import scene2d.Asset; import scene2d.ImageJson; import scene2d.Scene; import scene2d.Serializer; import scene2d.Sprite; import web.laf.lite.layout.ToolbarLayout; import web.laf.lite.utils.UIUtils; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.Touchable; import com.badlogic.gdx.scenes.scene2d.ui.CheckBox; import com.badlogic.gdx.scenes.scene2d.ui.Dialog; import com.badlogic.gdx.scenes.scene2d.ui.Label; import com.badlogic.gdx.scenes.scene2d.ui.Slider; import com.badlogic.gdx.scenes.scene2d.ui.TextButton; import com.badlogic.gdx.scenes.scene2d.ui.TextField; import com.badlogic.gdx.scenes.scene2d.ui.Touchpad; public class PropertyPanel extends BaseTable { private static final long serialVersionUID = 1L; JComboBox<String> fontcombo = createComboBox(); JComboBox<String> texcombo = createComboBox(); static int rowCount = 0; static int noOfRows = 16; public PropertyPanel(){ super("Properties", null, new PropertyRenderer()); editors.add(createTextFieldEditor()); //Name editors.add(createIntegerSpinner("X")); editors.add(createIntegerSpinner("Y")); editors.add(createIntegerSpinner("Width")); editors.add(createIntegerSpinner("Height")); editors.add(createIntegerSpinner("OriginX")); editors.add(createIntegerSpinner("OriginY")); editors.add(createIntegerSpinner("Rotation")); editors.add(createIntegerSpinner("Z-Index")); editors.add(new ColorEditor()); editors.add(createTouchableEditor()); //Touchable editors.add(createBooleanEditor()); //Visible editors.add(createTextFieldEditor()); editors.add(createTextFieldEditor()); editors.add(createTextFieldEditor()); editors.add(createTextFieldEditor()); } @Override public void clear(String... names){ super.clear("Name", "X", "Y", "Width", "Height", "OriginX", "OriginY", "Rotation", "Z-Index", "Color", "Touchable", "Visible", "", "", "", ""); } @Override public void update(String... names){ rowCount = 0; super.update("Name", ""+SceneEditor.selectedActor.getName(), "X", ""+SceneEditor.selectedActor.getX(), "Y", ""+SceneEditor.selectedActor.getY(), "Width", ""+SceneEditor.selectedActor.getWidth(), "Height", ""+SceneEditor.selectedActor.getHeight(), "OriginX",""+SceneEditor.selectedActor.getOriginX(), "OriginY",""+SceneEditor.selectedActor.getOriginY(),"Rotation",""+SceneEditor.selectedActor.getRotation(), "Z-Index", ""+SceneEditor.selectedActor.getZIndex(), "Color", ""+SceneEditor.selectedActor.getColor().toString(), "Touchable", ""+SceneEditor.selectedActor.getTouchable().toString(), "Visible", ""+SceneEditor.selectedActor.isVisible() ); editors.set(12, createTextFieldEditor()); editors.set(13, createTextFieldEditor()); editors.set(14, createTextFieldEditor()); editors.set(15, createTextFieldEditor()); /* From here it varies for each type */ if(SceneEditor.selectedActor instanceof ImageJson){ addRow("Texture", ""+((ImageJson)SceneEditor.selectedActor).getTexName()); // row 7 texcombo.removeAllItems(); for(String tex: Asset.texMap.keys()) texcombo.addItem(tex); editors.set(12, new DefaultCellEditor(texcombo)); } /* FONTS */ if(SceneEditor.selectedActor instanceof Label){ addRow("Font", ""+Asset.fontMap.getKey(((Label)SceneEditor.selectedActor).getStyle().font, false)); // row 7 addRow("Text", ""+((Label)SceneEditor.selectedActor).getText()); fontcombo.removeAllItems(); for(String font: Asset.fontMap.keys()) fontcombo.addItem(font); editors.set(12, new DefaultCellEditor(fontcombo)); } if(SceneEditor.selectedActor instanceof TextButton){ addRow("Text", ""+((TextButton)SceneEditor.selectedActor).getText()); } if(SceneEditor.selectedActor instanceof TextField){ addRow("Text", ""+((TextField)SceneEditor.selectedActor).getText()); addRow("MessageText", ""+((TextField)SceneEditor.selectedActor).getMessageText()); //addRow("Password", ""+((TextFieldJson)Sink.selectedActor).getPasswordMode()}); } if(SceneEditor.selectedActor instanceof CheckBox) addRow("Text", ""+((CheckBox)SceneEditor.selectedActor).getText()); if(SceneEditor.selectedActor instanceof Dialog){ editors.set(12, createBooleanEditor()); editors.set(13, createBooleanEditor()); editors.set(14, createBooleanEditor()); addRow("Modal", ""+((Dialog)SceneEditor.selectedActor).isModal()); //7 addRow("Moveble", ""+((Dialog)SceneEditor.selectedActor).isMovable()); //8 addRow("Resizable", ""+((Dialog)SceneEditor.selectedActor).isResizable()); //9 addRow("Text", ""+((Dialog)SceneEditor.selectedActor).getTitle()); } /* FONTS */ if(SceneEditor.selectedActor instanceof Touchpad){ addRow("Deadzone", ""+Serializer.TouchpadSerializer.deadZoneRadius); } if(SceneEditor.selectedActor instanceof Slider){ Slider slider = ((Slider)SceneEditor.selectedActor); addRow("Min", ""+slider.getMinValue()); addRow("Max", ""+slider.getMaxValue()); addRow("Step", ""+slider.getStepSize()); addRow("Value", ""+slider.getValue()); } if(SceneEditor.selectedActor instanceof Sprite){ Sprite sprite = ((Sprite)SceneEditor.selectedActor); editors.set(12, createBooleanEditor()); editors.set(13, createBooleanEditor()); addRow("Active", ""+sprite.isAnimationActive); addRow("Looping", ""+sprite.isAnimationLooping); addRow("Duration", ""+sprite.getDuration()); addRow("Textures", ""+sprite.toString()); } int value = getRowCount(); for(int i=0;i<noOfRows-value;i++) addRow("", ""); } @Override public void setProperty(String key, String value){ if(key.isEmpty() || value.isEmpty() || SceneEditor.selectedActor == null) return ; switch(key){ case "Name": for(Actor actor: Scene.getCurrentScene().getChildren()) if(actor != null) if(actor.getName() != null) if(actor.getName().equals(value)){ // Cant rename set back to old name updateProperty("Name", SceneEditor.selectedActor.getName(), 0); return; } Frame.actorPanel.renameActor(SceneEditor.selectedActor.getName(), value); SceneEditor.selectedActor.setName(value); break; case "X": SceneEditor.selectedActor.setX(Float.parseFloat(value));break; case "Y": SceneEditor.selectedActor.setY(Float.parseFloat(value));break; case "Width": SceneEditor.selectedActor.setWidth(Float.parseFloat(value));break; case "Height": SceneEditor.selectedActor.setHeight(Float.parseFloat(value));break; case "OriginX": SceneEditor.selectedActor.setOriginX(Float.parseFloat(value));break; case "OriginY": SceneEditor.selectedActor.setOriginY(Float.parseFloat(value));break; case "Rotation": SceneEditor.selectedActor.setRotation(Float.parseFloat(value));break; case "Z-Index": int z = Integer.parseInt(value); if(z>0 && z<Scene.getCurrentScene().getChildren().size){ SceneEditor.selectedActor.setZIndex(z); } //updateProperty("Z-Index", ""+SceneEditor.selectedActor.getZIndex(), 0); break; case "Color": if(value.length() == 8 && value.matches("[0-9A-Fa-f]+")) SceneEditor.selectedActor.setColor(Color.valueOf(value)); break; case "Touchable":SceneEditor.selectedActor.setTouchable(Touchable.valueOf(value));break; case "Visible":SceneEditor.selectedActor.setVisible(Boolean.parseBoolean(value));break; case "Text": if(SceneEditor.selectedActor instanceof Label){ ((Label)SceneEditor.selectedActor).setText(value); ((Label)SceneEditor.selectedActor).pack(); } if(SceneEditor.selectedActor instanceof TextButton){ ((TextButton)SceneEditor.selectedActor).setText(value); ((TextButton)SceneEditor.selectedActor).pack(); } if(SceneEditor.selectedActor instanceof TextField) ((TextField)SceneEditor.selectedActor).setText(value); if(SceneEditor.selectedActor instanceof CheckBox){ ((CheckBox)SceneEditor.selectedActor).setText(value); ((CheckBox)SceneEditor.selectedActor).pack(); } if(SceneEditor.selectedActor instanceof Dialog){ ((Dialog)SceneEditor.selectedActor).setTitle(value); ((Dialog)SceneEditor.selectedActor).pack(); } break; // TextField Related Properties case "MessageText": ((TextField)SceneEditor.selectedActor).setMessageText(value);break; case "Password": ((TextField)SceneEditor.selectedActor).setPasswordMode(Boolean.parseBoolean(value));break; //Slider Related Properties case "Value":((Slider)SceneEditor.selectedActor).setValue(Float.parseFloat(value));break; case "Step":((Slider)SceneEditor.selectedActor).setStepSize(Float.parseFloat(value));break; //Dialog Related Properties case "Modal": ((Dialog)SceneEditor.selectedActor).setModal(Boolean.parseBoolean(value)); break; case "Movable": ((Dialog)SceneEditor.selectedActor).setMovable(Boolean.parseBoolean(value)); break; case "Resizable": ((Dialog)SceneEditor.selectedActor).setResizable(Boolean.parseBoolean(value)); break; //Touchpad Related Properties case "Deadzone":Serializer.TouchpadSerializer.deadZoneRadius = Float.parseFloat(value); case "Texture": ImageJson img = (ImageJson)SceneEditor.selectedActor; ImageJson newimg = new ImageJson(value); newimg.setName(img.getName()); newimg.setX(img.getX()); newimg.setY(img.getY()); newimg.setWidth(img.getWidth()); newimg.setHeight(img.getHeight()); if(img.getZIndex() < 0) newimg.setZIndex(1); else newimg.setZIndex(img.getZIndex()); newimg.setColor(img.getColor()); Scene.getCurrentScene().removeActor(img); Scene.getCurrentScene().addActor(newimg); newimg.pack(); SceneEditor.selectedActor = newimg; break; case "Font": Label label = (Label)SceneEditor.selectedActor; Label.LabelStyle ls = new Label.LabelStyle(); ls.font = Asset.font(value); label.setStyle(ls); label.pack(); break; case "Textures": ((Sprite)SceneEditor.selectedActor).setTextures(value.split(",")); break; case "Duration": ((Sprite)SceneEditor.selectedActor).setDuration(Float.parseFloat((String)value)); break; case "Active": ((Sprite)SceneEditor.selectedActor).isAnimationActive= Boolean.parseBoolean(value); break; case "Looping": ((Sprite)SceneEditor.selectedActor).isAnimationLooping = Boolean.parseBoolean(value); break; } Scene.isDirty = true; Scene.getCurrentScene().outline(SceneEditor.selectedActor); Frame.dashPanel.update(); } @Override public void updateProperty(String key, String value, int row){ if(SceneEditor.selectedActor != null){ switch(key){ case "Name": super.updateProperty(key, value, 0);break; case "X": super.updateProperty(key, value, 1);break; case "Y": super.updateProperty(key, value, 2);break; case "Width": super.updateProperty(key, value, 3);break; case "Height": super.updateProperty(key, value, 4);break; case "Z-Index": super.updateProperty(key, value, 8);break; } } } } class PropertyRenderer extends BaseRenderer { private static final long serialVersionUID = 1L; @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { /*if(value instanceof Boolean) { // Boolean checkBox.setSelected(((Boolean) value).booleanValue()); checkBox.repaint(); checkBox.setHorizontalAlignment(JLabel.CENTER); return checkBox; }*/ //try { // Boolean.parseBoolean(value.toString()); // } catch ( java.text.ParseException e ) { // e.printStackTrace(); // } setBorder(noFocusBorder); if(column == 0) return new HeaderLabel(value.toString()); else { if(row >= 1 && row <=8){ if(!value.toString().isEmpty()) spinnerInteger.setValue((int)Float.parseFloat(value.toString())); else spinnerInteger.setValue(new Integer(0)); return spinnerInteger; } if(row == 9){ label.setOpaque(true); label.setBorder(BorderFactory.createLineBorder(java.awt.Color.gray)); String colorString = (String) value; if(colorString.length() == 8 && colorString.matches("[0-9A-Fa-f]+")){ com.badlogic.gdx.graphics.Color cl = com.badlogic.gdx.graphics.Color.valueOf(colorString); label.setBackground(new java.awt.Color(cl.r, cl.g, cl.b, cl.a)); } JPanel pan = new JPanel(new ToolbarLayout()); pan.setOpaque(false); UIUtils.setMargin(pan, new Insets(2,3,2,3)); pan.add(label); return pan; } } return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); } }