Outliner.java 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. package ui.view.outliner;
  2. import java.awt.BorderLayout;
  3. import java.awt.Color;
  4. import java.util.ArrayList;
  5. import javax.swing.JFrame;
  6. import javax.swing.JPanel;
  7. import javax.swing.JTabbedPane;
  8. import javax.swing.event.TreeModelEvent;
  9. import javax.swing.event.TreeModelListener;
  10. import javax.swing.tree.DefaultMutableTreeNode;
  11. import ui.controller.Control;
  12. import ui.model.Consumer;
  13. import ui.model.DecoratedCable;
  14. import ui.model.DecoratedHolonObject.HolonObjectState;
  15. import util.ImageImport;
  16. import ui.model.DecoratedNetwork;
  17. import ui.model.DecoratedState;
  18. import ui.model.DecoratedSwitch;
  19. import ui.model.MinimumNetwork;
  20. import ui.model.Model;
  21. import ui.model.Passiv;
  22. import ui.model.Supplier;
  23. import util.Event;
  24. import util.ImageImport;
  25. //Combines High Level views on the Network
  26. //TODO seperate ListPanel and StatePanel in self-contained classes
  27. public class Outliner extends JFrame {
  28. JTabbedPane tabbedPane = new JTabbedPane();
  29. JPanel listPanel = new JPanel(new BorderLayout());
  30. JPanel statePanel = new JPanel(new BorderLayout());
  31. Event outlinerUpdate = new Event();
  32. HolonView holonView;
  33. public boolean isClosed = false;
  34. ArrayList<MinimumNetwork> list;
  35. public Outliner(JFrame parentFrame, Model model, Control control){
  36. setBounds(0, 0, 400, parentFrame.getHeight());
  37. this.setIconImage(ImageImport.loadImage("/Images/Holeg.png", 30, 30));
  38. this.setTitle("Outliner");
  39. setLocationRelativeTo(parentFrame);
  40. this.setVisible(true);
  41. repaintWithDecoratedState(control.getSimManager().getActualDecorState());
  42. this.getContentPane().add(tabbedPane);
  43. this.addWindowListener(new java.awt.event.WindowAdapter() {
  44. @Override
  45. public void windowClosing(java.awt.event.WindowEvent windowEvent) {
  46. isClosed = true;
  47. }
  48. });
  49. tabbedPane.addTab("List", listPanel);
  50. tabbedPane.addTab("State", statePanel);
  51. tabbedPane.addTab("Holon", holonView = new HolonView(this, control));
  52. }
  53. public void repaintWithDecoratedState(DecoratedState decoratedState) {
  54. outlinerUpdate.broadcast();
  55. listPanel.removeAll();
  56. statePanel.removeAll();
  57. DefaultMutableTreeNode topListPanel = new DefaultMutableTreeNode();
  58. DefaultMutableTreeNode objects = new DefaultMutableTreeNode("HolonObjects");
  59. DefaultMutableTreeNode switches = new DefaultMutableTreeNode("Switches");
  60. DefaultMutableTreeNode nodes = new DefaultMutableTreeNode("Nodes");
  61. DefaultMutableTreeNode cables = new DefaultMutableTreeNode("Cable");
  62. topListPanel.add(objects);
  63. topListPanel.add(switches);
  64. topListPanel.add(nodes);
  65. topListPanel.add(cables);
  66. DefaultMutableTreeNode topStatePanel = new DefaultMutableTreeNode("Networks");
  67. for(DecoratedSwitch dSwitch: decoratedState.getDecoratedSwitches()) {
  68. switches.add(new DefaultMutableTreeNode(dSwitch.getModel().getName()));
  69. }
  70. for(DecoratedNetwork dNet: decoratedState.getNetworkList()) {
  71. DefaultMutableTreeNode network = new DefaultMutableTreeNode("Network");
  72. if(!dNet.getConsumerList().isEmpty() || !dNet.getConsumerSelfSuppliedList().isEmpty()) {
  73. DefaultMutableTreeNode consumer = new DefaultMutableTreeNode("ConsumerList");
  74. for (Consumer con : dNet.getConsumerList()) {
  75. DefaultMutableTreeNode consumerNode = new ColoredTreeNode(con.toString(),con.getState().toString(), getStateColor(con.getState()) );
  76. consumer.add(consumerNode);
  77. objects.add(new DefaultMutableTreeNode(con.getModel().getName()));
  78. }
  79. for (Consumer con : dNet.getConsumerSelfSuppliedList()) {
  80. DefaultMutableTreeNode consumerNode = new DefaultMutableTreeNode(con.toString() + con.getState());
  81. consumer.add(consumerNode);
  82. objects.add(new DefaultMutableTreeNode(con.getModel().getName()));
  83. }
  84. network.add(consumer);
  85. }
  86. if(!dNet.getSupplierList().isEmpty()) {
  87. DefaultMutableTreeNode supplier = new DefaultMutableTreeNode("SupplierList");
  88. for (Supplier sup : dNet.getSupplierList()) {
  89. supplier.add(new DefaultMutableTreeNode(sup.toString()));
  90. objects.add(new DefaultMutableTreeNode(sup.getModel().getName()));
  91. }
  92. network.add(supplier);
  93. }
  94. for(Passiv pas: dNet.getPassivNoEnergyList()) {
  95. objects.add(new DefaultMutableTreeNode(pas.getModel().getName()));
  96. }
  97. topStatePanel.add(network);
  98. for(DecoratedCable cable : dNet.getDecoratedCableList()) {
  99. cables.add(new DefaultMutableTreeNode(cable.getModel().toString()));
  100. }
  101. }
  102. for(DecoratedCable cable : decoratedState.getLeftOverEdges()) {
  103. cables.add(new DefaultMutableTreeNode(cable.getModel().toString()));
  104. }
  105. listPanel.add(TreeUtils.makePanelFromNode(topListPanel));
  106. statePanel.add(TreeUtils.makePanelFromNode(topStatePanel));
  107. listPanel.revalidate();
  108. statePanel.revalidate();
  109. listPanel.repaint();
  110. if(holonView != null) {
  111. holonView.revalidate();
  112. holonView.repaint();
  113. }
  114. }
  115. class MyTreeModelListener implements TreeModelListener {
  116. @Override
  117. public void treeNodesChanged(TreeModelEvent tmE) {
  118. // TODO Auto-generated method stub
  119. System.out.println("treeNodesChanged");
  120. }
  121. @Override
  122. public void treeNodesInserted(TreeModelEvent tmE) {
  123. // TODO Auto-generated method stub
  124. System.out.println("treeNodesInserted");
  125. }
  126. @Override
  127. public void treeNodesRemoved(TreeModelEvent tmE) {
  128. // TODO Auto-generated method stub
  129. System.out.println("treeNodesRemoved");
  130. }
  131. @Override
  132. public void treeStructureChanged(TreeModelEvent tmE) {
  133. // TODO Auto-generated method stub
  134. System.out.println("treeStructureChanged");
  135. }
  136. }
  137. private Color getStateColor(HolonObjectState state) {
  138. switch(state) {
  139. case NOT_SUPPLIED:
  140. return new Color(230, 120, 100);
  141. case NO_ENERGY:
  142. return Color.white;
  143. case OVER_SUPPLIED:
  144. return new Color(166, 78, 229);
  145. case PARTIALLY_SUPPLIED:
  146. return Color.yellow;
  147. case PRODUCER:
  148. return Color.lightGray;
  149. case SUPPLIED:
  150. return new Color(13, 175, 28);
  151. default:
  152. return Color.BLACK;
  153. }
  154. }
  155. class ColoredTreeNode extends DefaultMutableTreeNode{
  156. private Color color;
  157. public ColoredTreeNode(String string, String state, Color color) {
  158. //"<html>Some text <font color='red'>" + "bla" + "some text in red</font></html>"
  159. //Integer.toHexString(color.getRGB()).substring(2)
  160. //String c = string + "<html><font bgcolor='#132122'>" + state +"</font></html>";
  161. super(( "<html>" + string + "<font bgcolor='#" + Integer.toHexString(color.getRGB()).substring(2) + "'>" + state +"</font></html>"));
  162. //this.color = color;
  163. }
  164. public Color getColor(){
  165. return color;
  166. }
  167. public void setColor(Color color) {
  168. this.color = color;
  169. }
  170. }
  171. }