Search in sources :

Example 1 with JNode

use of jadx.gui.treemodel.JNode in project jadx by skylot.

the class MainWindow method initUI.

private void initUI() {
    mainPanel = new JPanel(new BorderLayout());
    JSplitPane splitPane = new JSplitPane();
    splitPane.setResizeWeight(SPLIT_PANE_RESIZE_WEIGHT);
    mainPanel.add(splitPane);
    DefaultMutableTreeNode treeRoot = new DefaultMutableTreeNode(NLS.str("msg.open_file"));
    treeModel = new DefaultTreeModel(treeRoot);
    tree = new JTree(treeModel);
    tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
    tree.addMouseListener(new MouseAdapter() {

        @Override
        public void mouseClicked(MouseEvent e) {
            treeClickAction();
        }
    });
    tree.addKeyListener(new KeyAdapter() {

        @Override
        public void keyPressed(KeyEvent e) {
            if (e.getKeyCode() == KeyEvent.VK_ENTER) {
                treeClickAction();
            }
        }
    });
    tree.setCellRenderer(new DefaultTreeCellRenderer() {

        @Override
        public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean isLeaf, int row, boolean focused) {
            Component c = super.getTreeCellRendererComponent(tree, value, selected, expanded, isLeaf, row, focused);
            if (value instanceof JNode) {
                setIcon(((JNode) value).getIcon());
            }
            return c;
        }
    });
    tree.addTreeWillExpandListener(new TreeWillExpandListener() {

        @Override
        public void treeWillExpand(TreeExpansionEvent event) throws ExpandVetoException {
            TreePath path = event.getPath();
            Object node = path.getLastPathComponent();
            if (node instanceof JClass) {
                JClass cls = (JClass) node;
                cls.getRootClass().load();
            }
        }

        @Override
        public void treeWillCollapse(TreeExpansionEvent event) throws ExpandVetoException {
        }
    });
    progressPane = new ProgressPanel(this, true);
    JPanel leftPane = new JPanel(new BorderLayout());
    leftPane.add(new JScrollPane(tree), BorderLayout.CENTER);
    leftPane.add(progressPane, BorderLayout.PAGE_END);
    splitPane.setLeftComponent(leftPane);
    tabbedPane = new TabbedPane(this);
    splitPane.setRightComponent(tabbedPane);
    dropTarget = new DropTarget(this, DnDConstants.ACTION_COPY, new MainDropTarget(this));
    setContentPane(mainPanel);
    setTitle(DEFAULT_TITLE);
}
Also used : JPanel(javax.swing.JPanel) DefaultMutableTreeNode(javax.swing.tree.DefaultMutableTreeNode) KeyAdapter(java.awt.event.KeyAdapter) DefaultTreeCellRenderer(javax.swing.tree.DefaultTreeCellRenderer) ExpandVetoException(javax.swing.tree.ExpandVetoException) KeyEvent(java.awt.event.KeyEvent) BorderLayout(java.awt.BorderLayout) JNode(jadx.gui.treemodel.JNode) Component(java.awt.Component) TreeExpansionEvent(javax.swing.event.TreeExpansionEvent) TreeWillExpandListener(javax.swing.event.TreeWillExpandListener) JScrollPane(javax.swing.JScrollPane) MouseEvent(java.awt.event.MouseEvent) JClass(jadx.gui.treemodel.JClass) MouseAdapter(java.awt.event.MouseAdapter) DefaultTreeModel(javax.swing.tree.DefaultTreeModel) JTree(javax.swing.JTree) TreePath(javax.swing.tree.TreePath) CacheObject(jadx.gui.utils.CacheObject) DropTarget(java.awt.dnd.DropTarget) JSplitPane(javax.swing.JSplitPane)

Example 2 with JNode

use of jadx.gui.treemodel.JNode in project jadx by skylot.

the class TabbedPane method createTabPopupMenu.

private JPopupMenu createTabPopupMenu(final ContentPanel contentPanel) {
    JPopupMenu menu = new JPopupMenu();
    JMenuItem closeTab = new JMenuItem(NLS.str("tabs.close"));
    closeTab.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            closeCodePanel(contentPanel);
        }
    });
    menu.add(closeTab);
    if (openTabs.size() > 1) {
        JMenuItem closeOther = new JMenuItem(NLS.str("tabs.closeOthers"));
        closeOther.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                List<ContentPanel> contentPanels = new ArrayList<ContentPanel>(openTabs.values());
                for (ContentPanel panel : contentPanels) {
                    if (panel != contentPanel) {
                        closeCodePanel(panel);
                    }
                }
            }
        });
        menu.add(closeOther);
        JMenuItem closeAll = new JMenuItem(NLS.str("tabs.closeAll"));
        closeAll.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                closeAllTabs();
            }
        });
        menu.add(closeAll);
        menu.addSeparator();
        ContentPanel selectedContentPanel = getSelectedCodePanel();
        for (final Map.Entry<JNode, ContentPanel> entry : openTabs.entrySet()) {
            final ContentPanel cp = entry.getValue();
            if (cp == selectedContentPanel) {
                continue;
            }
            JNode node = entry.getKey();
            final String clsName = node.makeLongString();
            JMenuItem item = new JMenuItem(clsName);
            item.addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent e) {
                    setSelectedComponent(cp);
                }
            });
            item.setIcon(node.getIcon());
            menu.add(item);
        }
    }
    return menu;
}
Also used : ActionListener(java.awt.event.ActionListener) ActionEvent(java.awt.event.ActionEvent) ArrayList(java.util.ArrayList) List(java.util.List) JNode(jadx.gui.treemodel.JNode) JMenuItem(javax.swing.JMenuItem) LinkedHashMap(java.util.LinkedHashMap) Map(java.util.Map) JPopupMenu(javax.swing.JPopupMenu)

Example 3 with JNode

use of jadx.gui.treemodel.JNode in project jadx by skylot.

the class TabbedPane method makeTabComponent.

private Component makeTabComponent(final ContentPanel contentPanel) {
    JNode node = contentPanel.getNode();
    String name = node.makeLongString();
    final JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER, 3, 0));
    panel.setOpaque(false);
    final JLabel label = new JLabel(name);
    label.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 10));
    label.setIcon(node.getIcon());
    final JButton button = new JButton();
    button.setIcon(ICON_CLOSE_INACTIVE);
    button.setRolloverIcon(ICON_CLOSE);
    button.setRolloverEnabled(true);
    button.setOpaque(false);
    button.setUI(new BasicButtonUI());
    button.setContentAreaFilled(false);
    button.setFocusable(false);
    button.setBorder(null);
    button.setBorderPainted(false);
    button.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            closeCodePanel(contentPanel);
        }
    });
    panel.addMouseListener(new MouseAdapter() {

        @Override
        public void mouseClicked(MouseEvent e) {
            if (SwingUtilities.isMiddleMouseButton(e)) {
                closeCodePanel(contentPanel);
            } else if (SwingUtilities.isRightMouseButton(e)) {
                JPopupMenu menu = createTabPopupMenu(contentPanel);
                menu.show(panel, e.getX(), e.getY());
            } else {
                // TODO: make correct event delegation to tabbed pane
                setSelectedComponent(contentPanel);
            }
        }
    });
    panel.add(label);
    panel.add(button);
    panel.setBorder(BorderFactory.createEmptyBorder(4, 0, 0, 0));
    return panel;
}
Also used : JPanel(javax.swing.JPanel) FlowLayout(java.awt.FlowLayout) MouseEvent(java.awt.event.MouseEvent) ActionEvent(java.awt.event.ActionEvent) JButton(javax.swing.JButton) MouseAdapter(java.awt.event.MouseAdapter) JLabel(javax.swing.JLabel) BasicButtonUI(javax.swing.plaf.basic.BasicButtonUI) JPopupMenu(javax.swing.JPopupMenu) ActionListener(java.awt.event.ActionListener) JNode(jadx.gui.treemodel.JNode)

Example 4 with JNode

use of jadx.gui.treemodel.JNode in project jadx by skylot.

the class CommonSearchDialog method openSelectedItem.

protected void openSelectedItem() {
    int selectedId = resultsTable.getSelectedRow();
    if (selectedId == -1) {
        return;
    }
    JNode node = (JNode) resultsModel.getValueAt(selectedId, 0);
    tabbedPane.codeJump(new Position(node.getRootClass(), node.getLine()));
    dispose();
}
Also used : Position(jadx.gui.utils.Position) JNode(jadx.gui.treemodel.JNode)

Example 5 with JNode

use of jadx.gui.treemodel.JNode in project jadx by skylot.

the class MainWindow method syncWithEditor.

private void syncWithEditor() {
    ContentPanel selectedContentPanel = tabbedPane.getSelectedCodePanel();
    if (selectedContentPanel == null) {
        return;
    }
    JNode node = selectedContentPanel.getNode();
    if (node.getParent() == null && treeRoot != null) {
        // node not register in tree
        node = treeRoot.searchClassInTree(node);
        if (node == null) {
            LOG.error("Class not found in tree");
            return;
        }
    }
    TreeNode[] pathNodes = treeModel.getPathToRoot(node);
    if (pathNodes == null) {
        return;
    }
    TreePath path = new TreePath(pathNodes);
    tree.setSelectionPath(path);
    tree.makeVisible(path);
    tree.scrollPathToVisible(path);
    tree.requestFocus();
}
Also used : TreePath(javax.swing.tree.TreePath) DefaultMutableTreeNode(javax.swing.tree.DefaultMutableTreeNode) TreeNode(javax.swing.tree.TreeNode) JNode(jadx.gui.treemodel.JNode)

Aggregations

JNode (jadx.gui.treemodel.JNode)8 JClass (jadx.gui.treemodel.JClass)2 CacheObject (jadx.gui.utils.CacheObject)2 Position (jadx.gui.utils.Position)2 ActionEvent (java.awt.event.ActionEvent)2 ActionListener (java.awt.event.ActionListener)2 MouseAdapter (java.awt.event.MouseAdapter)2 MouseEvent (java.awt.event.MouseEvent)2 JPanel (javax.swing.JPanel)2 JPopupMenu (javax.swing.JPopupMenu)2 DefaultMutableTreeNode (javax.swing.tree.DefaultMutableTreeNode)2 ExpandVetoException (javax.swing.tree.ExpandVetoException)2 TreePath (javax.swing.tree.TreePath)2 JavaNode (jadx.api.JavaNode)1 ResourceFile (jadx.api.ResourceFile)1 CodeNode (jadx.gui.treemodel.CodeNode)1 JResource (jadx.gui.treemodel.JResource)1 StringRef (jadx.gui.utils.search.StringRef)1 BorderLayout (java.awt.BorderLayout)1 Component (java.awt.Component)1