Skip to content

Commit 32c92dd

Browse files
17307ymoon
and
ymoon
authored
feat(gui): add "Copy All" button to Search dialog (PR #2480)
* add copy all button in CommonSearchDialog * fix i18n test error --------- Co-authored-by: ymoon <[email protected]>
1 parent 8bbdbfc commit 32c92dd

10 files changed

+29
-2
lines changed

jadx-gui/src/main/java/jadx/gui/ui/dialog/CommonSearchDialog.java

+20-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@
1616
import java.util.Collection;
1717
import java.util.Collections;
1818
import java.util.Enumeration;
19+
import java.util.HashSet;
1920
import java.util.List;
21+
import java.util.Set;
2022

2123
import javax.swing.AbstractAction;
2224
import javax.swing.BorderFactory;
@@ -178,6 +180,18 @@ protected void initCommon() {
178180
UiUtils.addEscapeShortCutToDispose(this);
179181
}
180182

183+
protected void copyAllSearchResults() {
184+
StringBuilder sb = new StringBuilder();
185+
Set<String> uniqueRefs = new HashSet<>();
186+
for (JNode node : resultsModel.rows) {
187+
String codeNodeRef = node.getJavaNode().getCodeNodeRef().toString();
188+
if (uniqueRefs.add(codeNodeRef)) {
189+
sb.append(codeNodeRef).append("\n");
190+
}
191+
}
192+
UiUtils.copyToClipboard(sb.toString());
193+
}
194+
181195
@NotNull
182196
protected JPanel initButtonsPanel() {
183197
progressPane = new ProgressPanel(mainWindow, false);
@@ -187,6 +201,8 @@ protected JPanel initButtonsPanel() {
187201
JButton openBtn = new JButton(NLS.str("search_dialog.open"));
188202
openBtn.addActionListener(event -> openSelectedItem());
189203
getRootPane().setDefaultButton(openBtn);
204+
JButton copyBtn = new JButton(NLS.str("search_dialog.copy"));
205+
copyBtn.addActionListener(event -> copyAllSearchResults());
190206

191207
JCheckBox cbKeepOpen = new JCheckBox(NLS.str("search_dialog.keep_open"));
192208
cbKeepOpen.setSelected(mainWindow.getSettings().getKeepCommonDialogOpen());
@@ -203,6 +219,8 @@ protected JPanel initButtonsPanel() {
203219
buttonPane.add(progressPane);
204220
buttonPane.add(Box.createRigidArea(new Dimension(5, 0)));
205221
buttonPane.add(Box.createHorizontalGlue());
222+
buttonPane.add(copyBtn);
223+
buttonPane.add(Box.createRigidArea(new Dimension(10, 0)));
206224
buttonPane.add(openBtn);
207225
buttonPane.add(Box.createRigidArea(new Dimension(10, 0)));
208226
buttonPane.add(cancelButton);
@@ -440,8 +458,8 @@ public ResultsTableCellRenderer() {
440458
}
441459

442460
@Override
443-
public Component getTableCellRendererComponent(JTable table, Object obj,
444-
boolean isSelected, boolean hasFocus, int row, int column) {
461+
public Component getTableCellRendererComponent(JTable table, Object obj, boolean isSelected, boolean hasFocus, int row,
462+
int column) {
445463
if (obj == null || table == null) {
446464
return emptyLabel;
447465
}

jadx-gui/src/main/resources/i18n/Messages_de_DE.properties

+1
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@ search_dialog.keep_open=Offen halten
164164
search_dialog.tip_searching=Suchen…
165165
search_dialog.limit_package=Begrenzung auf Paket:
166166
search_dialog.package_not_found=Kein passendes Paket gefunden
167+
search_dialog.copy=alles kopieren
167168

168169
usage_dialog.title=Verwendungssuche
169170
usage_dialog.label=Verwendungen von:

jadx-gui/src/main/resources/i18n/Messages_en_US.properties

+1
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@ search_dialog.keep_open=Keep open
164164
search_dialog.tip_searching=Searching
165165
search_dialog.limit_package=Limit to package:
166166
search_dialog.package_not_found=No matching package found
167+
search_dialog.copy=copy all
167168
168169
usage_dialog.title=Usage search
169170
usage_dialog.label=Usage for:

jadx-gui/src/main/resources/i18n/Messages_es_ES.properties

+1
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@ search_dialog.regex=Regex
164164
#search_dialog.tip_searching=Searching
165165
#search_dialog.limit_package=Limit to package:
166166
#search_dialog.package_not_found=No matching package found
167+
search_dialog.copy=copiar todo
167168

168169
usage_dialog.title=Usage search
169170
usage_dialog.label=Usage for:

jadx-gui/src/main/resources/i18n/Messages_id_ID.properties

+1
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@ search_dialog.keep_open=Tetap terbuka
164164
search_dialog.tip_searching=Mencari
165165
#search_dialog.limit_package=Limit to package:
166166
#search_dialog.package_not_found=No matching package found
167+
search_dialog.copy=salin semua
167168

168169
usage_dialog.title=Pencarian penggunaan
169170
usage_dialog.label=Penggunaan untuk:

jadx-gui/src/main/resources/i18n/Messages_ko_KR.properties

+1
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@ search_dialog.keep_open=열어 두기
164164
search_dialog.tip_searching=검색 중...
165165
#search_dialog.limit_package=Limit to package:
166166
#search_dialog.package_not_found=No matching package found
167+
search_dialog.copy=모두 복사
167168

168169
usage_dialog.title=사용 검색
169170
usage_dialog.label=다음의 사용 검색 결과:

jadx-gui/src/main/resources/i18n/Messages_pt_BR.properties

+1
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@ search_dialog.keep_open=Manter aberto
164164
search_dialog.tip_searching=Buscando
165165
#search_dialog.limit_package=Limit to package:
166166
#search_dialog.package_not_found=No matching package found
167+
search_dialog.copy=skopiuj wszystko
167168

168169
usage_dialog.title=Busca por utilização
169170
usage_dialog.label=Usado por:

jadx-gui/src/main/resources/i18n/Messages_ru_RU.properties

+1
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@ search_dialog.keep_open=Оставлять поиск открытым
164164
search_dialog.tip_searching=Поиск...
165165
#search_dialog.limit_package=Limit to package:
166166
#search_dialog.package_not_found=No matching package found
167+
search_dialog.copy=скопировать все
167168

168169
usage_dialog.title=Поиск использований
169170
usage_dialog.label=Использования:

jadx-gui/src/main/resources/i18n/Messages_zh_CN.properties

+1
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@ search_dialog.keep_open=保持窗口
164164
search_dialog.tip_searching=搜索中…
165165
search_dialog.limit_package=限制package:
166166
search_dialog.package_not_found=没有找到匹配的package
167+
search_dialog.copy=复制全部
167168

168169
usage_dialog.title=查找
169170
usage_dialog.label=查找用例:

jadx-gui/src/main/resources/i18n/Messages_zh_TW.properties

+1
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@ search_dialog.keep_open=保持開啟
164164
search_dialog.tip_searching=正在搜尋
165165
search_dialog.limit_package=限制至套件:
166166
search_dialog.package_not_found=找不到符合的套件
167+
search_dialog.copy=複製全部
167168

168169
usage_dialog.title=使用情況搜尋
169170
usage_dialog.label=使用情況:

0 commit comments

Comments
 (0)