diff --git a/PlayWall/src/main/java/de/tobias/playpad/project/ProjectJsonReader.java b/PlayWall/src/main/java/de/tobias/playpad/project/ProjectJsonReader.java index 6f33e38af123e5c80346b484ffed63211fee6171..89c39e3e87ee549729c15da1f4e868f08e590c14 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/project/ProjectJsonReader.java +++ b/PlayWall/src/main/java/de/tobias/playpad/project/ProjectJsonReader.java @@ -101,7 +101,11 @@ public class ProjectJsonReader { ModernColor backgroundColor = ModernColor.valueOf(object.getString("background_color")); ModernColor playColor = ModernColor.valueOf(object.getString("play_color")); - return new ModernCartDesign(pad, id, backgroundColor, playColor, ModernColor.RED2); // TODO Fix Cue In Color + return new ModernCartDesign.ModernCartDesignBuilder(pad, id) + .withBackgroundColor(backgroundColor, false) + .withPlayColor(playColor, false) + .withCueInColor(ModernColor.RED2, false) + .build(); // TODO Fix Cue In Color } return null; } diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/model/ModernCartDesign.java b/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/model/ModernCartDesign.java index b727faca01a59ac6e266423d1aea3f69f69edd7a..d69ac256e6bf02208c0d151a48b68d6cbb69720d 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/model/ModernCartDesign.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/model/ModernCartDesign.java @@ -6,40 +6,96 @@ import de.tobias.playpad.pad.Pad; import de.tobias.playpad.server.sync.command.CommandManager; import de.tobias.playpad.server.sync.command.Commands; import de.tobias.playpad.server.sync.listener.upstream.DesignUpdateListener; +import javafx.beans.property.BooleanProperty; import javafx.beans.property.ObjectProperty; +import javafx.beans.property.SimpleBooleanProperty; import javafx.beans.property.SimpleObjectProperty; import javafx.scene.paint.Color; import java.util.UUID; public class ModernCartDesign implements FeedbackDesignColorSuggester { + public static class ModernCartDesignBuilder { + private final Pad pad; + private final UUID id; + + private ModernColor backgroundColor = DEFAULT_COLOR_BACKGROUND; + private Boolean enableCustomBackgroundColor = false; + + private ModernColor playColor = DEFAULT_COLOR_PLAY; + private Boolean enableCustomPlayColor = false; + + private ModernColor cueInColor = DEFAULT_COLOR_CUE_IN; + private Boolean enableCustomCueInColor = false; + + public ModernCartDesignBuilder(Pad pad) { + this.pad = pad; + this.id =UUID.randomUUID(); + } + + public ModernCartDesignBuilder(Pad pad, UUID id) { + this.pad = pad; + this.id = id; + } + + public ModernCartDesignBuilder withBackgroundColor(ModernColor backgroundColor, Boolean enable) { + this.backgroundColor = backgroundColor; + this.enableCustomBackgroundColor = enable; + return this; + } + + public ModernCartDesignBuilder withPlayColor(ModernColor playColor, Boolean enable) { + this.playColor = playColor; + this.enableCustomPlayColor = enable; + return this; + } + + public ModernCartDesignBuilder withCueInColor(ModernColor cueInColor, Boolean enable) { + this.cueInColor = cueInColor; + this.enableCustomCueInColor = enable; + return this; + } + + public ModernCartDesign build() { + return new ModernCartDesign(pad, id, + backgroundColor, enableCustomBackgroundColor, + playColor, enableCustomPlayColor, + cueInColor, enableCustomCueInColor); + } + } public static final ModernColor DEFAULT_COLOR_BACKGROUND = ModernColor.GRAY1; public static final ModernColor DEFAULT_COLOR_PLAY = ModernColor.RED3; public static final ModernColor DEFAULT_COLOR_CUE_IN = ModernColor.RED2; private UUID uuid; + + private BooleanProperty enableCustomBackgroundColor; private ObjectProperty<ModernColor> backgroundColor; + + private BooleanProperty enableCustomPlayColor; private ObjectProperty<ModernColor> playColor; + + private BooleanProperty enableCustomCueInColor; private ObjectProperty<ModernColor> cueInColor; private Pad pad; private DesignUpdateListener syncListener; - public ModernCartDesign(Pad pad) { - this(pad, UUID.randomUUID()); - } - - public ModernCartDesign(Pad pad, UUID uuid) { - this(pad, uuid, ModernColor.GRAY1, ModernColor.RED3, ModernColor.RED2); - } - - public ModernCartDesign(Pad pad, UUID id, ModernColor backgroundColor, ModernColor playColor, ModernColor cueInColor) { + private ModernCartDesign(Pad pad, UUID id, + ModernColor backgroundColor, Boolean enableCustomBackgroundColor, + ModernColor playColor, Boolean enableCustomPlayColor, + ModernColor cueInColor, Boolean enableCustomCueInColor) { this.uuid = id; this.pad = pad; + this.enableCustomBackgroundColor = new SimpleBooleanProperty(enableCustomBackgroundColor); this.backgroundColor = new SimpleObjectProperty<>(backgroundColor); + + this.enableCustomPlayColor = new SimpleBooleanProperty(enableCustomPlayColor); this.playColor = new SimpleObjectProperty<>(playColor); + + this.enableCustomCueInColor = new SimpleBooleanProperty(enableCustomCueInColor); this.cueInColor = new SimpleObjectProperty<>(cueInColor); syncListener = new DesignUpdateListener(this); @@ -53,6 +109,21 @@ public class ModernCartDesign implements FeedbackDesignColorSuggester { return pad; } + public boolean isEnableCustomBackgroundColor() + { + return enableCustomBackgroundColor.get(); + } + + public void setEnableCustomBackgroundColor(Boolean enableCustomBackgroundColor) + { + this.enableCustomBackgroundColor.set(enableCustomBackgroundColor); + } + + public BooleanProperty enableCustomBackgroundColorProperty() + { + return enableCustomBackgroundColor; + } + public ModernColor getBackgroundColor() { return backgroundColor.get(); } @@ -65,6 +136,21 @@ public class ModernCartDesign implements FeedbackDesignColorSuggester { return backgroundColor; } + public boolean isEnableCustomPlayColor() + { + return enableCustomPlayColor.get(); + } + + public void setEnableCustomPlayColor(boolean enableCustomPlayColor) + { + this.enableCustomPlayColor.set(enableCustomPlayColor); + } + + public BooleanProperty enableCustomPlayColorProperty() + { + return enableCustomPlayColor; + } + public ModernColor getPlayColor() { return playColor.get(); } @@ -77,6 +163,21 @@ public class ModernCartDesign implements FeedbackDesignColorSuggester { return playColor; } + public boolean isEnableCustomCueInColor() + { + return enableCustomCueInColor.get(); + } + + public void setEnableCustomCueInColor(boolean enableCustomCueInColor) + { + this.enableCustomCueInColor.set(enableCustomCueInColor); + } + + public BooleanProperty enableCustomCueInColorProperty() + { + return enableCustomCueInColor; + } + public ModernColor getCueInColor() { return cueInColor.get(); } @@ -115,14 +216,16 @@ public class ModernCartDesign implements FeedbackDesignColorSuggester { } public ModernCartDesign copy(Pad pad) { - ModernCartDesign clone = new ModernCartDesign(pad); + ModernCartDesign clone = new ModernCartDesignBuilder(pad).build(); + clone.enableCustomBackgroundColor = new SimpleBooleanProperty(isEnableCustomBackgroundColor()); clone.backgroundColor = new SimpleObjectProperty<>(getBackgroundColor()); + + clone.enableCustomPlayColor = new SimpleBooleanProperty(isEnableCustomPlayColor()); clone.playColor = new SimpleObjectProperty<>(getPlayColor()); - clone.cueInColor = new SimpleObjectProperty<>(getCueInColor()); - clone.pad = pad; - clone.uuid = UUID.randomUUID(); + clone.enableCustomCueInColor = new SimpleBooleanProperty(isEnableCustomCueInColor()); + clone.cueInColor = new SimpleObjectProperty<>(getCueInColor()); syncListener = new DesignUpdateListener(clone); if (pad.getProject().getProjectReference().isSync()) { @@ -132,10 +235,4 @@ public class ModernCartDesign implements FeedbackDesignColorSuggester { return clone; } - - public void copyGlobalLayout(ModernGlobalDesign globalDesign) { - setBackgroundColor(globalDesign.getBackgroundColor()); - setPlayColor(globalDesign.getPlayColor()); - setCueInColor(globalDesign.getCueInColor()); - } } diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/serializer/ModernCartDesignSerializer.java b/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/serializer/ModernCartDesignSerializer.java index ce67905eb387db419410d0598eb04264f937b270..321fa814643f94f48a6170333dca03470a8f3b27 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/serializer/ModernCartDesignSerializer.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/serializer/ModernCartDesignSerializer.java @@ -14,9 +14,18 @@ public class ModernCartDesignSerializer { ModernCartDesign design; String uuidValue = rootElement.attributeValue("id"); if (uuidValue != null) { - design = new ModernCartDesign(pad, UUID.fromString(uuidValue)); + design = new ModernCartDesign.ModernCartDesignBuilder(pad, UUID.fromString(uuidValue)).build(); } else { - design = new ModernCartDesign(pad); + design = new ModernCartDesign.ModernCartDesignBuilder(pad).build(); + } + + Element enableCustomBackgroundColorElement = rootElement.element("EnableCustomBackgroundColor"); + if (enableCustomBackgroundColorElement != null) { + try { + design.setEnableCustomBackgroundColor(Boolean.parseBoolean(enableCustomBackgroundColorElement.getStringValue())); + } catch (IllegalArgumentException e) { + Logger.error(e); + } } Element backgroundElement = rootElement.element("BackgroundColor"); @@ -28,6 +37,15 @@ public class ModernCartDesignSerializer { } } + Element enableCustomPlayColorElement = rootElement.element("EnableCustomPlayColor"); + if (enableCustomPlayColorElement != null) { + try { + design.setEnableCustomPlayColor(Boolean.parseBoolean(enableCustomPlayColorElement.getStringValue())); + } catch (IllegalArgumentException e) { + Logger.error(e); + } + } + Element playElement = rootElement.element("PlayColor"); if (playElement != null) { try { @@ -36,6 +54,16 @@ public class ModernCartDesignSerializer { Logger.error(e); } } + + Element enableCustomCueInColorElement = rootElement.element("EnableCustomCueInColor"); + if (enableCustomCueInColorElement != null) { + try { + design.setEnableCustomCueInColor(Boolean.parseBoolean(enableCustomCueInColorElement.getStringValue())); + } catch (IllegalArgumentException e) { + Logger.error(e); + } + } + Element cueInElement = rootElement.element("CueInColor"); if (cueInElement != null) { try { @@ -49,8 +77,14 @@ public class ModernCartDesignSerializer { public void save(Element rootElement, ModernCartDesign design) { rootElement.addAttribute("id", design.getId().toString()); + + rootElement.addElement("EnableCustomBackgroundColor").addText(String.valueOf(design.isEnableCustomBackgroundColor())); rootElement.addElement("BackgroundColor").addText(design.getBackgroundColor().name()); + + rootElement.addElement("EnableCustomPlayColor").addText(String.valueOf(design.isEnableCustomBackgroundColor())); rootElement.addElement("PlayColor").addText(design.getPlayColor().name()); + + rootElement.addElement("EnableCustomCueInColor").addText(String.valueOf(design.isEnableCustomBackgroundColor())); rootElement.addElement("CueInColor").addText(design.getCueInColor().name()); } } diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/pad/PadSettings.java b/PlayWallCore/src/main/java/de/tobias/playpad/pad/PadSettings.java index a935edd4808ae2d9f1c92c99286591e429334cd8..eadd8e2d96655a671f7439851e9c0a2de9326258 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/pad/PadSettings.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/pad/PadSettings.java @@ -201,7 +201,7 @@ public class PadSettings { public ModernCartDesign getDesign() { if (design == null) { - ModernCartDesign newDesign = new ModernCartDesign(pad); + ModernCartDesign newDesign = new ModernCartDesign.ModernCartDesignBuilder(pad).build(); if (pad.getProject().getProjectReference().isSync()) { CommandManager.execute(Commands.DESIGN_ADD, pad.getProject().getProjectReference(), newDesign); diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/pad/PadSettingsSerializer.java b/PlayWallCore/src/main/java/de/tobias/playpad/pad/PadSettingsSerializer.java index 82e70e61fcdcf7c06ccc037ad6296898528be82b..73a2f13bf9f0a9d3b154e05b2c284eecf7307b1b 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/pad/PadSettingsSerializer.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/pad/PadSettingsSerializer.java @@ -124,10 +124,8 @@ public class PadSettingsSerializer { // Layout Element designElement = settingsElement.addElement(DESIGN_ELEMENT); - if (padSettings.isCustomDesign()) { - ModernCartDesignSerializer serializer = new ModernCartDesignSerializer(); - serializer.save(designElement, padSettings.getDesign()); - } + ModernCartDesignSerializer serializer = new ModernCartDesignSerializer(); + serializer.save(designElement, padSettings.getDesign()); designElement.addAttribute(CUSTOM_DESIGN_ELEMENT, String.valueOf(padSettings.isCustomDesign())); Element userInfoElement = settingsElement.addElement(CUSTOM_SETTINGS_ELEMENT); diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/server/sync/listener/downstream/pad/settings/design/DesignAddListener.java b/PlayWallCore/src/main/java/de/tobias/playpad/server/sync/listener/downstream/pad/settings/design/DesignAddListener.java index d4c9f6a550021f0a992569f8e7ab2baf36c7d286..9a395331ee727d6e45dba8468b68fcc50770653f 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/server/sync/listener/downstream/pad/settings/design/DesignAddListener.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/server/sync/listener/downstream/pad/settings/design/DesignAddListener.java @@ -31,9 +31,11 @@ public class DesignAddListener implements ServerListener { if (project != null) { Pad pad = project.getPad(padId); if (pad != null) { - ModernCartDesign modernCartDesign = new ModernCartDesign(pad, uuid); - modernCartDesign.setBackgroundColor(backgroundColor); - modernCartDesign.setPlayColor(playColor); + ModernCartDesign modernCartDesign = new ModernCartDesign.ModernCartDesignBuilder(pad, uuid) + .withBackgroundColor(backgroundColor, true) + .withPlayColor(playColor, true) + .build(); + pad.getPadSettings().setDesign(modernCartDesign); } }