diff --git a/src/main/java/org/parabot/core/ui/BotUI.java b/src/main/java/org/parabot/core/ui/BotUI.java index 060b17a..2d4bece 100644 --- a/src/main/java/org/parabot/core/ui/BotUI.java +++ b/src/main/java/org/parabot/core/ui/BotUI.java @@ -38,7 +38,7 @@ public class BotUI extends JFrame implements ActionListener, ComponentListener, setTitle("Parabot"); setResizable(false); - setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); createMenu(); setLayout(new BorderLayout()); diff --git a/src/main/java/org/parabot/core/ui/ReflectUI.java b/src/main/java/org/parabot/core/ui/ReflectUI.java index 8bc0391..351ca66 100644 --- a/src/main/java/org/parabot/core/ui/ReflectUI.java +++ b/src/main/java/org/parabot/core/ui/ReflectUI.java @@ -11,8 +11,12 @@ import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreeNode; import javax.swing.tree.TreePath; import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.Enumeration; import java.util.HashMap; /** @@ -22,6 +26,7 @@ import java.util.HashMap; */ public class ReflectUI extends JFrame { private static final long serialVersionUID = 98565034137367257L; + private JTree tree; private DefaultMutableTreeNode root; private DefaultTreeModel model; private JEditorPane basicInfoPane; @@ -55,7 +60,75 @@ public class ReflectUI extends JFrame { JPanel infoContent = new JPanel(); infoContent.setLayout(new BoxLayout(infoContent, BoxLayout.Y_AXIS)); - JTree tree = new JTree(); + JPanel searchContent = new JPanel(); + searchContent.setLayout(new BoxLayout(searchContent, BoxLayout.X_AXIS)); + + final JTextField searchFunction = new JTextField(10); + searchFunction.setHorizontalAlignment(JTextField.CENTER); + searchFunction.setSize(30, 30); + searchFunction.setColumns(1); + searchFunction.setPreferredSize(new Dimension(30, 30)); + + final JButton searchButton = new JButton("Search"); + searchFunction.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + searchButton.getActionListeners()[0].actionPerformed(e); + } + }); + + searchButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + RefField result = null; + String search = searchFunction.getText(); + for (RefField f : fields.values()) { + if (f != null && (f.asObject()) != null) { + String value; + if ((value = f.asObject().toString()).equalsIgnoreCase(search)) { + result = f; + } else if (value.toLowerCase().startsWith(search.toLowerCase())) { + result = f; + } else if (value.toLowerCase().endsWith(search.toLowerCase())) { + result = f; + } + } + } + if (result != null) { + setFieldInfo(result); + } + } + }); + + + final JButton adjustClasses = new JButton("Expand"); + adjustClasses.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + Enumeration topLevelNodes + = ((TreeNode) tree.getModel().getRoot()).children(); + while (topLevelNodes.hasMoreElements()) { + DefaultMutableTreeNode node + = (DefaultMutableTreeNode) topLevelNodes.nextElement(); + TreePath treePath = new TreePath(node.getPath()); + if (adjustClasses.getText().equalsIgnoreCase("expand")) { + tree.expandPath(treePath); + } else { + tree.collapsePath(treePath); + } + } + + adjustClasses.setText(adjustClasses.getText().equalsIgnoreCase("expand") ? "Collapse" : "Expand"); + } + }); + + searchContent.add(adjustClasses); + searchContent.add(searchFunction); + searchContent.setMaximumSize(new Dimension(500, (int) searchContent.getPreferredSize().getHeight())); + searchContent.add(searchButton); + + + tree = new JTree(); tree.setRootVisible(true); tree.setShowsRootHandles(true); tree.setModel(model); @@ -67,16 +140,12 @@ public class ReflectUI extends JFrame { Object[] pathElements = path.getPath(); Object element = pathElements[pathElements.length - 1]; if (pathElements.length == 2) { - // class setClassInfo(classes.get(element)); - } - if (pathElements.length == 3) { - // field + } else if (pathElements.length == 3) { RefField field = fields.get(element); setFieldInfo(field); DefaultMutableTreeNode el = (DefaultMutableTreeNode) element; el.setUserObject("Field: " + field.getName() + " [type: " + field.getASMType() + "] [value: " + field.asObject() + "]"); - } } @@ -106,6 +175,7 @@ public class ReflectUI extends JFrame { exploreContent.add(infoContent); content.add(exploreContent); + content.add(searchContent); JScrollPane contentPane = new JScrollPane(content); Dimension prefSize = content.getPreferredSize(); diff --git a/src/main/java/org/parabot/core/ui/ServerSelector.java b/src/main/java/org/parabot/core/ui/ServerSelector.java index 46e1802..3bbaacd 100755 --- a/src/main/java/org/parabot/core/ui/ServerSelector.java +++ b/src/main/java/org/parabot/core/ui/ServerSelector.java @@ -31,7 +31,6 @@ public class ServerSelector extends JPanel { } public ServerSelector() { - Queue widgets = getServers(); if (initServer != null) { if (runServer(widgets)) {