Java tutorial
/* * ****************************************************************************** * * Copyright 2015 See AUTHORS file. * * * * 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.uwsoft.editor.gdx.ui; import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.ui.Label; import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane; import com.badlogic.gdx.scenes.scene2d.ui.Table; import com.badlogic.gdx.scenes.scene2d.ui.Tree; import com.badlogic.gdx.scenes.scene2d.ui.Tree.Node; import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener; import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; import com.badlogic.gdx.utils.Array; import com.uwsoft.editor.gdx.actors.SelectionRectangle; import com.uwsoft.editor.gdx.stage.UIStage; import com.uwsoft.editor.renderer.actor.CompositeItem; import com.uwsoft.editor.renderer.actor.IBaseItem; import com.uwsoft.editor.renderer.utils.MySkin; import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class UIItemsBox extends ExpandableUIBox { private Tree tree; private MySkin skin; private IBaseItem selectedItem; public UIItemsBox(UIStage s) { super(s, 160, 300); } public void initContent() { for (int i = 0; i < this.getChildren().size; i++) { if (this.getChildren().get(i).getName() != null && this.getChildren().get(i).getName().equals("treeTable")) { this.getChildren().get(i).remove(); break; } } skin = stage.textureManager.editorSkin; tree = new Tree(skin); CompositeItem sceneItems = stage.getSandbox().getCurrentScene(); Node root = addTree(sceneItems, stage.getCompositePanel().isRootScene()); for (int i = 0; i < sceneItems.getItems().size(); i++) { if (sceneItems.getItems().get(i).isComposite()) { innerComposite(sceneItems.getItems().get(i), root); } else { addTree(sceneItems.getItems().get(i), root); } } //expand root if (root != null && root.getChildren() != null && root.getChildren().size > 0 && root.getChildren().get(0) != null) { root.getChildren().get(0).expandTo(); } Table scrolltable = new Table(); scrolltable.padBottom(20); scrolltable.add(tree).fill().expand(); final ScrollPane scroller = new ScrollPane(scrolltable, skin); scroller.setFlickScroll(false); final Table table = new Table(); table.setFillParent(true); table.padTop(10); table.add(scroller).fill().expand(); table.setName("treeTable"); addActor(table); tree.addListener(new ChangeListener() { @Override public void changed(ChangeEvent event, Actor actor) { Array<Node> selectedNodes = tree.getSelection().toArray(); for (int i = 0; i < selectedNodes.size; i++) { System.out.println(); IBaseItem baseItem = (IBaseItem) selectedNodes.get(i).getObject(); IBaseItem item = getCurrentSceneItem(stage.getSandbox().getCurrentScene(), baseItem); if (item != null) { addSelectionAction(item); } } } }); } private IBaseItem getCurrentSceneItem(CompositeItem currentScene, IBaseItem baseItem) { IBaseItem currentSceneItem = baseItem; while (currentScene != currentSceneItem.getParentItem()) { currentSceneItem = currentSceneItem.getParentItem(); if (currentSceneItem == null) break; } return currentSceneItem; } private void innerComposite(IBaseItem iBaseItem, Node node) { CompositeItem compoiteItem = (CompositeItem) iBaseItem; node = getNode(iBaseItem, node); for (int i = 0; i < compoiteItem.getItems().size(); i++) { if (compoiteItem.getItems().get(i).isComposite()) { innerComposite(compoiteItem.getItems().get(i), node); } else { addTree(compoiteItem.getItems().get(i), node); } } } private String getItemName(IBaseItem iBaseItem) { if (iBaseItem.getDataVO().itemIdentifier != null && !iBaseItem.getDataVO().itemIdentifier.equals("")) { return iBaseItem.getDataVO().itemIdentifier; } else { String className = iBaseItem.getDataVO().getClass().getSimpleName().toString(); if (className.equals("SimpleImageVO")) { return "Image"; } else if (className.equals("Image9patchVO")) { return "9PatchImage"; } else if (className.equals("TextBoxVO")) { return "TextBbox"; } else if (className.equals("ButtonVO")) { return "Button"; } else if (className.equals("LabelVO")) { return "Label"; } else if (className.equals("CompositeItemVO")) { return "CompositeItem"; } else if (className.equals("CheckBoxVO")) { return "CheckBox"; } else if (className.equals("SelectBoxVO")) { return "SelectBox"; } else if (className.equals("ParticleEffectVO")) { return "ParticleEffect"; } else if (className.equals("LightVO")) { return "Light"; } else if (className.equals("SpineVO")) { return "Spine"; } else if (className.equals("SpriteAnimationVO")) { return "SpriteAnimation"; } else { return "unknown"; } } } private Node addTree(CompositeItem sceneItems, boolean isRoot) { Node moo = new Node(new Label((isRoot) ? "root" : getItemName(sceneItems), skin)); moo.setObject(sceneItems); tree.add(moo); //addClickListener(moo,sceneItems); return moo; } private void addTree(IBaseItem iBaseItem, Node node) { Node moo = new Node(new Label(getItemName(iBaseItem), skin)); moo.setObject(iBaseItem); node.add(moo); //addClickListener(moo,iBaseItem); //checkExpand(iBaseItem,moo); } private Node getNode(IBaseItem iBaseItem, Node node) { Node moo = new Node(new Label(getItemName(iBaseItem), skin)); moo.setObject(iBaseItem); node.add(moo); //addClickListener(moo,iBaseItem); //checkExpand(iBaseItem,moo); return moo; } private void checkExpand(IBaseItem iBaseItem, Node moo) { if (selectedItem != null && iBaseItem.equals(selectedItem)) { moo.expandTo(); } } public void updateContent(IBaseItem item) { selectedItem = item; initContent(); } private void addClickListener(Node moo, final IBaseItem iBaseItem) { moo.getActor().addListener(new ClickListener() { public void clicked(InputEvent event, float x, float y) { System.out.println("CLICKED"); if (getTapCount() == 2) { if (!iBaseItem.isComposite()) { if (iBaseItem.getParentItem() != null && !iBaseItem.getParentItem().equals(stage.getSandbox().getCurrentScene())) stage.getSandbox().enterIntoComposite(iBaseItem.getParentItem().getDataVO()); } else { if (!iBaseItem.equals(stage.getSandbox().getCurrentScene())) { stage.getSandbox().enterIntoComposite(((CompositeItem) iBaseItem).getDataVO()); } } } else { stage.getSandbox().getSelector().setSelection(iBaseItem, true); } } }); } private void addSelectionAction(IBaseItem iBaseItem) { stage.getSandbox().getSelector().setSelection(iBaseItem, true); } public void setSelected(HashMap<IBaseItem, SelectionRectangle> currentSelection) { if (tree == null) return; tree.getSelection().clear(); Array<Node> allSceneRootNodes = tree.getNodes().get(0).getChildren(); Iterator it = currentSelection.entrySet().iterator(); while (it.hasNext()) { Map.Entry pairs = (Map.Entry) it.next(); for (int i = 0; i < allSceneRootNodes.size; i++) { if (((IBaseItem) allSceneRootNodes.get(i).getObject()).equals(pairs.getKey())) { tree.getSelection().add(allSceneRootNodes.get(i)); } } //it.remove(); } } @Override protected void expand() { setHeight(expandedHeight); if (mainLayer != null) { mainLayer.setVisible(true); } if (tree != null) { tree.setVisible(true); } } @Override protected void collapse() { setHeight(topImg.getHeight()); if (mainLayer != null) { mainLayer.setVisible(false); } if (tree != null) { tree.setVisible(false); } } // private ArrayList<MainItemVO> buildItemsVoList(CompositeVO composite) { // ArrayList<MainItemVO> returnList = new ArrayList<MainItemVO>(); // for (int i = 0; i < composite.sComposites.size(); i++) { // returnList.add(composite.sComposites.get(i)); // } // for (int i = 0; i < composite.sButtons.size(); i++) { // returnList.add(composite.sButtons.get(i)); // } // for (int i = 0; i < composite.sCheckBoxes.size(); i++) { // returnList.add(composite.sCheckBoxes.get(i)); // } // for (int i = 0; i < composite.sImage9patchs.size(); i++) { // returnList.add(composite.sImage9patchs.get(i)); // } // for (int i = 0; i < composite.sImages.size(); i++) { // returnList.add(composite.sImages.get(i)); // } // for (int i = 0; i < composite.sLabels.size(); i++) { // returnList.add(composite.sLabels.get(i)); // } // for (int i = 0; i < composite.sParticleEffects.size(); i++) { // returnList.add(composite.sParticleEffects.get(i)); // } // for (int i = 0; i < composite.sSelectBoxes.size(); i++) { // returnList.add(composite.sSelectBoxes.get(i)); // } // for (int i = 0; i < composite.sSpineAnimations.size(); i++) { // returnList.add(composite.sSpineAnimations.get(i)); // } // for (int i = 0; i < composite.sSpriteAnimations.size(); i++) { // returnList.add(composite.sSpriteAnimations.get(i)); // } // for (int i = 0; i < composite.sTextBox.size(); i++) { // returnList.add(composite.sSpriteAnimations.get(i)); // } // return returnList; // } }