Inceptum/launcher-gtk/src/main/java/io/gitlab/jfronny/inceptum/gtk/control/IRow.java

87 lines
2.8 KiB
Java

package io.gitlab.jfronny.inceptum.gtk.control;
import io.gitlab.jfronny.inceptum.gtk.util.I18n;
import org.gtk.gtk.*;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.PropertyKey;
import java.util.function.*;
public class IRow extends Box {
public IRow(@PropertyKey(resourceBundle = I18n.BUNDLE) String title, @PropertyKey(resourceBundle = I18n.BUNDLE) @Nullable String subtitle, Object... args) {
super(Orientation.HORIZONTAL, 40);
margin = 8;
Widget head;
ILabel lab = new ILabel(title, args);
lab.halign = Align.START;
if (subtitle != null) {
Box headB = new Box(Orientation.VERTICAL, 0);
headB.append(lab);
ILabel lab1 = new ILabel(subtitle, ILabel.Mode.SUBTITLE, args);
lab1.halign = Align.START;
headB.append(lab1);
head = headB;
} else {
head = lab;
}
head.halign = Align.START;
head.valign = Align.CENTER;
append(head);
}
public Button setButton(@PropertyKey(resourceBundle = I18n.BUNDLE) String text, Button.Clicked action) {
Button btn = Button.newWithLabel(I18n.get(text));
packSmallEnd(btn);
btn.onClicked(action);
return btn;
}
public DropDown setDropdown(String[] options, int defaultIndex, IntConsumer changed) {
DropDown btn = new DropDown(new StringList(options), null);
packSmallEnd(btn);
btn.selected = defaultIndex;
btn.onNotify("selected", pspec -> {
changed.accept(btn.selected);
});
btn.expression = new PropertyExpression(StringObject.type, null, "string");
return btn;
}
public Switch setSwitch(boolean value, Consumer<Boolean> changed) {
Switch btn = new Switch();
packSmallEnd(btn);
btn.active = value;
btn.onStateSet(state -> {
changed.accept(state);
return false;
});
return btn;
}
public SpinButton setSpinButton(double value, double min, double max, double step, DoubleConsumer changed) {
SpinButton btn = SpinButton.newWithRange(min, max, step);
packSmallEnd(btn);
btn.value = value;
btn.onValueChanged(() -> changed.accept(btn.value));
return btn;
}
public Entry setEntry(String value, Consumer<String> changed) {
Entry entry = new Entry();
entry.text = value == null ? "" : value;
entry.hexpand = true;
entry.valign = Align.CENTER;
entry.halign = Align.FILL;
entry.onChanged(() -> changed.accept(entry.text));
append(entry);
return entry;
}
private void packSmallEnd(Widget widget) {
firstChild.hexpand = true;
widget.valign = Align.CENTER;
widget.halign = Align.END;
append(widget);
}
}