// TODO: hmmm wieso existiert hier levelCount?? so viel schneller wird die // Methode dadurch nicht. private ArrayList<Object> getNodePath(AbstractEntity e, int levelCount) { ArrayList<Object> o; AbstractEntity ent = (AbstractEntity) e; if (ent.getParent() == null) o = new ArrayList<Object>(levelCount); else o = getNodePath(ent.getParent(), ++levelCount); o.add(e); return o; }
@Override public void valueForPathChanged(TreePath path, Object newValue) { AbstractEntity changedEntity = (AbstractEntity) path.getLastPathComponent(); changedEntity.setName(newValue.toString()); int[] idx = {getIndexOfChild(((AbstractEntity) changedEntity).getParent(), changedEntity)}; Object[] o = {changedEntity}; TreeModelEvent e = new TreeModelEvent(this, path, idx, o); fireTreeNodesChanged(e); }
// TODO: throw ClassCastException? public AbstractEntity insertNewEntity(Object parent) { // wenn das übergebene Objekt null ist muss eine neue Armeeliste // angelegt werden EntityType type; if (parent == null) { type = EntityType.ARMYLIST; parent = game; } else type = EntityType.UPGRADE; // create new ArmyListEntity with the given Name from language-file AbstractEntity newEntity = new ArmyListEntity(type, TextWrapper.getString("ArmyListModel.0")); newEntity.addEntityListener(this); Tatoo.cmdMgr.execute(new CmdInsertEntityChild((AbstractEntity) parent, newEntity)); return newEntity; }
public void setRoot(AbstractEntity e) { if (e != null) { game = e; game.addEntityListener(this); setEntityListener(game); AbstractEntity arr[] = {e}; fireTreeStructureChanged(new TreeModelEvent(e, arr)); } }
private void setEntityListener(AbstractEntity entity) { for (AbstractEntity ae : entity.getChilds()) { ae.addEntityListener(this); setEntityListener(ae); } }
/** * Entfernt den übergebenen Knoten aus dem Baum. * * @param node Der Knoten der entfernt werden soll */ public void removeNodeFromParent(Object node) { AbstractEntity delEntity = (AbstractEntity) node; AbstractEntity parent = delEntity.getParent(); Tatoo.cmdMgr.execute(new CmdRemoveEntityChild(parent, delEntity)); }
@Override public AbstractEntity insertCopyOf(Object[] treePath) { AbstractEntity orignalRoot = game; // Wenn der Root in der Armeeliste noch keine Kinder hat, handelt es // sich um den Standardmäßig eingefügten Knoten, welcher // nur eingefügt wurde weil es sonst in der Anzeige zu Exceptions kommt. // Er muss also ersetzt // werden durch den ersten Knoten im TreePath als neue Wurzel. if (((AbstractEntity) getRoot()).getChildCount() == 0 && treePath.length > 0) { // Kopie erzeugen: try { game = ((AbstractEntity) treePath[0]).cloneFor(null); game.addEntityListener(this); } catch (CloneNotSupportedException e) { e.printStackTrace(); game = orignalRoot; return null; } } if (game == null) return null; // das erste Object im Array MUSS der root-Knoten sein, sonst ist es // kein gültiger Pfad! // TODO: hier eventuell Exception schmeißen bei ungültigem Pfad. if (treePath[0].equals(getRoot()) && treePath.length > 1) { boolean found = false; AbstractEntity treeNode = game; AbstractEntity parent = treeNode; // den Pfad vom Knoten eins bis Ende durchlaufen for (int i = 1; i < treePath.length - 1; i++) { // prüfen ob der Knoten schon enthalten ist // aber nur wenn es sich nicht um das Pfadblatt handelt. // wenn der Knoten nicht enthalten ist: anlegen found = false; for (int j = 0; j < treeNode.getChildCount() && !found; j++) { if (treeNode.getEntityAt(j).equals((AbstractEntity) treePath[i])) { found = true; parent = treeNode; treeNode = treeNode.getEntityAt(j); } } if (!found) { AbstractEntity newNode; try { newNode = ((AbstractEntity) treePath[i]).cloneFor(parent); } catch (CloneNotSupportedException e) { e.printStackTrace(); game = orignalRoot; return null; } newNode.addEntityListener(this); newNode.setParent(parent); Tatoo.cmdMgr.add(new CmdInsertEntityChild(treeNode, newNode)); parent = treeNode; treeNode = newNode; } } // den letzten Knoten auf jeden Fall hinzufügen // (hier darf nicht mehr auf equals getestet werden) AbstractEntity newNode; try { newNode = ((AbstractEntity) treePath[treePath.length - 1]).cloneFor(parent); } catch (CloneNotSupportedException e) { e.printStackTrace(); game = orignalRoot; return null; } newNode.addEntityListener(this); newNode.setParent(parent); Tatoo.cmdMgr.add(new CmdInsertEntityChild(treeNode, newNode)); Tatoo.cmdMgr.execute(); return newNode; } return null; }
public EntityType getTypeOfNode(Object node) { AbstractEntity ae = (AbstractEntity) node; return ae.getType(); }