Outliner.java 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. package holeg.ui.view.window;
  2. import java.awt.BorderLayout;
  3. import java.awt.Color;
  4. import java.util.ArrayList;
  5. import java.util.logging.Logger;
  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 holeg.model.AbstractCanvasObject;
  17. import holeg.model.Edge;
  18. import holeg.preferences.ColorPreference;
  19. import holeg.preferences.ImagePreference;
  20. import holeg.ui.controller.Control;
  21. import holeg.ui.model.MinimumNetwork;
  22. import holeg.ui.model.Model;
  23. import holeg.utility.image.Import;
  24. import holeg.utility.listener.WindowClosingListener;
  25. public class Outliner extends JFrame {
  26. private static final Logger log = Logger.getLogger(Outliner.class.getName());
  27. Control control;
  28. JTabbedPane tabbedPane = new JTabbedPane();
  29. JPanel listPanel = new JPanel(new BorderLayout());
  30. JPanel statePanel = new JPanel(new BorderLayout());
  31. ArrayList<MinimumNetwork> list;
  32. Runnable update = this::update;
  33. public Outliner(JFrame parentFrame, Model model, Control control) {
  34. setBounds(0, 0, 400, parentFrame.getHeight());
  35. this.setIconImage(Import.loadImage(ImagePreference.Logo, 30, 30));
  36. this.setTitle("Outliner");
  37. setLocationRelativeTo(parentFrame);
  38. this.setVisible(true);
  39. this.control = control;
  40. update();
  41. this.getContentPane().add(tabbedPane);
  42. this.addWindowListener((WindowClosingListener) e -> {
  43. control.OnCanvasUpdate.removeListener(update);
  44. });
  45. control.OnCanvasUpdate.addListener(update);
  46. tabbedPane.addTab("List", listPanel);
  47. tabbedPane.addTab("State", statePanel);
  48. }
  49. public void update() {
  50. // tabbedPane.removeAll();
  51. listPanel.removeAll();
  52. statePanel.removeAll();
  53. DefaultMutableTreeNode topListPanel = new DefaultMutableTreeNode();
  54. DefaultMutableTreeNode objects = new DefaultMutableTreeNode("HolonObjects");
  55. DefaultMutableTreeNode switches = new DefaultMutableTreeNode("Switches");
  56. DefaultMutableTreeNode nodes = new DefaultMutableTreeNode("Nodes");
  57. DefaultMutableTreeNode cables = new DefaultMutableTreeNode("Cable");
  58. topListPanel.add(objects);
  59. topListPanel.add(switches);
  60. topListPanel.add(nodes);
  61. topListPanel.add(cables);
  62. DefaultMutableTreeNode topStatePanel = new DefaultMutableTreeNode();
  63. Model model = control.getModel();
  64. model.getCanvas().getAllSwitchObjectsRecursive().forEach(hS -> {
  65. switches.add(new DefaultMutableTreeNode(hS.getName()));
  66. });
  67. //TODO(Tom2022-01-13): Fix Outliner
  68. // for (DecoratedNetwork dNet : decoratedState.getNetworkList()) {
  69. // DefaultMutableTreeNode network = new DefaultMutableTreeNode("Network");
  70. // if (!dNet.getConsumerList().isEmpty() || !dNet.getConsumerSelfSuppliedList().isEmpty()) {
  71. // DefaultMutableTreeNode consumer = new DefaultMutableTreeNode("ConsumerList");
  72. // for (Consumer con : dNet.getConsumerList()) {
  73. // DefaultMutableTreeNode consumerNode = new ColoredTreeNode(con.toString(), con.getState().toString(),
  74. // ColorPreference.HolonObject.getStateColor(con.getState()));
  75. // consumer.add(consumerNode);
  76. // objects.add(new DefaultMutableTreeNode(con.getModel().getName()));
  77. // }
  78. // for (Consumer con : dNet.getConsumerSelfSuppliedList()) {
  79. // DefaultMutableTreeNode consumerNode = new DefaultMutableTreeNode(con.toString() + con.getState());
  80. // consumer.add(consumerNode);
  81. // objects.add(new DefaultMutableTreeNode(con.getModel().getName()));
  82. // }
  83. // network.add(consumer);
  84. // }
  85. // if (!dNet.getSupplierList().isEmpty()) {
  86. // DefaultMutableTreeNode supplier = new DefaultMutableTreeNode("SupplierList");
  87. // for (Supplier sup : dNet.getSupplierList()) {
  88. // supplier.add(new DefaultMutableTreeNode(sup.toString()));
  89. // objects.add(new DefaultMutableTreeNode(sup.getModel().getName()));
  90. // }
  91. // network.add(supplier);
  92. // }
  93. // for (Passiv pas : dNet.getPassivNoEnergyList()) {
  94. // objects.add(new DefaultMutableTreeNode(pas.getModel().getName()));
  95. // }
  96. // topStatePanel.add(network);
  97. // for (Edge cable : dNet.getDecoratedCableList()) {
  98. // cables.add(new DefaultMutableTreeNode(cable.toString()));
  99. // }
  100. // }
  101. //
  102. // for (Edge cable : decoratedState.getLeftOverEdges()) {
  103. // cables.add(new DefaultMutableTreeNode(cable.toString()));
  104. // }
  105. JTree listTree = new JTree(topListPanel);
  106. signIconsForTree(listTree);
  107. listTree.setRootVisible(false);
  108. for (int i = 0; i < listTree.getRowCount(); i++) {
  109. listTree.expandRow(i);
  110. }
  111. JScrollPane listScroller = new JScrollPane(listTree);
  112. listPanel.add(listScroller);
  113. JTree stateTree = new JTree(topStatePanel);
  114. signIconsForTree(stateTree);
  115. stateTree.setRootVisible(false);
  116. for (int i = 0; i < stateTree.getRowCount(); i++) {
  117. stateTree.expandRow(i);
  118. }
  119. statePanel.add(new JScrollPane(stateTree));
  120. listPanel.revalidate();
  121. ;
  122. statePanel.revalidate();
  123. listPanel.repaint();
  124. }
  125. private void signIconsForTree(JTree t) {
  126. ImageIcon ClosedIcon = new ImageIcon(Import.loadImage(ImagePreference.Button.Outliner.Closed, 9, 9));
  127. ImageIcon OpenIcon = new ImageIcon(Import.loadImage(ImagePreference.Button.Outliner.Open, 9, 9));
  128. ImageIcon LeafIcon = new ImageIcon(Import.loadImage(ImagePreference.Button.Outliner.Leaf, 9, 9));
  129. if (ClosedIcon != null && OpenIcon != null && LeafIcon != null) {
  130. DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer();
  131. renderer.setClosedIcon(ClosedIcon);
  132. renderer.setOpenIcon(OpenIcon);
  133. renderer.setLeafIcon(LeafIcon);
  134. t.setCellRenderer(renderer);
  135. }
  136. }
  137. class MyTreeModelListener implements TreeModelListener {
  138. @Override
  139. public void treeNodesChanged(TreeModelEvent tmE) {
  140. log.info("treeNodesChanged");
  141. }
  142. @Override
  143. public void treeNodesInserted(TreeModelEvent tmE) {
  144. log.info("treeNodesInserted");
  145. }
  146. @Override
  147. public void treeNodesRemoved(TreeModelEvent tmE) {
  148. log.info("treeNodesRemoved");
  149. }
  150. @Override
  151. public void treeStructureChanged(TreeModelEvent tmE) {
  152. log.info("treeStructureChanged");
  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
  159. // red</font></html>"
  160. // Integer.toHexString(color.getRGB()).substring(2)
  161. // String c = string + "<html><font bgcolor='#132122'>" + state
  162. // +"</font></html>";
  163. super(("<html>" + string + "<font bgcolor='#" + Integer.toHexString(color.getRGB()).substring(2) + "'>"
  164. + state + "</font></html>"));
  165. // this.color = color;
  166. }
  167. public Color getColor() {
  168. return color;
  169. }
  170. public void setColor(Color color) {
  171. this.color = color;
  172. }
  173. }
  174. class AbstractCpsObjectInfo {
  175. private AbstractCanvasObject aCps;
  176. AbstractCpsObjectInfo(AbstractCanvasObject aCps) {
  177. this.aCps = aCps;
  178. }
  179. @Override
  180. public String toString() {
  181. return aCps.getName() + " Id:" + aCps.getId();
  182. }
  183. public AbstractCanvasObject getAbstractCpsObject() {
  184. return aCps;
  185. }
  186. }
  187. }