Outliner.java 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. package holeg.ui.view.window;
  2. import holeg.model.Holon;
  3. import holeg.model.HolonObject;
  4. import holeg.preferences.ColorPreference;
  5. import holeg.preferences.ImagePreference;
  6. import holeg.ui.controller.Control;
  7. import holeg.ui.view.image.Import;
  8. import holeg.utility.listener.WindowClosingListener;
  9. import holeg.utility.math.decimal.Format;
  10. import javax.swing.*;
  11. import javax.swing.tree.DefaultMutableTreeNode;
  12. import javax.swing.tree.DefaultTreeCellRenderer;
  13. import java.awt.*;
  14. import java.util.logging.Logger;
  15. public class Outliner extends JFrame {
  16. private static final Logger log = Logger.getLogger(Outliner.class.getName());
  17. private final Control control;
  18. JTabbedPane tabbedPane = new JTabbedPane();
  19. JPanel listPanel = new JPanel(new BorderLayout());
  20. JPanel statePanel = new JPanel(new BorderLayout());
  21. Runnable update = this::update;
  22. private static final String ConsumptionFontHTMLBracket = "<font bgcolor='#"
  23. + Integer.toHexString(ColorPreference.Energy.Consumption.getRGB()).substring(2) + "'>";
  24. private static final String ProductionFontHTMLBracket = "<font bgcolor='#"
  25. + Integer.toHexString(ColorPreference.Energy.Production.getRGB()).substring(2) + "'>";
  26. private static final String FontClosingBracket = "</font> ";
  27. public Outliner(JFrame parentFrame, Control control) {
  28. setBounds(0, 0, 400, parentFrame.getHeight());
  29. this.setIconImage(Import.loadImage(ImagePreference.Logo, 30, 30));
  30. this.setTitle("Outliner");
  31. setLocationRelativeTo(parentFrame);
  32. this.setVisible(true);
  33. this.control = control;
  34. update();
  35. this.getContentPane().add(tabbedPane);
  36. this.addWindowListener((WindowClosingListener) e -> control.OnCanvasUpdate.removeListener(update));
  37. control.OnCanvasUpdate.addListener(update);
  38. tabbedPane.addTab("State", statePanel);
  39. }
  40. public void update() {
  41. listPanel.removeAll();
  42. statePanel.removeAll();
  43. DefaultMutableTreeNode topListPanel = new DefaultMutableTreeNode();
  44. DefaultMutableTreeNode objects = new DefaultMutableTreeNode("HolonObjects");
  45. DefaultMutableTreeNode switches = new DefaultMutableTreeNode("Switches");
  46. DefaultMutableTreeNode nodes = new DefaultMutableTreeNode("Nodes");
  47. DefaultMutableTreeNode cables = new DefaultMutableTreeNode("Cable");
  48. topListPanel.add(objects);
  49. topListPanel.add(switches);
  50. topListPanel.add(nodes);
  51. topListPanel.add(cables);
  52. DefaultMutableTreeNode topStatePanel = new DefaultMutableTreeNode();
  53. for (Holon dNet : control.getModel().holons) {
  54. DefaultMutableTreeNode network = new DefaultMutableTreeNode("Holon");
  55. for(HolonObject hObject : dNet.holonObjects){
  56. DefaultMutableTreeNode holonObjectNode = createColoredTreeNodeFromHolonObject(hObject);
  57. network.add(holonObjectNode);
  58. }
  59. topStatePanel.add(network);
  60. }
  61. JTree listTree = new JTree(topListPanel);
  62. signIconsForTree(listTree);
  63. listTree.setRootVisible(false);
  64. for (int i = 0; i < listTree.getRowCount(); i++) {
  65. listTree.expandRow(i);
  66. }
  67. JScrollPane listScroller = new JScrollPane(listTree);
  68. listPanel.add(listScroller);
  69. JTree stateTree = new JTree(topStatePanel);
  70. signIconsForTree(stateTree);
  71. stateTree.setRootVisible(false);
  72. for (int i = 0; i < stateTree.getRowCount(); i++) {
  73. stateTree.expandRow(i);
  74. }
  75. statePanel.add(new JScrollPane(stateTree));
  76. listPanel.revalidate();
  77. statePanel.revalidate();
  78. listPanel.repaint();
  79. }
  80. private void signIconsForTree(JTree t) {
  81. ImageIcon ClosedIcon = new ImageIcon(Import.loadImage(ImagePreference.Button.Outliner.Closed, 9, 9));
  82. ImageIcon OpenIcon = new ImageIcon(Import.loadImage(ImagePreference.Button.Outliner.Open, 9, 9));
  83. ImageIcon LeafIcon = new ImageIcon(Import.loadImage(ImagePreference.Button.Outliner.Leaf, 9, 9));
  84. DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer();
  85. renderer.setClosedIcon(ClosedIcon);
  86. renderer.setOpenIcon(OpenIcon);
  87. renderer.setLeafIcon(LeafIcon);
  88. t.setCellRenderer(renderer);
  89. }
  90. private DefaultMutableTreeNode createColoredTreeNodeFromHolonObject(HolonObject obj){
  91. String context = "<html>" + obj.getName() + "<font bgcolor='#"
  92. + Integer.toHexString(ColorPreference.HolonObject.getStateColor(obj.getState()).getRGB()).substring(2) + "'>" +
  93. " " + obj.getState().toString() + FontClosingBracket
  94. + ConsumptionFontHTMLBracket + Format.doubleTwoPlaces(obj.getConsumption()) + FontClosingBracket
  95. + ProductionFontHTMLBracket + Format.doubleTwoPlaces(obj.getProduction()) + FontClosingBracket
  96. + "</html>";
  97. return new DefaultMutableTreeNode(context);
  98. }
  99. }