package ui.view.outliner; import java.awt.BorderLayout; import java.awt.Color; import java.util.ArrayList; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTabbedPane; import javax.swing.event.TreeModelEvent; import javax.swing.event.TreeModelListener; import javax.swing.tree.DefaultMutableTreeNode; import ui.controller.Control; import ui.model.Consumer; import ui.model.DecoratedCable; import ui.model.DecoratedHolonObject.HolonObjectState; import util.ImageImport; import ui.model.DecoratedNetwork; import ui.model.DecoratedState; import ui.model.DecoratedSwitch; import ui.model.MinimumNetwork; import ui.model.Model; import ui.model.Passiv; import ui.model.Supplier; import util.Event; import util.ImageImport; //Combines High Level views on the Network //TODO seperate ListPanel and StatePanel in self-contained classes public class Outliner extends JFrame { JTabbedPane tabbedPane = new JTabbedPane(); JPanel listPanel = new JPanel(new BorderLayout()); JPanel statePanel = new JPanel(new BorderLayout()); Event outlinerUpdate = new Event(); HolonView holonView; public boolean isClosed = false; ArrayList list; public Outliner(JFrame parentFrame, Model model, Control control){ setBounds(0, 0, 400, parentFrame.getHeight()); this.setIconImage(ImageImport.loadImage("/Images/Holeg.png", 30, 30)); this.setTitle("Outliner"); setLocationRelativeTo(parentFrame); this.setVisible(true); repaintWithDecoratedState(control.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); tabbedPane.addTab("Holon", holonView = new HolonView(this, control)); } public void repaintWithDecoratedState(DecoratedState decoratedState) { outlinerUpdate.broadcast(); 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("Networks"); for(DecoratedSwitch dSwitch: decoratedState.getDecoratedSwitches()) { switches.add(new DefaultMutableTreeNode(dSwitch.getModel().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()) ); consumer.add(consumerNode); objects.add(new DefaultMutableTreeNode(con.getModel().getName())); } for (Consumer con : dNet.getConsumerSelfSuppliedList()) { DefaultMutableTreeNode consumerNode = new DefaultMutableTreeNode(con.toString() + con.getState()); consumer.add(consumerNode); objects.add(new DefaultMutableTreeNode(con.getModel().getName())); } network.add(consumer); } if(!dNet.getSupplierList().isEmpty()) { DefaultMutableTreeNode supplier = new DefaultMutableTreeNode("SupplierList"); for (Supplier sup : dNet.getSupplierList()) { supplier.add(new DefaultMutableTreeNode(sup.toString())); objects.add(new DefaultMutableTreeNode(sup.getModel().getName())); } network.add(supplier); } 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())); } } for(DecoratedCable cable : decoratedState.getLeftOverEdges()) { cables.add(new DefaultMutableTreeNode(cable.getModel().toString())); } listPanel.add(TreeUtils.makePanelFromNode(topListPanel)); statePanel.add(TreeUtils.makePanelFromNode(topStatePanel)); listPanel.revalidate(); statePanel.revalidate(); listPanel.repaint(); } class MyTreeModelListener implements TreeModelListener { @Override public void treeNodesChanged(TreeModelEvent tmE) { // TODO Auto-generated method stub System.out.println("treeNodesChanged"); } @Override public void treeNodesInserted(TreeModelEvent tmE) { // TODO Auto-generated method stub System.out.println("treeNodesInserted"); } @Override public void treeNodesRemoved(TreeModelEvent tmE) { // TODO Auto-generated method stub System.out.println("treeNodesRemoved"); } @Override public void treeStructureChanged(TreeModelEvent tmE) { // TODO Auto-generated method stub System.out.println("treeStructureChanged"); } } private Color getStateColor(HolonObjectState state) { switch(state) { case NOT_SUPPLIED: return new Color(230, 120, 100); case NO_ENERGY: return Color.white; case OVER_SUPPLIED: return new Color(166, 78, 229); case PARTIALLY_SUPPLIED: return Color.yellow; case PRODUCER: return Color.lightGray; case SUPPLIED: return new Color(13, 175, 28); default: return Color.BLACK; } } class ColoredTreeNode extends DefaultMutableTreeNode{ private Color color; public ColoredTreeNode(String string, String state, Color color) { //"Some text " + "bla" + "some text in red" //Integer.toHexString(color.getRGB()).substring(2) //String c = string + "" + state +""; super(( "" + string + "" + state +"")); //this.color = color; } public Color getColor(){ return color; } public void setColor(Color color) { this.color = color; } } }