Merge pull request #63 from CapslockRSPS/master

[FEATURE] Added search function to Reflection Explorer
This commit is contained in:
Jeroen Ketelaar
2016-05-01 16:06:40 +02:00
3 changed files with 77 additions and 8 deletions
+1 -1
View File
@@ -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());
@@ -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();
@@ -31,7 +31,6 @@ public class ServerSelector extends JPanel {
}
public ServerSelector() {
Queue<ServerComponent> widgets = getServers();
if (initServer != null) {
if (runServer(widgets)) {