HolarchyTreePanel.java 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. package ui.view.holarchy;
  2. import java.awt.BorderLayout;
  3. import java.awt.Component;
  4. import java.awt.Image;
  5. import java.awt.event.MouseAdapter;
  6. import java.awt.event.MouseEvent;
  7. import java.awt.image.BufferedImage;
  8. import javax.swing.Icon;
  9. import javax.swing.ImageIcon;
  10. import javax.swing.JCheckBoxMenuItem;
  11. import javax.swing.JMenuItem;
  12. import javax.swing.JPanel;
  13. import javax.swing.JPopupMenu;
  14. import javax.swing.JTree;
  15. import javax.swing.SwingUtilities;
  16. import javax.swing.ToolTipManager;
  17. import javax.swing.tree.DefaultMutableTreeNode;
  18. import javax.swing.tree.DefaultTreeCellRenderer;
  19. import javax.swing.tree.TreePath;
  20. import javax.swing.tree.TreeSelectionModel;
  21. import classes.Holon;
  22. import classes.HolonElement;
  23. import classes.HolonObject;
  24. import ui.controller.Control;
  25. import ui.view.outliner.TreeUtils;
  26. import util.ImageImport;
  27. public class HolarchyTreePanel extends JPanel {
  28. private Control control;
  29. private JTree holonTree;
  30. private DefaultMutableTreeNode root;
  31. private HolarchyWindow parentFrame;
  32. public HolarchyTreePanel(HolarchyWindow parentFrame, Control control) {
  33. this.control = control;
  34. this.setLayout(new BorderLayout());
  35. this.parentFrame = parentFrame;
  36. initilizePanel();
  37. }
  38. public void initilizePanel() {
  39. holonTree = generateTree();
  40. holonTree.setCellRenderer(new HolonJtreeRenderer());
  41. holonTree.getSelectionModel().setSelectionMode(
  42. TreeSelectionModel.SINGLE_TREE_SELECTION);
  43. ToolTipManager.sharedInstance().registerComponent(holonTree);
  44. TreeUtils.expand(holonTree);
  45. holonTree.setRootVisible(true);
  46. holonTree.setEditable(true);
  47. this.add(TreeUtils.makePanelFromTree(holonTree));
  48. }
  49. public void update() {
  50. this.removeAll();
  51. this.initilizePanel();
  52. }
  53. private JTree generateTree() {
  54. root = generateFromHolon(control.getModel().getStateHolon());
  55. return new JTree(root);
  56. }
  57. private DefaultMutableTreeNode generateFromHolon(Holon holon) {
  58. DefaultMutableTreeNode node = new DefaultMutableTreeNode(new HolonInfo(holon));
  59. for(Holon child : holon.getChildView()) {
  60. node.add(generateFromHolon(child));
  61. }
  62. return node;
  63. }
  64. private void updateTreeStructure() {
  65. holonTree.clearSelection();
  66. root.removeAllChildren();
  67. Holon holon = control.getModel().getStateHolon();
  68. for(Holon child : holon.getChildView()) {
  69. root.add(generateFromHolon(child));
  70. }
  71. holonTree.updateUI();
  72. TreeUtils.expand(holonTree);
  73. }
  74. interface HolonNode{
  75. public Icon getIcon();
  76. public String getToolTip();
  77. public void SetName(String name);
  78. }
  79. static final Icon holonIcon = new ImageIcon(ImageImport.loadImage("/Button_Images/holon_logic.png",16,16));
  80. static final Icon holonPhysicalIcon = new ImageIcon(ImageImport.loadImage("/Button_Images/holon_physical.png",16,16));
  81. static final String holonToolTip = "Holon";
  82. class HolonInfo implements HolonNode{
  83. private Holon holon;
  84. HolonInfo(Holon holon){
  85. this.holon = holon;
  86. }
  87. @Override
  88. public String toString(){
  89. return holon.name+" "+holon.getUniqueID();
  90. }
  91. public Holon getElement()
  92. {
  93. return holon;
  94. }
  95. public void AddElement(HolonElement element) {
  96. if(element.holon != null) {
  97. element.holon.removeElement(element);
  98. }
  99. holon.addElement(element);
  100. }
  101. public void AddHolon(Holon holon) {
  102. holon.removeFromParent();
  103. this.holon.merge(holon, true);
  104. }
  105. @Override
  106. public Icon getIcon() {
  107. BufferedImage image = new BufferedImage(16, 16, BufferedImage.TYPE_INT_BGR);
  108. for(int i=0; i<16; i++) {
  109. for(int j=0; j<16; j++) {
  110. image.setRGB(i, j, parentFrame.holarchyPanel.coloredHolons.get(this.holon).getRGB());
  111. }
  112. }
  113. return new ImageIcon(image);
  114. // return holon.isPhysical? holonPhysicalIcon : holonIcon;
  115. }
  116. @Override
  117. public String getToolTip() {
  118. return holonToolTip;
  119. }
  120. @Override
  121. public void SetName(String name) {
  122. holon.name = name;
  123. }
  124. }
  125. //Cell Display
  126. class HolonJtreeRenderer extends DefaultTreeCellRenderer {
  127. public Component getTreeCellRendererComponent(
  128. JTree tree,
  129. Object value,
  130. boolean isSelected,
  131. boolean expanded,
  132. boolean leaf,
  133. int row,
  134. boolean hasFocus) {
  135. super.getTreeCellRendererComponent(tree, value, isSelected, expanded, leaf, row, hasFocus);
  136. DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
  137. HolonNode Node = (HolonNode) node.getUserObject();
  138. if(row != 0) {
  139. this.setIcon(Node.getIcon());
  140. this.setToolTipText(Node.getToolTip());
  141. }
  142. return this;
  143. }
  144. }
  145. }