mirror of
https://github.com/xpipe-io/xpipe.git
synced 2026-08-25 10:46:37 +00:00
Rework script handling for enabled state
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
package io.xpipe.app.comp.base;
|
||||
|
||||
import atlantafx.base.controls.ToggleSwitch;
|
||||
import io.xpipe.app.comp.RegionBuilder;
|
||||
import io.xpipe.app.core.AppI18n;
|
||||
import io.xpipe.app.platform.LabelGraphic;
|
||||
import io.xpipe.app.platform.PlatformThread;
|
||||
import javafx.beans.binding.Bindings;
|
||||
import javafx.beans.property.Property;
|
||||
import javafx.beans.property.ReadOnlyObjectWrapper;
|
||||
import javafx.beans.value.ObservableValue;
|
||||
import javafx.css.PseudoClass;
|
||||
import javafx.geometry.Pos;
|
||||
import javafx.scene.control.CheckBox;
|
||||
import javafx.scene.input.KeyCode;
|
||||
import javafx.scene.input.KeyEvent;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Value;
|
||||
|
||||
@Value
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class CheckBoxComp extends RegionBuilder<CheckBox> {
|
||||
|
||||
Property<Boolean> selected;
|
||||
ObservableValue<String> name;
|
||||
ObservableValue<LabelGraphic> graphic;
|
||||
|
||||
@Override
|
||||
public CheckBox createSimple() {
|
||||
var s = new CheckBox();
|
||||
s.setOnAction(event -> event.consume());
|
||||
s.setAlignment(Pos.CENTER);
|
||||
s.getStyleClass().add("check-box-comp");
|
||||
s.setSelected(selected.getValue() != null ? selected.getValue() : false);
|
||||
s.selectedProperty().addListener((observable, oldValue, newValue) -> {
|
||||
selected.setValue(newValue);
|
||||
});
|
||||
selected.addListener((observable, oldValue, newValue) -> {
|
||||
PlatformThread.runLaterIfNeeded(() -> {
|
||||
s.setSelected(newValue);
|
||||
});
|
||||
});
|
||||
if (name != null) {
|
||||
name.subscribe(value -> {
|
||||
PlatformThread.runLaterIfNeeded(() -> {
|
||||
s.setText(value);
|
||||
});
|
||||
});
|
||||
}
|
||||
if (graphic != null) {
|
||||
graphic.subscribe(value -> {
|
||||
PlatformThread.runLaterIfNeeded(() -> {
|
||||
s.setGraphic(value.createGraphicNode());
|
||||
});
|
||||
});
|
||||
s.setAlignment(Pos.CENTER);
|
||||
s.pseudoClassStateChanged(PseudoClass.getPseudoClass("has-graphic"), true);
|
||||
}
|
||||
return s;
|
||||
}
|
||||
}
|
||||
@@ -73,14 +73,6 @@ public class ToggleSwitchComp extends RegionBuilder<ToggleSwitch> {
|
||||
s.setAlignment(Pos.CENTER);
|
||||
s.pseudoClassStateChanged(PseudoClass.getPseudoClass("has-graphic"), true);
|
||||
}
|
||||
|
||||
s.setOnKeyPressed(keyEvent -> {
|
||||
if (keyEvent.getCode() == KeyCode.SPACE || keyEvent.getCode() == KeyCode.ENTER) {
|
||||
s.setSelected(!s.isSelected());
|
||||
keyEvent.consume();
|
||||
}
|
||||
});
|
||||
|
||||
return s;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,15 +2,18 @@ package io.xpipe.app.ext;
|
||||
|
||||
import io.xpipe.app.platform.OptionsBuilder;
|
||||
|
||||
import io.xpipe.app.storage.DataStoreEntry;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Value;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
|
||||
@Value
|
||||
@AllArgsConstructor
|
||||
public class GuiDialog {
|
||||
|
||||
OptionsBuilder options;
|
||||
Runnable onFinish;
|
||||
Consumer<DataStoreEntry> onFinish;
|
||||
|
||||
public GuiDialog(OptionsBuilder options) {
|
||||
this.options = options;
|
||||
|
||||
@@ -82,7 +82,7 @@ public class StoreCreationComp extends ModalOverlayContentComp {
|
||||
model.getFinished().addListener((observable, oldValue, newValue) -> {
|
||||
if (newValue && d.equals(activeDialog.get())) {
|
||||
ThreadHelper.runAsync(() -> {
|
||||
d.getOnFinish().run();
|
||||
d.getOnFinish().accept(model.getEntry().getValue());
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package io.xpipe.ext.base.script;
|
||||
|
||||
import io.xpipe.app.comp.BaseRegionBuilder;
|
||||
import io.xpipe.app.comp.RegionBuilder;
|
||||
import io.xpipe.app.comp.base.CheckBoxComp;
|
||||
import io.xpipe.app.comp.base.ListSelectorComp;
|
||||
import io.xpipe.app.core.AppI18n;
|
||||
import io.xpipe.app.ext.*;
|
||||
@@ -19,6 +21,7 @@ import javafx.beans.property.*;
|
||||
import javafx.beans.value.ObservableValue;
|
||||
import javafx.collections.FXCollections;
|
||||
|
||||
import javafx.scene.control.CheckBox;
|
||||
import lombok.SneakyThrows;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -42,13 +45,15 @@ public class ScriptStoreProvider implements DataStoreProvider {
|
||||
enabled.set(s.isEnabled());
|
||||
});
|
||||
|
||||
var toggle = StoreToggleComp.<StatefulDataStore<EnabledStoreState>>enableToggle(
|
||||
null, sec, enabled, (s, aBoolean) -> {
|
||||
var state = s.getState().toBuilder().enabled(aBoolean).build();
|
||||
s.setState(state);
|
||||
});
|
||||
var checkbox = new CheckBoxComp(enabled, null, null);
|
||||
checkbox.describe(d -> d.nameKey("enabled"));
|
||||
enabled.addListener((observable, oldValue, newValue) -> {
|
||||
ScriptStore st = sec.getWrapper().getEntry().getStore().asNeeded();
|
||||
var state = st.getState().toBuilder().enabled(newValue).build();
|
||||
st.setState(state);
|
||||
});
|
||||
|
||||
return StoreEntryComp.create(sec, toggle, preferLarge);
|
||||
return StoreEntryComp.create(sec, checkbox, preferLarge);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -135,7 +140,7 @@ public class ScriptStoreProvider implements DataStoreProvider {
|
||||
var selectorComp = new ListSelectorComp<>(
|
||||
FXCollections.observableList(vals), name, ignored -> null, selectedExecTypes, v -> false, () -> false);
|
||||
|
||||
return new OptionsBuilder()
|
||||
return new GuiDialog(new OptionsBuilder()
|
||||
.nameAndDescription("scriptSourceType")
|
||||
.sub(textSourceChoice.build(), textSource)
|
||||
.nameAndDescription("executionType")
|
||||
@@ -165,8 +170,12 @@ public class ScriptStoreProvider implements DataStoreProvider {
|
||||
.shellScript(selectedExecTypes.contains(3))
|
||||
.build();
|
||||
},
|
||||
store)
|
||||
.buildDialog();
|
||||
store), (finished) -> {
|
||||
if (entry == null) {
|
||||
finished.setStorePersistentState(EnabledStoreState.builder().enabled(true).build());
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user