EOS 2  1.1.0
Einfache Objektbasierte Sprache
ClassDoc.java
gehe zur Dokumentation dieser Datei
1 package de.lathanda.eos.gui;
2 
3 import java.awt.Component;
4 import java.awt.Dimension;
5 import java.awt.Font;
6 import java.awt.Toolkit;
7 import java.awt.event.MouseEvent;
8 import java.util.LinkedList;
9 import java.util.TreeSet;
10 
11 import javax.swing.JFrame;
12 import javax.swing.JLabel;
13 import javax.swing.JScrollPane;
14 import javax.swing.JTree;
15 import javax.swing.ToolTipManager;
16 import javax.swing.tree.DefaultMutableTreeNode;
17 import javax.swing.tree.TreeCellRenderer;
18 import javax.swing.tree.TreePath;
19 
20 import de.lathanda.eos.base.util.GuiToolkit;
21 import de.lathanda.eos.baseparser.AutoCompleteInformation;
22 import de.lathanda.eos.baseparser.SystemType;
23 import de.lathanda.eos.common.gui.Messages;
24 import de.lathanda.eos.config.Language;
25 
26 import static de.lathanda.eos.base.icons.Icons.*;
27 
28 public class ClassDoc extends JFrame {
29  private static final long serialVersionUID = -1384422891907360658L;
33  private static ClassDoc help = null;
34 
38  public static void showDoc() {
39 
40  if (help == null) {
41  help = new ClassDoc();
42  } else if (help.isVisible()) {
43  return;
44  }
45  Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
46  help.setBounds((int) (screen.width * 0.5), 0, (int) (screen.height * 0.9), (int) (screen.width * 0.5));
47  help.setTitle(Messages.getString("Classbook.Title"));
48  help.setIconImage(LOGO);
49  help.setVisible(true);
50  }
51 
52  private static DefaultMutableTreeNode root;
53  static {
54 
55  root = new DefaultMutableTreeNode(
56  new TreeEntry(Messages.getString("Classbook.Classes"), AutoCompleteInformation.CLASS));
57  LinkedList<de.lathanda.eos.baseparser.Type> types = SystemType.getAll();
58 
59  for (de.lathanda.eos.baseparser.Type t : types) {
60  DefaultMutableTreeNode clsNode = new DefaultMutableTreeNode(new TreeEntry(t));
61  TreeSet<TreeEntry> methods = new TreeSet<>();
62  TreeSet<TreeEntry> properties = new TreeSet<>();
63  for (AutoCompleteInformation aci : t.getAutoCompletes()) {
64  switch (aci.getType()) {
66  methods.add(new TreeEntry(aci));
67  break;
69  properties.add(new TreeEntry(aci));
70  break;
71  }
72  }
73  DefaultMutableTreeNode methodNodes = new DefaultMutableTreeNode(
74  new TreeEntry(Messages.getString("Classbook.Methods"), AutoCompleteInformation.NEUTRAL));
75  DefaultMutableTreeNode propertyNodes = new DefaultMutableTreeNode(
76  new TreeEntry(Messages.getString("Classbook.Properties"), AutoCompleteInformation.NEUTRAL));
77  for (TreeEntry te : methods) {
78  methodNodes.add(new DefaultMutableTreeNode(te));
79  }
80  for (TreeEntry te : properties) {
81  propertyNodes.add(new DefaultMutableTreeNode(te));
82  }
83  if (!propertyNodes.isLeaf()) {
84  clsNode.add(propertyNodes);
85  }
86  if (!methodNodes.isLeaf()) {
87  clsNode.add(methodNodes);
88  }
89  root.add(clsNode);
90  }
91  }
92  private TooltipTree content;
93 
94  private ClassDoc() {
95  content = new TooltipTree(root);
96  content.setFont(GuiToolkit.createFont(Font.SANS_SERIF, Font.PLAIN, 12));
97  content.setCellRenderer(new ClassCellRenderer());
98  content.setRootVisible(false);
99  getContentPane().add(new JScrollPane(content));
100 
101  }
102 
103  private static class TreeEntry implements Comparable<TreeEntry> {
104  public final String text;
105  public final int type;
106  public final String tooltip;
107 
108  public TreeEntry(String text, int type) {
109  this.text = text;
110  this.type = type;
111  this.tooltip = "";
112  }
113 
114  TreeEntry(de.lathanda.eos.baseparser.Type type) {
115  StringBuffer title = new StringBuffer();
116  boolean first = true;
117  title.append("<html><p>");
118  for (de.lathanda.eos.baseparser.Type sup : type.getTypeList()) {
119  if (!first) {
120  title.append("\u2192");
121  title.append(Language.def.getClassLabel(sup));
122  } else {
123  title.append("<b>");
124  title.append(Language.def.getClassLabel(sup));
125  title.append("</b>");
126  first = false;
127  }
128  }
129  title.append("</p></html>");
130  this.text = title.toString();
131  this.type = AutoCompleteInformation.CLASS;
132  this.tooltip = "";
133  }
134 
135  TreeEntry(AutoCompleteInformation ace) {
136  this.tooltip = "<html><p>" + ace.getTooltip() + "</p></html>";
137  this.text = ace.getLabel();
138  this.type = ace.getType();
139  }
140 
141  @Override
142  public int compareTo(TreeEntry b) {
143  return this.text.compareTo(b.text);
144  }
145  }
146 
147  private class TooltipTree extends JTree {
148  private static final long serialVersionUID = -7313420722740426372L;
149 
150  public TooltipTree(DefaultMutableTreeNode root) {
151  super(root);
152  ToolTipManager.sharedInstance().registerComponent(this);
153  }
154 
155  @Override
156  public String getToolTipText(MouseEvent me) {
157  TreePath path = getPathForLocation(me.getX(), me.getY());
158  if (path != null) {
159  TreeEntry te = (TreeEntry) ((DefaultMutableTreeNode) path.getLastPathComponent()).getUserObject();
160  return te.tooltip;
161  } else {
162  return null;
163  }
164  }
165  }
166 
167  private static class ClassCellRenderer implements TreeCellRenderer {
168  private JLabel label;
169 
170  ClassCellRenderer() {
171  label = GuiToolkit.createLabel("");
172  }
173 
174  public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded,
175  boolean leaf, int row, boolean hasFocus) {
176  Object o = ((DefaultMutableTreeNode) value).getUserObject();
177  TreeEntry te = (TreeEntry) o;
178  label.setText(te.text);
179  label.setIcon(AutoCompletion.ICON[te.type]);
180  label.setToolTipText(te.tooltip);
181  return label;
182  }
183  }
184 }
static LinkedList< Type > getAll()
static String getString(String id)
Definition: Messages.java:29
Impressum