From c306d3b5264ab8d3432aa0f1ad033cb34f8205d8 Mon Sep 17 00:00:00 2001 From: Mattia Marelli Date: Sat, 3 May 2025 11:51:30 +0200 Subject: [PATCH 1/5] Search for left/right icons into UIManager to allow customization --- .../autocomplete/AutoCompleteDescWindow.java | 91 +++++++++++-------- 1 file changed, 55 insertions(+), 36 deletions(-) diff --git a/AutoComplete/src/main/java/org/fife/ui/autocomplete/AutoCompleteDescWindow.java b/AutoComplete/src/main/java/org/fife/ui/autocomplete/AutoCompleteDescWindow.java index 620a213..b349090 100644 --- a/AutoComplete/src/main/java/org/fife/ui/autocomplete/AutoCompleteDescWindow.java +++ b/AutoComplete/src/main/java/org/fife/ui/autocomplete/AutoCompleteDescWindow.java @@ -9,6 +9,13 @@ */ package org.fife.ui.autocomplete; +import org.fife.ui.rsyntaxtextarea.PopupWindowDecorator; + +import javax.swing.*; +import javax.swing.border.AbstractBorder; +import javax.swing.border.Border; +import javax.swing.event.HyperlinkEvent; +import javax.swing.event.HyperlinkListener; import java.awt.*; import java.awt.event.ActionEvent; import java.lang.reflect.InvocationTargetException; @@ -19,26 +26,6 @@ import java.util.ArrayList; import java.util.List; import java.util.ResourceBundle; -import javax.swing.AbstractAction; -import javax.swing.Action; -import javax.swing.BorderFactory; -import javax.swing.Icon; -import javax.swing.ImageIcon; -import javax.swing.JButton; -import javax.swing.JEditorPane; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.JToolBar; -import javax.swing.JWindow; -import javax.swing.SwingUtilities; -import javax.swing.Timer; -import javax.swing.UIManager; -import javax.swing.border.AbstractBorder; -import javax.swing.border.Border; -import javax.swing.event.HyperlinkEvent; -import javax.swing.event.HyperlinkListener; - -import org.fife.ui.rsyntaxtextarea.PopupWindowDecorator; /** @@ -583,23 +570,39 @@ void setCompletion(Completion c, String anchor, class ToolBarBackAction extends AbstractAction { ToolBarBackAction(boolean ltr) { - String img = "org/fife/ui/autocomplete/arrow_" + - (ltr ? "left.png" : "right.png"); - ClassLoader cl = getClass().getClassLoader(); - Icon icon = new ImageIcon(cl.getResource(img)); + setIcon(ltr); + + UIManager.addPropertyChangeListener(evt -> { + if (evt.getPropertyName().equals("lookAndFeel")) { + setIcon(ltr); + } + }); + } + + private void setIcon(boolean ltr) { + Icon icon = UIManager.getIcon("autocomplete.leftArrow"); + + if (icon == null) { + if (ltr) + icon = new ImageIcon(getClass().getResource("arrow_left.png")); + else + icon = new ImageIcon(getClass().getResource("arrow_right.png")); + + UIManager.put("autocomplete.leftArrow", icon); + } + putValue(Action.SMALL_ICON, icon); } @Override public void actionPerformed(ActionEvent e) { - if (historyPos>0) { + if (historyPos > 0) { HistoryEntry pair = history.get(--historyPos); descArea.setText(pair.summary); - if (pair.anchor!=null) { + if (pair.anchor != null) { //System.out.println("Scrolling to: " + pair.anchor); descArea.scrollToReference(pair.anchor); - } - else { + } else { descArea.setCaretPosition(0); } setActionStates(); @@ -615,23 +618,39 @@ public void actionPerformed(ActionEvent e) { class ToolBarForwardAction extends AbstractAction { ToolBarForwardAction(boolean ltr) { - String img = "org/fife/ui/autocomplete/arrow_" + - (ltr ? "right.png" : "left.png"); - ClassLoader cl = getClass().getClassLoader(); - Icon icon = new ImageIcon(cl.getResource(img)); + setIcon(ltr); + + UIManager.addPropertyChangeListener(evt -> { + if (evt.getPropertyName().equals("lookAndFeel")) { + setIcon(ltr); + } + }); + } + + void setIcon(boolean ltr) { + Icon icon = UIManager.getIcon("autocomplete.rightArrow"); + + if (icon == null) { + if (ltr) + icon = new ImageIcon(getClass().getResource("arrow_right.png")); + else + icon = new ImageIcon(getClass().getResource("arrow_left.png")); + + UIManager.put("autocomplete.rightArrow", icon); + } + putValue(Action.SMALL_ICON, icon); } @Override public void actionPerformed(ActionEvent e) { - if (history!=null && historyPos Date: Sat, 3 May 2025 18:01:17 +0200 Subject: [PATCH 2/5] Search for left/right icons into UIManager to allow customization --- .../autocomplete/AutoCompleteDescWindow.java | 90 +++++++++---------- 1 file changed, 42 insertions(+), 48 deletions(-) diff --git a/AutoComplete/src/main/java/org/fife/ui/autocomplete/AutoCompleteDescWindow.java b/AutoComplete/src/main/java/org/fife/ui/autocomplete/AutoCompleteDescWindow.java index b349090..5646806 100644 --- a/AutoComplete/src/main/java/org/fife/ui/autocomplete/AutoCompleteDescWindow.java +++ b/AutoComplete/src/main/java/org/fife/ui/autocomplete/AutoCompleteDescWindow.java @@ -27,6 +27,8 @@ import java.util.List; import java.util.ResourceBundle; +import static java.util.Objects.requireNonNull; + /** * The optional "description" window that describes the currently selected @@ -503,7 +505,43 @@ public void updateUI() { TipUtil.tweakTipEditorPane(descArea); scrollPane.setBackground(descArea.getBackground()); scrollPane.getViewport().setBackground(descArea.getBackground()); - ((JPanel)getContentPane()).setBorder(TipUtil.getToolTipBorder()); + ((JPanel) getContentPane()).setBorder(TipUtil.getToolTipBorder()); + + ComponentOrientation orientation = ac.getTextComponentOrientation(); + setIcon(forwardAction, orientation.isLeftToRight(), "forward"); + setIcon(backAction, orientation.isLeftToRight(), "back"); + } + + private static void setIcon(Action action, boolean ltr, String type) { + Icon leftIcon = UIManager.getIcon("autocomplete.leftArrow"); + Icon rightIcon = UIManager.getIcon("autocomplete.rightArrow"); + + if (leftIcon == null) { + String leftIc = ltr ? "arrow_left.png" : "arrow_right.png"; + leftIcon = new ImageIcon(requireNonNull(AutoCompleteDescWindow.class.getResource(leftIc))); + UIManager.put("autocomplete.leftArrow", leftIcon); + } + + if (rightIcon == null) { + String rightIc = ltr ? "arrow_right.png" : "arrow_left.png"; + rightIcon = new ImageIcon(requireNonNull(AutoCompleteDescWindow.class.getResource(rightIc))); + UIManager.put("autocomplete.leftArrow", leftIcon); + } + + + if ("back".equals(type)) { + if (ltr) { + action.putValue(Action.SMALL_ICON, leftIcon); + } else { + action.putValue(Action.SMALL_ICON, rightIcon); + } + } else if ("forward".equals(type)) { + if (ltr) { + action.putValue(Action.SMALL_ICON, rightIcon); + } else { + action.putValue(Action.SMALL_ICON, leftIcon); + } + } } @@ -517,7 +555,7 @@ private static class HistoryEntry { private String anchor; HistoryEntry(Completion completion, String summary, - String anchor) { + String anchor) { this.completion = completion; this.summary = summary; this.anchor = anchor; @@ -570,28 +608,7 @@ void setCompletion(Completion c, String anchor, class ToolBarBackAction extends AbstractAction { ToolBarBackAction(boolean ltr) { - setIcon(ltr); - - UIManager.addPropertyChangeListener(evt -> { - if (evt.getPropertyName().equals("lookAndFeel")) { - setIcon(ltr); - } - }); - } - - private void setIcon(boolean ltr) { - Icon icon = UIManager.getIcon("autocomplete.leftArrow"); - - if (icon == null) { - if (ltr) - icon = new ImageIcon(getClass().getResource("arrow_left.png")); - else - icon = new ImageIcon(getClass().getResource("arrow_right.png")); - - UIManager.put("autocomplete.leftArrow", icon); - } - - putValue(Action.SMALL_ICON, icon); + setIcon(this, ltr, "back"); } @Override @@ -608,7 +625,6 @@ public void actionPerformed(ActionEvent e) { setActionStates(); } } - } @@ -618,28 +634,7 @@ public void actionPerformed(ActionEvent e) { class ToolBarForwardAction extends AbstractAction { ToolBarForwardAction(boolean ltr) { - setIcon(ltr); - - UIManager.addPropertyChangeListener(evt -> { - if (evt.getPropertyName().equals("lookAndFeel")) { - setIcon(ltr); - } - }); - } - - void setIcon(boolean ltr) { - Icon icon = UIManager.getIcon("autocomplete.rightArrow"); - - if (icon == null) { - if (ltr) - icon = new ImageIcon(getClass().getResource("arrow_right.png")); - else - icon = new ImageIcon(getClass().getResource("arrow_left.png")); - - UIManager.put("autocomplete.rightArrow", icon); - } - - putValue(Action.SMALL_ICON, icon); + setIcon(this, ltr, "forward"); } @Override @@ -656,7 +651,6 @@ public void actionPerformed(ActionEvent e) { setActionStates(); } } - } From 6397e47ecbd569e8949a9b9ea0ae333780dc5da2 Mon Sep 17 00:00:00 2001 From: Mattia Marelli Date: Sun, 4 May 2025 10:06:20 +0200 Subject: [PATCH 3/5] Some fix --- .../autocomplete/AutoCompleteDescWindow.java | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/AutoComplete/src/main/java/org/fife/ui/autocomplete/AutoCompleteDescWindow.java b/AutoComplete/src/main/java/org/fife/ui/autocomplete/AutoCompleteDescWindow.java index 5646806..ee028e2 100644 --- a/AutoComplete/src/main/java/org/fife/ui/autocomplete/AutoCompleteDescWindow.java +++ b/AutoComplete/src/main/java/org/fife/ui/autocomplete/AutoCompleteDescWindow.java @@ -63,12 +63,12 @@ class AutoCompleteDescWindow extends JWindow implements HyperlinkListener, /** * Action that goes to the previous description displayed. */ - private Action backAction; + private final Action backAction; /** * Action that goes to the next description displayed. */ - private Action forwardAction; + private final Action forwardAction; /** * History of descriptions displayed. @@ -508,27 +508,26 @@ public void updateUI() { ((JPanel) getContentPane()).setBorder(TipUtil.getToolTipBorder()); ComponentOrientation orientation = ac.getTextComponentOrientation(); - setIcon(forwardAction, orientation.isLeftToRight(), "forward"); - setIcon(backAction, orientation.isLeftToRight(), "back"); + setArrowIcon(forwardAction, orientation.isLeftToRight(), "forward"); + setArrowIcon(backAction, orientation.isLeftToRight(), "back"); } - private static void setIcon(Action action, boolean ltr, String type) { + private static void setArrowIcon(Action action, boolean ltr, String type) { Icon leftIcon = UIManager.getIcon("autocomplete.leftArrow"); Icon rightIcon = UIManager.getIcon("autocomplete.rightArrow"); if (leftIcon == null) { - String leftIc = ltr ? "arrow_left.png" : "arrow_right.png"; - leftIcon = new ImageIcon(requireNonNull(AutoCompleteDescWindow.class.getResource(leftIc))); + URL leftIc = AutoCompleteDescWindow.class.getResource("arrow_left.png"); + leftIcon = new ImageIcon(requireNonNull(leftIc)); UIManager.put("autocomplete.leftArrow", leftIcon); } if (rightIcon == null) { - String rightIc = ltr ? "arrow_right.png" : "arrow_left.png"; - rightIcon = new ImageIcon(requireNonNull(AutoCompleteDescWindow.class.getResource(rightIc))); + URL rightIc = AutoCompleteDescWindow.class.getResource("arrow_right.png"); + rightIcon = new ImageIcon(requireNonNull(rightIc)); UIManager.put("autocomplete.leftArrow", leftIcon); } - if ("back".equals(type)) { if (ltr) { action.putValue(Action.SMALL_ICON, leftIcon); @@ -541,7 +540,7 @@ private static void setIcon(Action action, boolean ltr, String type) { } else { action.putValue(Action.SMALL_ICON, leftIcon); } - } + } else throw new IllegalArgumentException(); } @@ -608,7 +607,7 @@ void setCompletion(Completion c, String anchor, class ToolBarBackAction extends AbstractAction { ToolBarBackAction(boolean ltr) { - setIcon(this, ltr, "back"); + setArrowIcon(this, ltr, "back"); } @Override @@ -634,7 +633,7 @@ public void actionPerformed(ActionEvent e) { class ToolBarForwardAction extends AbstractAction { ToolBarForwardAction(boolean ltr) { - setIcon(this, ltr, "forward"); + setArrowIcon(this, ltr, "forward"); } @Override From 9cc26b7c2a92bc483ef78bae04ee10821709b4e2 Mon Sep 17 00:00:00 2001 From: Mattia Marelli <75846162+sesquialtera87@users.noreply.github.com> Date: Sun, 4 May 2025 23:39:09 +0200 Subject: [PATCH 4/5] Fix wrong UI property name --- .../java/org/fife/ui/autocomplete/AutoCompleteDescWindow.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AutoComplete/src/main/java/org/fife/ui/autocomplete/AutoCompleteDescWindow.java b/AutoComplete/src/main/java/org/fife/ui/autocomplete/AutoCompleteDescWindow.java index ee028e2..e0704e6 100644 --- a/AutoComplete/src/main/java/org/fife/ui/autocomplete/AutoCompleteDescWindow.java +++ b/AutoComplete/src/main/java/org/fife/ui/autocomplete/AutoCompleteDescWindow.java @@ -525,7 +525,7 @@ private static void setArrowIcon(Action action, boolean ltr, String type) { if (rightIcon == null) { URL rightIc = AutoCompleteDescWindow.class.getResource("arrow_right.png"); rightIcon = new ImageIcon(requireNonNull(rightIc)); - UIManager.put("autocomplete.leftArrow", leftIcon); + UIManager.put("autocomplete.rightArrow", leftIcon); } if ("back".equals(type)) { From e3a4370cd9cb57948b16401ab43f984d85754cfb Mon Sep 17 00:00:00 2001 From: Mattia Marelli <75846162+sesquialtera87@users.noreply.github.com> Date: Sun, 4 May 2025 23:43:01 +0200 Subject: [PATCH 5/5] Fix UI property value --- .../java/org/fife/ui/autocomplete/AutoCompleteDescWindow.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AutoComplete/src/main/java/org/fife/ui/autocomplete/AutoCompleteDescWindow.java b/AutoComplete/src/main/java/org/fife/ui/autocomplete/AutoCompleteDescWindow.java index e0704e6..943f9b0 100644 --- a/AutoComplete/src/main/java/org/fife/ui/autocomplete/AutoCompleteDescWindow.java +++ b/AutoComplete/src/main/java/org/fife/ui/autocomplete/AutoCompleteDescWindow.java @@ -525,7 +525,7 @@ private static void setArrowIcon(Action action, boolean ltr, String type) { if (rightIcon == null) { URL rightIc = AutoCompleteDescWindow.class.getResource("arrow_right.png"); rightIcon = new ImageIcon(requireNonNull(rightIc)); - UIManager.put("autocomplete.rightArrow", leftIcon); + UIManager.put("autocomplete.rightArrow", rightIcon); } if ("back".equals(type)) {