/******************************************************************************* * Copyright 2014 Rafael Garcia Moreno. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package com.bladecoder.engineeditor.ui; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import com.badlogic.gdx.scenes.scene2d.ui.Skin; import com.bladecoder.engine.model.BaseActor; import com.bladecoder.engine.model.InteractiveActor; import com.bladecoder.engine.model.SpriteActor; import com.bladecoder.engineeditor.Ctx; import com.bladecoder.engineeditor.common.EditorLogger; import com.bladecoder.engineeditor.model.Project; import com.bladecoder.engineeditor.ui.panels.PropertyTable; import com.eclipsesource.json.ParseException; public class ActorProps extends PropertyTable { public static final String DESC_PROP = "Description"; public static final String POS_X_PROP = "pos X"; public static final String POS_Y_PROP = "pos Y"; public static final String VISIBLE_PROP = "visible"; public static final String INTERACTION_PROP = "interaction"; public static final String STATE_PROP = "state"; public static final String BBOX_FROM_RENDERER_PROP = "Set BBOX from renderer"; private BaseActor actor; // TableModelListener tableModelListener = new TableModelListener() { // @Override // public void tableChanged(TableModelEvent e) { // if (e.getType() == TableModelEvent.UPDATE) { // int row = e.getFirstRow(); // updateModel((String) propertyTable.getModel().getValueAt(row, 0), // (String) propertyTable.getModel().getValueAt(row, 1)); // } // } // }; PropertyChangeListener propertyChangeListener = new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { EditorLogger.debug("Actor Props Listener: " + evt.getPropertyName()); updateField(evt.getPropertyName()); } }; public ActorProps(Skin skin) { super(skin); } private void updateField(String modelProperty) { if(actor==null) return; if (modelProperty.equals("desc")) { setProperty(DESC_PROP, ((InteractiveActor)actor).getDesc()); } else if (modelProperty.equals(Project.POSITION_PROPERTY)) { setProperty(POS_X_PROP, Float.toString(actor.getX())); setProperty(POS_Y_PROP, Float.toString(actor.getY())); } else if (modelProperty.equals("visible")) { setProperty(VISIBLE_PROP, Boolean.toString(actor.isVisible())); } else if (modelProperty.equals("interaction")) { setProperty(INTERACTION_PROP, Boolean.toString(((InteractiveActor)actor).getInteraction())); } else if (modelProperty.equals("state")) { setProperty(STATE_PROP, ((InteractiveActor)actor).getState()); } else if (modelProperty.equals("bbox")) { // TODO Conflict with scnwidget // boolean v = value.isEmpty(); // setProperty(BBOX_FROM_RENDERER_PROP, Boolean.toString(v)); } } public void setActorDocument(BaseActor a) { this.actor = a; clearProps(); if (a != null) { addProperty(POS_X_PROP, Float.toString(actor.getX()), Types.FLOAT); addProperty(POS_Y_PROP, Float.toString(actor.getY()), Types.FLOAT); addProperty(VISIBLE_PROP, Boolean.toString(actor.isVisible()), Types.BOOLEAN); if (a instanceof InteractiveActor) { addProperty(DESC_PROP, ((InteractiveActor)actor).getDesc()); addProperty(INTERACTION_PROP, Boolean.toString(((InteractiveActor)actor).getInteraction()), Types.BOOLEAN); addProperty(STATE_PROP, ((InteractiveActor)actor).getState()); } if (a instanceof SpriteActor) { boolean v = ((SpriteActor) a).isBboxFromRenderer(); addProperty(BBOX_FROM_RENDERER_PROP, Boolean.toString(v), Types.BOOLEAN); } Ctx.project.addPropertyChangeListener(propertyChangeListener); invalidateHierarchy(); } } @Override protected void updateModel(String property, String value) { if (property.equals(DESC_PROP)) { ((InteractiveActor)actor).setDesc(value); } else if (property.equals(POS_X_PROP)) { // TODO UNDO // UndoOp undoOp = new UndoSetAttr(Ctx.project.getSelectedChapter(), Ctx.project.getSelectedActor(), XMLConstants.POS_ATTR, // Param.toStringParam(pos)); // Ctx.project.getUndoStack().add(undoOp); try { actor.setPosition(Float.parseFloat(value), actor.getY()); } catch (NumberFormatException e) { } } else if (property.equals(POS_Y_PROP)) { // UndoOp undoOp = new UndoSetAttr(Ctx.project.getSelectedChapter(), Ctx.project.getSelectedActor(),XMLConstants.POS_ATTR, // Param.toStringParam(pos)); // Ctx.project.getUndoStack().add(undoOp); try { actor.setPosition(actor.getX(), Float.parseFloat(value)); } catch (NumberFormatException e) { } } else if (property.equals(VISIBLE_PROP)) { actor.setVisible(Boolean.parseBoolean(value)); } else if (property.equals(INTERACTION_PROP)) { ((InteractiveActor)actor).setInteraction(Boolean.parseBoolean(value)); } else if (property.equals(STATE_PROP)) { ((InteractiveActor)actor).setState(value); } else if (property.equals(BBOX_FROM_RENDERER_PROP)) { boolean v = true; try { v = Boolean.parseBoolean(value); } catch(ParseException e) { } ((SpriteActor)actor).setBboxFromRenderer(v); } } }