fix(gui): minor action names and icons adjustments (#2419)

This commit is contained in:
Skylot
2025-02-22 20:47:11 +00:00
parent 4a9276e904
commit ce60aa8635
8 changed files with 64 additions and 43 deletions
@@ -39,7 +39,6 @@ import java.util.function.Consumer;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.Box;
import javax.swing.ImageIcon;
import javax.swing.JCheckBox;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JDialog;
@@ -159,6 +158,7 @@ import jadx.gui.utils.CacheObject;
import jadx.gui.utils.DesktopEntryUtils;
import jadx.gui.utils.FontUtils;
import jadx.gui.utils.ILoadListener;
import jadx.gui.utils.Icons;
import jadx.gui.utils.LafManager;
import jadx.gui.utils.Link;
import jadx.gui.utils.NLS;
@@ -179,26 +179,6 @@ public class MainWindow extends JFrame {
private static final double WINDOW_RATIO = 1 - BORDER_RATIO * 2;
public static final double SPLIT_PANE_RESIZE_WEIGHT = 0.15;
private static final ImageIcon ICON_ADD_FILES = UiUtils.openSvgIcon("ui/addFile");
private static final ImageIcon ICON_RELOAD = UiUtils.openSvgIcon("ui/refresh");
private static final ImageIcon ICON_EXPORT = UiUtils.openSvgIcon("ui/export");
private static final ImageIcon ICON_EXIT = UiUtils.openSvgIcon("ui/exit");
private static final ImageIcon ICON_SYNC = UiUtils.openSvgIcon("ui/pagination");
private static final ImageIcon ICON_FLAT_PKG = UiUtils.openSvgIcon("ui/moduleGroup");
private static final ImageIcon ICON_SEARCH = UiUtils.openSvgIcon("ui/find");
private static final ImageIcon ICON_FIND = UiUtils.openSvgIcon("ui/ejbFinderMethod");
private static final ImageIcon ICON_COMMENT_SEARCH = UiUtils.openSvgIcon("ui/usagesFinder");
private static final ImageIcon ICON_MAIN_ACTIVITY = UiUtils.openSvgIcon("ui/home");
private static final ImageIcon ICON_BACK = UiUtils.openSvgIcon("ui/left");
private static final ImageIcon ICON_FORWARD = UiUtils.openSvgIcon("ui/right");
private static final ImageIcon ICON_QUARK = UiUtils.openSvgIcon("ui/quark");
private static final ImageIcon ICON_PREF = UiUtils.openSvgIcon("ui/settings");
private static final ImageIcon ICON_DEOBF = UiUtils.openSvgIcon("ui/helmChartLock");
private static final ImageIcon ICON_DECOMPILE_ALL = UiUtils.openSvgIcon("ui/runAll");
private static final ImageIcon ICON_LOG = UiUtils.openSvgIcon("ui/logVerbose");
private static final ImageIcon ICON_INFO = UiUtils.openSvgIcon("ui/showInfos");
private static final ImageIcon ICON_DEBUGGER = UiUtils.openSvgIcon("ui/startDebugger");
private final transient JadxWrapper wrapper;
private final transient JadxSettings settings;
private final transient CacheObject cacheObject;
@@ -1082,7 +1062,7 @@ public class MainWindow extends JFrame {
JadxGuiAction exitAction = new JadxGuiAction(ActionModel.EXIT, this::closeWindow);
isFlattenPackage = settings.isFlattenPackage();
flatPkgMenuItem = new JCheckBoxMenuItem(NLS.str("menu.flatten"), ICON_FLAT_PKG);
flatPkgMenuItem = new JCheckBoxMenuItem(NLS.str("menu.flatten"), Icons.FLAT_PKG);
flatPkgMenuItem.setState(isFlattenPackage);
JCheckBoxMenuItem heapUsageBarMenuItem = new JCheckBoxMenuItem(NLS.str("menu.heapUsageBar"));
@@ -1105,16 +1085,15 @@ public class MainWindow extends JFrame {
dockLog.setState(settings.isDockLogViewer());
dockLog.addActionListener(event -> settings.setDockLogViewer(!settings.isDockLogViewer()));
JCheckBoxMenuItem dockQuickTabs = new JCheckBoxMenuItem(NLS.str("menu.dock_quick_tabs"));
dockQuickTabs.setState(settings.isDockQuickTabs());
dockQuickTabs.addActionListener(event -> {
ActionHandler quickTabsAction = new ActionHandler(ev -> {
boolean visible = quickTabsTree == null;
setQuickTabsVisibility(visible);
settings.setDockQuickTabs(visible);
});
if (dockQuickTabs.getState()) {
setQuickTabsVisibility(true);
}
quickTabsAction.setNameAndDesc(NLS.str("menu.dock_quick_tabs"));
quickTabsAction.setIcon(Icons.QUICK_TABS);
quickTabsAction.setSelected(settings.isDockQuickTabs());
setQuickTabsVisibility(settings.isDockQuickTabs());
JadxGuiAction syncAction = new JadxGuiAction(ActionModel.SYNC, this.editorSyncManager::sync);
JadxGuiAction textSearchAction = new JadxGuiAction(ActionModel.TEXT_SEARCH, this::textSearch);
@@ -1174,12 +1153,14 @@ public class MainWindow extends JFrame {
JMenu view = new JadxMenu(NLS.str("menu.view"), shortcutsController);
view.setMnemonic(KeyEvent.VK_V);
view.add(quickTabsAction.makeCheckBoxMenuItem());
view.add(flatPkgMenuItem);
view.addSeparator();
view.add(syncAction);
view.add(heapUsageBarMenuItem);
view.add(alwaysSelectOpened);
view.addSeparator();
view.add(dockLog);
view.add(dockQuickTabs);
view.add(heapUsageBarMenuItem);
JMenu nav = new JadxMenu(NLS.str("menu.navigation"), shortcutsController);
nav.setMnemonic(KeyEvent.VK_N);
@@ -1235,7 +1216,7 @@ public class MainWindow extends JFrame {
menuBar.add(help);
setJMenuBar(menuBar);
flatPkgButton = new JToggleButton(ICON_FLAT_PKG);
flatPkgButton = new JToggleButton(Icons.FLAT_PKG);
flatPkgButton.setSelected(isFlattenPackage);
ActionListener flatPkgAction = e -> toggleFlattenPackage();
flatPkgMenuItem.addActionListener(flatPkgAction);
@@ -1256,6 +1237,7 @@ public class MainWindow extends JFrame {
toolbar.addSeparator();
toolbar.add(syncAction);
toolbar.add(flatPkgButton);
toolbar.add(quickTabsAction.makeToggleButton());
toolbar.addSeparator();
toolbar.add(textSearchAction);
toolbar.add(clsSearchAction);
@@ -43,7 +43,7 @@ public enum ActionModel {
Shortcut.keyboard(KeyEvent.VK_P, UiUtils.ctrlButton() | KeyEvent.SHIFT_DOWN_MASK)),
EXIT(MENU_TOOLBAR, "file.exit", "file.exit", "ui/exit",
Shortcut.none()),
SYNC(MENU_TOOLBAR, "menu.sync", "menu.sync", "ui/pagination",
SYNC(MENU_TOOLBAR, "menu.sync", "menu.sync", "ui/selectWeb",
Shortcut.keyboard(KeyEvent.VK_T, UiUtils.ctrlButton())),
TEXT_SEARCH(MENU_TOOLBAR, "menu.text_search", "menu.text_search", "ui/find",
Shortcut.keyboard(KeyEvent.VK_F, UiUtils.ctrlButton() | KeyEvent.SHIFT_DOWN_MASK)),
@@ -25,6 +25,9 @@ import jadx.core.utils.exceptions.JadxRuntimeException;
import jadx.gui.treemodel.JClass;
import jadx.gui.treemodel.JEditableNode;
import jadx.gui.treemodel.JNode;
import jadx.gui.ui.MainWindow;
import jadx.gui.ui.action.ActionModel;
import jadx.gui.ui.action.JadxGuiAction;
import jadx.gui.ui.panel.ContentPanel;
import jadx.gui.ui.tab.dnd.TabDndGestureListener;
import jadx.gui.utils.Icons;
@@ -234,9 +237,11 @@ public class TabComponent extends JPanel {
}
if (nodeFullName != null) {
JMenuItem revealTab = new JMenuItem(NLS.str("menu.sync"));
revealTab.addActionListener(e -> tabsController.getMainWindow().selectNodeInTree(getNode()));
menu.add(revealTab);
MainWindow mainWindow = tabsController.getMainWindow();
JadxGuiAction selectInTree = new JadxGuiAction(ActionModel.SYNC, () -> mainWindow.selectNodeInTree(getNode()));
// attach shortcut without bind only to show current keybinding
selectInTree.setShortcut(mainWindow.getShortcutsController().get(ActionModel.SYNC));
menu.add(selectInTree);
menu.addSeparator();
}
@@ -15,6 +15,9 @@ public class Icons {
public static final ImageIcon SAVE_ALL = UiUtils.openSvgIcon("ui/menu-saveall");
public static final ImageIcon FLAT_PKG = UiUtils.openSvgIcon("ui/moduleGroup");
public static final ImageIcon QUICK_TABS = UiUtils.openSvgIcon("ui/dataView");
public static final ImageIcon PIN = UiUtils.openSvgIcon("nodes/pin");
public static final ImageIcon PIN_DARK = UiUtils.openSvgIcon("nodes/pin_dark");
public static final ImageIcon PIN_HOVERED = UiUtils.openSvgIcon("nodes/pinHovered");
@@ -4,9 +4,11 @@ import java.awt.event.ActionEvent;
import java.util.function.Consumer;
import javax.swing.AbstractAction;
import javax.swing.ImageIcon;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JComponent;
import javax.swing.JToggleButton;
import javax.swing.KeyStroke;
import jadx.gui.utils.UiUtils;
@@ -52,10 +54,14 @@ public class ActionHandler extends AbstractAction {
putValue(SHORT_DESCRIPTION, desc);
}
public void setIcon(ImageIcon icon) {
public void setIcon(Icon icon) {
putValue(SMALL_ICON, icon);
}
public void setSelected(boolean selected) {
putValue(SELECTED_KEY, selected);
}
public void setKeyBinding(KeyStroke keyStroke) {
putValue(ACCELERATOR_KEY, keyStroke);
}
@@ -83,4 +89,14 @@ public class ActionHandler extends AbstractAction {
addKeyBindToDescription();
return new JButton(this);
}
public JToggleButton makeToggleButton() {
JToggleButton toggleButton = new JToggleButton(this);
toggleButton.setText("");
return toggleButton;
}
public JCheckBoxMenuItem makeCheckBoxMenuItem() {
return new JCheckBoxMenuItem(this);
}
}
@@ -5,12 +5,12 @@ menu.view=View
menu.recent_projects=Recent projects
menu.no_recent_projects=No recent projects
menu.preferences=Preferences
menu.sync=Sync with editor
menu.flatten=Show flatten packages
menu.heapUsageBar=Show memory usage bar
menu.alwaysSelectOpened=Always Select Opened File/Class
menu.dock_log=Dock log viewer
menu.dock_quick_tabs=Dock quick tabs
menu.sync=Select in Tree
menu.flatten=Use Flatten Packages
menu.heapUsageBar=Show Memory Usage Bar
menu.alwaysSelectOpened=Auto Select in Tree
menu.dock_log=Dock Log Viewer
menu.dock_quick_tabs=Show Quick Tabs
menu.navigation=Navigation
menu.text_search=Text search
menu.class_search=Class search
@@ -0,0 +1,11 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M1 4C1 2.89543 1.89543 2 3 2H13C14.1046 2 15 2.89543 15 4V10.0002C14.7066 9.77678 14.374 9.57312 14 9.40875V6H11V9.09561C10.6382 9.16692 10.3053 9.27503 10 9.40931V6H6V13H7V14H3C1.89543 14 1 13.1046 1 12V4ZM6 3H10V5H6V3ZM5 3H3C2.44772 3 2 3.44772 2 4V5H5V3ZM2 6V12C2 12.5523 2.44772 13 3 13H5V6H2ZM14 5V4C14 3.44772 13.5523 3 13 3H11V5H14Z" fill="#6C707E"/>
<path d="M15 10.0002C14.7066 9.77678 14.374 9.57312 14 9.40875V6H11V9.09556C11.3118 9.03412 11.645 9 12.0004 9C13.2731 9 14.2608 9.43725 15 10.0002Z" fill="#EBECF0"/>
<path d="M7 13L7.10541 12.6838L7.10601 12.682L7.10672 12.6799L7.10842 12.6748L7.11304 12.6615C7.11665 12.6512 7.12135 12.6379 7.12718 12.6221C7.13882 12.5903 7.155 12.5477 7.17597 12.4959C7.21786 12.3924 7.27934 12.2509 7.36279 12.084C7.52857 11.7525 7.73352 11.3082 8.10716 10.8598C8.55306 10.3247 9.17591 9.77161 10 9.4092V6H6V13H7Z" fill="#EBECF0"/>
<path d="M10 3H6V5H10V3Z" fill="#EBECF0"/>
<path d="M5 3H3C2.44772 3 2 3.44772 2 4V5H5V3Z" fill="#EBECF0"/>
<path d="M2 12V6H5V13H3C2.44772 13 2 12.5523 2 12Z" fill="#EBECF0"/>
<path d="M14 5V4C14 3.44772 13.5523 3 13 3H11V5H14Z" fill="#EBECF0"/>
<path d="M12 14C12.5523 14 13 13.5523 13 13C13 12.4477 12.5523 12 12 12C11.4477 12 11 12.4477 11 13C11 13.5523 11.4477 14 12 14Z" fill="#3574F0"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M12 16C9 16 8 13 8 13C8 13 9 10 12 10C15 10 16 13 16 13C16 13 15 16 12 16ZM14.9024 12.9785L14.9131 13L14.9024 13.0215C14.787 13.2525 14.6081 13.5582 14.3568 13.8598C13.8602 14.4557 13.1189 15 12 15C10.8811 15 10.1398 14.4557 9.64322 13.8598C9.39186 13.5582 9.21302 13.2525 9.09755 13.0215L9.08686 13L9.09755 12.9785C9.21302 12.7475 9.39186 12.4418 9.64322 12.1402C10.1398 11.5443 10.8811 11 12 11C13.1189 11 13.8602 11.5443 14.3568 12.1402C14.6081 12.4418 14.787 12.7475 14.9024 12.9785Z" fill="#3574F0"/>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

@@ -0,0 +1,4 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M2 4C2 2.89543 2.89543 2 4 2H12C13.1046 2 14 2.89543 14 4V6.5C14 6.77614 13.7761 7 13.5 7C13.2239 7 13 6.77614 13 6.5V4C13 3.44772 12.5523 3 12 3H4C3.44772 3 3 3.44772 3 4V12C3 12.5523 3.44772 13 4 13H6.5C6.77614 13 7 13.2239 7 13.5C7 13.7761 6.77614 14 6.5 14H4C2.89543 14 2 13.1046 2 12V4Z" fill="#6C707E"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M8 8.5C8 8.22386 8.22386 8 8.5 8H12.5C12.7761 8 13 8.22386 13 8.5C13 8.77614 12.7761 9 12.5 9H9.70711L13.8536 13.1464C14.0488 13.3417 14.0488 13.6583 13.8536 13.8536C13.6583 14.0488 13.3417 14.0488 13.1464 13.8536L9 9.70711V12.5C9 12.7761 8.77614 13 8.5 13C8.22386 13 8 12.7761 8 12.5V8.5Z" fill="#3574F0"/>
</svg>

After

Width:  |  Height:  |  Size: 819 B