Move to atlantafx

This commit is contained in:
crschnick 2023-02-14 18:37:13 +00:00
parent 287f3d084d
commit 767941d096
42 changed files with 228 additions and 396 deletions

View file

@ -53,6 +53,7 @@ dependencies {
implementation 'com.jfoenix:jfoenix:9.0.10' implementation 'com.jfoenix:jfoenix:9.0.10'
implementation 'org.controlsfx:controlsfx:11.1.1' implementation 'org.controlsfx:controlsfx:11.1.1'
implementation 'net.synedra:validatorfx:0.3.1' implementation 'net.synedra:validatorfx:0.3.1'
implementation 'io.github.mkpaz:atlantafx-base:1.2.0'
} }
apply from: "$rootDir/gradle/gradle_scripts/junit.gradle" apply from: "$rootDir/gradle/gradle_scripts/junit.gradle"
@ -132,7 +133,7 @@ application {
run { run {
systemProperty 'io.xpipe.app.mode', 'gui' systemProperty 'io.xpipe.app.mode', 'gui'
systemProperty 'io.xpipe.app.dataDir', "$projectDir/local_stage/" systemProperty 'io.xpipe.app.dataDir', "$projectDir/local6/"
systemProperty 'io.xpipe.app.writeLogs', "true" systemProperty 'io.xpipe.app.writeLogs', "true"
systemProperty 'io.xpipe.app.writeSysOut', "true" systemProperty 'io.xpipe.app.writeSysOut', "true"
systemProperty 'io.xpipe.app.developerMode', "true" systemProperty 'io.xpipe.app.developerMode', "true"

View file

@ -5,6 +5,7 @@ import io.xpipe.app.util.Hyperlinks;
import io.xpipe.extension.fxcomps.Comp; import io.xpipe.extension.fxcomps.Comp;
import io.xpipe.extension.fxcomps.CompStructure; import io.xpipe.extension.fxcomps.CompStructure;
import io.xpipe.extension.fxcomps.SimpleCompStructure; import io.xpipe.extension.fxcomps.SimpleCompStructure;
import javafx.geometry.Insets;
import javafx.geometry.Pos; import javafx.geometry.Pos;
import javafx.scene.control.*; import javafx.scene.control.*;
import javafx.scene.layout.StackPane; import javafx.scene.layout.StackPane;
@ -18,6 +19,7 @@ public class ThirdPartyDependencyListComp extends Comp<CompStructure<?>> {
link.setOnAction(e -> { link.setOnAction(e -> {
Hyperlinks.open(t.link()); Hyperlinks.open(t.link());
}); });
tp.setPadding(Insets.EMPTY);
tp.setGraphic(link); tp.setGraphic(link);
tp.setAlignment(Pos.CENTER_LEFT); tp.setAlignment(Pos.CENTER_LEFT);
AppFont.medium(tp); AppFont.medium(tp);
@ -49,6 +51,7 @@ public class ThirdPartyDependencyListComp extends Comp<CompStructure<?>> {
acc.setPrefWidth(500); acc.setPrefWidth(500);
var sp = new ScrollPane(acc); var sp = new ScrollPane(acc);
sp.setFitToWidth(true); sp.setFitToWidth(true);
sp.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);
return new SimpleCompStructure<>(sp); return new SimpleCompStructure<>(sp);
} }
} }

View file

@ -5,6 +5,7 @@ import io.xpipe.extension.fxcomps.CompStructure;
import javafx.beans.value.ObservableValue; import javafx.beans.value.ObservableValue;
import javafx.geometry.Pos; import javafx.geometry.Pos;
import javafx.scene.Node; import javafx.scene.Node;
import javafx.scene.control.Button;
import javafx.scene.control.Label; import javafx.scene.control.Label;
import javafx.scene.layout.StackPane; import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox; import javafx.scene.layout.VBox;
@ -48,7 +49,7 @@ public class BigIconButton extends ButtonComp {
@Value @Value
@Builder @Builder
public static class Structure implements CompStructure<JFXButton> { public static class Structure implements CompStructure<Button> {
JFXButton button; JFXButton button;
VBox stack; VBox stack;
Node graphic; Node graphic;

View file

@ -1,6 +1,5 @@
package io.xpipe.app.comp.base; package io.xpipe.app.comp.base;
import com.jfoenix.controls.JFXButton;
import io.xpipe.extension.fxcomps.Comp; import io.xpipe.extension.fxcomps.Comp;
import io.xpipe.extension.fxcomps.CompStructure; import io.xpipe.extension.fxcomps.CompStructure;
import io.xpipe.extension.fxcomps.SimpleCompStructure; import io.xpipe.extension.fxcomps.SimpleCompStructure;
@ -11,9 +10,10 @@ import javafx.beans.value.ObservableValue;
import javafx.css.Size; import javafx.css.Size;
import javafx.css.SizeUnits; import javafx.css.SizeUnits;
import javafx.scene.Node; import javafx.scene.Node;
import javafx.scene.control.Button;
import org.kordamp.ikonli.javafx.FontIcon; import org.kordamp.ikonli.javafx.FontIcon;
public class ButtonComp extends Comp<CompStructure<JFXButton>> { public class ButtonComp extends Comp<CompStructure<Button>> {
private final ObservableValue<String> name; private final ObservableValue<String> name;
private final ObjectProperty<Node> graphic; private final ObjectProperty<Node> graphic;
@ -48,14 +48,14 @@ public class ButtonComp extends Comp<CompStructure<JFXButton>> {
} }
@Override @Override
public CompStructure<JFXButton> createBase() { public CompStructure<Button> createBase() {
var button = new JFXButton(null); var button = new Button(null);
if (name != null) { if (name != null) {
button.textProperty().bind(name); button.textProperty().bind(name);
} }
var graphic = getGraphic(); var graphic = getGraphic();
if (graphic instanceof FontIcon f) { if (graphic instanceof FontIcon f) {
f.iconColorProperty().bind(button.textFillProperty()); //f.iconColorProperty().bind(button.textFillProperty());
SimpleChangeListener.apply(button.fontProperty(), c -> { SimpleChangeListener.apply(button.fontProperty(), c -> {
f.setIconSize((int) new Size(c.getSize(), SizeUnits.PT).pixels()); f.setIconSize((int) new Size(c.getSize(), SizeUnits.PT).pixels());
}); });

View file

@ -1,8 +1,8 @@
package io.xpipe.app.comp.base; package io.xpipe.app.comp.base;
import com.jfoenix.controls.JFXCheckBox;
import io.xpipe.extension.fxcomps.SimpleComp; import io.xpipe.extension.fxcomps.SimpleComp;
import javafx.beans.property.ListProperty; import javafx.beans.property.ListProperty;
import javafx.scene.control.CheckBox;
import javafx.scene.control.Label; import javafx.scene.control.Label;
import javafx.scene.control.ScrollPane; import javafx.scene.control.ScrollPane;
import javafx.scene.layout.Region; import javafx.scene.layout.Region;
@ -24,8 +24,9 @@ public class ListSelectorComp<T> extends SimpleComp {
@Override @Override
protected Region createSimple() { protected Region createSimple() {
var vbox = new VBox(); var vbox = new VBox();
vbox.getStyleClass().add("content");
for (var v : values) { for (var v : values) {
var cb = new JFXCheckBox(null); var cb = new CheckBox(null);
cb.selectedProperty().addListener((c, o, n) -> { cb.selectedProperty().addListener((c, o, n) -> {
if (n) { if (n) {
selected.add(v); selected.add(v);

View file

@ -1,6 +1,6 @@
package io.xpipe.app.comp.storage.store; package io.xpipe.app.comp.storage.store;
import io.xpipe.app.comp.base.ListViewComp; import io.xpipe.app.comp.base.ListBoxViewComp;
import io.xpipe.app.comp.base.MultiContentComp; import io.xpipe.app.comp.base.MultiContentComp;
import io.xpipe.extension.fxcomps.Comp; import io.xpipe.extension.fxcomps.Comp;
import io.xpipe.extension.fxcomps.SimpleComp; import io.xpipe.extension.fxcomps.SimpleComp;
@ -20,7 +20,7 @@ public class StoreEntryListComp extends SimpleComp {
StoreViewState.get() StoreViewState.get()
.getFilterString() .getFilterString()
.map(s -> (storeEntrySection -> storeEntrySection.shouldShow(s)))); .map(s -> (storeEntrySection -> storeEntrySection.shouldShow(s))));
var content = new ListViewComp<>(filtered, topLevel, null, (StoreEntrySection e) -> { var content = new ListBoxViewComp<>(filtered, topLevel, (StoreEntrySection e) -> {
return e.comp(true); return e.comp(true);
}); });
return content.styleClass("store-list-comp"); return content.styleClass("store-list-comp");

View file

@ -1,10 +1,15 @@
package io.xpipe.app.core; package io.xpipe.app.core;
import atlantafx.base.theme.NordDark;
import atlantafx.base.theme.NordLight;
import atlantafx.base.theme.PrimerDark;
import atlantafx.base.theme.PrimerLight;
import io.xpipe.app.prefs.AppPrefs; import io.xpipe.app.prefs.AppPrefs;
import io.xpipe.extension.I18n; import io.xpipe.extension.I18n;
import io.xpipe.extension.event.ErrorEvent; import io.xpipe.extension.event.ErrorEvent;
import io.xpipe.extension.event.TrackEvent; import io.xpipe.extension.event.TrackEvent;
import io.xpipe.extension.prefs.PrefsChoiceValue; import io.xpipe.extension.prefs.PrefsChoiceValue;
import javafx.application.Application;
import javafx.scene.Scene; import javafx.scene.Scene;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
@ -19,20 +24,16 @@ import java.util.*;
public class AppStyle { public class AppStyle {
private static final Map<String, String> COLOR_SCHEME_CONTENTS = new HashMap<>();
private static final Map<Path, String> STYLESHEET_CONTENTS = new HashMap<>(); private static final Map<Path, String> STYLESHEET_CONTENTS = new HashMap<>();
private static final List<Scene> scenes = new ArrayList<>(); private static final List<Scene> scenes = new ArrayList<>();
private static String FONT_CONTENTS = ""; private static String FONT_CONTENTS = "";
public static void init() { public static void init() {
if (COLOR_SCHEME_CONTENTS.size() > 0) { if (STYLESHEET_CONTENTS.size() > 0) {
return; return;
} }
TrackEvent.info("Loading stylesheets ..."); TrackEvent.info("Loading stylesheets ...");
for (var t : Theme.values()) {
loadTheme(t);
}
loadStylesheets(); loadStylesheets();
if (AppPrefs.get() != null) { if (AppPrefs.get() != null) {
@ -45,25 +46,6 @@ public class AppStyle {
} }
} }
private static void loadTheme(Theme theme) {
for (var module : AppExtensionManager.getInstance().getContentModules()) {
AppResources.with(module.getName(), "theme", path -> {
var file = path.resolve(theme.getId() + ".css");
if (!Files.exists(file)) {
return;
}
try {
var bytes = Files.readAllBytes(file);
var s = "data:text/css;base64," + Base64.getEncoder().encodeToString(bytes);
COLOR_SCHEME_CONTENTS.put(theme.getId(), s);
} catch (IOException ex) {
ErrorEvent.fromThrowable(ex).omitted(true).build().handle();
}
});
}
}
private static void loadStylesheets() { private static void loadStylesheets() {
AppResources.with(AppResources.XPIPE_MODULE, "font-config/font.css", path -> { AppResources.with(AppResources.XPIPE_MODULE, "font-config/font.css", path -> {
var bytes = Files.readAllBytes(path); var bytes = Files.readAllBytes(path);
@ -99,8 +81,7 @@ public class AppStyle {
private static void changeTheme(Theme oldTheme, Theme newTheme) { private static void changeTheme(Theme oldTheme, Theme newTheme) {
scenes.forEach(scene -> { scenes.forEach(scene -> {
scene.getStylesheets().remove(COLOR_SCHEME_CONTENTS.get(oldTheme.getId())); Application.setUserAgentStylesheet(newTheme.getTheme().getUserAgentStylesheet());
scene.getStylesheets().add(COLOR_SCHEME_CONTENTS.get(newTheme.getId()));
}); });
} }
@ -117,7 +98,6 @@ public class AppStyle {
} }
public static void reloadStylesheets(Scene scene) { public static void reloadStylesheets(Scene scene) {
COLOR_SCHEME_CONTENTS.clear();
STYLESHEET_CONTENTS.clear(); STYLESHEET_CONTENTS.clear();
FONT_CONTENTS = ""; FONT_CONTENTS = "";
@ -128,7 +108,7 @@ public class AppStyle {
public static void addStylesheets(Scene scene) { public static void addStylesheets(Scene scene) {
var t = AppPrefs.get() != null ? AppPrefs.get().theme.getValue() : Theme.LIGHT; var t = AppPrefs.get() != null ? AppPrefs.get().theme.getValue() : Theme.LIGHT;
scene.getStylesheets().add(COLOR_SCHEME_CONTENTS.get(t.getId())); Application.setUserAgentStylesheet(t.getTheme().getUserAgentStylesheet());
TrackEvent.debug("Set theme " + t.getId() + " for scene"); TrackEvent.debug("Set theme " + t.getId() + " for scene");
if (AppPrefs.get() != null && !AppPrefs.get().useSystemFont.get()) { if (AppPrefs.get() != null && !AppPrefs.get().useSystemFont.get()) {
@ -146,10 +126,14 @@ public class AppStyle {
@AllArgsConstructor @AllArgsConstructor
@Getter @Getter
public enum Theme implements PrefsChoiceValue { public enum Theme implements PrefsChoiceValue {
LIGHT("light"); LIGHT("light", new PrimerLight()),
DARK("dark", new PrimerDark()),
NORD_LIGHT("nordLight", new NordLight()),
NORD_DARK("nordDark", new NordDark());
// DARK("dark"); // DARK("dark");
private final String id; private final String id;
private final atlantafx.base.theme.Theme theme;
@Override @Override
public String toTranslatedString() { public String toTranslatedString() {

View file

@ -23,6 +23,9 @@ import org.kordamp.ikonli.javafx.FontIcon;
import java.util.List; import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import static atlantafx.base.theme.Styles.ACCENT;
import static atlantafx.base.theme.Styles.BUTTON_OUTLINED;
public class ErrorHandlerComp extends SimpleComp { public class ErrorHandlerComp extends SimpleComp {
private static final AtomicBoolean showing = new AtomicBoolean(false); private static final AtomicBoolean showing = new AtomicBoolean(false);
@ -98,6 +101,7 @@ public class ErrorHandlerComp extends SimpleComp {
var ac = createActionComp(action); var ac = createActionComp(action);
actionBox.getChildren().add(ac); actionBox.getChildren().add(ac);
} }
actionBox.getChildren().get(1).getStyleClass().addAll(BUTTON_OUTLINED, ACCENT);
content.getChildren().addAll(actionBox, new Separator(Orientation.HORIZONTAL)); content.getChildren().addAll(actionBox, new Separator(Orientation.HORIZONTAL));
} }

View file

@ -17,6 +17,7 @@ import javafx.beans.property.SimpleListProperty;
import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty; import javafx.beans.property.StringProperty;
import javafx.collections.FXCollections; import javafx.collections.FXCollections;
import javafx.geometry.Pos;
import javafx.scene.control.Hyperlink; import javafx.scene.control.Hyperlink;
import javafx.scene.control.Label; import javafx.scene.control.Label;
import javafx.scene.control.TextArea; import javafx.scene.control.TextArea;
@ -25,6 +26,9 @@ import javafx.stage.Stage;
import java.nio.file.Path; import java.nio.file.Path;
import static atlantafx.base.theme.Styles.ACCENT;
import static atlantafx.base.theme.Styles.BUTTON_OUTLINED;
public class UserReportComp extends SimpleComp { public class UserReportComp extends SimpleComp {
private final StringProperty text = new SimpleStringProperty(); private final StringProperty text = new SimpleStringProperty();
@ -45,13 +49,16 @@ public class UserReportComp extends SimpleComp {
} }
private Comp<?> createAttachments() { private Comp<?> createAttachments() {
var list = new ListSelectorComp<>(event.getAttachments(), file -> { var list = new ListSelectorComp<>(
if (file.equals(AppLogs.get().getSessionLogsDirectory())) { event.getAttachments(),
return I18n.get("logFilesAttachment"); file -> {
} if (file.equals(AppLogs.get().getSessionLogsDirectory())) {
return I18n.get("logFilesAttachment");
}
return file.getFileName().toString(); return file.getFileName().toString();
}, includedDiagnostics) },
includedDiagnostics)
.styleClass("attachment-list"); .styleClass("attachment-list");
var tp = new TitledPaneComp(I18n.observable("additionalErrorAttachments"), list, 100) var tp = new TitledPaneComp(I18n.observable("additionalErrorAttachments"), list, 100)
.apply(struc -> struc.get().setExpanded(true)) .apply(struc -> struc.get().setExpanded(true))
@ -93,9 +100,12 @@ public class UserReportComp extends SimpleComp {
dataPolicyButton.setOnAction(event1 -> { dataPolicyButton.setOnAction(event1 -> {
Hyperlinks.open(Hyperlinks.DOCS_PRIVACY); Hyperlinks.open(Hyperlinks.DOCS_PRIVACY);
}); });
var sendButton = new ButtonComp(I18n.observable("sendReport"), null, this::send).createRegion(); var sendButton = new ButtonComp(I18n.observable("sendReport"), null, this::send)
.apply(struc -> struc.get().getStyleClass().addAll(BUTTON_OUTLINED, ACCENT))
.createRegion();
var spacer = new Region(); var spacer = new Region();
var buttons = new HBox(dataPolicyButton, spacer, sendButton); var buttons = new HBox(dataPolicyButton, spacer, sendButton);
buttons.setAlignment(Pos.CENTER);
buttons.getStyleClass().add("buttons"); buttons.getStyleClass().add("buttons");
HBox.setHgrow(spacer, Priority.ALWAYS); HBox.setHgrow(spacer, Priority.ALWAYS);
AppFont.medium(dataPolicyButton); AppFont.medium(dataPolicyButton);

View file

@ -3,7 +3,6 @@ package io.xpipe.app.prefs;
import com.dlsc.formsfx.model.structure.*; import com.dlsc.formsfx.model.structure.*;
import com.dlsc.preferencesfx.formsfx.view.controls.SimpleComboBoxControl; import com.dlsc.preferencesfx.formsfx.view.controls.SimpleComboBoxControl;
import com.dlsc.preferencesfx.formsfx.view.controls.SimpleTextControl; import com.dlsc.preferencesfx.formsfx.view.controls.SimpleTextControl;
import com.dlsc.preferencesfx.formsfx.view.controls.ToggleControl;
import com.dlsc.preferencesfx.model.Category; import com.dlsc.preferencesfx.model.Category;
import com.dlsc.preferencesfx.model.Group; import com.dlsc.preferencesfx.model.Group;
import com.dlsc.preferencesfx.model.Setting; import com.dlsc.preferencesfx.model.Setting;
@ -139,10 +138,10 @@ public class AppPrefs {
private final BooleanProperty automaticallyUpdate = private final BooleanProperty automaticallyUpdate =
typed(new SimpleBooleanProperty(XPipeDistributionType.get().supportsUpdate()), Boolean.class); typed(new SimpleBooleanProperty(XPipeDistributionType.get().supportsUpdate()), Boolean.class);
private final BooleanField automaticallyUpdateField = private final BooleanField automaticallyUpdateField =
BooleanField.ofBooleanType(automaticallyUpdate).render(() -> new ToggleControl()); BooleanField.ofBooleanType(automaticallyUpdate).render(() -> new CustomToggleControl());
private final BooleanProperty updateToPrereleases = typed(new SimpleBooleanProperty(false), Boolean.class); private final BooleanProperty updateToPrereleases = typed(new SimpleBooleanProperty(false), Boolean.class);
private final BooleanField updateToPrereleasesField = private final BooleanField updateToPrereleasesField =
BooleanField.ofBooleanType(updateToPrereleases).render(() -> new ToggleControl()); BooleanField.ofBooleanType(updateToPrereleases).render(() -> new CustomToggleControl());
private final BooleanProperty confirmDeletions = typed(new SimpleBooleanProperty(true), Boolean.class); private final BooleanProperty confirmDeletions = typed(new SimpleBooleanProperty(true), Boolean.class);
@ -179,31 +178,31 @@ public class AppPrefs {
: internalDeveloperMode; : internalDeveloperMode;
private final BooleanField developerModeField = Field.ofBooleanType(effectiveDeveloperMode) private final BooleanField developerModeField = Field.ofBooleanType(effectiveDeveloperMode)
.editable(System.getProperty(DEVELOPER_MODE_PROP) == null) .editable(System.getProperty(DEVELOPER_MODE_PROP) == null)
.render(() -> new ToggleControl()); .render(() -> new CustomToggleControl());
private final BooleanProperty developerDisableUpdateVersionCheck = private final BooleanProperty developerDisableUpdateVersionCheck =
typed(new SimpleBooleanProperty(false), Boolean.class); typed(new SimpleBooleanProperty(false), Boolean.class);
private final BooleanField developerDisableUpdateVersionCheckField = private final BooleanField developerDisableUpdateVersionCheckField =
BooleanField.ofBooleanType(developerDisableUpdateVersionCheck).render(() -> new ToggleControl()); BooleanField.ofBooleanType(developerDisableUpdateVersionCheck).render(() -> new CustomToggleControl());
private final BooleanProperty developerDisableGuiRestrictions = private final BooleanProperty developerDisableGuiRestrictions =
typed(new SimpleBooleanProperty(false), Boolean.class); typed(new SimpleBooleanProperty(false), Boolean.class);
private final BooleanField developerDisableGuiRestrictionsField = private final BooleanField developerDisableGuiRestrictionsField =
BooleanField.ofBooleanType(developerDisableGuiRestrictions).render(() -> new ToggleControl()); BooleanField.ofBooleanType(developerDisableGuiRestrictions).render(() -> new CustomToggleControl());
private final BooleanProperty developerShowHiddenProviders = typed(new SimpleBooleanProperty(false), Boolean.class); private final BooleanProperty developerShowHiddenProviders = typed(new SimpleBooleanProperty(false), Boolean.class);
private final BooleanField developerShowHiddenProvidersField = private final BooleanField developerShowHiddenProvidersField =
BooleanField.ofBooleanType(developerShowHiddenProviders).render(() -> new ToggleControl()); BooleanField.ofBooleanType(developerShowHiddenProviders).render(() -> new CustomToggleControl());
private final BooleanProperty developerShowHiddenEntries = typed(new SimpleBooleanProperty(false), Boolean.class); private final BooleanProperty developerShowHiddenEntries = typed(new SimpleBooleanProperty(false), Boolean.class);
private final BooleanField developerShowHiddenEntriesField = private final BooleanField developerShowHiddenEntriesField =
BooleanField.ofBooleanType(developerShowHiddenEntries).render(() -> new ToggleControl()); BooleanField.ofBooleanType(developerShowHiddenEntries).render(() -> new CustomToggleControl());
private final BooleanProperty developerDisableConnectorInstallationVersionCheck = private final BooleanProperty developerDisableConnectorInstallationVersionCheck =
typed(new SimpleBooleanProperty(false), Boolean.class); typed(new SimpleBooleanProperty(false), Boolean.class);
private final BooleanField developerDisableConnectorInstallationVersionCheckField = BooleanField.ofBooleanType( private final BooleanField developerDisableConnectorInstallationVersionCheckField = BooleanField.ofBooleanType(
developerDisableConnectorInstallationVersionCheck) developerDisableConnectorInstallationVersionCheck)
.render(() -> new ToggleControl()); .render(() -> new CustomToggleControl());
public ReadOnlyProperty<CloseBehaviour> closeBehaviour() { public ReadOnlyProperty<CloseBehaviour> closeBehaviour() {
return closeBehaviour; return closeBehaviour;

View file

@ -52,7 +52,9 @@ public class CustomFormRenderer extends PreferencesFxFormRenderer {
AppFont.setSize(titleLabel, 2); AppFont.setSize(titleLabel, 2);
// Set margin for all but first group titles to visually separate groups // Set margin for all but first group titles to visually separate groups
if (nextRow > 1) { if (nextRow > 1) {
GridPane.setMargin(titleLabel, new Insets(SPACING * 3, 0, 0, 0)); GridPane.setMargin(titleLabel, new Insets(SPACING * 3, 0, SPACING, 0));
} else {
GridPane.setMargin(titleLabel, new Insets(SPACING, 0, SPACING, 0));
} }
} }
@ -79,7 +81,7 @@ public class CustomFormRenderer extends PreferencesFxFormRenderer {
var descriptionLabel = new Label(); var descriptionLabel = new Label();
descriptionLabel.setWrapText(true); descriptionLabel.setWrapText(true);
descriptionLabel.disableProperty().bind(c.getFieldLabel().disabledProperty()); descriptionLabel.disableProperty().bind(c.getFieldLabel().disabledProperty());
descriptionLabel.opacityProperty().bind(c.getFieldLabel().opacityProperty()); descriptionLabel.opacityProperty().bind(c.getFieldLabel().opacityProperty().multiply(0.8));
descriptionLabel.managedProperty().bind(c.getFieldLabel().managedProperty()); descriptionLabel.managedProperty().bind(c.getFieldLabel().managedProperty());
descriptionLabel.visibleProperty().bind(c.getFieldLabel().visibleProperty()); descriptionLabel.visibleProperty().bind(c.getFieldLabel().visibleProperty());
descriptionLabel.setMaxHeight(USE_PREF_SIZE); descriptionLabel.setMaxHeight(USE_PREF_SIZE);

View file

@ -0,0 +1,82 @@
package io.xpipe.app.prefs;
import atlantafx.base.controls.ToggleSwitch;
import com.dlsc.formsfx.model.structure.BooleanField;
import com.dlsc.preferencesfx.formsfx.view.controls.SimpleControl;
import com.dlsc.preferencesfx.formsfx.view.controls.ToggleControl;
import com.dlsc.preferencesfx.util.VisibilityProperty;
import javafx.scene.control.Label;
/**
* Displays a control for boolean values with a toggle from ControlsFX.
*
* @author François Martin
* @author Marco Sanfratello
*/
public class CustomToggleControl extends SimpleControl<BooleanField, ToggleSwitch> {
/**
* Constructs a ToggleControl of {@link ToggleControl} type, with visibility condition.
*
* @param visibilityProperty property for control visibility of this element
*
* @return the constructed ToggleControl
*/
public static ToggleControl of(VisibilityProperty visibilityProperty) {
ToggleControl toggleControl = new ToggleControl();
toggleControl.setVisibilityProperty(visibilityProperty);
return toggleControl;
}
/**
* {@inheritDoc}
*/
@Override
public void initializeParts() {
super.initializeParts();
fieldLabel = new Label(field.labelProperty().getValue());
node = new atlantafx.base.controls.ToggleSwitch();
node.getStyleClass().add("toggle-control");
node.setSelected(field.getValue());
}
/**
* {@inheritDoc}
*/
@Override
public void layoutParts() {
}
/**
* {@inheritDoc}
*/
@Override
public void setupBindings() {
super.setupBindings();
}
/**
* {@inheritDoc}
*/
@Override
public void setupValueChangedListeners() {
super.setupValueChangedListeners();
field.userInputProperty().addListener((observable, oldValue, newValue) -> {
node.setSelected(Boolean.parseBoolean(field.getUserInput()));
});
}
/**
* {@inheritDoc}
*/
@Override
public void setupEventHandlers() {
node.selectedProperty().addListener((observable, oldValue, newValue) -> {
field.userInputProperty().setValue(String.valueOf(newValue));
});
}
}

View file

@ -36,6 +36,7 @@ open module io.xpipe.app {
requires com.sun.jna; requires com.sun.jna;
requires com.sun.jna.platform; requires com.sun.jna.platform;
requires org.slf4j; requires org.slf4j;
requires atlantafx.base;
requires org.ocpsoft.prettytime; requires org.ocpsoft.prettytime;
requires com.dlsc.preferencesfx; requires com.dlsc.preferencesfx;
requires com.vladsch.flexmark; requires com.vladsch.flexmark;

View file

@ -1,23 +0,0 @@
.dialog-pane .button {
-fx-font-size: 0.8em;
-fx-border-width: 1px;
-fx-border-color: -xp-border;
-fx-background-color: -xp-base;
-fx-border-radius: 2px;
-fx-background-radius: 2px;
}
.dialog-pane .button:hover {
-fx-background-color: -xp-base-highlight;
-fx-border-color: -xp-border-highlight;
}
.dialog-pane .button:pressed {
-fx-background-color: -xp-base-pressed;
-fx-border-color: -xp-border-pressed;
}
.dialog-pane .button:default {
-fx-background-color: -xp-base-highlight;
-fx-border-color: -xp-border-highlight;
}

View file

@ -1,17 +0,0 @@
.button-comp {
-fx-border-width: 1px;
-fx-border-color: -xp-border;
-fx-background-color: -xp-base;
-fx-border-radius: 2px;
-fx-background-radius: 2px;
}
.button-comp:hover {
-fx-background-color: -xp-base-highlight;
-fx-border-color: -xp-border-highlight;
}
.button-comp:pressed {
-fx-background-color: -xp-base-pressed;
-fx-border-color: -xp-border-pressed;
}

View file

@ -1,36 +0,0 @@
.combo-box {
-fx-border-width: 1px;
-fx-border-color: -xp-border;
-fx-background-color: -xp-base;
-fx-border-radius: 2px;
-fx-background-radius: 2px;
}
.combo-box:hover {
-fx-background-color: -xp-base-highlight;
-fx-border-color: -xp-border-highlight;
}
.combo-box:hover:pressed {
-fx-background-color: -xp-base-pressed;
-fx-border-color: -xp-border-pressed;
}
.combo-box .list-cell {
-fx-border-width: 0 0 0 0;
}
.combo-box .list-cell:hover {
-fx-background-color: -xp-base-highlight;
-fx-border-color: -xp-border-highlight;
}
.combo-box .list-cell:pressed {
-fx-background-color: -xp-base-pressed;
-fx-border-color: -xp-border-pressed;
}
.combo-box-popup .list-cell:selected {
-fx-background-color: -xp-base-pressed;
-fx-border-color: -xp-border-pressed;
}

View file

@ -1,8 +1,6 @@
.filter-comp .text-field { .filter-comp .text-field {
-fx-padding: 0.35em; -fx-padding: 0.35em;
-fx-background-color: transparent; -fx-background-color: transparent;
-fx-background-radius: 3px;
-fx-background-color: #0001;
} }
.filter-comp .input-line { .filter-comp .input-line {

View file

@ -1,6 +0,0 @@
.hyperlink {
-fx-text-fill: #4FA64F;
-fx-underline: true;
-fx-border-color: transparent;
-fx-padding: 0;
}

View file

@ -1,7 +1,3 @@
.lazy-text-field-comp {
-fx-text-fill: -xp-text-base;
}
.lazy-text-field-comp:disabled { .lazy-text-field-comp:disabled {
-fx-opacity: 1.0; -fx-opacity: 1.0;
} }

View file

@ -1,6 +1,6 @@
.multi-step-comp > .top .line { .multi-step-comp > .top .line {
-fx-max-height: 3px; -fx-max-height: 3px;
-fx-background-color: -xp-border; -fx-background-color: -color-accent-fg;
} }
.multi-step-comp .entry { .multi-step-comp .entry {
@ -9,25 +9,25 @@
} }
.multi-step-comp > .top { .multi-step-comp > .top {
-fx-border-color: -xp-border; -fx-border-color: -color-accent-fg;
-fx-border-width: 0 0 0.1em 0; -fx-border-width: 0 0 0.1em 0;
-fx-background-color: -xp-base-accent; -fx-background-color: -color-accent-subtle;
-fx-effect: dropshadow(three-pass-box, #333, 6, 0, 0, 2); -fx-effect: dropshadow(three-pass-box, #333, 6, 0, 0, 2);
} }
.multi-step-comp > .top .name { .multi-step-comp > .top .name {
-fx-text-fill: -xp-text-accent-base; -fx-text-fill: -color-accent-fg;
} }
.multi-step-comp .entry:next .name { .multi-step-comp .entry:next .name {
-fx-text-fill: -xp-text-accent-light; -fx-text-fill: -color-accent-fg;
} }
.multi-step-comp .buttons { .multi-step-comp .buttons {
-fx-border-color: -xp-border; -fx-border-color: -color-accent-fg;
-fx-border-width: 0.1em 0 0 0; -fx-border-width: 0.1em 0 0 0;
-fx-padding: 1em; -fx-padding: 1em;
-fx-background-color: -xp-base-accent; -fx-background-color: -color-accent-subtle;
-fx-effect: dropshadow(three-pass-box, #333, 6, 0, 0, -1); -fx-effect: dropshadow(three-pass-box, #333, 6, 0, 0, -1);
} }
@ -38,7 +38,7 @@
-fx-background-radius: 4px; -fx-background-radius: 4px;
-fx-background-color: #073B4C; -fx-background-color: #073B4C;
-fx-border-width: 1px; -fx-border-width: 1px;
-fx-border-color: -xp-text-accent-light; -fx-border-color:-color-accent-fg;
-fx-border-radius: 4px; -fx-border-radius: 4px;
} }
@ -67,11 +67,11 @@
} }
.multi-step-comp > .top .entry .number { .multi-step-comp > .top .entry .number {
-fx-text-fill: -xp-text-accent-base; -fx-text-fill: white;
} }
.multi-step-comp > .top .entry:next .number { .multi-step-comp > .top .entry:next .number {
-fx-text-fill: -xp-text-accent-light; -fx-text-fill: white;
} }
.multi-step-comp > .top { .multi-step-comp > .top {

View file

@ -1,46 +0,0 @@
.toggle-group-comp .toggle-button {
-fx-border-width: 1px;
-fx-border-color: -xp-border;
-fx-background-color: -xp-base;
-fx-border-radius: 2px;
-fx-padding: 0.3em 1em 0.3em 1em;
}
.toggle-group-comp .toggle-button.first {
-fx-border-width: 1px 0 1px 1px;
-fx-border-radius: 2px 0 0 2px;
-fx-background-radius: 2px 0 0 2px;
}
.toggle-group-comp .toggle-button.center {
-fx-border-width: 1px 0 1px 0;
-fx-border-radius: 0;
-fx-background-radius: 0;
}
.toggle-group-comp .toggle-button.last {
-fx-border-width: 1px 1px 1px 0;
-fx-border-radius: 0px 2px 2px 0;
-fx-background-radius: 0px 2px 2px 0;
}
.toggle-group-comp .toggle-button.first.last {
-fx-border-width: 1px 1px 1px 1px;
-fx-border-radius: 2px 2px 2px 2px;
-fx-background-radius: 2px 2px 2px 2;
}
.toggle-group-comp .toggle-button:hover {
-fx-background-color: -xp-base-highlight;
-fx-border-color: -xp-border-highlight;
}
.toggle-group-comp .toggle-button:pressed {
-fx-background-color: -xp-base-pressed;
-fx-border-color: -xp-border-pressed;
}
.toggle-group-comp .toggle-button:selected {
-fx-background-color: -xp-base-pressed;
-fx-border-color: -xp-border-pressed;
}

View file

@ -1,8 +1,3 @@
.fancy-tooltip { .fancy-tooltip {
-fx-background-color: -xp-base-highlight; -fx-opacity: 1;
-fx-text-fill: -xp-text-base;
-fx-border-width: 1px;
-fx-border-color: -xp-border-highlight;
-fx-border-radius: 4px;
-fx-font-size: 10pt;
} }

View file

@ -1,8 +0,0 @@
.dialog-pane:no-header .graphic-container {
-fx-padding: 0;
}
.dialog-pane:no-header > *.button-bar > *.container {
-fx-border-width: 1px 0 0 0;
-fx-border-color: -xp-border;
}

View file

@ -20,14 +20,14 @@
-fx-spacing: 0.3em; -fx-spacing: 0.3em;
} }
.error-report .attachments .attachment-list { .error-report .attachments .attachment-list .content {
-fx-padding: 0.5em; -fx-padding: 0.5em 1em;
} }
.error-report .buttons { .error-report .buttons {
-fx-border-color: -xp-border; -fx-border-color:-color-accent-fg;
-fx-border-width: 0.1em 0 0 0; -fx-border-width: 0.1em 0 0 0;
-fx-padding: 1.0em 1.5em 1em 1.5em; -fx-padding: 1.0em 1.5em 1em 1.5em;
-fx-background-color: -xp-base-accent; -fx-background-color: -color-accent-subtle;
-fx-effect: dropshadow(three-pass-box, #333, 6, 0, 0, -1); -fx-effect: dropshadow(three-pass-box, #333, 6, 0, 0, -1);
} }

View file

@ -1,6 +1,5 @@
.intro .label { .intro .label {
-fx-line-spacing: 5px; -fx-line-spacing: 5px;
-fx-text-fill: -xp-text-base;
-fx-graphic-text-gap: 8px; -fx-graphic-text-gap: 8px;
} }
@ -14,7 +13,6 @@
.intro .label .ikonli-font-icon { .intro .label .ikonli-font-icon {
-fx-line-spacing: 5px; -fx-line-spacing: 5px;
-fx-icon-color: -xp-text-base;
} }
.intro-add-collection-button { .intro-add-collection-button {

View file

@ -1,6 +1,6 @@
.named-store-choice,.named-source-choice { .named-store-choice,.named-source-choice {
-fx-border-width: 1px; -fx-border-width: 1px;
-fx-border-color: -xp-border; -fx-border-color:-color-accent-fg;
-fx-background-color: transparent; -fx-background-color: transparent;
-fx-border-radius: 4px; -fx-border-radius: 4px;
-fx-padding: 2px; -fx-padding: 2px;

View file

@ -1,8 +1,8 @@
.sidebar-comp { .sidebar-comp {
-fx-pref-width: 7em; -fx-pref-width: 7em;
-fx-background-color: linear-gradient(to right,#EEEEEE, #DDD); -fx-background-color: -color-accent-subtle;
-fx-border-width: 0; -fx-border-width: 0 0 0 0.05em;
-fx-border-color: #DDD; -fx-border-color: -color-accent-emphasis;
-fx-padding: 0; -fx-padding: 0;
} }
@ -11,8 +11,7 @@
} }
.sidebar-comp .big-icon-button-comp:selected { .sidebar-comp .big-icon-button-comp:selected {
-fx-background-insets: 0, 0 0 0 0.2em; -fx-background-color: -color-accent-muted;
-fx-background-color: -xp-base-accent, #CCC;
} }
.sidebar-comp .big-icon-button-comp .icon { .sidebar-comp .big-icon-button-comp .icon {
@ -20,8 +19,8 @@
} }
.sidebar-comp .big-icon-button-comp * { .sidebar-comp .big-icon-button-comp * {
-fx-text-fill: -xp-text-base; -fx-text-fill: -color-fg-default;
-fx-icon-color: -xp-text-base; -fx-icon-color: -color-fg-default;
} }
.sidebar-comp .big-icon-button-comp { .sidebar-comp .big-icon-button-comp {

View file

@ -1,5 +1,21 @@
.dialog-pane .button {
-fx-font-size: 0.8em;
-fx-border-width: 1px;
-fx-border-radius: 2px;
-fx-background-radius: 2px;
}
.dialog-pane:no-header .graphic-container {
-fx-padding: 0;
}
.dialog-pane:no-header > *.button-bar > *.container {
-fx-border-width: 1px 0 0 0;
-fx-border-color:-color-accent-fg;
}
.dialog-pane:header .header-panel { .dialog-pane:header .header-panel {
-fx-background-color: -xp-base-accent; -fx-background-color: -color-accent-subtle;
} }
.dialog-pane:header .header-panel .graphic-container { .dialog-pane:header .header-panel .graphic-container {
@ -8,24 +24,24 @@
.dialog-pane:header > .content { .dialog-pane:header > .content {
-fx-border-width: 2px 0 0 0; -fx-border-width: 2px 0 0 0;
-fx-border-color: -xp-text-accent-light; -fx-border-color:-color-accent-fg;
-fx-background-color: -xp-base-accent; -fx-background-color: -color-accent-subtle;
-fx-border-insets: 0 1.333em 1em 1em; -fx-border-insets: 0 1.333em 1em 1em;
-fx-padding: 1.333em 0 0 0; -fx-padding: 1.333em 0 0 0;
} }
.content-text { .content-text {
-fx-text-fill: white; -fx-text-fill: -color-accent-fg;
} }
.dialog-pane:header .content.label { .dialog-pane:header .content.label {
-fx-text-fill: white; -fx-text-fill: -color-accent-fg;
} }
.dialog-pane:header .header-panel .label { .dialog-pane:header .header-panel .label {
-fx-font-size: 1.0em; -fx-font-size: 1.0em;
-fx-wrap-text: true; -fx-wrap-text: true;
-fx-text-fill: white; -fx-text-fill: -color-accent-fg;
} }
.dialog-pane:header { .dialog-pane:header {
@ -34,7 +50,7 @@
.dialog-pane:header > *.button-bar > *.container { .dialog-pane:header > *.button-bar > *.container {
-fx-border-width: 1px 0 0 0; -fx-border-width: 1px 0 0 0;
-fx-border-color: -xp-border-accent; -fx-border-color: -color-accent-fg;
} }
.dialog-pane:header > *.label.content{ .dialog-pane:header > *.label.content{

View file

@ -1,17 +1,3 @@
.data-source-type { .data-source-type {
-fx-padding: 0.15em 0 0.15em 0.05em; -fx-padding: 0.15em 0 0.15em 0.05em;
} }
.data-source-type:hover {
-fx-background-color: -xp-base-highlight;
}
.data-source-type .list-cell .label {
-fx-text-fill: -xp-text-base;
}
.data-source-type .combo-box-popup .list-view .list-cell {
-fx-padding: 0.5em;
-fx-text-fill: blue;
-fx-background-color: white;
}

View file

@ -1,27 +1,27 @@
.bar { .bar {
-fx-padding: 0.8em 1.0em 0.8em 1.0em; -fx-padding: 0.8em 1.0em 0.8em 1.0em;
-fx-background-color: -xp-base-accent; -fx-background-color: -color-accent-subtle;
-fx-text-fill: -xp-text-accent-base; -fx-border-color: -color-accent-emphasis;
-fx-border-color: -xp-border-accent;
} }
.store-header-bar { .store-header-bar {
-fx-background-radius: 0 0 3px 0; -fx-background-radius: 0 0 2px 0;
-fx-border-radius: 0 0 3px 0; -fx-border-radius: 0 0 2px 0;
-fx-border-width: 0 2px 2px 0; -fx-border-width: 0 0.05em 0.05em 0;
-fx-spacing: 0.8em;
} }
.store-creation-bar { .store-creation-bar {
-fx-background-radius: 0 3px 3px 0; -fx-background-radius: 0 2px 2px 0;
-fx-border-radius: 0 3px 3px 0; -fx-border-radius: 0 2px 2px 0;
-fx-border-width: 0 2px 2px 0; -fx-border-width: 0.05em 0.05em 0.05em 0;
-fx-spacing: 0.2em; -fx-spacing: 0.2em;
} }
.filler-bar { .filler-bar {
-fx-background-radius: 0 3px 0 0; -fx-background-radius: 0 2px 0 0;
-fx-border-radius: 0 3px 0 0; -fx-border-radius: 0 2px 0 0;
-fx-border-width: 0 2px 0 0; -fx-border-width: 0.05em 0.05em 0 0;
} }
.sidebar { .sidebar {
@ -30,25 +30,24 @@
.bar .button-comp { .bar .button-comp {
-fx-border-width: 0; -fx-border-width: 0;
-fx-border-color: -xp-border; -fx-border-color: -color-accent-emphasis;
-fx-background-color: transparent; -fx-background-color: transparent;
-fx-border-radius: 2px; -fx-border-radius: 2px;
-fx-background-radius: 2px; -fx-background-radius: 2px;
-fx-text-fill: -xp-text-accent-light;
-fx-padding: 0.2em 0em 0.2em 0em; -fx-padding: 0.2em 0em 0.2em 0em;
} }
.collections-bar { .collections-bar {
-fx-background-radius: 0 0 3px 0; -fx-background-radius: 0 0 2px 0;
-fx-border-radius: 0 0 3px 0; -fx-border-radius: 0 0 2px 0;
-fx-border-width: 0 2px 2px 0; -fx-border-width: 0 2px 2px 0;
} }
.entry-bar { .entry-bar {
-fx-background-radius: 0 0 3px 3px; -fx-background-radius: 0 0 2px 2px;
-fx-border-radius: 0 0 3px 3px; -fx-border-radius: 0 0 2px 2px;
-fx-border-width: 0 2px 2px 2px; -fx-border-width: 0 2px 2px 2px;
-fx-background-color: -xp-base-accent; -fx-background-color: -color-accent-subtle;
} }
.entry-bar .horizontal-comp { .entry-bar .horizontal-comp {
@ -56,38 +55,28 @@
} }
.bar .icon-button-comp { .bar .icon-button-comp {
-fx-text-fill: -xp-text-accent-base; -fx-text-fill: -color-fg-default;
} }
.bar .name { .bar .name {
-fx-text-fill: -xp-text-accent-base; -fx-text-fill: -color-fg-default;
} }
.bar .count-comp { .bar .count-comp {
-fx-padding: 0.0em 0em 0.0em 0.4em; -fx-padding: 0.0em 0em 0.0em 0.4em;
-fx-text-fill: -xp-text-accent-light;
}
.bar .filter-bar {
-fx-padding: 0.8em 0 0.0em 0;
} }
.bar .filter-bar .text-field { .bar .filter-bar .text-field {
-fx-padding: 0.35em; -fx-padding: 0.35em;
-fx-background-color: transparent; -fx-text-fill: -color-fg-default;
}
.bar .filter-bar {
-fx-background-radius: 0.5em; -fx-background-radius: 0.5em;
-fx-background-color: #0004; -fx-background-color: -color-bg-default;
-fx-text-fill: -xp-text-accent-base; -fx-border-width: 0.05em;
-fx-border-radius: 0.5em;
-fx-border-color: -color-accent-emphasis;
} }
.bar .filter-bar .background {
-fx-text-fill: -xp-text-accent-light;
}
.bar .filter-bar .background .ikonli-font-icon {
-fx-icon-color: -xp-text-accent-light;
}
.filter-bar .input-line { .filter-bar .input-line {
-fx-opacity: 0.2; -fx-opacity: 0.2;
} }

View file

@ -1,6 +1,6 @@
.store-entry-grid .date, .store-entry-grid .summary { .store-entry-grid .date, .store-entry-grid .summary {
-fx-text-fill: -xp-text-light; -fx-text-fill: -color-fg-muted;
} }
.store-entry-grid:failed .jfx-text-field { .store-entry-grid:failed .jfx-text-field {

View file

@ -1,21 +1,13 @@
* {
-fx-text-fill: -xp-text-base;
}
.window-content { .window-content {
-fx-padding: 1.2em; -fx-padding: 1.2em;
} }
.radio-button
{
-fx-text-fill: -xp-text-accent-base;
}
.message-comp { .message-comp {
-fx-padding: 0.6em; -fx-padding: 0.6em;
-fx-background-color: #FF9999AA; -fx-background-color: #FF9999AA;
-fx-border-width: 1px; -fx-border-width: 1px;
-fx-border-color: -xp-border; -fx-border-color:-color-accent-fg;
-fx-border-radius: 2px; -fx-border-radius: 2px;
} }

View file

@ -1,11 +1,6 @@
.jfx-tab-pane .tab-header-area .jfx-rippler {
-jfx-rippler-fill: -xp-base-pressed;
}
.jfx-tab-pane .tab-header-background { -fx-background-color: transparent; } .jfx-tab-pane .tab-header-background { -fx-background-color: transparent; }
.jfx-tab-pane .tab-header-area .tab-selected-line { .jfx-tab-pane .tab-header-area .tab-selected-line {
-fx-background-color: -xp-base-accent;
-fx-pref-height: 1px; -fx-pref-height: 1px;
} }

View file

@ -14,7 +14,7 @@
.table-mapping-confirmation-comp .grid-container { .table-mapping-confirmation-comp .grid-container {
-fx-border-width: 1px; -fx-border-width: 1px;
-fx-border-color: -xp-border; -fx-border-color:-color-accent-fg;
-fx-background-color: transparent; -fx-background-color: transparent;
-fx-border-radius: 4px; -fx-border-radius: 4px;
-fx-padding: 2px; -fx-padding: 2px;

View file

@ -1,8 +0,0 @@
.tag-comp {
-fx-border-width: 1px;
-fx-border-color: -xp-border;
-fx-background-color: -xp-base;
-fx-border-radius: 4px;
-fx-background-radius: 4px;
-fx-padding: 0.15em;
}

View file

@ -1,2 +0,0 @@
.managed-tag {
}

View file

@ -5,38 +5,6 @@
.third-party-dependency-list-comp .titled-pane { .third-party-dependency-list-comp .titled-pane {
-fx-background-color: transparent; -fx-background-color: transparent;
} }
.titled-pane .content {
.third-party-dependency-list-comp .titled-pane .text-area { -fx-padding: 0em ;
/* -fx-font-family: Monospace; */ }
}
.titled-pane > .title > .arrow-button .arrow {
-fx-background-color: -xp-base;
-fx-focus-color: transparent;
-fx-border-width: 1px;
-fx-border-color: -xp-border;
-fx-border-radius: 4px;
-fx-background-radius: 4px;
}
.titled-pane:hover > .title > .arrow-button .arrow {
-fx-background-color: -xp-base-highlight;
-fx-focus-color: transparent;
-fx-border-color: -xp-border-highlight;
}
.titled-pane:pressed > .title > .arrow-button .arrow {
-fx-background-color: -xp-base-pressed;
-fx-focus-color: transparent;
-fx-border-color: -xp-border-pressed;
}
.titled-pane > .title {
-fx-background-color: transparent;
-fx-background-insets: 0;
}
.titled-pane:hover > .title {
-fx-background-color: #0001;
-fx-background-insets: 0;
}

View file

@ -1,20 +0,0 @@
* {
-xp-base: #111111;
-xp-base-highlight: #219AC250;
-xp-base-pressed: #419AC290;
-xp-border: #073B4C43;
-xp-border-highlight: #053B4C93;
-xp-border-pressed: #033B4C43;
-xp-text-base: #333;
-xp-text-light: #666;
-xp-text-base-inverted: #333;
-xp-text-light-inverted: grey;
-xp-base-accent: #4764C2FF;
-xp-border-accent: #19254DFF;
-xp-text-accent-base: white;
-xp-text-accent-light: #CCF;
}

View file

@ -1,20 +0,0 @@
* {
-xp-base: #DDDF;
-xp-base-highlight: #B9E5F3FF;
-xp-base-pressed: #73CAE7FF;
-xp-border: #0F498877;
-xp-border-highlight: #0C626C77;
-xp-border-pressed: #087B4F77;
-xp-text-base: #333;
-xp-text-light: #555;
-xp-text-base-inverted: #333;
-xp-text-light-inverted: grey;
-xp-base-accent: #252a30DD;
-xp-border-accent: #555a6099;
-xp-text-accent-base: white;
-xp-text-accent-light: #CCF;
}

View file

@ -41,7 +41,7 @@ public class IconButtonComp extends Comp<CompStructure<JFXButton>> {
button.fontProperty().addListener((c, o, n) -> { button.fontProperty().addListener((c, o, n) -> {
fi.setIconSize((int) new Size(n.getSize(), SizeUnits.PT).pixels()); fi.setIconSize((int) new Size(n.getSize(), SizeUnits.PT).pixels());
}); });
fi.iconColorProperty().bind(button.textFillProperty()); //fi.iconColorProperty().bind(button.textFillProperty());
button.setGraphic(fi); button.setGraphic(fi);
button.setOnAction(e -> { button.setOnAction(e -> {
e.consume(); e.consume();

View file

@ -24,8 +24,6 @@ public class PrettyListView<T> extends ListView<T> {
getChildren().addAll(vBar, hBar); getChildren().addAll(vBar, hBar);
}); });
getStyleClass().add("jfx-list-view");
vBar.setManaged(false); vBar.setManaged(false);
vBar.setOrientation(Orientation.VERTICAL); vBar.setOrientation(Orientation.VERTICAL);
vBar.getStyleClass().add("pretty-scroll-bar"); vBar.getStyleClass().add("pretty-scroll-bar");

View file

@ -1,14 +1,14 @@
.code-snippet { .code-snippet {
-fx-padding: 0.3em 0.5em 0.3em 0.5em; -fx-padding: 0.3em 0.5em 0.3em 0.5em;
-fx-border-width: 0; -fx-border-width: 0;
-fx-border-color: -xp-border; -fx-border-color:-color-accent-fg;
-fx-spacing: 0; -fx-spacing: 0;
-fx-font-family: Monospace; -fx-font-family: Monospace;
} }
.code-snippet-container { .code-snippet-container {
-fx-border-width: 1px; -fx-border-width: 1px;
-fx-border-color: -xp-border; -fx-border-color:-color-accent-fg;
-fx-background-color: transparent; -fx-background-color: transparent;
-fx-border-radius: 4px; -fx-border-radius: 4px;
-fx-background-radius: 4px; -fx-background-radius: 4px;
@ -32,5 +32,5 @@
.code-snippet-container .spacer { .code-snippet-container .spacer {
-fx-pref-width: 1px; -fx-pref-width: 1px;
-fx-background-color: -xp-border; -fx-background-color:-color-accent-fg;
} }