GTK: Support search in IRow dropdown
This commit is contained in:
parent
fe0c23b97b
commit
5c9ce78ebf
|
@ -1,49 +0,0 @@
|
||||||
package io.gitlab.jfronny.inceptum.gtk.control;
|
|
||||||
|
|
||||||
import io.gitlab.jfronny.commons.throwable.ThrowingRunnable;
|
|
||||||
import io.gitlab.jfronny.inceptum.gtk.menu.MenuBuilder;
|
|
||||||
import org.gtk.gtk.MenuButton;
|
|
||||||
|
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.function.*;
|
|
||||||
|
|
||||||
public class Dropdown<T> extends MenuButton {
|
|
||||||
private final T[] source;
|
|
||||||
private final List<Consumer<T>> onChange = new LinkedList<>();
|
|
||||||
private int selected;
|
|
||||||
|
|
||||||
public Dropdown(T[] source, int def, Function<T, String> stringify) {
|
|
||||||
this.source = source;
|
|
||||||
MenuBuilder builder = MenuBuilder.create(this, "nil");
|
|
||||||
this.selected = def;
|
|
||||||
for (int i = 0; i < source.length; i++) {
|
|
||||||
String n = stringify.apply(source[i]);
|
|
||||||
if (def == i) label = n;
|
|
||||||
builder.literalButton("" + i, n, new LB(i, n));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onChanged(Consumer<T> action) {
|
|
||||||
onChange.add(action);
|
|
||||||
}
|
|
||||||
|
|
||||||
private class LB implements ThrowingRunnable<RuntimeException> {
|
|
||||||
private final int i;
|
|
||||||
private final String n;
|
|
||||||
|
|
||||||
public LB(int i, String n) {
|
|
||||||
this.i = i;
|
|
||||||
this.n = n;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void run() throws RuntimeException {
|
|
||||||
if (selected != i) {
|
|
||||||
selected = i;
|
|
||||||
for (Consumer<T> action : onChange) action.accept(source[i]);
|
|
||||||
Dropdown.this.label = n;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -48,17 +48,21 @@ public class IRow extends Box {
|
||||||
btn.onNotify("selected", pspec -> {
|
btn.onNotify("selected", pspec -> {
|
||||||
changed.accept(btn.selected);
|
changed.accept(btn.selected);
|
||||||
});
|
});
|
||||||
|
btn.expression = new PropertyExpression(StringObject.type, null, "string");
|
||||||
append(btn);
|
append(btn);
|
||||||
return btn;
|
return btn;
|
||||||
}
|
}
|
||||||
|
|
||||||
public CheckButton setCheckbox(@PropertyKey(resourceBundle = I18n.BUNDLE) String text, boolean value, Consumer<Boolean> changed) {
|
public Switch setCheckbox(boolean value, Consumer<Boolean> changed) {
|
||||||
firstChild.hexpand = true;
|
firstChild.hexpand = true;
|
||||||
CheckButton btn = CheckButton.newWithLabel(I18n.get(text));
|
Switch btn = new Switch();
|
||||||
btn.valign = Align.CENTER;
|
btn.valign = Align.CENTER;
|
||||||
btn.halign = Align.END;
|
btn.halign = Align.END;
|
||||||
btn.active = value;
|
btn.active = value;
|
||||||
btn.onToggled(() -> changed.accept(btn.active));
|
btn.onStateSet(state -> {
|
||||||
|
changed.accept(state);
|
||||||
|
return false;
|
||||||
|
});
|
||||||
append(btn);
|
append(btn);
|
||||||
return btn;
|
return btn;
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,7 @@ public class LauncherSettingsWindow extends Window {
|
||||||
{
|
{
|
||||||
IRow row = new IRow("settings.snapshots", "settings.snapshots.subtitle");
|
IRow row = new IRow("settings.snapshots", "settings.snapshots.subtitle");
|
||||||
listBox.append(row);
|
listBox.append(row);
|
||||||
row.setCheckbox("settings.snapshots", InceptumConfig.snapshots, b -> {
|
row.setCheckbox(InceptumConfig.snapshots, b -> {
|
||||||
InceptumConfig.snapshots = b;
|
InceptumConfig.snapshots = b;
|
||||||
InceptumConfig.saveConfig();
|
InceptumConfig.saveConfig();
|
||||||
});
|
});
|
||||||
|
|
|
@ -52,7 +52,7 @@ public class GeneralTab extends SettingsTab {
|
||||||
section("instance.settings.general.game", section -> {
|
section("instance.settings.general.game", section -> {
|
||||||
{
|
{
|
||||||
var ref = new Object() {
|
var ref = new Object() {
|
||||||
CheckButton fabricEnabled = null;
|
Switch fabricEnabled = null;
|
||||||
Runnable versionChanged = null;
|
Runnable versionChanged = null;
|
||||||
DropDown fabricVersion = null;
|
DropDown fabricVersion = null;
|
||||||
String defaultFabric = null;
|
String defaultFabric = null;
|
||||||
|
@ -74,11 +74,11 @@ public class GeneralTab extends SettingsTab {
|
||||||
: versions[i];
|
: versions[i];
|
||||||
instance.writeMeta();
|
instance.writeMeta();
|
||||||
ref.versionChanged.run();
|
ref.versionChanged.run();
|
||||||
});
|
}).enableSearch = true;
|
||||||
var fabricRow = section.row("instance.settings.general.game.fabric.enabled", "instance.settings.general.game.fabric.enabled.subtitle");
|
var fabricRow = section.row("instance.settings.general.game.fabric.enabled", "instance.settings.general.game.fabric.enabled.subtitle");
|
||||||
var loaderRow = section.row("instance.settings.general.game.fabric.version", "instance.settings.general.game.fabric.version.subtitle");
|
var loaderRow = section.row("instance.settings.general.game.fabric.version", "instance.settings.general.game.fabric.version.subtitle");
|
||||||
loaderRow.visible = instance.isFabric;
|
loaderRow.visible = instance.isFabric;
|
||||||
ref.fabricEnabled = fabricRow.setCheckbox("instance.settings.general.game.fabric.enabled", instance.isFabric, bl -> {
|
ref.fabricEnabled = fabricRow.setCheckbox(instance.isFabric, bl -> {
|
||||||
if (bl) {
|
if (bl) {
|
||||||
if (ref.fabricVersions != null && ref.fabricVersions.length != 0 && ref.defaultFabric != null) {
|
if (ref.fabricVersions != null && ref.fabricVersions.length != 0 && ref.defaultFabric != null) {
|
||||||
instance.meta.gameVersion = GameVersionParser.createVersionWithFabric(instance.gameVersion, ref.defaultFabric);
|
instance.meta.gameVersion = GameVersionParser.createVersionWithFabric(instance.gameVersion, ref.defaultFabric);
|
||||||
|
@ -116,6 +116,7 @@ public class GeneralTab extends SettingsTab {
|
||||||
instance.meta.gameVersion = i == -1 ? instance.gameVersion : GameVersionParser.createVersionWithFabric(instance.gameVersion, ref.fabricVersions[i]);
|
instance.meta.gameVersion = i == -1 ? instance.gameVersion : GameVersionParser.createVersionWithFabric(instance.gameVersion, ref.fabricVersions[i]);
|
||||||
instance.writeMeta();
|
instance.writeMeta();
|
||||||
});
|
});
|
||||||
|
ref.fabricVersion.enableSearch = true;
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
var row = section.row("instance.settings.general.game.java", "instance.settings.general.game.java.subtitle");
|
var row = section.row("instance.settings.general.game.java", "instance.settings.general.game.java.subtitle");
|
||||||
|
|
|
@ -9,7 +9,7 @@ menu.account.new=New
|
||||||
menu.file=File
|
menu.file=File
|
||||||
menu.file.exit=Exit
|
menu.file.exit=Exit
|
||||||
menu.file.new=New Instance
|
menu.file.new=New Instance
|
||||||
menu.file.redownload=Re-download resources
|
menu.file.redownload=Re-Download Resources
|
||||||
menu.help=Help
|
menu.help=Help
|
||||||
menu.help.about=About
|
menu.help.about=About
|
||||||
menu.help.log=Log
|
menu.help.log=Log
|
||||||
|
|
Loading…
Reference in New Issue