From 4a92ee07cc68415c8e912015443cd3847e4fb7a1 Mon Sep 17 00:00:00 2001 From: Skylot Date: Fri, 20 Oct 2023 21:10:03 +0100 Subject: [PATCH] fix(gui): hide not needed popup action for not editable code --- .../gui/ui/codearea/AbstractCodeArea.java | 46 +++++++++++++++++-- 1 file changed, 43 insertions(+), 3 deletions(-) diff --git a/jadx-gui/src/main/java/jadx/gui/ui/codearea/AbstractCodeArea.java b/jadx-gui/src/main/java/jadx/gui/ui/codearea/AbstractCodeArea.java index 834d46735cf..6cf813175a6 100644 --- a/jadx-gui/src/main/java/jadx/gui/ui/codearea/AbstractCodeArea.java +++ b/jadx-gui/src/main/java/jadx/gui/ui/codearea/AbstractCodeArea.java @@ -84,11 +84,9 @@ public AbstractCodeArea(ContentPanel contentPanel, JNode node) { this.node = Objects.requireNonNull(node); setMarkOccurrences(false); - setEditable(node.isEditable()); - setCodeFoldingEnabled(false); setFadeCurrentLineHighlight(true); - setCloseCurlyBraces(true); setAntiAliasingEnabled(true); + applyEditableProperties(node); loadSettings(); JadxSettings settings = contentPanel.getTabbedPane().getMainWindow().getSettings(); @@ -107,6 +105,47 @@ public AbstractCodeArea(ContentPanel contentPanel, JNode node) { } } + private void applyEditableProperties(JNode node) { + boolean editable = node.isEditable(); + setEditable(editable); + setCodeFoldingEnabled(editable); + if (editable) { + setCloseCurlyBraces(true); + setCloseMarkupTags(true); + setAutoIndentEnabled(true); + setClearWhitespaceLinesEnabled(true); + } + } + + @Override + protected JPopupMenu createPopupMenu() { + JPopupMenu menu = new JPopupMenu(); + if (node.isEditable()) { + menu.add(createPopupMenuItem(getAction(UNDO_ACTION))); + menu.add(createPopupMenuItem(getAction(REDO_ACTION))); + menu.addSeparator(); + menu.add(createPopupMenuItem(cutAction)); + menu.add(createPopupMenuItem(copyAction)); + menu.add(createPopupMenuItem(getAction(PASTE_ACTION))); + menu.add(createPopupMenuItem(getAction(DELETE_ACTION))); + menu.addSeparator(); + menu.add(createPopupMenuItem(getAction(SELECT_ALL_ACTION))); + } else { + menu.add(createPopupMenuItem(copyAction)); + menu.add(createPopupMenuItem(getAction(SELECT_ALL_ACTION))); + } + appendFoldingMenu(menu); + return menu; + } + + @Override + protected void appendFoldingMenu(JPopupMenu popup) { + // append code folding popup menu entry only if enabled + if (isCodeFoldingEnabled()) { + super.appendFoldingMenu(popup); + } + } + private void addWrapLineMenuAction(JadxSettings settings) { JPopupMenu popupMenu = getPopupMenu(); popupMenu.addSeparator(); @@ -280,6 +319,7 @@ private static String getWordFromToken(@Nullable Token token) { public void setLoaded() { this.loaded = true; + discardAllEdits(); // disable 'undo' action to empty state (before load) } /**