Outliner.java 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. package ui.view;
  2. import java.awt.BorderLayout;
  3. import java.awt.Color;
  4. import java.util.ArrayList;
  5. import java.util.List;
  6. import javax.swing.ImageIcon;
  7. import javax.swing.JFrame;
  8. import javax.swing.JPanel;
  9. import javax.swing.JScrollPane;
  10. import javax.swing.JTabbedPane;
  11. import javax.swing.JTree;
  12. import javax.swing.event.TreeModelEvent;
  13. import javax.swing.event.TreeModelListener;
  14. import javax.swing.tree.DefaultMutableTreeNode;
  15. import javax.swing.tree.DefaultTreeCellRenderer;
  16. import classes.AbstractCanvasObject;
  17. import classes.Node;
  18. import ui.controller.Control;
  19. import ui.model.Consumer;
  20. import ui.model.DecoratedCable;
  21. import ui.model.DecoratedHolonObject.HolonObjectState;
  22. import utility.ImageImport;
  23. import ui.model.DecoratedNetwork;
  24. import ui.model.DecoratedState;
  25. import ui.model.DecoratedSwitch;
  26. import ui.model.MinimumNetwork;
  27. import ui.model.Model;
  28. import ui.model.Passiv;
  29. import ui.model.Supplier;
  30. public class Outliner extends JFrame {
  31. private static final long serialVersionUID = 1L;
  32. JTabbedPane tabbedPane = new JTabbedPane();
  33. JPanel listPanel = new JPanel(new BorderLayout());
  34. JPanel statePanel = new JPanel(new BorderLayout());
  35. public boolean isClosed = false;
  36. ArrayList<MinimumNetwork> list;
  37. Outliner(JFrame parentFrame, Model model, Control controller){
  38. setBounds(0, 0, 400, parentFrame.getHeight());
  39. this.setIconImage(ImageImport.loadImage("/Images/Holeg.png", 30, 30));
  40. this.setTitle("Outliner");
  41. setLocationRelativeTo(parentFrame);
  42. this.setVisible(true);
  43. repaintWithDecoratedState(controller.getSimManager().getActualDecorState());
  44. this.getContentPane().add(tabbedPane);
  45. this.addWindowListener(new java.awt.event.WindowAdapter() {
  46. @Override
  47. public void windowClosing(java.awt.event.WindowEvent windowEvent) {
  48. isClosed = true;
  49. }
  50. });
  51. tabbedPane.addTab("List", listPanel);
  52. tabbedPane.addTab("State", statePanel);
  53. }
  54. public void repaintWithDecoratedState(DecoratedState decoratedState) {
  55. //tabbedPane.removeAll();
  56. listPanel.removeAll();
  57. statePanel.removeAll();
  58. DefaultMutableTreeNode topListPanel = new DefaultMutableTreeNode();
  59. DefaultMutableTreeNode objects = new DefaultMutableTreeNode("HolonObjects");
  60. DefaultMutableTreeNode switches = new DefaultMutableTreeNode("Switches");
  61. DefaultMutableTreeNode nodes = new DefaultMutableTreeNode("Nodes");
  62. DefaultMutableTreeNode cables = new DefaultMutableTreeNode("Cable");
  63. topListPanel.add(objects);
  64. topListPanel.add(switches);
  65. topListPanel.add(nodes);
  66. topListPanel.add(cables);
  67. DefaultMutableTreeNode topStatePanel = new DefaultMutableTreeNode();
  68. for(DecoratedSwitch dSwitch: decoratedState.getDecoratedSwitches()) {
  69. switches.add(new DefaultMutableTreeNode(dSwitch.getModel().getName()));
  70. }
  71. /*for(CpsNode node: decoratedState.getNodeList()) {
  72. nodes.add(new DefaultMutableTreeNode(node.getName()));
  73. }*/
  74. for(DecoratedNetwork dNet: decoratedState.getNetworkList()) {
  75. synchronized (dNet.getLockObject()) {
  76. DefaultMutableTreeNode network = new DefaultMutableTreeNode("Network");
  77. if (!dNet.getConsumerList().isEmpty() || !dNet.getConsumerSelfSuppliedList().isEmpty()) {
  78. DefaultMutableTreeNode consumer = new DefaultMutableTreeNode("ConsumerList");
  79. for (Consumer con : dNet.getConsumerList()) {
  80. DefaultMutableTreeNode consumerNode = new ColoredTreeNode(con.toString(), con.getState().toString(), getStateColor(con.getState()));
  81. consumer.add(consumerNode);
  82. objects.add(new DefaultMutableTreeNode(con.getModel().getName()));
  83. }
  84. for (Consumer con : dNet.getConsumerSelfSuppliedList()) {
  85. DefaultMutableTreeNode consumerNode = new DefaultMutableTreeNode(con.toString() + con.getState());
  86. consumer.add(consumerNode);
  87. objects.add(new DefaultMutableTreeNode(con.getModel().getName()));
  88. }
  89. network.add(consumer);
  90. }
  91. if (!dNet.getSupplierList().isEmpty()) {
  92. DefaultMutableTreeNode supplier = new DefaultMutableTreeNode("SupplierList");
  93. for (Supplier sup : dNet.getSupplierList()) {
  94. supplier.add(new DefaultMutableTreeNode(sup.toString()));
  95. objects.add(new DefaultMutableTreeNode(sup.getModel().getName()));
  96. }
  97. network.add(supplier);
  98. }
  99. for (Passiv pas : dNet.getPassivNoEnergyList()) {
  100. objects.add(new DefaultMutableTreeNode(pas.getModel().getName()));
  101. }
  102. topStatePanel.add(network);
  103. for (DecoratedCable cable : dNet.getDecoratedCableList()) {
  104. cables.add(new DefaultMutableTreeNode(cable.getModel().toString()));
  105. }
  106. }
  107. }
  108. for(DecoratedCable cable : decoratedState.getLeftOverEdges()) {
  109. cables.add(new DefaultMutableTreeNode(cable.getModel().toString()));
  110. }
  111. JTree listTree = new JTree(topListPanel);
  112. signIconsForTree(listTree);
  113. listTree.setRootVisible(false);
  114. for (int i = 0; i < listTree.getRowCount(); i++) {
  115. listTree.expandRow(i);
  116. }
  117. JScrollPane listScroller = new JScrollPane(listTree);
  118. listPanel.add(listScroller);
  119. JTree stateTree = new JTree(topStatePanel);
  120. signIconsForTree(stateTree);
  121. stateTree.setRootVisible(false);
  122. for (int i = 0; i < stateTree.getRowCount(); i++) {
  123. stateTree.expandRow(i);
  124. }
  125. statePanel.add(new JScrollPane(stateTree));
  126. listPanel.revalidate();;
  127. statePanel.revalidate();
  128. listPanel.repaint();
  129. }
  130. private void signIconsForTree(JTree t) {
  131. ImageIcon ClosedIcon = new ImageIcon(ImageImport.loadImage("/Button_Images/Close.png",9,9));
  132. ImageIcon OpenIcon = new ImageIcon(ImageImport.loadImage("/Button_Images/Open.png",9,9));
  133. ImageIcon LeafIcon = new ImageIcon(ImageImport.loadImage("/Button_Images/Leaf.png",9,9));
  134. if (ClosedIcon != null && OpenIcon != null && LeafIcon!= null) {
  135. DefaultTreeCellRenderer renderer =
  136. new DefaultTreeCellRenderer();
  137. renderer.setClosedIcon(ClosedIcon);
  138. renderer.setOpenIcon(OpenIcon);
  139. renderer.setLeafIcon(LeafIcon);
  140. t.setCellRenderer(renderer);
  141. }
  142. }
  143. class MyTreeModelListener implements TreeModelListener {
  144. @Override
  145. public void treeNodesChanged(TreeModelEvent tmE) {
  146. // TODO Auto-generated method stub
  147. System.out.println("treeNodesChanged");
  148. }
  149. @Override
  150. public void treeNodesInserted(TreeModelEvent tmE) {
  151. // TODO Auto-generated method stub
  152. System.out.println("treeNodesInserted");
  153. }
  154. @Override
  155. public void treeNodesRemoved(TreeModelEvent tmE) {
  156. // TODO Auto-generated method stub
  157. System.out.println("treeNodesRemoved");
  158. }
  159. @Override
  160. public void treeStructureChanged(TreeModelEvent tmE) {
  161. // TODO Auto-generated method stub
  162. System.out.println("treeStructureChanged");
  163. }
  164. }
  165. private Color getStateColor(HolonObjectState state) {
  166. switch(state) {
  167. case NOT_SUPPLIED:
  168. return new Color(230, 120, 100);
  169. case NO_ENERGY:
  170. return Color.white;
  171. case OVER_SUPPLIED:
  172. return new Color(166, 78, 229);
  173. case PARTIALLY_SUPPLIED:
  174. return Color.yellow;
  175. case PRODUCER:
  176. return Color.lightGray;
  177. case SUPPLIED:
  178. return new Color(13, 175, 28);
  179. default:
  180. return Color.BLACK;
  181. }
  182. }
  183. @SuppressWarnings("serial")
  184. class ColoredTreeNode extends DefaultMutableTreeNode{
  185. private Color color;
  186. public ColoredTreeNode(String string, String state, Color color) {
  187. //"<html>Some text <font color='red'>" + "bla" + "some text in red</font></html>"
  188. //Integer.toHexString(color.getRGB()).substring(2)
  189. //String c = string + "<html><font bgcolor='#132122'>" + state +"</font></html>";
  190. super(( "<html>" + string + "<font bgcolor='#" + Integer.toHexString(color.getRGB()).substring(2) + "'>" + state +"</font></html>"));
  191. //this.color = color;
  192. }
  193. public Color getColor(){
  194. return color;
  195. }
  196. public void setColor(Color color) {
  197. this.color = color;
  198. }
  199. }
  200. class AbstractCpsObjectInfo {
  201. private AbstractCanvasObject aCps;
  202. AbstractCpsObjectInfo(AbstractCanvasObject aCps){
  203. this.aCps = aCps;
  204. }
  205. @Override
  206. public String toString(){
  207. return aCps.getName() + " Id:"+ aCps.getId();
  208. }
  209. public AbstractCanvasObject getAbstractCpsObject()
  210. {
  211. return aCps;
  212. }
  213. }
  214. }