Skip to content

Commit 1546196

Browse files
focus menus search field on parent selection
make EnigmaMenu extend MenuElement add SearchableElement add AbstractSearchableEnigmaMenu and make all menus except SearchMenusMenu extend it
1 parent dac849a commit 1546196

24 files changed

+173
-41
lines changed

enigma-swing/src/main/java/org/quiltmc/enigma/gui/element/PlaceheldTextField.java

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,28 @@
11
package org.quiltmc.enigma.gui.element;
22

3+
import org.quiltmc.enigma.util.Utils;
4+
35
import javax.annotation.Nullable;
46
import javax.swing.JTextField;
7+
import javax.swing.MenuElement;
8+
import javax.swing.MenuSelectionManager;
59
import javax.swing.text.Document;
610
import java.awt.Color;
11+
import java.awt.Component;
712
import java.awt.Dimension;
813
import java.awt.Graphics;
914
import java.awt.Graphics2D;
1015
import java.awt.Insets;
1116
import java.awt.RenderingHints;
1217
import java.awt.Toolkit;
18+
import java.awt.event.KeyEvent;
19+
import java.awt.event.MouseEvent;
1320
import java.util.Map;
1421

1522
/**
1623
* A text field that displays placeholder text when it's empty.
1724
*/
18-
public class PlaceheldTextField extends JTextField {
25+
public class PlaceheldTextField extends JTextField implements MenuElement {
1926
private static final String DESKTOP_FONT_HINTS_KEY = "awt.font.desktophints";
2027

2128
@Nullable
@@ -98,7 +105,8 @@ protected void paintComponent(Graphics graphics) {
98105
}
99106
}
100107

101-
graphics.setColor(this.placeholderColor == null ? this.getForeground() : this.placeholderColor);
108+
Utils.findFirstNonNull(this.placeholderColor, this.getDisabledTextColor(), this.getForeground())
109+
.ifPresent(graphics::setColor);
102110
graphics.setFont(this.getFont());
103111

104112
final Insets insets = this.getInsets();
@@ -116,9 +124,28 @@ public void setPlaceholder(@Nullable String placeholder) {
116124

117125
/**
118126
* @param color the placeholder color for this field; if {@code null}, the
119-
* {@linkplain #getForeground() foreground color} will be used
127+
* {@linkplain #getDisabledTextColor() disabled color} will be used
120128
*/
121129
public void setPlaceholderColor(@Nullable Color color) {
122130
this.placeholderColor = color;
123131
}
132+
133+
@Override
134+
public void processMouseEvent(MouseEvent event, MenuElement[] path, MenuSelectionManager manager) { }
135+
136+
@Override
137+
public void processKeyEvent(KeyEvent event, MenuElement[] path, MenuSelectionManager manager) { }
138+
139+
@Override
140+
public void menuSelectionChanged(boolean isIncluded) { }
141+
142+
@Override
143+
public MenuElement[] getSubElements() {
144+
return new MenuElement[0];
145+
}
146+
147+
@Override
148+
public Component getComponent() {
149+
return this;
150+
}
124151
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package org.quiltmc.enigma.gui.element;
2+
3+
import javax.swing.MenuElement;
4+
import java.util.stream.Stream;
5+
6+
public interface SearchableElement extends MenuElement {
7+
Stream<String> streamSearchAliases();
8+
9+
void onSearchClicked();
10+
}

enigma-swing/src/main/java/org/quiltmc/enigma/gui/element/menu_bar/AbstractEnigmaMenu.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44

55
import javax.swing.JMenu;
66

7-
public class AbstractEnigmaMenu extends JMenu implements EnigmaMenu {
7+
public abstract class AbstractEnigmaMenu extends JMenu implements EnigmaMenu {
88
protected final Gui gui;
99

10-
protected AbstractEnigmaMenu(Gui gui) {
10+
public AbstractEnigmaMenu(Gui gui) {
1111
this.gui = gui;
1212
}
1313

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package org.quiltmc.enigma.gui.element.menu_bar;
2+
3+
import org.quiltmc.enigma.gui.Gui;
4+
import org.quiltmc.enigma.gui.element.SearchableElement;
5+
6+
import java.util.stream.Stream;
7+
8+
public abstract class AbstractSearchableEnigmaMenu extends AbstractEnigmaMenu implements SearchableElement {
9+
protected AbstractSearchableEnigmaMenu(Gui gui) {
10+
super(gui);
11+
}
12+
13+
@Override
14+
public Stream<String> streamSearchAliases() {
15+
return Stream.of(this.getText());
16+
}
17+
18+
@Override
19+
public void onSearchClicked() {
20+
this.setSelected(true);
21+
this.doClick();
22+
}
23+
}

enigma-swing/src/main/java/org/quiltmc/enigma/gui/element/menu_bar/CollabMenu.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
import java.io.IOException;
1616
import java.util.Arrays;
1717

18-
public class CollabMenu extends AbstractEnigmaMenu {
18+
public class CollabMenu extends AbstractSearchableEnigmaMenu {
1919
private final JMenuItem connectItem = new JMenuItem();
2020
private final JMenuItem startServerItem = new JMenuItem();
2121

enigma-swing/src/main/java/org/quiltmc/enigma/gui/element/menu_bar/DecompilerMenu.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import javax.swing.JMenuItem;
1111
import javax.swing.JRadioButtonMenuItem;
1212

13-
public class DecompilerMenu extends AbstractEnigmaMenu {
13+
public class DecompilerMenu extends AbstractSearchableEnigmaMenu {
1414
private final JMenuItem decompilerSettingsItem = new JMenuItem();
1515

1616
public DecompilerMenu(Gui gui) {

enigma-swing/src/main/java/org/quiltmc/enigma/gui/element/menu_bar/DevMenu.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
import java.io.StringWriter;
2727
import java.nio.file.Files;
2828

29-
public class DevMenu extends AbstractEnigmaMenu {
29+
public class DevMenu extends AbstractSearchableEnigmaMenu {
3030
private final JCheckBoxMenuItem showMappingSourcePluginItem = new JCheckBoxMenuItem();
3131
private final JCheckBoxMenuItem debugTokenHighlightsItem = new JCheckBoxMenuItem();
3232
private final JCheckBoxMenuItem logClientPacketsItem = new JCheckBoxMenuItem();

enigma-swing/src/main/java/org/quiltmc/enigma/gui/element/menu_bar/EnigmaMenu.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@
22

33
import org.quiltmc.enigma.gui.ConnectionState;
44

5-
public interface EnigmaMenu {
6-
default void setKeyBinds() {}
5+
import javax.swing.MenuElement;
76

8-
default void updateState(boolean jarOpen, ConnectionState state) {}
7+
public interface EnigmaMenu extends MenuElement {
8+
default void setKeyBinds() { }
99

10-
default void retranslate() {}
10+
default void updateState(boolean jarOpen, ConnectionState state) { }
11+
12+
default void retranslate() { }
1113
}

enigma-swing/src/main/java/org/quiltmc/enigma/gui/element/menu_bar/HelpMenu.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
import javax.swing.JMenuItem;
99

10-
public class HelpMenu extends AbstractEnigmaMenu {
10+
public class HelpMenu extends AbstractSearchableEnigmaMenu {
1111
private final JMenuItem aboutItem = new JMenuItem();
1212
private final JMenuItem githubItem = new JMenuItem();
1313
private final SearchMenusMenu searchItem;

enigma-swing/src/main/java/org/quiltmc/enigma/gui/element/menu_bar/MenuBar.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
import java.util.ArrayList;
1010
import java.util.List;
11+
import java.util.stream.Stream;
1112

1213
public class MenuBar {
1314
private final List<EnigmaMenu> menus = new ArrayList<>();
@@ -77,4 +78,8 @@ public CollabMenu getCollabMenu() {
7778
public FileMenu getFileMenu() {
7879
return this.fileMenu;
7980
}
81+
82+
public Stream<EnigmaMenu> streamMenus() {
83+
return this.menus.stream();
84+
}
8085
}

0 commit comments

Comments
 (0)