未验证 提交 1195582d 编写于 作者: S Skylot

feat(gui): option for search results count per page (#1652)

上级 258987b0
......@@ -5,7 +5,6 @@ import java.util.List;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
......@@ -35,7 +34,6 @@ public class SearchTask extends CancelableBackgroundTask {
private final TaskProgress taskProgress = new TaskProgress();
private final AtomicInteger resultsCount = new AtomicInteger(0);
private final AtomicBoolean complete = new AtomicBoolean(false);
private int resultsLimit;
private Future<TaskStatus> future;
......@@ -60,7 +58,6 @@ public class SearchTask extends CancelableBackgroundTask {
throw new IllegalStateException("Previous task not yet finished");
}
resetCancel();
complete.set(false);
resultsCount.set(0);
taskProgress.updateTotal(jobs.stream().mapToInt(s -> s.getProvider().total()).sum());
future = backgroundExecutor.execute(this);
......@@ -74,7 +71,6 @@ public class SearchTask extends CancelableBackgroundTask {
this.resultsListener.accept(resultNode);
if (resultsLimit != 0 && resultsCount.incrementAndGet() >= resultsLimit) {
cancel();
complete.set(false);
return true;
}
return false;
......
......@@ -79,6 +79,7 @@ public class JadxSettings extends JadxCLIArgs {
private boolean codeAreaLineWrap = false;
private int srhResourceSkipSize = 1000;
private String srhResourceFileExt = ".xml|.html|.js|.json|.txt";
private int searchResultsPerPage = 50;
private boolean useAutoSearch = true;
private boolean keepCommonDialogOpen = false;
private boolean smaliAreaShowBytecode = false;
......@@ -541,6 +542,14 @@ public class JadxSettings extends JadxCLIArgs {
srhResourceFileExt = all.trim();
}
public int getSearchResultsPerPage() {
return searchResultsPerPage;
}
public void setSearchResultsPerPage(int searchResultsPerPage) {
this.searchResultsPerPage = searchResultsPerPage;
}
public boolean isUseAutoSearch() {
return useAutoSearch;
}
......
......@@ -45,10 +45,6 @@ import javax.swing.SpinnerNumberModel;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -676,48 +672,26 @@ public class JadxSettingsWindow extends JDialog {
}
private SettingsGroup makeSearchResGroup() {
SettingsGroup group = new SettingsGroup(NLS.str("preferences.search_res_title"));
int prevSize = settings.getSrhResourceSkipSize();
String prevExts = settings.getSrhResourceFileExt();
SpinnerNumberModel sizeLimitModel = new SpinnerNumberModel(prevSize,
0, Integer.MAX_VALUE, 1);
JSpinner spinner = new JSpinner(sizeLimitModel);
JTextField fileExtField = new JTextField();
group.addRow(NLS.str("preferences.res_skip_file"), spinner);
group.addRow(NLS.str("preferences.res_file_ext"), fileExtField);
spinner.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
int size = (Integer) spinner.getValue();
settings.setSrhResourceSkipSize(size);
}
});
fileExtField.getDocument().addDocumentListener(new DocumentListener() {
private void update() {
String ext = fileExtField.getText();
settings.setSrhResourceFileExt(ext);
}
@Override
public void insertUpdate(DocumentEvent e) {
update();
}
JSpinner resultsPerPage = new JSpinner(
new SpinnerNumberModel(settings.getSearchResultsPerPage(), 0, Integer.MAX_VALUE, 1));
resultsPerPage.addChangeListener(ev -> settings.setSearchResultsPerPage((Integer) resultsPerPage.getValue()));
@Override
public void removeUpdate(DocumentEvent e) {
update();
}
JSpinner sizeLimit = new JSpinner(
new SpinnerNumberModel(settings.getSrhResourceSkipSize(), 0, Integer.MAX_VALUE, 1));
sizeLimit.addChangeListener(ev -> settings.setSrhResourceSkipSize((Integer) sizeLimit.getValue()));
@Override
public void changedUpdate(DocumentEvent e) {
update();
}
});
fileExtField.setText(prevExts);
return group;
JTextField fileExtField = new JTextField();
fileExtField.getDocument().addDocumentListener(new DocumentUpdateListener((ev) -> {
String ext = fileExtField.getText();
settings.setSrhResourceFileExt(ext);
}));
fileExtField.setText(settings.getSrhResourceFileExt());
SettingsGroup searchGroup = new SettingsGroup(NLS.str("preferences.search_group_title"));
searchGroup.addRow(NLS.str("preferences.search_results_per_page"), resultsPerPage);
searchGroup.addRow(NLS.str("preferences.res_skip_file"), sizeLimit);
searchGroup.addRow(NLS.str("preferences.res_file_ext"), fileExtField);
return searchGroup;
}
private void needReload() {
......
......@@ -409,7 +409,7 @@ public class SearchDialog extends CommonSearchDialog {
updateTableHighlight();
prepareForSearch();
});
this.searchTask.setResultsLimit(50);
this.searchTask.setResultsLimit(mainWindow.getSettings().getSearchResultsPerPage());
this.searchTask.setProgressListener(this::updateProgress);
this.searchTask.fetchResults();
LOG.debug("Total search items count estimation: {}", this.searchTask.getTaskProgress().total());
......
......@@ -194,7 +194,8 @@ preferences.rename=Umbenennen
preferences.rename_case=System unterscheidet zwischen Groß/Kleinschreibung
preferences.rename_valid=Ist eine gültige Kennung
preferences.rename_printable=Ist druckbar
preferences.search_res_title=Ressourcen durchsuchen
preferences.search_group_title=Ressourcen durchsuchen
#preferences.search_results_per_page=Results per page (0 - no limit)
preferences.res_file_ext=Dateierweiterungen (z.B. .xml|.html), * bedeutet alle
preferences.res_skip_file=Dateien überspringen (MB)
......
......@@ -194,9 +194,10 @@ preferences.rename=Rename identifiers
preferences.rename_case=To fix case sensitivity issues
preferences.rename_valid=To make them valid
preferences.rename_printable=To make printable
preferences.search_res_title=Search Resource
preferences.res_file_ext=File Extensions (e.g. .xml|.html), * means all
preferences.res_skip_file=Skip files exceed (MB)
preferences.search_group_title=Search
preferences.search_results_per_page=Results per page (0 - no limit)
preferences.res_file_ext=Resource files extensions ('xml|html', * for all)
preferences.res_skip_file=Skip resources files if larger (MB)
msg.open_file=Please open file
msg.saving_sources=Saving sources
......
......@@ -194,9 +194,10 @@ preferences.reset_title=Reestablecer preferencias
#preferences.rename_case=
#preferences.rename_valid=
#preferences.rename_printable=
#preferences.search_res_title=
#preferences.res_file_ext=
#preferences.res_skip_file=
#preferences.search_group_title=Search
#preferences.search_results_per_page=Results per page (0 - no limit)
#preferences.res_file_ext=Resource files extensions ('xml|html', * for all)
#preferences.res_skip_file=Skip resources files if larger (MB)
msg.open_file=Por favor, abra un archivo
msg.saving_sources=Guardando fuente
......
......@@ -194,7 +194,8 @@ preferences.rename=이름 바꾸기
preferences.rename_case=시스템 대소문자 구분
preferences.rename_valid=유효한 식별자로 바꾸기
preferences.rename_printable=출력 가능하게 바꾸기
preferences.search_res_title=리소스 검색
preferences.search_group_title=리소스 검색
#preferences.search_results_per_page=Results per page (0 - no limit)
preferences.res_file_ext=파일 확장자 (예: .xml|.html) (* 은 전체를 의미)
preferences.res_skip_file=이 옵션보다 큰 파일 건너 뛰기 (MB)
......
......@@ -194,7 +194,8 @@ preferences.rename=Renomear identificadores
preferences.rename_case=Corrigir problemas de capitalização (case sensitivity)
preferences.rename_valid=Deixá-las válidas
preferences.rename_printable=Deixá-las imprimíveis (printable)
preferences.search_res_title=Buscar recursos
preferences.search_group_title=Buscar recursos
#preferences.search_results_per_page=Results per page (0 - no limit)
preferences.res_file_ext=Extensões de arquivos (ex: .xml|.html), * significa todas
preferences.res_skip_file=Pular arquivos excedidos
......
......@@ -194,7 +194,8 @@ preferences.rename=重命名标识符
preferences.rename_case=需要标识符能区分大小写
preferences.rename_valid=需要标识符能符合规范
preferences.rename_printable=需要标识符可正常显示
preferences.search_res_title=搜索资源
preferences.search_group_title=搜索资源
#preferences.search_results_per_page=Results per page (0 - no limit)
preferences.res_file_ext=文件扩展名 (e.g. .xml|.html),* 表示所有
preferences.res_skip_file=跳过文件大小(MB)
......
......@@ -194,7 +194,8 @@ preferences.rename=重新命名識別碼
preferences.rename_case=以修復區分大小寫問題
preferences.rename_valid=以使其有效
preferences.rename_printable=以使其可列印
preferences.search_res_title=搜尋資源
preferences.search_group_title=搜尋資源
#preferences.search_results_per_page=Results per page (0 - no limit)
preferences.res_file_ext=副檔名 (e.g. .xml|.html), * 表示全部
preferences.res_skip_file=略過大於此值的檔案 (MB)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册