From 5add5ce1371c621c816bc3d1bfd203345d12d6a4 Mon Sep 17 00:00:00 2001 From: mkpaz Date: Thu, 16 Feb 2023 21:03:30 +0400 Subject: [PATCH] Add SceneBuilder integration (#27) --- CHANGELOG.md | 4 +- base/src/main/java/module-info.java | 1 + .../images/scene-builder-integration.png | Bin 0 -> 23860 bytes docs/docs/fxml.md | 25 +- .../page/general/SceneBuilderDialog.java | 430 ++++++++++++++++++ .../page/general/SceneBuilderDialogModel.java | 340 ++++++++++++++ .../page/general/SceneBuilderInstaller.java | 234 ++++++++++ .../sampler/page/general/ThemePage.java | 31 ++ .../atlantafx/sampler/theme/SamplerTheme.java | 10 +- .../sampler/theme/SceneBuilderTheme.java | 31 ++ .../assets/styles/scss/general/_index.scss | 3 +- .../scss/general/_scene-builder-wizard.scss | 7 + .../sampler/images/color-palette.png | Bin 0 -> 10821 bytes .../atlantafx/sampler/images/info.png | Bin 0 -> 10312 bytes .../atlantafx/sampler/images/question.png | Bin 0 -> 9899 bytes .../images/scene-builder-in-action.jpg | Bin 0 -> 77900 bytes .../sampler/images/scene-builder-themes.png | Bin 0 -> 52456 bytes .../sampler/images/scene-builder.png | Bin 0 -> 4363 bytes .../sampler/images/scene-builder_32.png | Bin 0 -> 1845 bytes .../atlantafx/sampler/images/warning.png | Bin 0 -> 21419 bytes .../general/SceneBuilderInstallerTest.java | 29 ++ 21 files changed, 1128 insertions(+), 17 deletions(-) create mode 100644 docs/docs/assets/images/scene-builder-integration.png create mode 100644 sampler/src/main/java/atlantafx/sampler/page/general/SceneBuilderDialog.java create mode 100644 sampler/src/main/java/atlantafx/sampler/page/general/SceneBuilderDialogModel.java create mode 100644 sampler/src/main/java/atlantafx/sampler/page/general/SceneBuilderInstaller.java create mode 100644 sampler/src/main/java/atlantafx/sampler/theme/SceneBuilderTheme.java create mode 100644 sampler/src/main/resources/atlantafx/sampler/assets/styles/scss/general/_scene-builder-wizard.scss create mode 100644 sampler/src/main/resources/atlantafx/sampler/images/color-palette.png create mode 100644 sampler/src/main/resources/atlantafx/sampler/images/info.png create mode 100644 sampler/src/main/resources/atlantafx/sampler/images/question.png create mode 100644 sampler/src/main/resources/atlantafx/sampler/images/scene-builder-in-action.jpg create mode 100644 sampler/src/main/resources/atlantafx/sampler/images/scene-builder-themes.png create mode 100644 sampler/src/main/resources/atlantafx/sampler/images/scene-builder.png create mode 100644 sampler/src/main/resources/atlantafx/sampler/images/scene-builder_32.png create mode 100644 sampler/src/main/resources/atlantafx/sampler/images/warning.png create mode 100644 sampler/src/test/java/atlantafx/sampler/page/general/SceneBuilderInstallerTest.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 3619b0e..03e76c0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,9 +4,11 @@ ### Features +- (Base) New `DeckPane` component with swipe and slide transition support. - (CSS) 🚀 New MacOS-like Cupertino theme in light and dark variants. - (CSS) 🚀 New [Dracula](https://ui.draculatheme.com/) theme. -- (CSS) 🚀 New `TabPane` style. There are three styles supported: default, floating and classic (new one). +- (CSS) New `TabPane` style. There are three styles supported: default, floating and classic (new one). +- (Sampler) 🚀 SceneBuilder integration. AtlantaFX themes can be installed (or uninstalled) to SceneBuilder directly from the Sampler app. ### Improvements diff --git a/base/src/main/java/module-info.java b/base/src/main/java/module-info.java index d56c55c..43d017d 100755 --- a/base/src/main/java/module-info.java +++ b/base/src/main/java/module-info.java @@ -6,6 +6,7 @@ module atlantafx.base { requires static org.jetbrains.annotations; exports atlantafx.base.controls; + exports atlantafx.base.layout; exports atlantafx.base.theme; exports atlantafx.base.util; diff --git a/docs/docs/assets/images/scene-builder-integration.png b/docs/docs/assets/images/scene-builder-integration.png new file mode 100644 index 0000000000000000000000000000000000000000..12217cb9ecec9f0a017ceeba3fe79c65f6c05401 GIT binary patch literal 23860 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

!b{ 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 buttons load custom CSS files. -In order to use AtlantaFX in SceneBuilder you need to: +**(not yet released)** -* Run `mvn package -pl styles` to generate theme CSS files with the correct path names. -* Copy `styles/target/AtlantaFX-${version}-scenebuilder.zip` to the SceneBuilder `$APPDIR` (e.g. `%HOMEPATH%/Local/SceneBuilder/app/` on Windows) or another directory of your choice. -* Open `SceneBuilder.cfg` in the SceneBuilder app directory and add the zip file to the beginning of the `app.classpath` variable, e.g.: +![Project structure](assets/images/scene-builder-integration.png) + +### Manual + +* Run `mvn package -pl styles` to generate theme package. You can also download it on the [Releases](https://github.com/mkpaz/atlantafx/releases) page. +* Copy `styles/target/AtlantaFX-${version}-scenebuilder.zip` to the SceneBuilder `app/` directory (e.g. `%HOMEPATH%/Local/SceneBuilder/app/` on Windows) or another directory depending on where you installed SceneBuilder application on your PC. +* Open `SceneBuilder.cfg` in the SceneBuilder app directory and add the ZIP file to the beginning of the `app.classpath` variable, e.g.: ```text - app.classpath=$APPDIR\AtlantaFX-${version}-scenebuilder.zip;$APPDIR\scenebuilder-18.0.0-all.jar + # beware about file separator (slash or backslash) depending on your OS + app.classpath=$APPDIR\AtlantaFX-${version}-scenebuilder.zip:$APPDIR\scenebuilder-18.0.0-all.jar ``` * Restart SceneBuilder. Then you can select AtlantaFX themes in the menu `Preview -> Themes -> Caspian Embedded (FX2)`. The themes are mapped as follows: -| SceneBuilder | Modifier | AtlantaFX Theme | +| SceneBuilder | Caspian High Contrast (FX2) | AtlantaFX Theme | |-----------------------------|-----------------------------|-----------------| -| Caspian Embedded (FX2) | None | Primer Light | -| Caspian Embedded (FX2) | Caspian High Contrast (FX2) | Primer Dark | -| Caspian Embedded QVGA (FX2) | None | Nord Light | -| Caspian Embedded QVGA (FX2) | Caspian High Contrast (FX2) | Nord Dark | +| Caspian Embedded (FX2) | disabled | Primer Light | +| Caspian Embedded (FX2) | enabled | Primer Dark | +| Caspian Embedded QVGA (FX2) | disabled | Nord Light | +| Caspian Embedded QVGA (FX2) | enabled | Nord Dark | diff --git a/sampler/src/main/java/atlantafx/sampler/page/general/SceneBuilderDialog.java b/sampler/src/main/java/atlantafx/sampler/page/general/SceneBuilderDialog.java new file mode 100644 index 0000000..00ad4c9 --- /dev/null +++ b/sampler/src/main/java/atlantafx/sampler/page/general/SceneBuilderDialog.java @@ -0,0 +1,430 @@ +/* SPDX-License-Identifier: MIT */ + +package atlantafx.sampler.page.general; + +import static atlantafx.base.theme.Styles.TEXT_CAPTION; +import static atlantafx.base.theme.Styles.TEXT_MUTED; + +import atlantafx.base.controls.Spacer; +import atlantafx.base.layout.DeckPane; +import atlantafx.base.theme.Styles; +import atlantafx.sampler.Resources; +import atlantafx.sampler.event.BrowseEvent; +import atlantafx.sampler.event.DefaultEventBus; +import atlantafx.sampler.page.OverlayDialog; +import atlantafx.sampler.page.general.SceneBuilderDialogModel.Screen; +import atlantafx.sampler.util.NodeUtils; +import java.io.File; +import java.net.URI; +import java.util.ArrayList; +import java.util.concurrent.atomic.AtomicInteger; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.geometry.Insets; +import javafx.geometry.Orientation; +import javafx.geometry.Pos; +import javafx.scene.Cursor; +import javafx.scene.control.Button; +import javafx.scene.control.CheckBox; +import javafx.scene.control.ContentDisplay; +import javafx.scene.control.Hyperlink; +import javafx.scene.control.Label; +import javafx.scene.control.OverrunStyle; +import javafx.scene.control.RadioButton; +import javafx.scene.control.Tooltip; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.layout.FlowPane; +import javafx.scene.layout.GridPane; +import javafx.scene.layout.HBox; +import javafx.scene.layout.Pane; +import javafx.scene.layout.Priority; +import javafx.scene.layout.VBox; +import javafx.stage.DirectoryChooser; +import javafx.util.Duration; +import org.kordamp.ikonli.javafx.FontIcon; +import org.kordamp.ikonli.material2.Material2AL; +import org.kordamp.ikonli.material2.Material2OutlinedAL; + +class SceneBuilderDialog extends OverlayDialog { + + private final DeckPane deck; + private final Button backBtn; + private final Button forwardBtn; + private final Button closeBtn; + + private Pane startScreen; + private Pane actionScreen; + private Pane themeScreen; + private Pane execScreen; + private Pane reportScreen; + + private final SceneBuilderDialogModel model = new SceneBuilderDialogModel(); + + public SceneBuilderDialog() { + deck = createContent(); + + backBtn = new Button("Previous", new FontIcon(Material2AL.ARROW_BACK)); + + forwardBtn = new Button("Next", new FontIcon(Material2AL.ARROW_FORWARD)); + forwardBtn.setContentDisplay(ContentDisplay.RIGHT); + + closeBtn = new Button("Close"); + NodeUtils.toggleVisibility(closeBtn, false); + + footerBox.getChildren().setAll(backBtn, new Spacer(), forwardBtn, closeBtn); + + setTitle("SceneBuilder Integration"); + setContent(deck); + init(); + } + + private DeckPane createContent() { + startScreen = createStartScreen(); + actionScreen = createActionScreen(); + themeScreen = createThemeScreen(); + execScreen = createExecScreen(); + reportScreen = createReportScreen(); + + var deck = new DeckPane(); + deck.addChildren(Insets.EMPTY, startScreen, actionScreen, themeScreen, execScreen, reportScreen); + deck.setAnimationDuration(Duration.millis(250)); + deck.setId("scene-builder-wizard"); + + deck.setPrefSize(600, 440); + + return deck; + } + + private void init() { + deck.setTopNode(startScreen); + + model.activeScreenProperty().addListener((obs, old, val) -> { + if (val == null) { + deck.resetTopNode(); + return; + } + + var nextScreen = getScreenView(val); + if (old == null || old.ordinal() < val.ordinal()) { + deck.swipeLeft(nextScreen); + } else { + deck.swipeRight(nextScreen); + } + + if (val == Screen.REPORT) { + NodeUtils.toggleVisibility(closeBtn, true); + NodeUtils.toggleVisibility(forwardBtn, false); + } else { + NodeUtils.toggleVisibility(closeBtn, false); + NodeUtils.toggleVisibility(forwardBtn, true); + } + }); + + backBtn.setOnAction(e -> model.back()); + backBtn.visibleProperty().bind(model.canGoBackProperty()); + + forwardBtn.setOnAction(e -> model.forward()); + forwardBtn.disableProperty().bind(model.canGoForwardProperty().not()); + + closeBtn.setOnAction(e -> close()); + } + + void reset() { + model.reset(); + } + + private Pane getScreenView(Screen screen) { + return switch (screen) { + case START -> startScreen; + case ACTION -> actionScreen; + case THEME -> themeScreen; + case EXEC -> execScreen; + case REPORT -> reportScreen; + }; + } + + private Pane createStartScreen() { + var previewImg = new ImageView(new Image( + Resources.getResourceAsStream("images/scene-builder-in-action.jpg") + )); + previewImg.setFitWidth(280); + previewImg.setFitHeight(190); + + var previewLbl = new Label(""" + SceneBuilder is a visual layout tool that lets users quickly \ + design JavaFX application user interfaces, without coding. + """); + previewLbl.setWrapText(true); + + var downloadLnk = new Hyperlink("Get SceneBuilder"); + downloadLnk.setGraphic(new FontIcon(Material2OutlinedAL.LINK)); + downloadLnk.setOnAction(e -> DefaultEventBus.getInstance().publish( + new BrowseEvent(URI.create("https://gluonhq.com/products/scene-builder/")) + )); + + var previewBox = new HBox(20, previewImg, new VBox(20, previewLbl, downloadLnk)); + previewBox.setAlignment(Pos.TOP_LEFT); + + var browseLbl = new Label("Select SceneBuilder installation directory:"); + browseLbl.getStyleClass().addAll(TEXT_CAPTION, TEXT_MUTED); + + var browseBtn = new Button("Browse", new FontIcon(Material2OutlinedAL.FOLDER)); + browseBtn.setMinWidth(120); + browseBtn.setOnAction(e -> { + var dirChooser = new DirectoryChooser(); + File dir = dirChooser.showDialog(getScene().getWindow()); + if (dir != null) { + model.setInstallDir(dir.toPath()); + } + }); + + var installDirLbl = new Label(); + installDirLbl.setTextOverrun(OverrunStyle.CENTER_ELLIPSIS); + installDirLbl.textProperty().bind(model.installDirProperty().map( + path -> path.toAbsolutePath().toString() + )); + HBox.setHgrow(installDirLbl, Priority.ALWAYS); + + var installDirBox = new HBox(10, browseBtn, installDirLbl); + installDirBox.setAlignment(Pos.CENTER_LEFT); + + var noticeLbl = new Label(""" + You must have write permission to the directory. \ + Installation files will be overwritten, but you can rollback changes using the same dialog again. + """); + noticeLbl.setWrapText(true); + + // ~ + + var root = new VBox(); + root.getChildren().setAll( + previewBox, + new Spacer(20, Orientation.VERTICAL), + browseLbl, + installDirBox, + noticeLbl + ); + root.setAlignment(Pos.CENTER_LEFT); + root.getStyleClass().add("screen"); + + return root; + } + + private Pane createActionScreen() { + var icon = new ImageView(new Image( + Resources.getResourceAsStream("images/question.png") + )); + icon.setFitWidth(64); + icon.setFitHeight(64); + + var iconBox = new HBox(icon); + iconBox.setAlignment(Pos.CENTER); + + var msgLbl = new Label("AtlantaFX theme pack is already installed."); + + var updateRadio = new RadioButton("Update or install other themes"); + updateRadio.setToggleGroup(model.getActionGroup()); + updateRadio.setSelected(true); + updateRadio.setUserData(SceneBuilderDialogModel.ACTION_INSTALL); + + var rollbackRadio = new RadioButton("Uninstall AtlantaFX themes from SceneBuilder"); + rollbackRadio.setToggleGroup(model.getActionGroup()); + rollbackRadio.setUserData(SceneBuilderDialogModel.ACTION_ROLLBACK); + + // ~ + + var root = new VBox(); + root.getChildren().setAll( + iconBox, + new Spacer(20, Orientation.VERTICAL), + msgLbl, + updateRadio, + rollbackRadio + ); + root.setAlignment(Pos.CENTER_LEFT); + root.getStyleClass().add("screen"); + + return root; + } + + private Pane createThemeScreen() { + var icon = new ImageView(new Image( + Resources.getResourceAsStream("images/color-palette.png") + )); + icon.setFitWidth(64); + icon.setFitHeight(64); + + var iconBox = new HBox(icon); + iconBox.setAlignment(Pos.CENTER); + + var msgLbl = new Label("Please select up to four themes to install."); + + final var checkBoxes = new ArrayList(); + final var listener = new ChangeListener() { + + private int activeCount = 0; + + @Override + public void changed(ObservableValue obs, Boolean old, Boolean val) { + if (val) { + activeCount++; + if (activeCount == model.getSceneBuilderThemes().size() - 1) { + for (var cb : checkBoxes) { + if (!cb.isSelected()) { + cb.setDisable(true); + } + } + } + } else { + if (activeCount == model.getSceneBuilderThemes().size() - 1) { + for (var cb : checkBoxes) { + cb.setDisable(false); + } + } + activeCount--; + } + + model.notifyThemeToggleStateChanged(); + } + }; + + model.getThemes().forEach(toggle -> { + var cb = new CheckBox(toggle.getTheme().getName()); + cb.selectedProperty().bindBidirectional(toggle.selectedProperty()); + cb.setUserData(toggle.getTheme()); + cb.setPrefWidth(250); // 2 columns, so half dialog size + cb.selectedProperty().addListener(listener); + checkBoxes.add(cb); + }); + + var checkBoxPane = new FlowPane(20, 10); + checkBoxPane.getChildren().setAll(checkBoxes); + + var root = new VBox(); + root.getChildren().setAll( + iconBox, + new Spacer(20, Orientation.VERTICAL), + msgLbl, + checkBoxPane + ); + root.setAlignment(Pos.CENTER_LEFT); + root.getStyleClass().add("screen"); + + return root; + } + + private Pane createExecScreen() { + var menuImg = new ImageView(new Image( + Resources.getResourceAsStream("images/scene-builder-themes.png") + )); + menuImg.setFitWidth(280); + menuImg.setFitHeight(210); + menuImg.setCursor(Cursor.HAND); + + var test = new ImageView(new Image( + Resources.getResourceAsStream("images/scene-builder-themes.png") + )); + test.setPickOnBounds(true); + + Tooltip tooltip = new Tooltip(); + tooltip.setGraphic(test); + + Tooltip.install(menuImg, tooltip); + + var msgLbl = new Label(""" + SceneBuilder doesn't support adding external themes. AtlantaFX themes will \ + replace old and unused Caspian stylesheets. + """); + msgLbl.setWrapText(true); + + var docsLbl = new Label("You can find more info about the process in the docs."); + docsLbl.setWrapText(true); + + var docsLink = new Hyperlink("Documentation"); + docsLink.setGraphic(new FontIcon(Material2OutlinedAL.LINK)); + docsLink.setOnAction(e -> DefaultEventBus.getInstance().publish( + new BrowseEvent(URI.create("https://mkpaz.github.io/atlantafx/fxml/")) + )); + + var imageBox = new HBox(20, menuImg, new VBox(20, msgLbl, docsLbl, docsLink)); + imageBox.setAlignment(Pos.TOP_LEFT); + + var mappingLbl = new Label("After the installation themes will be mapped as follows."); + mappingLbl.getStyleClass().addAll(TEXT_CAPTION, TEXT_MUTED); + + final var mappingGrid = new GridPane(); + mappingGrid.setHgap(20); + mappingGrid.setVgap(10); + + model.themeMapProperty().addListener((obs, old, val) -> { + mappingGrid.getChildren().clear(); + if (val != null) { + var idx = new AtomicInteger(0); + val.forEach((k, v) -> { + mappingGrid.add(new Label(k), 0, idx.get()); + mappingGrid.add(new FontIcon(Material2AL.EAST), 1, idx.get()); + mappingGrid.add(new Label(v), 2, idx.getAndIncrement()); + }); + } + }); + + var root = new VBox(); + root.getChildren().setAll( + imageBox, + new Spacer(20, Orientation.VERTICAL), + mappingLbl, + mappingGrid + ); + root.setAlignment(Pos.CENTER_LEFT); + root.getStyleClass().add("screen"); + + return root; + } + + private Pane createReportScreen() { + var infoIcon = new ImageView(new Image( + Resources.getResourceAsStream("images/info.png") + )); + infoIcon.setFitWidth(64); + infoIcon.setFitHeight(64); + + var warningIcon = new ImageView(new Image( + Resources.getResourceAsStream("images/warning.png") + )); + warningIcon.setFitWidth(64); + warningIcon.setFitHeight(64); + + var iconBox = new HBox(); + iconBox.setAlignment(Pos.CENTER); + + var msgLbl = new Label(); + msgLbl.setAlignment(Pos.TOP_CENTER); + msgLbl.getStyleClass().add(Styles.TITLE_4); + msgLbl.setMaxWidth(400); + msgLbl.setWrapText(true); + + model.reportProperty().addListener((obs, old, val) -> { + if (val != null) { + iconBox.getChildren().setAll(val.error() ? warningIcon : infoIcon); + msgLbl.setText(val.message()); + } else { + iconBox.getChildren().clear(); + msgLbl.setText(null); + } + }); + + // ~ + + var root = new VBox(); + root.getChildren().setAll( + iconBox, + new Spacer(20, Orientation.VERTICAL), + msgLbl + ); + root.setAlignment(Pos.CENTER); + root.getStyleClass().add("screen"); + + return root; + } +} diff --git a/sampler/src/main/java/atlantafx/sampler/page/general/SceneBuilderDialogModel.java b/sampler/src/main/java/atlantafx/sampler/page/general/SceneBuilderDialogModel.java new file mode 100644 index 0000000..16c5e95 --- /dev/null +++ b/sampler/src/main/java/atlantafx/sampler/page/general/SceneBuilderDialogModel.java @@ -0,0 +1,340 @@ +package atlantafx.sampler.page.general; + +import atlantafx.base.theme.PrimerLight; +import atlantafx.sampler.theme.SamplerTheme; +import atlantafx.sampler.theme.SceneBuilderTheme; +import atlantafx.sampler.theme.ThemeManager; +import java.nio.file.Path; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; +import javafx.beans.property.BooleanProperty; +import javafx.beans.property.ReadOnlyBooleanProperty; +import javafx.beans.property.ReadOnlyBooleanWrapper; +import javafx.beans.property.ReadOnlyObjectProperty; +import javafx.beans.property.ReadOnlyObjectWrapper; +import javafx.beans.property.SimpleBooleanProperty; +import javafx.concurrent.Task; +import javafx.scene.control.ToggleGroup; +import org.jetbrains.annotations.Nullable; + +class SceneBuilderDialogModel { + + public enum Screen { + // order matters as it determines swipe direction when switching between screens + START, ACTION, THEME, EXEC, REPORT + } + + static final String ACTION_INSTALL = "INSTALL"; + static final String ACTION_ROLLBACK = "ROLLBACK"; + + public SceneBuilderDialogModel() { + // default constructor + } + + private void changeScreen(@Nullable Transition transition) { + // null value means that forward action was blocked on the previous screen, so no transition required + if (transition == null) { + return; + } + + canGoBack.set(transition.canGoBack()); + canGoForward.set(transition.canGoForward()); + if (transition.action() != null) { + transition.action().run(); + } + activeScreen.set(transition.nextScreen()); + } + + private void updateThemeMapping() { + themeMap.set(getThemeMapping().entrySet().stream().collect( + Collectors.toMap( + e -> e.getKey().name(), + e -> e.getValue().getName(), + (e1, e2) -> e1, + LinkedHashMap::new + ) + )); + } + + private Map getThemeMapping() { + var sbIdx = 0; + var map = new LinkedHashMap(); + + for (int idx = 0; idx < themes.size() && sbIdx < sceneBuilderThemes.size(); idx++) { + var samplerTheme = themes.get(idx); + if (samplerTheme.isSelected()) { + var sbTheme = sceneBuilderThemes.get(sbIdx); + map.put(sbTheme, samplerTheme.getTheme()); + sbIdx++; + } + } + + return map; + } + + private void installSelectedThemes() { + Objects.requireNonNull(installer, "SceneBuilder install directory must be selected first."); + + var task = new Task() { + @Override + protected Void call() { + installer.install(getThemeMapping()); + return null; + } + }; + task.setOnSucceeded(x -> report.set(Report.info( + "AtlantaFX themes successfully installed.\nRestart SceneBuilder to apply changes.", + Screen.START + ))); + task.setOnFailed(e -> report.set(Report.error(e.getSource().getException().getMessage(), Screen.EXEC))); + + new Thread(task).start(); + } + + private void uninstallAll() { + Objects.requireNonNull(installer, "SceneBuilder install directory must be selected first."); + + var task = new Task() { + @Override + protected Void call() { + installer.uninstall(); + return null; + } + }; + task.setOnSucceeded(x -> report.set(Report.info( + "AtlantaFX themes successfully uninstalled.\nRestart SceneBuilder to apply changes.", + Screen.START + ))); + task.setOnFailed(e -> report.set(Report.error(e.getSource().getException().getMessage(), Screen.EXEC))); + + new Thread(task).start(); + } + + private void requireSupportedAction() { + String action = (String) actionGroup.getSelectedToggle().getUserData(); + + if (action == null) { + throw new RuntimeException("Action must be selected."); + } + + if (!ACTION_INSTALL.equals(action) && !ACTION_ROLLBACK.equals(action)) { + throw new RuntimeException("Unknown action: \"" + action + "\"."); + } + } + + private boolean isSelectedAction(String action) { + return action.equals(actionGroup.getSelectedToggle().getUserData()); + } + + /////////////////////////////////////////////////////////////////////////// + // Properties // + /////////////////////////////////////////////////////////////////////////// + + private final List sceneBuilderThemes = SceneBuilderTheme.CASPIAN_THEMES; + + private final List themes = ThemeManager.getInstance().getRepository().getAll().stream() + .map(t -> new ThemeToggle(t, t.unwrap() instanceof PrimerLight)) + .toList(); + + private final ToggleGroup actionGroup = new ToggleGroup(); + private @Nullable SceneBuilderInstaller installer; + + private final ReadOnlyObjectWrapper> themeMap = new ReadOnlyObjectWrapper<>(); + private final ReadOnlyObjectWrapper installDir = new ReadOnlyObjectWrapper<>(); + private final ReadOnlyObjectWrapper activeScreen = new ReadOnlyObjectWrapper<>(Screen.START); + private final ReadOnlyObjectWrapper report = new ReadOnlyObjectWrapper<>(null); + private final ReadOnlyBooleanWrapper canGoBack = new ReadOnlyBooleanWrapper(false); + // block initially until user selects installation directory + private final ReadOnlyBooleanWrapper canGoForward = new ReadOnlyBooleanWrapper(false); + + public List getSceneBuilderThemes() { + return sceneBuilderThemes; + } + + public List getThemes() { + return themes; + } + + public ToggleGroup getActionGroup() { + return actionGroup; + } + + public ReadOnlyObjectProperty> themeMapProperty() { + return themeMap.getReadOnlyProperty(); + } + + public ReadOnlyObjectProperty installDirProperty() { + return installDir.getReadOnlyProperty(); + } + + public ReadOnlyObjectProperty activeScreenProperty() { + return activeScreen.getReadOnlyProperty(); + } + + public ReadOnlyObjectProperty reportProperty() { + return report.getReadOnlyProperty(); + } + + public ReadOnlyBooleanProperty canGoBackProperty() { + return canGoBack.getReadOnlyProperty(); + } + + public ReadOnlyBooleanProperty canGoForwardProperty() { + return canGoForward.getReadOnlyProperty(); + } + + /////////////////////////////////////////////////////////////////////////// + // Commands // + /////////////////////////////////////////////////////////////////////////// + + public void setInstallDir(Path path) { + Objects.requireNonNull(path); + installDir.set(path); + installer = new SceneBuilderInstaller(path); + canGoForward.set(true); + } + + public void notifyThemeToggleStateChanged() { + var selectedCount = themes.stream() + .filter(ThemeToggle::isSelected) + .count(); + canGoForward.set(selectedCount > 0 && selectedCount <= sceneBuilderThemes.size()); + } + + public void reset() { + // go to the start screen, but keep install dir and form fill + activeScreen.set(Screen.START); + canGoBack.set(false); + canGoForward.set(true); + } + + public void back() { + var transition = switch (activeScreen.get()) { + case START -> null; + case ACTION -> new Transition(Screen.START, false, true); + case THEME -> { + Objects.requireNonNull(installer, "SceneBuilder install directory must be selected first."); + + yield installer.isThemePackInstalled() + ? new Transition(Screen.ACTION, true, true) + : new Transition(Screen.START, false, true); + } + case EXEC -> isSelectedAction(ACTION_INSTALL) + ? new Transition(Screen.THEME, true, true) + : new Transition(Screen.ACTION, true, true); + case REPORT -> { + var returnScreen = report.get().returnScreen(); + yield new Transition(returnScreen, returnScreen != Screen.START, true, () -> report.set(null)); + } + }; + + changeScreen(transition); + } + + public void forward() { + var transition = switch (activeScreen.get()) { + case START -> { + Objects.requireNonNull(installer, "SceneBuilder install directory must be selected first."); + + if (!installer.isValidDir()) { + yield new Transition(Screen.REPORT, true, false, () -> report.set( + Report.error("Selected directory doesn't look like SceneBuilder installation directory.") + )); + } + + if (!installer.hasUserWritePermission()) { + yield new Transition(Screen.REPORT, true, false, () -> report.set( + Report.error("You don't have permission to write into installation directory.") + )); + } + + yield new Transition( + installer.isThemePackInstalled() ? Screen.ACTION : Screen.THEME, true, true, + () -> actionGroup.selectToggle(actionGroup.getToggles().get(0)) // reset action + ); + } + case ACTION -> { + // action must be selected before leaving this screen (fail first) + requireSupportedAction(); + + if (isSelectedAction(ACTION_ROLLBACK)) { + yield new Transition(Screen.REPORT, true, false, this::uninstallAll); + } + + yield new Transition(Screen.THEME, true, true); + } + case THEME -> new Transition(Screen.EXEC, true, true, this::updateThemeMapping); + case EXEC -> { + requireSupportedAction(); + + if (isSelectedAction(ACTION_INSTALL)) { + yield new Transition(Screen.REPORT, true, false, this::installSelectedThemes); + } + + yield null; + } + case REPORT -> null; + }; + + changeScreen(transition); + } + + /////////////////////////////////////////////////////////////////////////// + + public record Report(String message, Screen returnScreen, boolean error) { + + public Report { + Objects.requireNonNull(message); + Objects.requireNonNull(returnScreen); + } + + public static Report info(String message) { + return info(message, Screen.EXEC); + } + + public static Report info(String message, Screen returnScreen) { + return new Report(message, returnScreen, false); + } + + public static Report error(String message) { + return error(message, Screen.START); + } + + public static Report error(String message, Screen returnScreen) { + return new Report(message, returnScreen, true); + } + } + + public static class ThemeToggle { + + private final SamplerTheme theme; + private final BooleanProperty selected = new SimpleBooleanProperty(); + + public ThemeToggle(SamplerTheme theme, boolean selected) { + this.theme = Objects.requireNonNull(theme); + this.selected.set(selected); + } + + public SamplerTheme getTheme() { + return theme; + } + + public boolean isSelected() { + return selected.get(); + } + + public BooleanProperty selectedProperty() { + return selected; + } + } + + public record Transition(Screen nextScreen, boolean canGoBack, boolean canGoForward, @Nullable Runnable action) { + + public Transition(Screen nextScreen, boolean canGoBack, boolean canGoForward) { + this(nextScreen, canGoBack, canGoForward, null); + } + } +} diff --git a/sampler/src/main/java/atlantafx/sampler/page/general/SceneBuilderInstaller.java b/sampler/src/main/java/atlantafx/sampler/page/general/SceneBuilderInstaller.java new file mode 100644 index 0000000..814deb7 --- /dev/null +++ b/sampler/src/main/java/atlantafx/sampler/page/general/SceneBuilderInstaller.java @@ -0,0 +1,234 @@ +package atlantafx.sampler.page.general; + +import static java.nio.charset.StandardCharsets.UTF_8; + +import atlantafx.sampler.theme.SamplerTheme; +import atlantafx.sampler.theme.SceneBuilderTheme; +import java.io.BufferedOutputStream; +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; +import java.nio.file.StandardOpenOption; +import java.util.List; +import java.util.ListIterator; +import java.util.Map; +import java.util.Objects; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; + +class SceneBuilderInstaller { + + private static final String THEME_PACK_FILE_NAME = "atlantafx-scene-builder.zip"; + + private final Path sceneBuilderDir; + + public SceneBuilderInstaller(Path dir) { + this.sceneBuilderDir = Objects.requireNonNull(dir); + } + + public boolean hasUserWritePermission() { + return Files.isWritable(getConfigDir()) && Files.isWritable(getConfigFile()); + } + + public boolean isValidDir() { + var cfgDir = getConfigDir(); + var cfgFile = getConfigFile(); + return Files.exists(cfgDir) && Files.isDirectory(cfgDir) + && Files.exists(cfgFile) && Files.isRegularFile(cfgFile); + } + + public boolean isThemePackInstalled() { + try { + String cfg = Files.readString(getConfigFile(), UTF_8); + Path themePack = getThemePack(); + return cfg.contains(THEME_PACK_FILE_NAME) && Files.exists(themePack) && Files.isRegularFile(themePack); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + @SuppressWarnings("StringSplitter") + public void install(Map themes) { + Objects.requireNonNull(themes); + + if (themes.isEmpty()) { + return; + } + + // write theme pack archive to install dir + File zipFile = getThemePack().toFile(); + try (var fos = new FileOutputStream(zipFile); + var bos = new BufferedOutputStream(fos); + var out = new ZipOutputStream(bos)) { + + var readme = new StringBuilder(); + readme + .append("This file was auto-generated by AtlantaFX Sampler v") + .append(System.getProperty("app.version")) + .append(".\n\n") + .append("Installed themes:\n\n"); + + for (var theme : themes.entrySet()) { + var zipPath = theme.getKey().url(); + + readme + .append(String.format("%-45s", theme.getKey().name())) + .append(" >> ") + .append(theme.getValue().getName()) + .append("\n"); + + writeToZip(out, zipPath, theme.getValue().getResource().getInputStream()); + } + + writeToZip(out, "readme.txt", new ByteArrayInputStream(readme.toString().getBytes(UTF_8))); + } catch (Exception e) { + throw new RuntimeException("Unable to write theme pack to the SceneBuilder installation directory.", e); + } + + // update config file + try { + List cfgData = Files.readAllLines(getConfigFile(), UTF_8); + + // already updated + if (cfgData.stream().anyMatch(s -> s.contains(THEME_PACK_FILE_NAME))) { + return; + } + + backupConfig(); + + ListIterator it = cfgData.listIterator(); + while (it.hasNext()) { + var line = it.next(); + if (line != null && line.startsWith("app.classpath")) { + var kv = line.split("="); + + if (kv.length != 2) { + throw new RuntimeException("Unexpected value in SceneBuilder config file: \"" + line + "\"."); + } + + it.set(kv[0] + "=$APPDIR" + File.separator + THEME_PACK_FILE_NAME + ":" + kv[1]); + } + } + + Files.writeString( + getConfigFile(), + String.join("\n", cfgData), // System.lineSeparator() ? + StandardOpenOption.CREATE, + StandardOpenOption.TRUNCATE_EXISTING + ); + } catch (Exception e) { + throw new RuntimeException("Unable to update SceneBuilder config file.", e); + } + } + + private void writeToZip(ZipOutputStream out, String zipPath, InputStream in) throws IOException { + var entry = new ZipEntry(zipPath); + try (in) { + out.putNextEntry(entry); + + byte[] bytes = new byte[1024]; + int count = in.read(bytes); + while (count > -1) { + out.write(bytes, 0, count); + count = in.read(bytes); + } + } finally { + out.closeEntry(); + } + } + + public void uninstall() { + var cfg = getConfigFile(); + var backup = getBackupConfigFile(); + + // rollback config file + if (Files.exists(backup)) { + // easy way + copyFile(backup, cfg, StandardCopyOption.REPLACE_EXISTING); + } else { + // fallback (probably not needed, but should do no harm) + try { + List cfgData = Files.readAllLines(getConfigFile(), UTF_8); + + // not present + if (cfgData.stream().noneMatch(s -> s.contains(THEME_PACK_FILE_NAME))) { + return; + } + + ListIterator it = cfgData.listIterator(); + while (it.hasNext()) { + var line = it.next(); + if (line != null && line.startsWith("app.classpath")) { + it.set(line.replace("$APPDIR" + File.separator + THEME_PACK_FILE_NAME + ":", "")); + } + } + + Files.writeString( + getConfigFile(), + String.join("\n", cfgData), // System.lineSeparator() ? + StandardOpenOption.CREATE, + StandardOpenOption.TRUNCATE_EXISTING + ); + } catch (Exception e) { + throw new RuntimeException("Unable to update SceneBuilder config file.", e); + } + } + + // remove theme pack and backup + deleteFile(getThemePack()); + deleteFile(backup); + } + + void backupConfig() { + var cfg = getConfigFile(); + var backup = getBackupConfigFile(); + + if (!Files.exists(backup)) { + copyFile(cfg, backup); + } + } + + private void copyFile(Path source, Path dest, StandardCopyOption... options) { + Objects.requireNonNull(source); + Objects.requireNonNull(dest); + + try { + Files.copy(source, dest, options); + } catch (IOException e) { + throw new RuntimeException("Unable to copy \"" + source + "\" to \"" + dest + "\".", e); + } + } + + public static void deleteFile(Path path) { + Objects.requireNonNull(path); + + try { + if (Files.exists(path)) { + Files.delete(path); + } + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + private Path getConfigDir() { + return sceneBuilderDir.resolve("lib/app"); + } + + private Path getConfigFile() { + return getConfigDir().resolve("SceneBuilder.cfg"); + } + + private Path getBackupConfigFile() { + return getConfigDir().resolve("SceneBuilder.cfg.atlantafx.backup"); + } + + private Path getThemePack() { + return getConfigDir().resolve(THEME_PACK_FILE_NAME); + } +} diff --git a/sampler/src/main/java/atlantafx/sampler/page/general/ThemePage.java b/sampler/src/main/java/atlantafx/sampler/page/general/ThemePage.java index 3d4d734..5bb0eef 100755 --- a/sampler/src/main/java/atlantafx/sampler/page/general/ThemePage.java +++ b/sampler/src/main/java/atlantafx/sampler/page/general/ThemePage.java @@ -11,6 +11,7 @@ import static atlantafx.sampler.page.SampleBlock.BLOCK_VGAP; import static atlantafx.sampler.util.Controls.hyperlink; import atlantafx.base.theme.Styles; +import atlantafx.sampler.Resources; import atlantafx.sampler.event.DefaultEventBus; import atlantafx.sampler.event.ThemeEvent; import atlantafx.sampler.page.AbstractPage; @@ -25,6 +26,8 @@ import javafx.scene.control.Button; import javafx.scene.control.ChoiceBox; import javafx.scene.control.Label; import javafx.scene.control.Tooltip; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; import javafx.scene.layout.GridPane; import javafx.scene.layout.VBox; import javafx.scene.text.Text; @@ -38,7 +41,11 @@ import org.kordamp.ikonli.material2.Material2OutlinedMZ; public class ThemePage extends AbstractPage { public static final String NAME = "Theme"; + private static final ThemeManager TM = ThemeManager.getInstance(); + private static final Image SCENE_BUILDER_ICON = new Image( + Resources.getResourceAsStream("images/scene-builder_32.png") + ); private final Consumer colorBlockActionHandler = colorBlock -> { ContrastCheckerDialog dialog = getOrCreateContrastCheckerDialog(); @@ -58,6 +65,7 @@ public class ThemePage extends AbstractPage { private ThemeRepoManagerDialog themeRepoManagerDialog; private ContrastCheckerDialog contrastCheckerDialog; + private SceneBuilderDialog sceneBuilderDialog; @Override public String getName() { @@ -130,6 +138,14 @@ public class ThemePage extends AbstractPage { var accentSelector = new AccentColorSelector(); + var sceneBuilderBtn = new Button("SceneBuilder Integration"); + sceneBuilderBtn.setGraphic(new ImageView(SCENE_BUILDER_ICON)); + sceneBuilderBtn.setOnAction(e -> { + SceneBuilderDialog dialog = getOrCreateScneBuilderDialog(); + overlay.setContent(dialog, HPos.CENTER); + overlay.toFront(); + }); + // ~ var grid = new GridPane(); @@ -141,6 +157,7 @@ public class ThemePage extends AbstractPage { grid.add(themeRepoBtn, 2, 0); grid.add(new Label("Accent color"), 0, 1); grid.add(accentSelector, 1, 1); + grid.add(sceneBuilderBtn, 0, 2, GridPane.REMAINING, 1); return grid; } @@ -208,4 +225,18 @@ public class ThemePage extends AbstractPage { return contrastCheckerDialog; } + + private SceneBuilderDialog getOrCreateScneBuilderDialog() { + if (sceneBuilderDialog == null) { + sceneBuilderDialog = new SceneBuilderDialog(); + } + + sceneBuilderDialog.setOnCloseRequest(() -> { + overlay.removeContent(); + overlay.toBack(); + sceneBuilderDialog.reset(); + }); + + return sceneBuilderDialog; + } } diff --git a/sampler/src/main/java/atlantafx/sampler/theme/SamplerTheme.java b/sampler/src/main/java/atlantafx/sampler/theme/SamplerTheme.java index 0f1f696..289c52a 100644 --- a/sampler/src/main/java/atlantafx/sampler/theme/SamplerTheme.java +++ b/sampler/src/main/java/atlantafx/sampler/theme/SamplerTheme.java @@ -84,7 +84,7 @@ public final class SamplerTheme implements Theme { // any external file path must have "file://" prefix @Override public String getUserAgentStylesheet() { - return IS_DEV_MODE ? DUMMY_STYLESHEET : getThemeFile().toURI().toString(); + return IS_DEV_MODE ? DUMMY_STYLESHEET : getResource().toURI().toString(); } @Override @@ -93,7 +93,7 @@ public final class SamplerTheme implements Theme { } public Set getAllStylesheets() { - return IS_DEV_MODE ? merge(getThemeFile().toURI().toString(), APP_STYLESHEETS) : Set.of(APP_STYLESHEETS); + return IS_DEV_MODE ? merge(getResource().toURI().toString(), APP_STYLESHEETS) : Set.of(APP_STYLESHEETS); } // Checks whether wrapped theme is a project theme or user external theme. @@ -105,7 +105,7 @@ public final class SamplerTheme implements Theme { // - minified CSS files are not supported // - only first PARSE_LIMIT lines will be read public Map parseColors() throws IOException { - FileResource file = getThemeFile(); + FileResource file = getResource(); return file.internal() ? parseColorsForClasspath(file) : parseColorsForFilesystem(file); } @@ -162,10 +162,10 @@ public final class SamplerTheme implements Theme { } public String getPath() { - return getThemeFile().toPath().toString(); + return getResource().toPath().toString(); } - private FileResource getThemeFile() { + public FileResource getResource() { if (!isProjectTheme()) { return FileResource.createExternal(theme.getUserAgentStylesheet()); } diff --git a/sampler/src/main/java/atlantafx/sampler/theme/SceneBuilderTheme.java b/sampler/src/main/java/atlantafx/sampler/theme/SceneBuilderTheme.java new file mode 100644 index 0000000..e1e86ae --- /dev/null +++ b/sampler/src/main/java/atlantafx/sampler/theme/SceneBuilderTheme.java @@ -0,0 +1,31 @@ +package atlantafx.sampler.theme; + +import java.util.List; +import java.util.Objects; + +public record SceneBuilderTheme(String name, String url) { + + public static final List CASPIAN_THEMES = List.of( + new SceneBuilderTheme( + "Caspian Embedded (FX2)", + "com/oracle/javafx/scenebuilder/kit/util/css/caspian/caspian-embedded.css" + ), + new SceneBuilderTheme( + "Caspian Embedded QVGA (FX2)", + "com/oracle/javafx/scenebuilder/kit/util/css/caspian/caspian-embedded-qvga.css" + ), + new SceneBuilderTheme( + "Caspian High Contrast Embedded (FX2)", + "com/oracle/javafx/scenebuilder/kit/util/css/caspian/caspian-embedded-highContrast.css" + ), + new SceneBuilderTheme( + "Caspian High Contrast Embedded QVGA (FX2)", + "com/oracle/javafx/scenebuilder/kit/util/css/caspian/caspian-embedded-qvga-highContrast.css" + ) + ); + + public SceneBuilderTheme { + Objects.requireNonNull(name); + Objects.requireNonNull(url); + } +} \ No newline at end of file diff --git a/sampler/src/main/resources/atlantafx/sampler/assets/styles/scss/general/_index.scss b/sampler/src/main/resources/atlantafx/sampler/assets/styles/scss/general/_index.scss index 8c25206..076ec59 100644 --- a/sampler/src/main/resources/atlantafx/sampler/assets/styles/scss/general/_index.scss +++ b/sampler/src/main/resources/atlantafx/sampler/assets/styles/scss/general/_index.scss @@ -2,4 +2,5 @@ @use "fonts"; @use "root"; -@use "util"; \ No newline at end of file +@use "scene-builder-wizard"; +@use "util"; diff --git a/sampler/src/main/resources/atlantafx/sampler/assets/styles/scss/general/_scene-builder-wizard.scss b/sampler/src/main/resources/atlantafx/sampler/assets/styles/scss/general/_scene-builder-wizard.scss new file mode 100644 index 0000000..7b2d6b5 --- /dev/null +++ b/sampler/src/main/resources/atlantafx/sampler/assets/styles/scss/general/_scene-builder-wizard.scss @@ -0,0 +1,7 @@ +#scene-builder-wizard { + .screen { + -fx-padding: 10px 20px 10px 20px; + -fx-spacing: 10px; + -fx-background-color: -color-bg-default; + } +} diff --git a/sampler/src/main/resources/atlantafx/sampler/images/color-palette.png b/sampler/src/main/resources/atlantafx/sampler/images/color-palette.png new file mode 100644 index 0000000000000000000000000000000000000000..af5d3444b6a507bd58a8a0336e2834dfbdf2d754 GIT binary patch literal 10821 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 T@KA~>`2-Z-s>xPKn}_`$5T+qI literal 0 HcmV?d00001 diff --git a/sampler/src/main/resources/atlantafx/sampler/images/info.png b/sampler/src/main/resources/atlantafx/sampler/images/info.png new file mode 100644 index 0000000000000000000000000000000000000000..d687ddaeb6a5f2e63ff099637cf6c27bfe872c1d GIT binary patch literal 10312 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 w*oLM)0J*>;!W}Js7)|+oA_txU!)e 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 literal 0 HcmV?d00001 diff --git a/sampler/src/main/resources/atlantafx/sampler/images/scene-builder-in-action.jpg b/sampler/src/main/resources/atlantafx/sampler/images/scene-builder-in-action.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c28bb67b491930072878f0c7bebe2d9d38e91c90 GIT binary patch literal 77900 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 literal 0 HcmV?d00001 diff --git a/sampler/src/main/resources/atlantafx/sampler/images/scene-builder-themes.png b/sampler/src/main/resources/atlantafx/sampler/images/scene-builder-themes.png new file mode 100644 index 0000000000000000000000000000000000000000..b681161c2fb857024bb922915453b306ff133b0e GIT binary patch literal 52456 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%0D%YTSy_&-$xX|IdJML%L8Za zL%_W$T!x&OOhwX@XwNC(va81)HAE*fzfQfrGVy?hucWfP;M}p|jy7L+lz@>|S`f?x zp+-^aN|AvTL&skSvZituiognqoDDuZsPjBRM)`Q4^_i(JyIl$6IXTN#Ewu$4B&DvZ zgrTh_<(CJtnEV05F3%D}5VKC_L$ifZ4jDR6XFBw10S|CuX~2yp zd2@=`;RWHi99hf7!{RnZLOCqJ5WbyZ;fSzPJ@iwYcdu8Owrs%ofCD$=IWg=n`OQHU zN1UV}<@%KY_tggO#F9?LB@qDSO|<{S&X>G*!2OEnVSTc9`GJ%5c≫F}kv|BB|Y0 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 Dk3pms literal 0 HcmV?d00001 diff --git a/sampler/src/main/resources/atlantafx/sampler/images/scene-builder.png b/sampler/src/main/resources/atlantafx/sampler/images/scene-builder.png new file mode 100644 index 0000000000000000000000000000000000000000..9daab06a5edd8ae7b75e55fc6cb50ed6b2595bb0 GIT binary patch literal 4363 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 FV1hP(i_`!B literal 0 HcmV?d00001 diff --git a/sampler/src/main/resources/atlantafx/sampler/images/scene-builder_32.png b/sampler/src/main/resources/atlantafx/sampler/images/scene-builder_32.png new file mode 100644 index 0000000000000000000000000000000000000000..c872ecbd576fce1a632f558206b19bba4d6faf73 GIT binary patch literal 1845 zcmV-52g>+~P)ZYmAlE6^5U8?{heZ8DK_6pi=}95iEE^X$vwEYOPJw5i8cH zy+sZFXlr9*qo#>Mt%CjBQg}q}6D_F(zIbElg1x#ab0FP*BvVFo-iE3^V8Z z_S+w4fVtw>bpQIk>~~%ET5G>+ZSg6VSF8w}@#OiK%dr<&9D_mPJqXVNYuL1*MJq@n z)u|C1U$DIC)@jtyKHhQlyrBjV=M9oEqUg}5jo(Nre-JqRMM$V zcD_A_N*`RnI!c6waL5rSJAIJwhlbP#TflL8L_xB7SwXj`dBfTv9q_6%im9>uYr$2b zsyKa^oOY(6qg2GJeHNUJqK@SJ27!0S{~6w%wlau7vGj zf$la=1NNmQoY8axfPDX16I}K-!I*x6S#YX7Px{Pkyz348(ppIQ;gju8rmIGb8jTto z98Nw<9QX)tehj)l?q@F^7p>Bu!rf0S9ABW6Un#I8oOI~d)$7FQ@kGG?dRn}{gY0)VQMm3N!tAfgm2UF&51Og7$$zy>WIcrDYn?yW zYBsh?ji(Xjd|7Gg>3HiVoY`qtQreve4Z)!y9154k$-$x?z`32jo#Wk>xBWxTx{1x- zhla_}wU_MfAL6}x$RAiqwq~WXRX>qte!=dsv$d-U$Iq9rvWM=h=KcKd0-(`Cl4Qxd zt^DmAXVs#VG$vr}bF%XtIUMNCQ)e6Lv6WC;Phr`eP_Bg!+Q{zt5lozhfwX;#)83*} zc9h-TPI~=?YNhYkOnPNKnszdpG1nRs`bYf$%HPSWx6E|M+pPhj>J&t$pG+`_nH-&u5cIB`9TYOxRQ-VB$9EiZ)T?$`pM&oK=>r;a{B1dEp z#%go$zWnjjF*McVf}&+acSTfegy=!3Bay%SqP=sw zHFJ>|T{ooe)R{<>4iaxL-1Q^d~KP1=h~y&O~kjT5094#|hP z=O76WU_}5%;W#NGGphiqRX}k{bpCGcLpK3%UV|i3`wn=2I|lsLE6{ByKpY>dUGt;F zp(Yk0@sb+|3oascwv#{c8>=r1mT;UB54Q4hTz=V<>m-#GB-K@MK438NyL-@_MG7Z; z9vw5QO2d2Fj4G%ksVFH*DhWzhHFd;gzfe5wZ2ayUWOscJ+W!M%1OY-rAT~x0GNR4L z^16i^ked3{MsB;q&fch?x<0{Dr^Cn_Ho?9ovp`rW2OlL1>t& z^xD(TRxgL1E{HhJDiG>}22!!jv+~*nHxc6P1JmSgJKvrk7C3r3I$<$k=3VUCY3d~(w*NTKXm3qqP8K`9?^lmtF94EYqE}A zC{3S>ilcDPe$o>^ueRd>Yv^|DE-K;pYAzmbx)E5}Z#&u9n;Cs4q<;Io0|~`4Vdk;W z*(Q4S55{2^W)=nyvf^enx87C_%cj;lu-En550c8mPwkSV2?5pjK>OAqjRUAOc#1aZ z5xN?0hu)D)D@b&AT$=2A`vODV@B~G%I`PKo5sD1UrhRo7JK_6OsJld$K9IvuWBIy; z7aMMsG{?!#x8;!a!KrsFKYGAezB@T}Bq{YdZSPo40HN10%eAESfqoGh&U3F@I1jui z?_>sDzKQ~)R2HiJgonvKS9zpDg)+a5N5!out*3e8^U~l*jqGXm@R>_-SdA!+2ygc& z@NG5!{m-9-JwlQXuj(7mO^BCAVEk2Ci$-D`KE>-8!1sSWQfgZQx*T}{&}cyBeatgN j|B0^2e>qrSBU%3iO{iG$<5qL)00000NkvXXu0mjf60wT| literal 0 HcmV?d00001 diff --git a/sampler/src/main/resources/atlantafx/sampler/images/warning.png b/sampler/src/main/resources/atlantafx/sampler/images/warning.png new file mode 100644 index 0000000000000000000000000000000000000000..08830977849039fab5d48bd6ee106206c5391193 GIT binary patch literal 21419 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 X%GUI3A~1m_00000NkvXXu0mjfjWE?K literal 0 HcmV?d00001 diff --git a/sampler/src/test/java/atlantafx/sampler/page/general/SceneBuilderInstallerTest.java b/sampler/src/test/java/atlantafx/sampler/page/general/SceneBuilderInstallerTest.java new file mode 100644 index 0000000..acfe8f9 --- /dev/null +++ b/sampler/src/test/java/atlantafx/sampler/page/general/SceneBuilderInstallerTest.java @@ -0,0 +1,29 @@ +package atlantafx.sampler.page.general; + +import atlantafx.base.theme.PrimerDark; +import atlantafx.base.theme.PrimerLight; +import atlantafx.sampler.theme.SamplerTheme; +import atlantafx.sampler.theme.SceneBuilderTheme; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Map; + +public class SceneBuilderInstallerTest { + + private static final Path INSTALL_DIR = Paths.get("/opt/scenebuilder"); + + //@Test + public void testInstall() { + var installer = new SceneBuilderInstaller(INSTALL_DIR); + installer.install(Map.of( + SceneBuilderTheme.CASPIAN_THEMES.get(0), new SamplerTheme(new PrimerLight()), + SceneBuilderTheme.CASPIAN_THEMES.get(1), new SamplerTheme(new PrimerDark()) + )); + } + + //@Test + public void testUninstall() { + var installer = new SceneBuilderInstaller(INSTALL_DIR); + installer.uninstall(); + } +} \ No newline at end of file