diff --git a/jadx-gui/src/main/java/jadx/gui/ui/dialog/CommonSearchDialog.java b/jadx-gui/src/main/java/jadx/gui/ui/dialog/CommonSearchDialog.java index 887787135b4f3643b2b94b489b8040ac845c4f38..2038a6aad5317ee22035e6e802e08c072468f5b7 100644 --- a/jadx-gui/src/main/java/jadx/gui/ui/dialog/CommonSearchDialog.java +++ b/jadx-gui/src/main/java/jadx/gui/ui/dialog/CommonSearchDialog.java @@ -6,6 +6,7 @@ import java.awt.Cursor; import java.awt.Dimension; import java.awt.Font; import java.awt.Rectangle; +import java.awt.event.ActionEvent; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; @@ -18,6 +19,7 @@ import java.util.Enumeration; import java.util.HashMap; import java.util.Map; +import javax.swing.AbstractAction; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.BoxLayout; @@ -143,12 +145,11 @@ public abstract class CommonSearchDialog extends JFrame { } protected void openSelectedItem() { - int selectedId = resultsTable.getSelectedRow(); - if (selectedId == -1) { + JNode node = getSelectedNode(); + if (node == null) { return; } JumpPosition jmpPos; - JNode node = (JNode) resultsModel.getValueAt(selectedId, 0); if (node instanceof JResSearchNode) { jmpPos = new JumpPosition(((JResSearchNode) node).getResNode(), node.getLine(), node.getPos()); } else { @@ -160,6 +161,15 @@ public abstract class CommonSearchDialog extends JFrame { } } + @Nullable + private JNode getSelectedNode() { + int selectedId = resultsTable.getSelectedRow(); + if (selectedId == -1) { + return null; + } + return (JNode) resultsModel.getValueAt(selectedId, 0); + } + @Override public void dispose() { mainWindow.getSettings().saveWindowPos(this); @@ -210,7 +220,6 @@ public abstract class CommonSearchDialog extends JFrame { resultsTable.setShowHorizontalLines(false); resultsTable.setDragEnabled(false); resultsTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); - // resultsTable.setBackground(CodeArea.CODE_BACKGROUND); resultsTable.setColumnSelectionAllowed(false); resultsTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); resultsTable.setAutoscrolls(false); @@ -238,6 +247,16 @@ public abstract class CommonSearchDialog extends JFrame { } } }); + // override copy action to copy long string of node column + resultsTable.getActionMap().put("copy", new AbstractAction() { + @Override + public void actionPerformed(ActionEvent e) { + JNode selectedNode = getSelectedNode(); + if (selectedNode != null) { + UiUtils.copyToClipboard(selectedNode.makeLongString()); + } + } + }); warnLabel = new JLabel(); warnLabel.setForeground(Color.RED);