summaryrefslogtreecommitdiff
path: root/src/main/java/cuchaz/enigma/gui/util
diff options
context:
space:
mode:
authorGravatar 2xsaiko2020-04-29 18:24:29 +0200
committerGravatar GitHub2020-04-29 12:24:29 -0400
commit0eff06096bc4852f2580f20a0c5bf970ecf66987 (patch)
treefc6c996c66abde850aa8598a24da134c37d1d531 /src/main/java/cuchaz/enigma/gui/util
parentThis doesn't need to be scaled, potentially fixes circular class loading cras... (diff)
downloadenigma-fork-0eff06096bc4852f2580f20a0c5bf970ecf66987.tar.gz
enigma-fork-0eff06096bc4852f2580f20a0c5bf970ecf66987.tar.xz
enigma-fork-0eff06096bc4852f2580f20a0c5bf970ecf66987.zip
Rewrite search dialog (#233)
* Fix searching * Make buttons use localization * Fix rename field opening when pressing shift+space * Tweak search algorithm * Add a bit of documentation * Remove duplicate example line * Use max() when building the inner map instead of overwriting the old value * Keep search dialog state * Formatting * Fix cursor key selection not scrolling to selected item * Don't set font size * Rename close0 to exit * Fix wrong scrolling when selecting search dialog entry
Diffstat (limited to 'src/main/java/cuchaz/enigma/gui/util')
-rw-r--r--src/main/java/cuchaz/enigma/gui/util/AbstractListCellRenderer.java75
-rw-r--r--src/main/java/cuchaz/enigma/gui/util/ScaleUtil.java6
2 files changed, 81 insertions, 0 deletions
diff --git a/src/main/java/cuchaz/enigma/gui/util/AbstractListCellRenderer.java b/src/main/java/cuchaz/enigma/gui/util/AbstractListCellRenderer.java
new file mode 100644
index 0000000..e071fe1
--- /dev/null
+++ b/src/main/java/cuchaz/enigma/gui/util/AbstractListCellRenderer.java
@@ -0,0 +1,75 @@
1package cuchaz.enigma.gui.util;
2
3import java.awt.Component;
4import java.awt.event.MouseEvent;
5
6import javax.swing.*;
7import javax.swing.border.Border;
8
9public abstract class AbstractListCellRenderer<E> extends JPanel implements ListCellRenderer<E> {
10
11 private static final Border NO_FOCUS_BORDER = BorderFactory.createEmptyBorder(1, 1, 1, 1);
12
13 public AbstractListCellRenderer() {
14 setBorder(getNoFocusBorder());
15 }
16
17 protected Border getNoFocusBorder() {
18 Border border = UIManager.getLookAndFeel().getDefaults().getBorder("List.List.cellNoFocusBorder");
19 if (border == null) {
20 return NO_FOCUS_BORDER;
21 }
22 return border;
23 }
24
25 protected Border getBorder(boolean isSelected, boolean cellHasFocus) {
26 Border b = null;
27 if (cellHasFocus) {
28 UIDefaults defaults = UIManager.getLookAndFeel().getDefaults();
29 if (isSelected) {
30 b = defaults.getBorder("List.focusSelectedCellHighlightBorder");
31 }
32 if (b == null) {
33 b = defaults.getBorder("List.focusCellHighlightBorder");
34 }
35 } else {
36 b = getNoFocusBorder();
37 }
38 return b;
39 }
40
41 public abstract void updateUiForEntry(JList<? extends E> list, E value, int index, boolean isSelected, boolean cellHasFocus);
42
43 @Override
44 public Component getListCellRendererComponent(JList<? extends E> list, E value, int index, boolean isSelected, boolean cellHasFocus) {
45 updateUiForEntry(list, value, index, isSelected, cellHasFocus);
46
47 if (isSelected) {
48 setBackground(list.getSelectionBackground());
49 setForeground(list.getSelectionForeground());
50 } else {
51 setBackground(list.getBackground());
52 setForeground(list.getForeground());
53 }
54
55 setEnabled(list.isEnabled());
56 setFont(list.getFont());
57
58 setBorder(getBorder(isSelected, cellHasFocus));
59
60 // This isn't the width of the cell, but it's close enough for where it's needed (getComponentAt in getToolTipText)
61 setSize(list.getWidth(), getPreferredSize().height);
62
63 return this;
64 }
65
66 @Override
67 public String getToolTipText(MouseEvent event) {
68 Component c = getComponentAt(event.getPoint());
69 if (c instanceof JComponent) {
70 return ((JComponent) c).getToolTipText();
71 }
72 return getToolTipText();
73 }
74
75}
diff --git a/src/main/java/cuchaz/enigma/gui/util/ScaleUtil.java b/src/main/java/cuchaz/enigma/gui/util/ScaleUtil.java
index 8bc826f..9f722e9 100644
--- a/src/main/java/cuchaz/enigma/gui/util/ScaleUtil.java
+++ b/src/main/java/cuchaz/enigma/gui/util/ScaleUtil.java
@@ -7,7 +7,9 @@ import java.lang.reflect.Field;
7import java.util.ArrayList; 7import java.util.ArrayList;
8import java.util.List; 8import java.util.List;
9 9
10import javax.swing.BorderFactory;
10import javax.swing.UIManager; 11import javax.swing.UIManager;
12import javax.swing.border.Border;
11 13
12import com.github.swingdpi.UiDefaultsScaler; 14import com.github.swingdpi.UiDefaultsScaler;
13import com.github.swingdpi.plaf.BasicTweaker; 15import com.github.swingdpi.plaf.BasicTweaker;
@@ -69,6 +71,10 @@ public class ScaleUtil {
69 return (int) (i * getScaleFactor()); 71 return (int) (i * getScaleFactor());
70 } 72 }
71 73
74 public static Border createEmptyBorder(int top, int left, int bottom, int right) {
75 return BorderFactory.createEmptyBorder(scale(top), scale(left), scale(bottom), scale(right));
76 }
77
72 public static int invert(int i) { 78 public static int invert(int i) {
73 return (int) (i / getScaleFactor()); 79 return (int) (i / getScaleFactor());
74 } 80 }