From 646ee2d963fd2127d7feca310d58646517c1b965 Mon Sep 17 00:00:00 2001 From: Yaroslav <43380144+MrIkso@users.noreply.github.com> Date: Sat, 24 May 2025 23:04:59 +0300 Subject: [PATCH] fix(gui): minor improved search dialog & small refactor for search fields (PR #2510) * fix(gui): minor improved search dialog & small refactor for search fields * fix: removed unused key string * fix(gui): added icon for active tab in SearchDialog --- .../java/jadx/gui/ui/codearea/SearchBar.java | 41 ++++----- .../java/jadx/gui/ui/dialog/SearchDialog.java | 92 +++++++++++++------ .../jadx/gui/ui/hexviewer/HexSearchBar.java | 36 +++----- .../src/main/java/jadx/gui/utils/Icons.java | 15 +++ .../resources/i18n/Messages_de_DE.properties | 1 - .../resources/i18n/Messages_en_US.properties | 1 - .../resources/i18n/Messages_es_ES.properties | 1 - .../resources/i18n/Messages_id_ID.properties | 1 - .../resources/i18n/Messages_ko_KR.properties | 1 - .../resources/i18n/Messages_pt_BR.properties | 1 - .../resources/i18n/Messages_ru_RU.properties | 1 - .../resources/i18n/Messages_zh_CN.properties | 1 - .../resources/i18n/Messages_zh_TW.properties | 1 - .../main/resources/icons/search/activeTab.svg | 5 + .../icons/search/activeTabSelected.svg | 5 + 15 files changed, 121 insertions(+), 82 deletions(-) create mode 100644 jadx-gui/src/main/resources/icons/search/activeTab.svg create mode 100644 jadx-gui/src/main/resources/icons/search/activeTabSelected.svg diff --git a/jadx-gui/src/main/java/jadx/gui/ui/codearea/SearchBar.java b/jadx-gui/src/main/java/jadx/gui/ui/codearea/SearchBar.java index fa3491c91..097713d15 100644 --- a/jadx-gui/src/main/java/jadx/gui/ui/codearea/SearchBar.java +++ b/jadx-gui/src/main/java/jadx/gui/ui/codearea/SearchBar.java @@ -5,7 +5,6 @@ import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; -import javax.swing.Icon; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JTextField; @@ -21,26 +20,17 @@ import org.fife.ui.rtextarea.SearchResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.formdev.flatlaf.FlatClientProperties; + import jadx.core.utils.StringUtils; +import jadx.gui.utils.Icons; import jadx.gui.utils.NLS; import jadx.gui.utils.TextStandardActions; -import jadx.gui.utils.UiUtils; public class SearchBar extends JToolBar { private static final long serialVersionUID = 1836871286618633003L; private static final Logger LOG = LoggerFactory.getLogger(SearchBar.class); - private static final Icon ICON_MARK = UiUtils.openSvgIcon("search/mark"); - private static final Icon ICON_MARK_SELECTED = UiUtils.openSvgIcon("search/previewSelected"); - private static final Icon ICON_REGEX = UiUtils.openSvgIcon("search/regexHovered"); - private static final Icon ICON_REGEX_SELECTED = UiUtils.openSvgIcon("search/regexSelected"); - private static final Icon ICON_WORDS = UiUtils.openSvgIcon("search/wordsHovered"); - private static final Icon ICON_WORDS_SELECTED = UiUtils.openSvgIcon("search/wordsSelected"); - private static final Icon ICON_MATCH = UiUtils.openSvgIcon("search/matchCaseHovered"); - private static final Icon ICON_MATCH_SELECTED = UiUtils.openSvgIcon("search/matchCaseSelected"); - private static final Icon ICON_UP = UiUtils.openSvgIcon("ui/top"); - private static final Icon ICON_DOWN = UiUtils.openSvgIcon("ui/bottom"); - private static final Icon ICON_CLOSE = UiUtils.openSvgIcon("ui/close"); private static final int MAX_RESULT_COUNT = 999; private RSyntaxTextArea rTextArea; @@ -60,6 +50,7 @@ public class SearchBar extends JToolBar { add(findLabel); searchField = new JTextField(30); + searchField.putClientProperty(FlatClientProperties.TEXT_FIELD_SHOW_CLEAR_BUTTON, true); searchField.addKeyListener(new KeyAdapter() { @Override public void keyReleased(KeyEvent e) { @@ -77,7 +68,7 @@ public class SearchBar extends JToolBar { } }); searchField.addActionListener(e -> search(1)); - new TextStandardActions(searchField); + TextStandardActions.attach(searchField); add(searchField); ActionListener forwardListener = e -> search(1); @@ -89,49 +80,49 @@ public class SearchBar extends JToolBar { setResultCount(0); matchCaseCB = new JToggleButton(); - matchCaseCB.setIcon(ICON_MATCH); - matchCaseCB.setSelectedIcon(ICON_MATCH_SELECTED); + matchCaseCB.setIcon(Icons.ICON_MATCH); + matchCaseCB.setSelectedIcon(Icons.ICON_MATCH_SELECTED); matchCaseCB.setToolTipText(NLS.str("search.match_case")); matchCaseCB.addActionListener(forwardListener); add(matchCaseCB); wholeWordCB = new JToggleButton(); - wholeWordCB.setIcon(ICON_WORDS); - wholeWordCB.setSelectedIcon(ICON_WORDS_SELECTED); + wholeWordCB.setIcon(Icons.ICON_WORDS); + wholeWordCB.setSelectedIcon(Icons.ICON_WORDS_SELECTED); wholeWordCB.setToolTipText(NLS.str("search.whole_word")); wholeWordCB.addActionListener(forwardListener); add(wholeWordCB); regexCB = new JToggleButton(); - regexCB.setIcon(ICON_REGEX); - regexCB.setSelectedIcon(ICON_REGEX_SELECTED); + regexCB.setIcon(Icons.ICON_REGEX); + regexCB.setSelectedIcon(Icons.ICON_REGEX_SELECTED); regexCB.setToolTipText(NLS.str("search.regex")); regexCB.addActionListener(forwardListener); add(regexCB); JButton prevButton = new JButton(); - prevButton.setIcon(ICON_UP); + prevButton.setIcon(Icons.ICON_UP); prevButton.setToolTipText(NLS.str("search.previous")); prevButton.addActionListener(e -> search(-1)); prevButton.setBorderPainted(false); add(prevButton); JButton nextButton = new JButton(); - nextButton.setIcon(ICON_DOWN); + nextButton.setIcon(Icons.ICON_DOWN); nextButton.setToolTipText(NLS.str("search.next")); nextButton.addActionListener(e -> search(1)); nextButton.setBorderPainted(false); add(nextButton); markAllCB = new JToggleButton(); - markAllCB.setIcon(ICON_MARK); - markAllCB.setSelectedIcon(ICON_MARK_SELECTED); + markAllCB.setIcon(Icons.ICON_MARK); + markAllCB.setSelectedIcon(Icons.ICON_MARK_SELECTED); markAllCB.setToolTipText(NLS.str("search.mark_all")); markAllCB.addActionListener(forwardListener); add(markAllCB); JButton closeButton = new JButton(); - closeButton.setIcon(ICON_CLOSE); + closeButton.setIcon(Icons.ICON_CLOSE); closeButton.addActionListener(e -> toggle()); closeButton.setBorderPainted(false); add(closeButton); diff --git a/jadx-gui/src/main/java/jadx/gui/ui/dialog/SearchDialog.java b/jadx-gui/src/main/java/jadx/gui/ui/dialog/SearchDialog.java index 97cefecb3..f281a13fc 100644 --- a/jadx-gui/src/main/java/jadx/gui/ui/dialog/SearchDialog.java +++ b/jadx-gui/src/main/java/jadx/gui/ui/dialog/SearchDialog.java @@ -1,9 +1,9 @@ package jadx.gui.ui.dialog; import java.awt.BorderLayout; -import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; +import java.awt.GridLayout; import java.util.ArrayList; import java.util.Collections; import java.util.EnumSet; @@ -19,6 +19,7 @@ import java.util.stream.Collectors; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.BoxLayout; +import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JLabel; @@ -26,6 +27,7 @@ import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JTextField; +import javax.swing.JToggleButton; import javax.swing.WindowConstants; import javax.swing.event.ChangeListener; @@ -45,6 +47,7 @@ import io.reactivex.schedulers.Schedulers; import jadx.api.JavaClass; import jadx.api.JavaPackage; import jadx.core.utils.ListUtils; +import jadx.core.utils.StringUtils; import jadx.gui.jobs.ITaskInfo; import jadx.gui.jobs.ITaskProgress; import jadx.gui.search.SearchSettings; @@ -60,13 +63,14 @@ import jadx.gui.treemodel.JClass; import jadx.gui.treemodel.JNode; import jadx.gui.treemodel.JResource; import jadx.gui.ui.MainWindow; +import jadx.gui.utils.Icons; import jadx.gui.utils.JumpPosition; import jadx.gui.utils.NLS; import jadx.gui.utils.TextStandardActions; import jadx.gui.utils.UiUtils; import jadx.gui.utils.cache.ValueCache; -import jadx.gui.utils.layout.WrapLayout; import jadx.gui.utils.rx.RxUtils; +import jadx.gui.utils.ui.DocumentUpdateListener; import static jadx.gui.ui.dialog.SearchDialog.SearchOptions.ACTIVE_TAB; import static jadx.gui.ui.dialog.SearchDialog.SearchOptions.CLASS; @@ -82,8 +86,6 @@ public class SearchDialog extends CommonSearchDialog { private static final Logger LOG = LoggerFactory.getLogger(SearchDialog.class); private static final long serialVersionUID = -5105405456969134105L; - private static final Color SEARCH_FIELD_ERROR_COLOR = new Color(255, 150, 150); - public static void search(MainWindow window, SearchPreset preset) { SearchDialog searchDialog = new SearchDialog(window, preset, Collections.emptySet()); show(searchDialog, window); @@ -137,8 +139,6 @@ public class SearchDialog extends CommonSearchDialog { private final transient SearchPreset searchPreset; private final transient Set options; - private transient Color searchFieldDefaultBgColor; - private transient JTextField searchField; private transient JTextField packageField; @@ -242,8 +242,6 @@ public class SearchDialog extends CommonSearchDialog { private void initUI() { searchField = new JTextField(); - searchFieldDefaultBgColor = searchField.getBackground(); - searchField.setAlignmentX(LEFT_ALIGNMENT); TextStandardActions.attach(searchField); addSearchHistoryButton(); searchField.putClientProperty(FlatClientProperties.TEXT_FIELD_SHOW_CLEAR_BUTTON, true); @@ -271,7 +269,17 @@ public class SearchDialog extends CommonSearchDialog { searchLinePanel.add(Box.createRigidArea(new Dimension(5, 0))); searchLinePanel.add(searchBtn); searchLinePanel.add(Box.createRigidArea(new Dimension(5, 0))); + searchLinePanel.add(makeOptionsToggleButton(NLS.str("search_dialog.ignorecase"), Icons.ICON_MATCH, Icons.ICON_MATCH_SELECTED, + SearchOptions.IGNORE_CASE)); + searchLinePanel.add(Box.createRigidArea(new Dimension(5, 0))); + searchLinePanel.add(makeOptionsToggleButton(NLS.str("search_dialog.regex"), Icons.ICON_REGEX, Icons.ICON_REGEX_SELECTED, + SearchOptions.USE_REGEX)); + searchLinePanel.add(Box.createRigidArea(new Dimension(5, 0))); + searchLinePanel.add(makeOptionsToggleButton(NLS.str("search_dialog.active_tab"), Icons.ICON_ACTIVE_TAB, + Icons.ICON_ACTIVE_TAB_SELECTED, SearchOptions.ACTIVE_TAB)); + searchLinePanel.add(Box.createRigidArea(new Dimension(5, 0))); searchLinePanel.add(autoSearchCB); + searchLinePanel.setAlignmentX(LEFT_ALIGNMENT); JLabel findLabel = new JLabel(NLS.str("search_dialog.open_by_name")); @@ -293,27 +301,36 @@ public class SearchDialog extends CommonSearchDialog { searchInPanel.add(makeOptionsCheckBox(NLS.str("search_dialog.resource"), SearchOptions.RESOURCE)); searchInPanel.add(makeOptionsCheckBox(NLS.str("search_dialog.comments"), SearchOptions.COMMENT)); - JPanel searchOptions = new JPanel(new FlowLayout(FlowLayout.LEFT)); - searchOptions.setBorder(BorderFactory.createTitledBorder(NLS.str("search_dialog.options"))); - searchOptions.add(makeOptionsCheckBox(NLS.str("search_dialog.ignorecase"), IGNORE_CASE)); - searchOptions.add(makeOptionsCheckBox(NLS.str("search_dialog.regex"), USE_REGEX)); - searchOptions.add(makeOptionsCheckBox(NLS.str("search_dialog.active_tab"), SearchOptions.ACTIVE_TAB)); - packageField = new JTextField(); - packageField.setAlignmentX(LEFT_ALIGNMENT); - packageField.setPreferredSize(new Dimension(300, packageField.getPreferredSize().height)); + packageField.setMaximumSize(new Dimension(Integer.MAX_VALUE, searchField.getPreferredSize().height)); TextStandardActions.attach(packageField); packageField.putClientProperty(FlatClientProperties.TEXT_FIELD_SHOW_CLEAR_BUTTON, true); - JPanel searchPackageOptions = new JPanel(new FlowLayout(FlowLayout.LEFT)); + JPanel searchPackageOptions = new JPanel(); + searchPackageOptions.setLayout(new BoxLayout(searchPackageOptions, BoxLayout.LINE_AXIS)); searchPackageOptions.setBorder(BorderFactory.createTitledBorder(NLS.str("search_dialog.limit_package"))); searchPackageOptions.add(packageField); - JPanel optionsPanel = new JPanel(new WrapLayout(WrapLayout.LEFT, 0, 0)); + JTextField fileExtField = new JTextField(); + TextStandardActions.attach(fileExtField); + fileExtField.putClientProperty(FlatClientProperties.TEXT_FIELD_SHOW_CLEAR_BUTTON, true); + fileExtField.getDocument().addDocumentListener(new DocumentUpdateListener(ev -> { + String ext = fileExtField.getText(); + mainWindow.getSettings().setSrhResourceFileExt(ext); + })); + fileExtField.setText(mainWindow.getSettings().getSrhResourceFileExt()); + fileExtField.setMaximumSize(new Dimension(Integer.MAX_VALUE, searchField.getPreferredSize().height)); + + JPanel searchExtFileOptions = new JPanel(); + searchExtFileOptions.setLayout(new BoxLayout(searchExtFileOptions, BoxLayout.LINE_AXIS)); + searchExtFileOptions.setBorder(BorderFactory.createTitledBorder(NLS.str("preferences.res_file_ext"))); + searchExtFileOptions.add(fileExtField); + + JPanel optionsPanel = new JPanel(new GridLayout(2, 2, 5, 5)); optionsPanel.setAlignmentX(LEFT_ALIGNMENT); optionsPanel.add(searchInPanel); - optionsPanel.add(searchOptions); optionsPanel.add(searchPackageOptions); + optionsPanel.add(searchExtFileOptions); JPanel searchPane = new JPanel(); searchPane.setLayout(new BoxLayout(searchPane, BoxLayout.PAGE_AXIS)); @@ -467,17 +484,14 @@ public class SearchDialog extends CommonSearchDialog { boolean ignoreCase = options.contains(IGNORE_CASE); boolean useRegex = options.contains(USE_REGEX); String searchPackageText = packageField.getText(); - SearchSettings searchSettings = new SearchSettings(text, ignoreCase, useRegex, searchPackageText); + SearchSettings searchSettings = new SearchSettings(text, !ignoreCase, useRegex, searchPackageText); String error = searchSettings.prepare(mainWindow); - if (error == null) { - if (Objects.equals(searchField.getBackground(), SEARCH_FIELD_ERROR_COLOR)) { - searchField.setBackground(searchFieldDefaultBgColor); - } - } else { - searchField.setBackground(SEARCH_FIELD_ERROR_COLOR); + changeSearchFieldStyle(!StringUtils.isEmpty(error)); + if (!StringUtils.isEmpty(error)) { resultsInfoLabel.setText(error); return null; } + SearchTask newSearchTask = new SearchTask(mainWindow, this::addSearchResult, this::searchFinished); if (!buildSearch(newSearchTask, text, searchSettings)) { return null; @@ -485,6 +499,15 @@ public class SearchDialog extends CommonSearchDialog { return newSearchTask; } + private void changeSearchFieldStyle(boolean isError) { + if (isError) { + searchField.putClientProperty("JComponent.outline", "error"); + } else { + searchField.putClientProperty("JComponent.outline", ""); + } + searchField.repaint(); + } + private boolean buildSearch(SearchTask newSearchTask, String text, SearchSettings searchSettings) { List searchClasses; if (options.contains(ACTIVE_TAB)) { @@ -697,6 +720,23 @@ public class SearchDialog extends CommonSearchDialog { return chBox; } + private JToggleButton makeOptionsToggleButton(String name, ImageIcon icon, ImageIcon selectedIcon, final SearchOptions opt) { + final JToggleButton toggleButton = new JToggleButton(); + toggleButton.setToolTipText(name); + toggleButton.setIcon(icon); + toggleButton.setSelectedIcon(selectedIcon); + toggleButton.setSelected(options.contains(opt)); + toggleButton.addItemListener(e -> { + if (toggleButton.isSelected()) { + options.add(opt); + } else { + options.remove(opt); + } + searchEmitter.emitSearch(); + }); + return toggleButton; + } + @Override protected void loadFinished() { resultsTable.setEnabled(true); diff --git a/jadx-gui/src/main/java/jadx/gui/ui/hexviewer/HexSearchBar.java b/jadx-gui/src/main/java/jadx/gui/ui/hexviewer/HexSearchBar.java index 2320b1e49..f80b51159 100644 --- a/jadx-gui/src/main/java/jadx/gui/ui/hexviewer/HexSearchBar.java +++ b/jadx-gui/src/main/java/jadx/gui/ui/hexviewer/HexSearchBar.java @@ -5,7 +5,6 @@ import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; -import javax.swing.Icon; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JTextField; @@ -19,29 +18,21 @@ import org.exbin.bined.swing.section.SectCodeArea; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.formdev.flatlaf.FlatClientProperties; + import jadx.core.utils.StringUtils; import jadx.gui.ui.hexviewer.search.BinarySearch; import jadx.gui.ui.hexviewer.search.SearchCondition; import jadx.gui.ui.hexviewer.search.SearchParameters; import jadx.gui.ui.hexviewer.search.service.BinarySearchServiceImpl; +import jadx.gui.utils.Icons; import jadx.gui.utils.NLS; import jadx.gui.utils.TextStandardActions; -import jadx.gui.utils.UiUtils; public class HexSearchBar extends JToolBar { private static final long serialVersionUID = 1836871286618633003L; private static final Logger LOG = LoggerFactory.getLogger(HexSearchBar.class); - private static final Icon ICON_MARK = UiUtils.openSvgIcon("search/mark"); - private static final Icon ICON_MARK_SELECTED = UiUtils.openSvgIcon("search/previewSelected"); - private static final Icon ICON_FIND_TYPE_TXT = UiUtils.openSvgIcon("search/text"); - private static final Icon ICON_FIND_TYPE_HEX = UiUtils.openSvgIcon("search/hexSerial"); - private static final Icon ICON_MATCH = UiUtils.openSvgIcon("search/matchCaseHovered"); - private static final Icon ICON_MATCH_SELECTED = UiUtils.openSvgIcon("search/matchCaseSelected"); - private static final Icon ICON_UP = UiUtils.openSvgIcon("ui/top"); - private static final Icon ICON_DOWN = UiUtils.openSvgIcon("ui/bottom"); - private static final Icon ICON_CLOSE = UiUtils.openSvgIcon("ui/close"); - private final SectCodeArea hexCodeArea; private final JTextField searchField; @@ -61,6 +52,7 @@ public class HexSearchBar extends JToolBar { add(findLabel); searchField = new JTextField(30); + searchField.putClientProperty(FlatClientProperties.TEXT_FIELD_SHOW_CLEAR_BUTTON, true); searchField.addKeyListener(new KeyAdapter() { @Override public void keyReleased(KeyEvent e) { @@ -78,7 +70,7 @@ public class HexSearchBar extends JToolBar { } }); searchField.addActionListener(e -> control.notifySearchChanging()); - new TextStandardActions(searchField); + TextStandardActions.attach(searchField); add(searchField); ActionListener searchSettingListener = e -> control.notifySearchChanged(); @@ -89,15 +81,15 @@ public class HexSearchBar extends JToolBar { add(resultCountLabel); matchCaseCB = new JToggleButton(); - matchCaseCB.setIcon(ICON_MATCH); - matchCaseCB.setSelectedIcon(ICON_MATCH_SELECTED); + matchCaseCB.setIcon(Icons.ICON_MATCH); + matchCaseCB.setSelectedIcon(Icons.ICON_MATCH_SELECTED); matchCaseCB.setToolTipText(NLS.str("search.match_case")); matchCaseCB.addActionListener(searchSettingListener); add(matchCaseCB); findTypeCB = new JToggleButton(); - findTypeCB.setIcon(ICON_FIND_TYPE_TXT); - findTypeCB.setSelectedIcon(ICON_FIND_TYPE_HEX); + findTypeCB.setIcon(Icons.ICON_FIND_TYPE_TXT); + findTypeCB.setSelectedIcon(Icons.ICON_FIND_TYPE_HEX); if (findTypeCB.isSelected()) { findTypeCB.setToolTipText(NLS.str("search.find_type_hex")); } else { @@ -111,29 +103,29 @@ public class HexSearchBar extends JToolBar { add(findTypeCB); prevMatchButton = new JButton(); - prevMatchButton.setIcon(ICON_UP); + prevMatchButton.setIcon(Icons.ICON_UP); prevMatchButton.setToolTipText(NLS.str("search.previous")); prevMatchButton.addActionListener(e -> control.prevMatch()); prevMatchButton.setBorderPainted(false); add(prevMatchButton); nextMatchButton = new JButton(); - nextMatchButton.setIcon(ICON_DOWN); + nextMatchButton.setIcon(Icons.ICON_DOWN); nextMatchButton.setToolTipText(NLS.str("search.next")); nextMatchButton.addActionListener(e -> control.nextMatch()); nextMatchButton.setBorderPainted(false); add(nextMatchButton); markAllCB = new JToggleButton(); - markAllCB.setIcon(ICON_MARK); - markAllCB.setSelectedIcon(ICON_MARK_SELECTED); + markAllCB.setIcon(Icons.ICON_MARK); + markAllCB.setSelectedIcon(Icons.ICON_MARK_SELECTED); markAllCB.setToolTipText(NLS.str("search.mark_all")); markAllCB.setSelected(true); markAllCB.addActionListener(searchSettingListener); add(markAllCB); JButton closeButton = new JButton(); - closeButton.setIcon(ICON_CLOSE); + closeButton.setIcon(Icons.ICON_CLOSE); closeButton.addActionListener(e -> toggle()); closeButton.setBorderPainted(false); add(closeButton); diff --git a/jadx-gui/src/main/java/jadx/gui/utils/Icons.java b/jadx-gui/src/main/java/jadx/gui/utils/Icons.java index ec513d502..80b608adb 100644 --- a/jadx-gui/src/main/java/jadx/gui/utils/Icons.java +++ b/jadx-gui/src/main/java/jadx/gui/utils/Icons.java @@ -48,4 +48,19 @@ public class Icons { public static final ImageIcon RESET = UiUtils.openSvgIcon("ui/reset"); public static final ImageIcon FONT = UiUtils.openSvgIcon("nodes/fontFile"); + public static final ImageIcon ICON_MARK = UiUtils.openSvgIcon("search/mark"); + public static final ImageIcon ICON_MARK_SELECTED = UiUtils.openSvgIcon("search/previewSelected"); + public static final ImageIcon ICON_REGEX = UiUtils.openSvgIcon("search/regexHovered"); + public static final ImageIcon ICON_REGEX_SELECTED = UiUtils.openSvgIcon("search/regexSelected"); + public static final ImageIcon ICON_WORDS = UiUtils.openSvgIcon("search/wordsHovered"); + public static final ImageIcon ICON_WORDS_SELECTED = UiUtils.openSvgIcon("search/wordsSelected"); + public static final ImageIcon ICON_MATCH = UiUtils.openSvgIcon("search/matchCaseHovered"); + public static final ImageIcon ICON_MATCH_SELECTED = UiUtils.openSvgIcon("search/matchCaseSelected"); + public static final ImageIcon ICON_UP = UiUtils.openSvgIcon("ui/top"); + public static final ImageIcon ICON_DOWN = UiUtils.openSvgIcon("ui/bottom"); + public static final ImageIcon ICON_CLOSE = UiUtils.openSvgIcon("ui/close"); + public static final ImageIcon ICON_FIND_TYPE_TXT = UiUtils.openSvgIcon("search/text"); + public static final ImageIcon ICON_FIND_TYPE_HEX = UiUtils.openSvgIcon("search/hexSerial"); + public static final ImageIcon ICON_ACTIVE_TAB = UiUtils.openSvgIcon("search/activeTab"); + public static final ImageIcon ICON_ACTIVE_TAB_SELECTED = UiUtils.openSvgIcon("search/activeTabSelected"); } diff --git a/jadx-gui/src/main/resources/i18n/Messages_de_DE.properties b/jadx-gui/src/main/resources/i18n/Messages_de_DE.properties index 95bf5b60f..d17b1a238 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_de_DE.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_de_DE.properties @@ -158,7 +158,6 @@ search_dialog.class=Klasse search_dialog.method=Methode search_dialog.field=Feld search_dialog.code=Code -search_dialog.options=Suchoptionen: search_dialog.ignorecase=Groß/Kleinschreibung ignorieren search_dialog.load_more=Mehr laden search_dialog.load_all=Alle laden diff --git a/jadx-gui/src/main/resources/i18n/Messages_en_US.properties b/jadx-gui/src/main/resources/i18n/Messages_en_US.properties index f355868a4..886fb093d 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_en_US.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_en_US.properties @@ -158,7 +158,6 @@ search_dialog.class=Class search_dialog.method=Method search_dialog.field=Field search_dialog.code=Code -search_dialog.options=Search options: search_dialog.ignorecase=Case-insensitive search_dialog.load_more=Load more search_dialog.load_all=Load all diff --git a/jadx-gui/src/main/resources/i18n/Messages_es_ES.properties b/jadx-gui/src/main/resources/i18n/Messages_es_ES.properties index 7b01db1b0..c48fccb10 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_es_ES.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_es_ES.properties @@ -158,7 +158,6 @@ search_dialog.class=Clase search_dialog.method=Método search_dialog.field=Campo search_dialog.code=Código -search_dialog.options=Opciones de búsqueda: search_dialog.ignorecase=Ignorar minúsculas/mayúsculas #search_dialog.load_more=Load more #search_dialog.load_all=Load all diff --git a/jadx-gui/src/main/resources/i18n/Messages_id_ID.properties b/jadx-gui/src/main/resources/i18n/Messages_id_ID.properties index 792fbb632..abc6bf54c 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_id_ID.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_id_ID.properties @@ -158,7 +158,6 @@ search_dialog.class=Kelas search_dialog.method=Metode search_dialog.field=Bidang search_dialog.code=Kode -search_dialog.options=Opsi pencarian: search_dialog.ignorecase=Non-ketetapan huruf besar kecil search_dialog.load_more=Muat lebih banyak search_dialog.load_all=Muat semua diff --git a/jadx-gui/src/main/resources/i18n/Messages_ko_KR.properties b/jadx-gui/src/main/resources/i18n/Messages_ko_KR.properties index fe3b5e59d..c42567f57 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_ko_KR.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_ko_KR.properties @@ -158,7 +158,6 @@ search_dialog.class=클래스 search_dialog.method=메소드 search_dialog.field=필드 search_dialog.code=코드 -search_dialog.options=옵션 검색: search_dialog.ignorecase=대소문자 구분 안함 search_dialog.load_more=더보기 search_dialog.load_all=모두 로드 diff --git a/jadx-gui/src/main/resources/i18n/Messages_pt_BR.properties b/jadx-gui/src/main/resources/i18n/Messages_pt_BR.properties index ca4c72945..545408578 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_pt_BR.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_pt_BR.properties @@ -158,7 +158,6 @@ search_dialog.class=Classe search_dialog.method=Método search_dialog.field=Propriedade search_dialog.code=Código -search_dialog.options=Opções de busca: search_dialog.ignorecase=Não diferencia maiúsculas de minúsculas search_dialog.load_more=Carregar mais search_dialog.load_all=Carregar todas diff --git a/jadx-gui/src/main/resources/i18n/Messages_ru_RU.properties b/jadx-gui/src/main/resources/i18n/Messages_ru_RU.properties index e6eb7be48..908d6d29c 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_ru_RU.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_ru_RU.properties @@ -158,7 +158,6 @@ search_dialog.class=Класс search_dialog.method=Метод search_dialog.field=Поле search_dialog.code=Код -search_dialog.options=Опции поиска: search_dialog.ignorecase=Игнорировать регистр search_dialog.load_more=Загрузить еще search_dialog.load_all=Загрузить все diff --git a/jadx-gui/src/main/resources/i18n/Messages_zh_CN.properties b/jadx-gui/src/main/resources/i18n/Messages_zh_CN.properties index 9a1f06c5c..cecccd736 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_zh_CN.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_zh_CN.properties @@ -158,7 +158,6 @@ search_dialog.class=类名 search_dialog.method=方法名 search_dialog.field=字段名 search_dialog.code=代码 -search_dialog.options=搜索选项: search_dialog.ignorecase=忽略大小写 search_dialog.load_more=加载更多 search_dialog.load_all=加载所有 diff --git a/jadx-gui/src/main/resources/i18n/Messages_zh_TW.properties b/jadx-gui/src/main/resources/i18n/Messages_zh_TW.properties index 235f930cf..9b0e3cf71 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_zh_TW.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_zh_TW.properties @@ -158,7 +158,6 @@ search_dialog.class=類別 search_dialog.method=方法 search_dialog.field=欄位 search_dialog.code=程式碼 -search_dialog.options=搜尋選項: search_dialog.ignorecase=不區分大小寫 search_dialog.load_more=載入更多 search_dialog.load_all=載入全部 diff --git a/jadx-gui/src/main/resources/icons/search/activeTab.svg b/jadx-gui/src/main/resources/icons/search/activeTab.svg new file mode 100644 index 000000000..6833a83e8 --- /dev/null +++ b/jadx-gui/src/main/resources/icons/search/activeTab.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/jadx-gui/src/main/resources/icons/search/activeTabSelected.svg b/jadx-gui/src/main/resources/icons/search/activeTabSelected.svg new file mode 100644 index 000000000..32da27836 --- /dev/null +++ b/jadx-gui/src/main/resources/icons/search/activeTabSelected.svg @@ -0,0 +1,5 @@ + + + + +