HolarchyTreePanel.java 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  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. private 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. private JTree generateTree() {
  50. root = generateFromHolon(control.getModel().getStateHolon());
  51. return new JTree(root);
  52. }
  53. private DefaultMutableTreeNode generateFromHolon(Holon holon) {
  54. DefaultMutableTreeNode node = new DefaultMutableTreeNode(new HolonInfo(holon));
  55. for(Holon child : holon.getChildView()) {
  56. node.add(generateFromHolon(child));
  57. }
  58. return node;
  59. }
  60. private void updateTreeStructure() {
  61. holonTree.clearSelection();
  62. root.removeAllChildren();
  63. Holon holon = control.getModel().getStateHolon();
  64. for(Holon child : holon.getChildView()) {
  65. root.add(generateFromHolon(child));
  66. }
  67. holonTree.updateUI();
  68. TreeUtils.expand(holonTree);
  69. }
  70. interface HolonNode{
  71. public Icon getIcon();
  72. public String getToolTip();
  73. public void SetName(String name);
  74. }
  75. static final Icon holonIcon = new ImageIcon(ImageImport.loadImage("/Button_Images/holon_logic.png",16,16));
  76. static final Icon holonPhysicalIcon = new ImageIcon(ImageImport.loadImage("/Button_Images/holon_physical.png",16,16));
  77. static final String holonToolTip = "Holon";
  78. class HolonInfo implements HolonNode{
  79. private Holon holon;
  80. HolonInfo(Holon holon){
  81. this.holon = holon;
  82. }
  83. @Override
  84. public String toString(){
  85. return holon.name+" "+holon.getUniqueID();
  86. }
  87. public Holon getElement()
  88. {
  89. return holon;
  90. }
  91. public void AddElement(HolonElement element) {
  92. if(element.holon != null) {
  93. element.holon.removeElement(element);
  94. }
  95. holon.addElement(element);
  96. }
  97. public void AddHolon(Holon holon) {
  98. holon.removeFromParent();
  99. this.holon.addChild(holon);
  100. }
  101. @Override
  102. public Icon getIcon() {
  103. BufferedImage image = new BufferedImage(16, 16, BufferedImage.TYPE_INT_BGR);
  104. for(int i=0; i<16; i++) {
  105. for(int j=0; j<16; j++) {
  106. image.setRGB(i, j, parentFrame.holarchyPanel.coloredHolons.get(this.holon).getRGB());
  107. }
  108. }
  109. return new ImageIcon(image);
  110. // return holon.isPhysical? holonPhysicalIcon : holonIcon;
  111. }
  112. @Override
  113. public String getToolTip() {
  114. return holonToolTip;
  115. }
  116. @Override
  117. public void SetName(String name) {
  118. holon.name = name;
  119. }
  120. }
  121. //Cell Display
  122. class HolonJtreeRenderer extends DefaultTreeCellRenderer {
  123. public Component getTreeCellRendererComponent(
  124. JTree tree,
  125. Object value,
  126. boolean isSelected,
  127. boolean expanded,
  128. boolean leaf,
  129. int row,
  130. boolean hasFocus) {
  131. super.getTreeCellRendererComponent(tree, value, isSelected, expanded, leaf, row, hasFocus);
  132. DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
  133. HolonNode Node = (HolonNode) node.getUserObject();
  134. if(row != 0) {
  135. this.setIcon(Node.getIcon());
  136. this.setToolTipText(Node.getToolTip());
  137. }
  138. return this;
  139. }
  140. }
  141. }