Browse Source

Outliner is working :)

Tom Troppmann 5 years ago
parent
commit
c2f3808124

+ 11 - 0
src/ui/controller/Control.java

@@ -12,7 +12,9 @@ import org.apache.commons.compress.archivers.ArchiveException;
 import ui.model.Model;
 import ui.view.CreateTemplatePopUp;
 import ui.view.FlexiblePane;
+import ui.view.GUI;
 import ui.view.MyCanvas;
+import ui.view.Outliner;
 import ui.view.StatisticGraphPanel;
 
 import java.awt.*;
@@ -583,6 +585,15 @@ public class Control {
         simulationManager.setCanvas(can);
     }
 
+    
+    /**
+     * Set the GUI.
+     *
+     * @param can the Canvas
+     */
+    public void setGui(GUI gui) {
+        simulationManager.setGui(gui);
+    }
     /**
      * make an autosave.
      *

+ 9 - 1
src/ui/controller/SimulationManager.java

@@ -14,7 +14,9 @@ import ui.model.MinimumModel;
 import ui.model.MinimumNetwork;
 import ui.model.Model;
 import ui.view.FlexiblePane;
+import ui.view.GUI;
 import ui.view.MyCanvas;
+import ui.view.Outliner;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -39,7 +41,7 @@ public class SimulationManager {
 	private int timeStep;
 	private HashMap<Integer, Float> tagTable = new HashMap<>();
 	private FlexiblePane flexPane;
-
+	private GUI gui;
 	private HashMap<HolonElement, Float> flexDevicesTurnedOnThisTurn = new HashMap<>();
 
 	/**
@@ -121,6 +123,8 @@ public class SimulationManager {
 		ArrayList<DecoratedSwitch> listOfDecoratedSwitches = CalculataModel.decorateSwitches(minimumModel, timestep);
 		saves.put(timestep, new DecoratedState(decorNetworks, leftOverDecoratedCables, listOfDecoratedSwitches, minimumModel.getNodeList() , timestep));
 		canvas.repaint();
+		gui.updateOutliners(getActualDecorState());//saves.getOrDefault(timestep, null);
+		
 //		for (StackTraceElement ste : Thread.currentThread().getStackTrace()) {
 //		    System.out.println(ste);
 ////		}
@@ -1047,4 +1051,8 @@ public class SimulationManager {
 		return saves.getOrDefault(timestep, null);
 	}
 
+	public void setGui(GUI gui) {
+		this.gui = gui;
+	}
+
 }

+ 4 - 0
src/ui/model/Supplier.java

@@ -49,4 +49,8 @@ public class Supplier extends DecoratedHolonObject {
 			this.energyToConsumer = energyToConsumer;
 		}
 	}
+	@Override
+	public String toString() {
+		return getModel().getName();
+	}
 }

+ 22 - 1
src/ui/view/GUI.java

@@ -15,6 +15,7 @@ import org.apache.commons.compress.archivers.ArchiveException;
 import ui.controller.Control;
 import ui.controller.SimulationManager;
 import ui.controller.UpdateController;
+import ui.model.DecoratedState;
 import ui.model.Model;
 import ui.view.NewPopUp.Option;
 
@@ -41,7 +42,10 @@ import java.io.IOException;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
+import java.util.ListIterator;
+import java.util.Objects;
 import java.util.Timer;
 import java.util.TimerTask;
 import java.util.stream.Collectors;
@@ -303,6 +307,8 @@ public class GUI implements CategoryListener {
 	private String eraseCategory = "Do you really want to delete the Category ";
 	private String selectObjBeforeErase = "Please select a Category or an Object in the left library in order to delete something.";
 
+	
+	private List<Outliner> outlinerList = new ArrayList<Outliner>();
 	/**
 	 * Create the application.
 	 *
@@ -322,6 +328,7 @@ public class GUI implements CategoryListener {
 
 		control.initListener(this);
 		controller.setCanvas(canvas);
+		control.setGui(this);
 		model.setConsole(console);
 		model.setTableProperties(tableProperties);
 		algorithmMenu = new AlgorithmMenu(model, control, this);
@@ -962,7 +969,8 @@ public class GUI implements CategoryListener {
 		mnNewMenuView.add(mntmOutLiner);
 		mntmOutLiner.addActionListener(actienEvent -> {
 			System.out.println("MyButton");
-			Outliner bla =new Outliner(frmCyberPhysical, model, controller, this);
+			outlinerList.add(new Outliner(frmCyberPhysical, model, controller, this, outlinerList));
+			System.out.println("Size: " + outlinerList.size());
 		});
 		
 		
@@ -2540,6 +2548,19 @@ public class GUI implements CategoryListener {
 		});
 	}
 
+	public void updateOutliners(DecoratedState state)
+	{
+		//remove closed Outliner
+		ListIterator<Outliner> iter = outlinerList.listIterator();
+		while(iter.hasNext())
+		{
+			if(iter.next().isClosed) iter.remove();
+		}
+		//update open Outliner
+		for(Outliner out : outlinerList) {
+			out.repaintWithDecoratedState(state);
+		}
+	}
 	private void showScrollGraph() {
 		scrollGraph.setVisible(true);
 		splitGraphHolonEl.setBottomComponent(scrollGraph);

+ 8 - 154
src/ui/view/MyCanvas.java

@@ -413,8 +413,13 @@ public class MyCanvas extends AbstractCanvas implements MouseListener,
 	private void paintConsumer(Graphics2D g, Consumer con){
 		paintCanvasObject(g, con);
 		paintSupplyBar(g,con.getSupplyBarPercentage(), getStateColor(con.getState()), con.getModel().getPosition());
-		drawCanvasObjectString(g, con.getModel().getPosition(), con.getEnergyNeededFromNetwork());
+		drawCanvasObjectString(g, con.getModel().getPosition(), -con.getEnergyNeededFromNetwork());
 	}
+	private void paintSupplier(Graphics2D g, Supplier sup){
+		paintCanvasObject(g, sup);
+		drawCanvasObjectString(g, sup.getModel().getPosition(), sup.getEnergyToSupplyNetwork());
+	}
+	
 	private void drawCanvasObject(Graphics2D g, String Image, Position pos) {
 		g.drawImage(Util.loadImage(Image) , 
 				pos.x - controller.getScaleDiv2(),
@@ -510,7 +515,7 @@ public class MyCanvas extends AbstractCanvas implements MouseListener,
 				paintConsumer(g2d, con);
 			}
 			for(Supplier sup: network.getSupplierList()) {
-				paintCanvasObject(g2d, sup);
+				paintSupplier(g2d, sup);
 			}
 			for(Passiv pas: network.getPassivNoEnergyList()) {
 				paintCanvasObject(g2d, pas);
@@ -530,157 +535,7 @@ public class MyCanvas extends AbstractCanvas implements MouseListener,
 			g2d.setStroke(new BasicStroke(0));
 			drawMarker(g2d);
 		}
-		/*
-		 * 
-		
-		
-		for(HolonSwitch switch2 : controller.getSimManager().getMinimumModel().getSwitchList()) {
-			drawCanvasObject(g2d, switch2.getSwitchClosedImage() , switch2.getPosition());
-		}
-		 */
-//		String maxCap = null;
-//		// Rendering
-//		g2 = (Graphics2D) g;
-//		RenderingHints rh = new RenderingHints(RenderingHints.KEY_ANTIALIASING,
-//				RenderingHints.VALUE_ANTIALIAS_ON);
-//		g2.setRenderingHints(rh);
-//
-//		// Paint the Background
-//		if (!model.getCanvasImagePath().isEmpty()) {
-//			img = new ImageIcon(model.getCanvasImagePath()).getImage();
-//			switch (model.getCanvasImageMode()) {
-//			case BackgroundPopUp.IMAGE_PIXELS:
-//				g2.drawImage(img, 0, 0, img.getWidth(null),
-//						img.getHeight(null), null);
-//				break;
-//			case BackgroundPopUp.STRETCHED:
-//				g2.drawImage(img, 0, 0, model.getCanvasX(), model.getCanvasY(),
-//						null);
-//				break;
-//			case BackgroundPopUp.CUSTOM:
-//				g2.drawImage(img, 0, 0, model.getCanvasImageWidth(),
-//						model.getCanvasImageHeight(), null);
-//				break;
-//			default:
-//				break;
-//			}
-//		}
-//
-//		// SubNet Coloring
-//		int i = 0;
-//		for (SubNet s : controller.getSimManager().getSubNets()) {
-//
-//			if (model.getSubNetColors().size() - 1 < i) {
-//				controller.addSubNetColor(new Color(
-//						(int) (Math.random() * 255),
-//						(int) (Math.random() * 255),
-//						(int) (Math.random() * 255)));
-//			}
-//			if (showedInformation[3]) {
-//				for (HolonObject cps : s.getObjects()) {
-//					cps.setBorderColor(model.getSubNetColors().get(i));
-//				}
-//			}
-//			i++;
-//		}
-//
-//		// drawEdges that is being dragged
-//		if (drawEdge) {
-//			g2.setColor(Color.BLACK);
-//			g2.setStroke(new BasicStroke(2));
-//			g2.drawLine(tempCps.getPosition().x, tempCps.getPosition().y, x, y);
-//		}
-//
-//		if(model.getEdgesOnCanvas().isEmpty() && !model.getObjectsOnCanvas().isEmpty()
-//				&& !model.getObjectsOnCanvas().get(0).getConnections().isEmpty()){
-//			ArrayList<CpsEdge> edgesOnCanvas= model.getEdgesOnCanvas();
-//			for(AbstractCpsObject cps :model.getObjectsOnCanvas())
-//				for(CpsEdge e: cps.getConnections()){
-//					if(!edgesOnCanvas.contains(e))
-//						model.addEdgeOnCanvas(e);
-//				}
-//		}
-//		
-//		for (CpsEdge con : model.getEdgesOnCanvas()) {
-//			maxCap = paintEdge(con, maxCap);
-//		}
-//
-//		// Highlighted Edge
-//		if (!model.getSelectedCpsObjects().isEmpty() || !tempSelected.isEmpty() || model.getSelectedObjectID() > 0) {
-//			g2.setColor(Color.BLUE);
-//			for (CpsEdge con : model.getEdgesOnCanvas()) {
-//				if (con.getFlow() <= con.getCapacity()) {
-//					g2.setStroke(new BasicStroke(Math.min(
-//							((con.getFlow() / con.getCapacity() * 3) + 1), 4)));
-//				} else {
-//					g2.setStroke(new BasicStroke(2));
-//				}
-//
-//				maxCap = drawEdgeLine(con, maxCap);
-//			}
-//		} else if (edgeHighlight != null) {
-//			g2.setColor(Color.BLUE);
-//			if (edgeHighlight.getFlow() <= edgeHighlight.getCapacity()) {
-//				g2.setStroke(new BasicStroke(Math.min(((edgeHighlight.getFlow()
-//						/ edgeHighlight.getCapacity() * 3) + 1), 4)));
-//			} else {
-//				g2.setStroke(new BasicStroke(2));
-//			}
-//			g2.drawLine(edgeHighlight.getA().getPosition().x, edgeHighlight
-//					.getA().getPosition().y,
-//					edgeHighlight.getB().getPosition().x, edgeHighlight.getB()
-//							.getPosition().y);
-//
-//			maxCap = setCapacityString(edgeHighlight, maxCap);
-//
-//			if (showedInformation[0]) {
-//				g2.drawString(edgeHighlight.getFlow() + "/" + maxCap,
-//						(edgeHighlight.getA().getPosition().x + edgeHighlight
-//								.getB().getPosition().x) / 2, (edgeHighlight
-//								.getA().getPosition().y + edgeHighlight.getB()
-//								.getPosition().y) / 2);
-//			}
-//		}
-//
-//
-//		/**
-//		 * highlight the Object that would be replaced
-//		 */
-//		highlightMayBeReplaced(g2);
-//		
-//		// Objects
-//		for (AbstractCpsObject cps : model.getObjectsOnCanvas()) {
-//			// Border Highlighting
-//			if (showedInformation[3]) {
-//				g2.setColor(cps.getBorderColor());
-//				if (g2.getColor() != Color.WHITE && !(cps instanceof CpsNode)) {
-//					g2.fillRect(
-//							(int) (cps.getPosition().x
-//									- controller.getScaleDiv2() - scalediv20 - 3),
-//							(int) (cps.getPosition().y
-//									- controller.getScaleDiv2() - scalediv20 - 3),
-//							(int) (controller.getScale() + ((scalediv20 + 3) * 2)),
-//							(int) (controller.getScale() + ((scalediv20 + 3) * 2)));
-//				}
-//			}
-//
-//			setEdgePictureAndHighlighting(cps);
-//
-//			g2.drawImage(img, cps.getPosition().x - controller.getScaleDiv2(),
-//					cps.getPosition().y - controller.getScaleDiv2(),
-//					controller.getScale(), controller.getScale(), null);
-//
-//			paintSupplyBar(g, cps);
-//		}
-//		
-//		// Dragged marker Highlighting
-//		if (doMark) {
-//			g2.setColor(Color.BLACK);
-//			g2.setStroke(new BasicStroke(0));
-//			drawMarker();
-//		}
-//		// Tooltip
-//		showTooltip(g);
+	
 	}
 
 	@Override
@@ -1217,7 +1072,6 @@ public class MyCanvas extends AbstractCanvas implements MouseListener,
 
 		@Override
 		public void actionPerformed(ActionEvent actionEvent) {
-			// TODO Auto-generated method stub
 			System.out.println(actionEvent.getActionCommand() + " pressed");
 			switch(actionEvent.getActionCommand()) {
 			case "VK_UP":

+ 93 - 236
src/ui/view/Outliner.java

@@ -2,8 +2,9 @@ package ui.view;
 
 import java.awt.BorderLayout;
 import java.awt.Color;
-import java.awt.Component;
 import java.util.ArrayList;
+import java.util.List;
+
 import javax.swing.ImageIcon;
 import javax.swing.JFrame;
 
@@ -15,24 +16,22 @@ import javax.swing.event.TreeModelEvent;
 import javax.swing.event.TreeModelListener;
 import javax.swing.tree.DefaultMutableTreeNode;
 import javax.swing.tree.DefaultTreeCellRenderer;
-import javax.swing.tree.DefaultTreeModel;
 
 import classes.AbstractCpsObject;
-import classes.CpsEdge;
-import classes.HolonObject;
-import ui.controller.CalculataModel;
+
+import classes.CpsNode;
+
 import ui.controller.Control;
-import ui.controller.UpdateController;
-import ui.model.CableWithState;
+
 import ui.model.Consumer;
-import ui.model.Consumer.SupplierListEntry;
-import ui.model.DecoratedCable.CableState;
-import ui.model.DecoratedHolonObject;
+import ui.model.DecoratedCable;
 import ui.model.DecoratedHolonObject.HolonObjectState;
 import ui.model.DecoratedNetwork;
-import ui.model.MinimumModel;
+import ui.model.DecoratedState;
+import ui.model.DecoratedSwitch;
 import ui.model.MinimumNetwork;
 import ui.model.Model;
+import ui.model.Passiv;
 import ui.model.Supplier;
 
 
@@ -42,193 +41,117 @@ import ui.model.Supplier;
 
 public class Outliner extends JFrame {
 	private static final long serialVersionUID = 1L;
-	private JTree tree;
-	DefaultMutableTreeNode objects = new DefaultMutableTreeNode("HolonObjects");
-	DefaultMutableTreeNode cables = new DefaultMutableTreeNode("Cable");
-	DefaultMutableTreeNode switches = new DefaultMutableTreeNode("Switches");
-	DefaultMutableTreeNode nodes = new DefaultMutableTreeNode("Nodes");
-	
+	JTabbedPane tabbedPane = new JTabbedPane();
+	JPanel listPanel = new JPanel(new BorderLayout());
+	JPanel statePanel = new JPanel(new BorderLayout());
+	public boolean isClosed = false;
 	ArrayList<MinimumNetwork> list;
-	
-	Outliner(JFrame parentFrame, Model model, Control controller, GUI gui){ 
+	Outliner(JFrame parentFrame, Model model, Control controller, GUI gui, List<Outliner> outlinerList){ 
 		setBounds(0, 0, 400, parentFrame.getHeight());
 		this.setIconImage(Util.loadImage("/Images/Holeg.png", 30, 30));
 		this.setTitle("Outliner");
 		setLocationRelativeTo(parentFrame);
 		this.setVisible(true);
-		JTabbedPane tabbedPane = new JTabbedPane();
-		JPanel listPanel = createOutlinerListPanel(model, controller, gui);
-		tabbedPane.addTab("List", listPanel);
-		MinimumModel mm = new MinimumModel(model.getObjectsOnCanvas(), model.getEdgesOnCanvas());
-		//set all working:
-		for(CableWithState cable : mm.getEdgeList()) {
-			cable.setState(CableState.Working);
-		}
-		list = CalculataModel.calculateNetworks(mm, model.getCurIteration(), null);
-		JPanel networkPanel = createNetworkPanel();
-		tabbedPane.addTab("Networks", networkPanel);
-		ArrayList<DecoratedNetwork> computedList = new ArrayList<DecoratedNetwork>();
-		for (MinimumNetwork net : list) {
-			computedList.add(new DecoratedNetwork(net, model.getCurIteration()));
-		}
-		JPanel decoratedNetworkPanel = generateDecoratedNetworkPanel(computedList);
-		tabbedPane.addTab("Computed Networks", decoratedNetworkPanel);
+		repaintWithDecoratedState(controller.getSimManager().getActualDecorState());
 		this.getContentPane().add(tabbedPane);
+		this.addWindowListener(new java.awt.event.WindowAdapter() {
+		    @Override
+		    public void windowClosing(java.awt.event.WindowEvent windowEvent) {
+		    	isClosed = true;
+		    }
+		});
+		tabbedPane.addTab("List", listPanel);
+		tabbedPane.addTab("State", statePanel);
 	}
 
-
-
-
-	private JPanel generateDecoratedNetworkPanel(ArrayList<DecoratedNetwork> computedList) {
-		JPanel decoratedNetworkPanel = new JPanel(new BorderLayout());
-		DefaultMutableTreeNode top = new DefaultMutableTreeNode();
-		for (DecoratedNetwork dNet : computedList) {
-			DefaultMutableTreeNode networkNode = new DefaultMutableTreeNode("Network");
-			DefaultMutableTreeNode consumerListNode = new DefaultMutableTreeNode("ConsumerList");
-			DefaultMutableTreeNode supplierListNode = new DefaultMutableTreeNode("SupplierList");
-			if (!dNet.getConsumerList().isEmpty() || !dNet.getConsumerSelfSuppliedList().isEmpty()) {
+	public void repaintWithDecoratedState(DecoratedState decoratedState) {
+		//tabbedPane.removeAll();
+		listPanel.removeAll();
+		statePanel.removeAll();
+		DefaultMutableTreeNode topListPanel = new DefaultMutableTreeNode();
+		DefaultMutableTreeNode objects = new DefaultMutableTreeNode("HolonObjects");
+		DefaultMutableTreeNode switches = new DefaultMutableTreeNode("Switches");
+		DefaultMutableTreeNode nodes = new DefaultMutableTreeNode("Nodes");
+		DefaultMutableTreeNode cables = new DefaultMutableTreeNode("Cable");
+		topListPanel.add(objects);
+		topListPanel.add(switches);
+		topListPanel.add(nodes);
+		topListPanel.add(cables);
+		DefaultMutableTreeNode topStatePanel = new DefaultMutableTreeNode();
+		
+		for(DecoratedSwitch dSwitch: decoratedState.getDecoratedSwitches()) {
+			switches.add(new DefaultMutableTreeNode(dSwitch.getModel().getName()));
+		}
+		
+		for(CpsNode node: decoratedState.getNodeList()) {
+			nodes.add(new DefaultMutableTreeNode(node.getName()));
+		}
+		
+		for(DecoratedNetwork dNet: decoratedState.getNetworkList()) {
+			DefaultMutableTreeNode network = new DefaultMutableTreeNode("Network");
+			if(!dNet.getConsumerList().isEmpty() || !dNet.getConsumerSelfSuppliedList().isEmpty()) {
+				DefaultMutableTreeNode consumer = new DefaultMutableTreeNode("ConsumerList");
 				for (Consumer con : dNet.getConsumerList()) {
 					DefaultMutableTreeNode consumerNode = new ColoredTreeNode(con.toString(),con.getState().toString(), getStateColor(con.getState()) );
-					for(Consumer.SupplierListEntry sup: con.getSupplierList())
-					{
-						consumerNode.add(new DefaultMutableTreeNode(sup.supplier.getModel().getName() + " Energy:" + sup.energyFromSupplier));
-					}
-					consumerListNode.add(consumerNode);
+					consumer.add(consumerNode);
+					objects.add(new DefaultMutableTreeNode(con.getModel().getName()));
 				}
 				for (Consumer con : dNet.getConsumerSelfSuppliedList()) {
 					DefaultMutableTreeNode consumerNode = new DefaultMutableTreeNode(con.toString() + con.getState());
-					for(Consumer.SupplierListEntry sup: con.getSupplierList())
-					{
-						consumerNode.add(new DefaultMutableTreeNode(sup.supplier.getModel().getName() + " Energy:" + sup.energyFromSupplier));
-					}
-					consumerListNode.add(consumerNode);
+					consumer.add(consumerNode);
+					objects.add(new DefaultMutableTreeNode(con.getModel().getName()));
 				}
-				networkNode.add(consumerListNode);
+				network.add(consumer);
 			}
-			if (!dNet.getSupplierList().isEmpty()) {
-				networkNode.add(supplierListNode);
+			if(!dNet.getSupplierList().isEmpty()) {
+				DefaultMutableTreeNode supplier = new DefaultMutableTreeNode("SupplierList");
 				for (Supplier sup : dNet.getSupplierList()) {
-					supplierListNode.add(new DefaultMutableTreeNode(new AbstractCpsObjectInfo(sup.getModel())));
+					supplier.add(new DefaultMutableTreeNode(sup.toString()));
+					objects.add(new DefaultMutableTreeNode(sup.getModel().getName()));
 				}
+				network.add(supplier);
 			}
-			top.add(networkNode);
-		}
-		JTree networkTree = new JTree(top);
-		signIconsForTree(networkTree);
-		networkTree.setRootVisible(false);
-		for (int i = 0; i < networkTree.getRowCount(); i++) {
-			networkTree.expandRow(i);
-		}
-		JScrollPane listScroller = new JScrollPane(networkTree);
-		decoratedNetworkPanel.add(listScroller);
-		return decoratedNetworkPanel;
-	}
-
-
-
-
-	private JPanel createNetworkPanel() {
-		JPanel networkPanel = new JPanel(new BorderLayout());
-		DefaultMutableTreeNode top = new DefaultMutableTreeNode();
-		for (MinimumNetwork net : list) {
-			DefaultMutableTreeNode networkNode = new DefaultMutableTreeNode("Network");
-			for (HolonObject hObject : net.getHolonObjectList()) {
-				networkNode.add(new DefaultMutableTreeNode(new AbstractCpsObjectInfo(hObject)));
+			for(Passiv pas: dNet.getPassivNoEnergyList()) {
+				objects.add(new DefaultMutableTreeNode(pas.getModel().getName()));
+			}
+			topStatePanel.add(network);
+			for(DecoratedCable cable : dNet.getDecoratedCableList()) {
+				cables.add(new DefaultMutableTreeNode(cable.getModel().toString()));
 			}
-			top.add(networkNode);
 		}
-
-		JTree networkTree = new JTree(top);
-		signIconsForTree(networkTree);
-		networkTree.setRootVisible(false);
-		for (int i = 0; i < networkTree.getRowCount(); i++) {
-			networkTree.expandRow(i);
+		
+		for(DecoratedCable cable : decoratedState.getLeftOverEdges()) {
+			cables.add(new DefaultMutableTreeNode(cable.getModel().toString()));
 		}
-		JScrollPane listScroller = new JScrollPane(networkTree);
-		networkPanel.add(listScroller);
-		return networkPanel;
-	}
-	
-	
-	
-	
-	private JPanel createOutlinerListPanel(Model model, Control controller, GUI gui) {
-		JPanel contentPanel = new JPanel(new BorderLayout());
-		DefaultMutableTreeNode top =new DefaultMutableTreeNode();
-		DefaultTreeModel treeModel = new DefaultTreeModel(top);
-		treeModel.addTreeModelListener(new MyTreeModelListener());
 		
-		createCategorys(top);
-		popullateCategorys(model);
-		tree = new JTree(treeModel);
-		tree.setRootVisible(false);	
-		UpdateController updCon = new UpdateController(model, controller);	
-		tree.addTreeSelectionListener(tsl -> {
-			if(tree.getSelectionPath() == null) return;
-			DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tsl.getPath().getLastPathComponent();
-			System.out.println(tsl.getPath().getPathCount());
-			if(tsl.getPath().getPathCount() == 3) // 2 is Category 3 is ObjectIn Category
-			{
-				if(selectedNode.getParent().equals(objects))
-				{
-					AbstractCpsObjectInfo info = (AbstractCpsObjectInfo)selectedNode.getUserObject();
-					//treeModel.nodeChanged(selectedNode);
-					
-					model.getSelectedCpsObjects().clear();
-					controller.addSelectedObject(info.getAbstractCpsObject());
-					if(info.getAbstractCpsObject() instanceof HolonObject)
-					{
-						HolonObject hO = (HolonObject) info.getAbstractCpsObject();
-						System.out.println("HolonObject" + hO);
-						System.out.println("getEnergyAtTimestep:" + hO.getEnergyAtTimeStep(0));
-						System.out.println("getEnergyNeededFromConsumingElements:" + hO.getEnergyNeededFromConsumingElements(0));
-						System.out.println("getEnergySelfProducing:" + hO.getEnergySelfProducingFromProducingElements(0));
-						System.out.println("getMinimumConsumingElement:" + hO.getMinimumConsumingElement(0));
-						System.out.println("countConsumingElements:" + hO.countConsumingElements(0));
-						System.out.println("countProducingElements:" + hO.countProducingElements(0));
-					}
-					DefaulTable propertyTable = model.getPropertyTable();
-					if (propertyTable.getRowCount() > 0) {
-						for (int i = propertyTable.getRowCount() - 1; i > -1; i--) {
-							propertyTable.removeRow(i);
-						}
-					}
-					
-					updCon.paintProperties(info.getAbstractCpsObject());
-					updCon.refreshTableHolonElement(model.getMultiTable(), model.getSingleTable());
-					updCon.refreshTableProperties(model.getPropertyTable());
-					gui.getFrmCyberPhysical().repaint();
-				}
-				else if(selectedNode.getParent().equals(cables))
-				{
-					EdgeInfo info = (EdgeInfo)selectedNode.getUserObject();
-					model.setSelectedEdge(info.getEdge());
-					DefaulTable propertyTable = model.getPropertyTable();
-					if (propertyTable.getRowCount() > 0) {
-						for (int i = propertyTable.getRowCount() - 1; i > -1; i--) {
-							propertyTable.removeRow(i);
-						}
-					}
-					controller.setSelecteEdge(info.getEdge());
-					//controller.setSelectedObjectID(0);
-					updCon.refreshTableHolonElement(model.getMultiTable(), model.getSingleTable());
-					updCon.refreshTableProperties(model.getPropertyTable());
-					gui.getFrmCyberPhysical().repaint();
-				}
-			}
-		});
-		signIconsForTree(tree);
-		for (int i = 0; i < tree.getRowCount(); i++) {
-			tree.expandRow(i);
+		
+		JTree listTree = new JTree(topListPanel);
+		signIconsForTree(listTree);
+		listTree.setRootVisible(false);
+		for (int i = 0; i < listTree.getRowCount(); i++) {
+			listTree.expandRow(i);
+		}
+		JScrollPane listScroller = new JScrollPane(listTree);
+		listPanel.add(listScroller);
+		
+		JTree stateTree = new JTree(topStatePanel);
+		signIconsForTree(stateTree);
+		stateTree.setRootVisible(false);
+		for (int i = 0; i < stateTree.getRowCount(); i++) {
+			stateTree.expandRow(i);
 		}
-		JScrollPane listScroller = new JScrollPane(tree);
-		contentPanel.add(listScroller);
-		return contentPanel;
+		statePanel.add(new JScrollPane(stateTree));
+		
+		listPanel.revalidate();;
+		statePanel.revalidate();
+		listPanel.repaint();
 	}
 
 
 
 
+
+
 	private void signIconsForTree(JTree t) {
 		ImageIcon ClosedIcon = new ImageIcon(Util.loadImage("/Button_Images/Close.png",9,9));
 		ImageIcon OpenIcon = new ImageIcon(Util.loadImage("/Button_Images/Open.png",9,9));
@@ -242,32 +165,7 @@ public class Outliner extends JFrame {
 		    t.setCellRenderer(renderer);
 		}
 	}
-	private void createCategorys(DefaultMutableTreeNode top) {
-		top.add(objects);
-		top.add(cables);
-		top.add(switches);
-		top.add(nodes);	
-	}
-	private void popullateCategorys(Model m)
-	{
-		m.defineLists();
-		for(AbstractCpsObject aCps :m.getHolonObjectsOnCanvas())
-		{
-			objects.add(new DefaultMutableTreeNode(new AbstractCpsObjectInfo(aCps)));
-		}
-		for(AbstractCpsObject aCps :m.getNodesOnCanvas())
-		{
-			nodes.add(new DefaultMutableTreeNode(new AbstractCpsObjectInfo(aCps)));
-		}
-		for(AbstractCpsObject aCps :m.getSwitchsOnCanvas())
-		{
-			switches.add(new DefaultMutableTreeNode(new AbstractCpsObjectInfo(aCps)));
-		}
-		for(CpsEdge edge :m.getEdgesOnCanvas())
-		{
-			cables.add(new DefaultMutableTreeNode(new EdgeInfo(edge)));
-		}
-	}
+	
 	class MyTreeModelListener implements TreeModelListener {
 
 		@Override
@@ -295,33 +193,6 @@ public class Outliner extends JFrame {
 		}
 	
 	}
-	/*
-	 * 
-	 * case NO_ENERGY:
-                stateColor = Color.WHITE;
-                break;
-
-            case NOT_SUPPLIED:
-                stateColor = new Color(230, 120, 100);
-                break;
-
-            case SUPPLIED:
-                stateColor = Color.GREEN;
-                break;
-
-            case PRODUCER:
-                stateColor = Color.lightGray;
-                break;
-
-            case PARTIALLY_SUPPLIED:
-                stateColor = Color.YELLOW;
-                break;
-
-            case OVER_SUPPLIED:
-                // find different purple-tones at
-                // http://www.rapidtables.com/web/color/purple-color.htm
-                stateColor = new Color(138, 43, 226);
-	 */
 	private Color getStateColor(HolonObjectState state) {
 		switch(state) {
 		case NOT_SUPPLIED:
@@ -376,18 +247,4 @@ public class Outliner extends JFrame {
 			return aCps;
 		}
 	}
-	class EdgeInfo {
-		private CpsEdge aEdge;
-		EdgeInfo(CpsEdge aEdge){
-			this.aEdge = aEdge;
-		}
-		@Override
-		public String toString(){
-			return aEdge.toString();
-		}
-		public CpsEdge getEdge()
-		{
-			return aEdge;
-		}
-	}
 }