diff --git a/.gitignore b/.gitignore index 2a2b1bc2f3c3f3eec2889dc8c9fe13f4870f7542..3fde153d06b468f4673d3c1bcbfdefdeb2eef532 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ **/target/ **/build **/.idea/** -*.iml \ No newline at end of file +*.iml +.idea/encodings.xml diff --git a/.idea/encodings.xml b/.idea/encodings.xml deleted file mode 100644 index c1500a33cb5596556ab38560f449acbae8fbe473..0000000000000000000000000000000000000000 --- a/.idea/encodings.xml +++ /dev/null @@ -1,40 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="Encoding" native2AsciiForPropertiesFiles="true"> - <file url="file://$PROJECT_DIR$" charset="UTF-8" /> - <file url="file://$PROJECT_DIR$/PlayWall" charset="UTF-8" /> - <file url="file://$PROJECT_DIR$/PlayWall/src/main/java" charset="UTF-8" /> - <file url="file://$PROJECT_DIR$/PlayWall/src/main/resources" charset="UTF-8" /> - <file url="file://$PROJECT_DIR$/PlayWall/src/main/resources/config" charset="UTF-8" /> - <file url="file://$PROJECT_DIR$/PlayWallComponents" charset="UTF-8" /> - <file url="file://$PROJECT_DIR$/PlayWallComponents/src/main/java" charset="UTF-8" /> - <file url="file://$PROJECT_DIR$/PlayWallComponents/src/main/resources" charset="UTF-8" /> - <file url="file://$PROJECT_DIR$/PlayWallCore" charset="UTF-8" /> - <file url="file://$PROJECT_DIR$/PlayWallCore/src/main/java" charset="UTF-8" /> - <file url="file://$PROJECT_DIR$/PlayWallCore/src/main/resources" charset="UTF-8" /> - <file url="file://$PROJECT_DIR$/PlayWallPlugins" charset="UTF-8" /> - <file url="file://$PROJECT_DIR$/PlayWallPlugins/PlayWallPluginAwake" charset="UTF-8" /> - <file url="file://$PROJECT_DIR$/PlayWallPlugins/PlayWallPluginAwake/src/main/java" charset="UTF-8" /> - <file url="file://$PROJECT_DIR$/PlayWallPlugins/PlayWallPluginAwake/src/main/resources" charset="UTF-8" /> - <file url="file://$PROJECT_DIR$/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/resources" charset="UTF-8" /> - <file url="file://$PROJECT_DIR$/PlayWallPlugins/PlayWallPluginEqualizer" charset="UTF-8" /> - <file url="file://$PROJECT_DIR$/PlayWallPlugins/PlayWallPluginEqualizer/src/main/java" charset="UTF-8" /> - <file url="file://$PROJECT_DIR$/PlayWallPlugins/PlayWallPluginEqualizer/src/main/resources" charset="UTF-8" /> - <file url="file://$PROJECT_DIR$/PlayWallPlugins/PlayWallPluginLaunchpad" charset="UTF-8" /> - <file url="file://$PROJECT_DIR$/PlayWallPlugins/PlayWallPluginLaunchpad/src/main/java" charset="UTF-8" /> - <file url="file://$PROJECT_DIR$/PlayWallPlugins/PlayWallPluginLaunchpad/src/main/resources" charset="UTF-8" /> - <file url="file://$PROJECT_DIR$/PlayWallPlugins/PlayWallPluginMedia" charset="UTF-8" /> - <file url="file://$PROJECT_DIR$/PlayWallPlugins/PlayWallPluginMedia/src/main/java" charset="UTF-8" /> - <file url="file://$PROJECT_DIR$/PlayWallPlugins/PlayWallPluginMedia/src/main/resources" charset="UTF-8" /> - <file url="file://$PROJECT_DIR$/PlayWallPlugins/PlayWallPluginNativeAudio" charset="UTF-8" /> - <file url="file://$PROJECT_DIR$/PlayWallPlugins/PlayWallPluginNativeAudio/src/main/java" charset="UTF-8" /> - <file url="file://$PROJECT_DIR$/PlayWallPlugins/PlayWallPluginNativeAudio/src/main/resources" charset="UTF-8" /> - <file url="file://$PROJECT_DIR$/PlayWallPlugins/PlayWallPluginPlayoutLog" charset="UTF-8" /> - <file url="file://$PROJECT_DIR$/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java" charset="UTF-8" /> - <file url="file://$PROJECT_DIR$/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/resources" charset="UTF-8" /> - <file url="file://$PROJECT_DIR$/PlayWallPlugins/PlayWallPluginWebAPI" charset="UTF-8" /> - <file url="file://$PROJECT_DIR$/PlayWallPlugins/PlayWallPluginWebAPI/src/main/java" charset="UTF-8" /> - <file url="file://$PROJECT_DIR$/PlayWallPlugins/PlayWallPluginWebAPI/src/main/resources" charset="UTF-8" /> - <file url="PROJECT" charset="UTF-8" /> - </component> -</project> \ No newline at end of file diff --git a/PlayWall/src/main/java/de/tobias/playpad/PlayPadImpl.java b/PlayWall/src/main/java/de/tobias/playpad/PlayPadImpl.java index f7eb8026b7ac5464277a43715c071459265ec514..c49bbd13df0cc78bf46c5a161e79b0f23c1000fe 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/PlayPadImpl.java +++ b/PlayWall/src/main/java/de/tobias/playpad/PlayPadImpl.java @@ -9,7 +9,7 @@ import de.thecodelabs.utils.threading.Worker; import de.thecodelabs.utils.ui.NVC; import de.thecodelabs.utils.util.SystemUtils; import de.thecodelabs.versionizer.service.UpdateService; -import de.tobias.playpad.design.ModernDesignHandler; +import de.tobias.playpad.design.ModernDesignProvider; import de.tobias.playpad.initialize.*; import de.tobias.playpad.plugin.*; import de.tobias.playpad.profile.ProfileNotFoundException; @@ -65,7 +65,7 @@ public class PlayPadImpl implements PlayPad { private UpdateService updateService; protected GlobalSettings globalSettings; - private ModernDesignHandler modernDesign; + private ModernDesignProvider modernDesign; private Session session; @@ -239,11 +239,11 @@ public class PlayPadImpl implements PlayPad { return parameters; } - public ModernDesignHandler getModernDesign() { + public ModernDesignProvider getModernDesign() { return modernDesign; } - void setModernDesign(ModernDesignHandler modernDesign) { + void setModernDesign(ModernDesignProvider modernDesign) { this.modernDesign = modernDesign; } diff --git a/PlayWall/src/main/java/de/tobias/playpad/PlayPadMain.java b/PlayWall/src/main/java/de/tobias/playpad/PlayPadMain.java index d52ffecfb20f1bf03f7a1f5ee00721fac4035c69..b4e367111bb127f74f0f2b0cdb713a96c7f21848 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/PlayPadMain.java +++ b/PlayWall/src/main/java/de/tobias/playpad/PlayPadMain.java @@ -12,7 +12,7 @@ import de.thecodelabs.utils.ui.Alerts; import de.thecodelabs.utils.util.OS; import de.thecodelabs.utils.util.OS.OSType; import de.thecodelabs.utils.util.SystemUtils; -import de.tobias.playpad.design.ModernDesignHandlerImpl; +import de.tobias.playpad.design.ModernDesignProviderImpl; import de.tobias.playpad.design.ModernStyleableImpl; import de.tobias.playpad.profile.ref.ProfileReferenceManager; import de.tobias.playpad.project.Project; @@ -108,7 +108,7 @@ public class PlayPadMain extends Application { impl.setIcon(stageIcon, getClass().getClassLoader().getResourceAsStream(ICON_PATH)); PlayPadPlugin.setStyleable(new ModernStyleableImpl()); - impl.setModernDesign(new ModernDesignHandlerImpl()); + impl.setModernDesign(new ModernDesignProviderImpl()); PlayPadPlugin.setInstance(impl); } diff --git a/PlayWall/src/main/java/de/tobias/playpad/design/ModernDesignHandlerImpl.java b/PlayWall/src/main/java/de/tobias/playpad/design/ModernDesignProviderImpl.java similarity index 63% rename from PlayWall/src/main/java/de/tobias/playpad/design/ModernDesignHandlerImpl.java rename to PlayWall/src/main/java/de/tobias/playpad/design/ModernDesignProviderImpl.java index 4d14df99a3f684c79a02dbfa75b37b259b20a9ff..9e96bcc90e115741f47183b1a5709da5e7767cae 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/design/ModernDesignHandlerImpl.java +++ b/PlayWall/src/main/java/de/tobias/playpad/design/ModernDesignProviderImpl.java @@ -2,12 +2,22 @@ package de.tobias.playpad.design; import de.tobias.playpad.design.modern.ModernCartDesignHandler; import de.tobias.playpad.design.modern.ModernGlobalDesignHandler; +import de.tobias.playpad.design.modern.ModernWarningDesignHandler; -public class ModernDesignHandlerImpl implements ModernDesignHandler { - +public class ModernDesignProviderImpl implements ModernDesignProvider +{ + private ModernWarningDesignHandler warningHandler; private ModernCartDesignHandler cartDesignHandler; private ModernGlobalDesignHandler globalDesignHandler; + @Override + public ModernWarningDesignHandler warning() { + if (warningHandler == null) { + warningHandler = new ModernWarningDesignHandlerImpl(); + } + return warningHandler; + } + @Override public ModernGlobalDesignHandler global() { if (globalDesignHandler == null) { diff --git a/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/DesktopColorPickerView.java b/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/DesktopColorPickerView.java index b71c1305615c898f1db7f4d3bf7d5f443116c5a9..0e3de9499da41130e72e786773960f9a09cccd8e 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/DesktopColorPickerView.java +++ b/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/DesktopColorPickerView.java @@ -66,11 +66,11 @@ public class DesktopColorPickerView implements Consumer<DisplayableColor>, Event PadSettings padSettings = pad.getPadSettings(); if (event.getButton() == MouseButton.PRIMARY) { - padSettings.setCustomDesign(true); ModernCartDesign design = padSettings.getDesign(); + design.setEnableCustomBackgroundColor(true); colorModeHandler.setColor(design, selectedColor); } else if (event.getButton() == MouseButton.SECONDARY) { - padSettings.setCustomDesign(false); + padSettings.getDesign().setEnableCustomBackgroundColor(false); } PlayPadMain.getProgramInstance().getMainViewController().loadUserCss(); } diff --git a/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/pad/DesktopPadView.java b/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/pad/DesktopPadView.java index e1489f3445343db9ef7b1b3a46be0e6030a8f690..09038fa1959a241e22247f06c6ae34ea83daf2c6 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/pad/DesktopPadView.java +++ b/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/pad/DesktopPadView.java @@ -8,6 +8,7 @@ import de.thecodelabs.utils.ui.scene.BusyView; import de.thecodelabs.utils.util.ColorUtils; import de.tobias.playpad.PlayPadPlugin; import de.tobias.playpad.design.FeedbackDesignColorSuggester; +import de.tobias.playpad.design.modern.model.ModernCartDesign; import de.tobias.playpad.layout.desktop.DesktopMainLayoutFactory; import de.tobias.playpad.pad.Pad; import de.tobias.playpad.pad.PadStatus; @@ -354,19 +355,20 @@ public class DesktopPadView implements IPadView { @Override public void showNotFoundIcon(Pad pad, boolean show) { if (show) { - FeedbackDesignColorSuggester associator; - if (pad.getPadSettings().isCustomDesign()) { - associator = pad.getPadSettings().getDesign(); - } else { - associator = Profile.currentProfile().getProfileSettings().getDesign(); - } + FeedbackDesignColorSuggester globalDesign = Profile.currentProfile().getProfileSettings().getDesign(); + Color layoutStdColor = globalDesign.getDesignDefaultColor(); - if (associator != null) { - Color color = associator.getDesignDefaultColor(); - notFoundLabel.setColor(ColorUtils.getAppropriateTextColor(color)); - } else { - notFoundLabel.setColor(Color.RED); + if(pad != null) + { + final ModernCartDesign padDesign = pad.getPadSettings().getDesign(); + + if(padDesign.isEnableCustomBackgroundColor()) + { + layoutStdColor = padDesign.getDesignDefaultColor(); + } } + + notFoundLabel.setColor(ColorUtils.getAppropriateTextColor(layoutStdColor)); } notFoundLabel.setVisible(show); root.setOpacity(show ? 0.5 : 1.0); diff --git a/PlayWall/src/main/java/de/tobias/playpad/layout/touch/pad/TouchPadView.java b/PlayWall/src/main/java/de/tobias/playpad/layout/touch/pad/TouchPadView.java index c9f233e15d351c154a65fd41e47ad3f2f9196eb2..f0f20d4a74d40b4548e5276711cc3da60860a852 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/layout/touch/pad/TouchPadView.java +++ b/PlayWall/src/main/java/de/tobias/playpad/layout/touch/pad/TouchPadView.java @@ -10,6 +10,7 @@ import de.thecodelabs.utils.util.OS; import de.thecodelabs.utils.util.win.User32X; import de.tobias.playpad.PlayPadPlugin; import de.tobias.playpad.design.FeedbackDesignColorSuggester; +import de.tobias.playpad.design.modern.model.ModernCartDesign; import de.tobias.playpad.pad.Pad; import de.tobias.playpad.pad.content.PadContent; import de.tobias.playpad.pad.content.PadContentFactory; @@ -283,20 +284,21 @@ public class TouchPadView implements IPadView { @Override public void showNotFoundIcon(Pad pad, boolean show) { - if (show) { - FeedbackDesignColorSuggester associator = null; - if (pad.getPadSettings().isCustomDesign()) { - associator = pad.getPadSettings().getDesign(); - } else { - associator = Profile.currentProfile().getProfileSettings().getDesign(); - } + if(show) { + FeedbackDesignColorSuggester globalDesign = Profile.currentProfile().getProfileSettings().getDesign(); + Color layoutStdColor = globalDesign.getDesignDefaultColor(); + + if(pad != null) + { + final ModernCartDesign padDesign = pad.getPadSettings().getDesign(); - if (associator != null) { - Color color = associator.getDesignDefaultColor(); - notFoundLabel.setColor(ColorUtils.getAppropriateTextColor(color)); - } else { - notFoundLabel.setColor(Color.RED); + if(padDesign.isEnableCustomBackgroundColor()) + { + layoutStdColor = padDesign.getDesignDefaultColor(); + } } + + notFoundLabel.setColor(ColorUtils.getAppropriateTextColor(layoutStdColor)); } notFoundLabel.setVisible(show); root.setOpacity(show ? 0.5 : 1.0); diff --git a/PlayWall/src/main/java/de/tobias/playpad/pad/listener/PadPositionListener.java b/PlayWall/src/main/java/de/tobias/playpad/pad/listener/PadPositionListener.java index 5326b5f914229d7a4e1b9499bb44c01234d00ecf..e325c7877dd59f83dbb70accf9dc16fb0ae71771 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/pad/listener/PadPositionListener.java +++ b/PlayWall/src/main/java/de/tobias/playpad/pad/listener/PadPositionListener.java @@ -2,9 +2,9 @@ package de.tobias.playpad.pad.listener; import de.tobias.playpad.PlayPadMain; import de.tobias.playpad.action.actions.CartAction; -import de.tobias.playpad.design.ModernDesignHandler; -import de.tobias.playpad.design.modern.ModernCartDesignHandler; +import de.tobias.playpad.design.ModernDesignProvider; import de.tobias.playpad.design.modern.ModernGlobalDesignHandler; +import de.tobias.playpad.design.modern.ModernWarningDesignHandler; import de.tobias.playpad.design.modern.model.ModernCartDesign; import de.tobias.playpad.design.modern.model.ModernGlobalDesign; import de.tobias.playpad.pad.Pad; @@ -104,21 +104,16 @@ public class PadPositionListener implements Runnable, IPadPositionListener { */ @Override public void run() { - PadSettings padSettings = pad.getPadSettings(); - Duration warning = padSettings.getWarning(); + final PadSettings padSettings = pad.getPadSettings(); + final Duration warningDuration = padSettings.getWarning(); - ModernGlobalDesign globalDesign = Profile.currentProfile().getProfileSettings().getDesign(); - final ModernDesignHandler modernDesign = PlayPadMain.getProgramInstance().getModernDesign(); + final ModernGlobalDesign globalDesign = Profile.currentProfile().getProfileSettings().getDesign(); + final ModernCartDesign cartDesign = padSettings.getDesign(); - if (padSettings.isCustomDesign()) { - ModernCartDesignHandler handler = modernDesign.cart(); - ModernCartDesign design = pad.getPadSettings().getDesign(); + final ModernDesignProvider modernDesign = PlayPadMain.getProgramInstance().getModernDesign(); - handler.handleWarning(design, controller, warning, globalDesign); - } else { - ModernGlobalDesignHandler handler = modernDesign.global(); - handler.handleWarning(globalDesign, controller, warning); - } + final ModernWarningDesignHandler handler = modernDesign.warning(); + handler.handleWarning(globalDesign, cartDesign, controller, warningDuration); } private void startWarningThread() { @@ -136,20 +131,10 @@ public class PadPositionListener implements Runnable, IPadPositionListener { warningThread = null; } - PadSettings padSettings = pad.getPadSettings(); - final ModernDesignHandler modernDesign = PlayPadMain.getProgramInstance().getModernDesign(); - - if (padSettings.isCustomDesign()) { - ModernCartDesignHandler handler = modernDesign.cart(); - ModernCartDesign design = pad.getPadSettings().getDesign(); + final ModernDesignProvider modernDesign = PlayPadMain.getProgramInstance().getModernDesign(); - handler.stopWarning(design, controller); - } else { - ModernGlobalDesignHandler handler = modernDesign.global(); - ModernGlobalDesign globalDesign = Profile.currentProfile().getProfileSettings().getDesign(); - - handler.stopWarning(globalDesign, controller); - } + final ModernWarningDesignHandler handler = modernDesign.warning(); + handler.stopWarning(controller); controller.getView().setStyle(""); } } 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..29030b5abfe80efd80615cf5ac5385cb5b371ca5 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/project/ProjectJsonReader.java +++ b/PlayWall/src/main/java/de/tobias/playpad/project/ProjectJsonReader.java @@ -78,7 +78,6 @@ public class ProjectJsonReader { ModernCartDesign design = readModernCartDesign(pad, object.getJSONObject("design")); if (design != null) { pad.getPadSettings().setDesign(design); - pad.getPadSettings().setCustomDesign(true); // TODO Sync } } @@ -101,7 +100,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/PlayWall/src/main/java/de/tobias/playpad/update/VersionUpdater.java b/PlayWall/src/main/java/de/tobias/playpad/update/VersionUpdater.java index b5f7c5be9793d58da416f0c68334c94194d36afe..96fc17c2f4c66c96fd4b8e5d9d4a26a0d80ff86d 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/update/VersionUpdater.java +++ b/PlayWall/src/main/java/de/tobias/playpad/update/VersionUpdater.java @@ -1,13 +1,106 @@ package de.tobias.playpad.update; +import de.thecodelabs.logger.Logger; import de.thecodelabs.utils.application.App; +import de.thecodelabs.utils.application.container.PathType; import de.thecodelabs.utils.application.update.UpdateService; +import org.dom4j.Attribute; +import org.dom4j.Document; +import org.dom4j.DocumentException; +import org.dom4j.Element; +import org.dom4j.io.OutputFormat; +import org.dom4j.io.SAXReader; +import org.dom4j.io.XMLWriter; -public class VersionUpdater implements UpdateService { +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.text.MessageFormat; +import java.util.UUID; +public class VersionUpdater implements UpdateService +{ @Override - public void update(App app, long oldVersion, long newVersion) { + public void update(App app, long oldVersion, long newVersion) + { + try + { + if(oldVersion < 44) + { + updateTo44(app); + } + } + catch(Exception e) + { + e.printStackTrace(); + } + } + + private void updateTo44(App app) throws DocumentException, IOException + { + Logger.debug("Updating to app version 44..."); + + SAXReader reader = new SAXReader(); + + Document projectsDocument = reader.read(Files.newInputStream(app.getPath(PathType.CONFIGURATION, "Projects.xml"))); + for(Element element : projectsDocument.getRootElement().elements("Project")) + { + final String projectName = element.attributeValue("name"); + final UUID projectUUID = UUID.fromString(element.attributeValue("uuid")); + Logger.debug(MessageFormat.format("Updating project \"{0}\" (id: {1})...", projectName, projectUUID)); + Path projectPath = app.getPath(PathType.DOCUMENTS, projectUUID.toString() + ".xml"); + final Document migratedProject = updateProject(Files.newInputStream(projectPath)); + + XMLWriter writer = new XMLWriter(Files.newOutputStream(projectPath), OutputFormat.createPrettyPrint()); + writer.write(migratedProject); + writer.close(); + } } + public static Document updateProject(InputStream projectInputStream) throws DocumentException + { + SAXReader reader = new SAXReader(); + + Document projectDocument = reader.read(projectInputStream); + Element rootProjectElement = projectDocument.getRootElement(); + + for(Element page : rootProjectElement.elements()) + { + for(Element pad : page.elements()) + { + final Element settings = pad.element("Settings"); + if(settings == null) + { + continue; + } + + final Element designElement = settings.element("Design"); + if(designElement == null) + { + continue; + } + + final Attribute customFlag = designElement.attribute("custom"); + if(customFlag == null) + { + continue; + } + + designElement.remove(customFlag); + + if(customFlag.getValue().equals("false")) + { + continue; + } + + designElement.addElement("EnableCustomBackgroundColor").addText("true"); + designElement.addElement("EnableCustomPlayColor").addText("true"); + designElement.addElement("EnableCustomCueInColor").addText("true"); + } + } + + return projectDocument; + } } diff --git a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/actions/CartActionTypeViewController.java b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/actions/CartActionTypeViewController.java index da08e59d72a87d0213f66478b116bb28ebba7972..ee1dda9212e66fe9acc5ab4a1916a74445d94ab1 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/actions/CartActionTypeViewController.java +++ b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/actions/CartActionTypeViewController.java @@ -17,7 +17,9 @@ import javafx.scene.control.ToggleGroup; import javafx.scene.layout.*; import org.controlsfx.control.SegmentedButton; +import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; /** * Diese View ist die Basis für die Einstellunge für eine CartAction. Dabei enthällt diese View ein Grid aus Buttons (Carts), eine @@ -44,7 +46,7 @@ public class CartActionTypeViewController extends NVC { public CartActionTypeViewController(Mapping mapping, IMappingTabViewController parentController, String actionType) { - this(mapping, parentController, actionType,null); + this(mapping, parentController, actionType, null); } public CartActionTypeViewController(Mapping mapping, IMappingTabViewController parentController, String actionType, AbstractActionViewController actionViewController) { @@ -113,17 +115,21 @@ public class CartActionTypeViewController extends NVC { int currentY = data[1]; try { - List<Action> cartActions = mapping.getActionsForType(actionType); - for (Action action : cartActions) { - if (CartAction.getX(action) == currentX && CartAction.getY(action) == currentY) { - if (actionViewController != null) { - cartActionContainer.getChildren().setAll(actionViewController.getParent()); - cartActionContainer.setVisible(true); - actionViewController.setCartAction(action); - } - parentController.showMapperFor(action); - } + final List<Action> cartActions = mapping.getActionsForType(actionType).stream() + .filter(action -> CartAction.getX(action) == currentX && CartAction.getY(action) == currentY) + .collect(Collectors.toList()); + + if (cartActions.size() > 1) { + throw new IllegalArgumentException("Only one action allowed per pad. Currently " + cartActions.size() + " are registered for pad coordinate " + Arrays.toString(data)); + } + + final Action action = cartActions.get(0); + if (actionViewController != null) { + cartActionContainer.getChildren().setAll(actionViewController.getParent()); + cartActionContainer.setVisible(true); + actionViewController.setCartAction(action); } + parentController.showMapperFor(action); } catch (NoSuchComponentException e) { Logger.error(e); } diff --git a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/actions/CartActionViewController.java b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/actions/CartActionViewController.java index 737251c6fe259d64d4d058ba20ec9727d250a8cb..e3fe4664112f86babef0a24a3ce16e1f4c1c2159 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/actions/CartActionViewController.java +++ b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/actions/CartActionViewController.java @@ -1,7 +1,6 @@ package de.tobias.playpad.viewcontroller.actions; import de.thecodelabs.midi.action.Action; -import de.thecodelabs.utils.ui.NVC; import de.thecodelabs.utils.util.Localization; import de.tobias.playpad.Strings; import de.tobias.playpad.action.actions.CartAction; diff --git a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/design/ModernCartDesignViewController.java b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/design/ModernCartDesignViewController.java index fbf39d6b0e6d113d1b5d08bcf1852194f17f2e02..5ee9469334a4ee1ee5649fd4adbab2e02a1c6048 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/design/ModernCartDesignViewController.java +++ b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/design/ModernCartDesignViewController.java @@ -17,6 +17,13 @@ import java.util.function.Consumer; public class ModernCartDesignViewController extends NVC implements IColorButton { + @FXML + private CheckBox backgroundColorCheckbox; + @FXML + private CheckBox playColorCheckbox; + @FXML + private CheckBox cueInColorCheckbox; + @FXML private Button backgroundColorButton; @FXML @@ -29,25 +36,49 @@ public class ModernCartDesignViewController extends NVC implements IColorButton @FXML private Button resetButton; - private ModernCartDesign design; + private final ModernCartDesign design; private PopOver colorChooser; - public ModernCartDesignViewController(ModernCartDesign layout) { + public ModernCartDesignViewController(ModernCartDesign design) { load("view/option/layout", "ModernLayoutCart", Localization.getBundle()); - this.design = layout; - setLayout(); + this.design = design; + setDesign(); } - private void setLayout() { + private void setDesign() { backgroundColorButton.setStyle(getLinearGradientCss(design.getBackgroundColor())); playColorButton.setStyle(getLinearGradientCss(design.getPlayColor())); cueInColorButton.setStyle(getLinearGradientCss(design.getCueInColor())); + + backgroundColorCheckbox.setSelected(design.isEnableCustomBackgroundColor()); + playColorCheckbox.setSelected(design.isEnableCustomPlayColor()); + cueInColorCheckbox.setSelected(design.isEnableCustomCueInColor()); } @Override public void init() { + backgroundColorCheckbox.selectedProperty().addListener((observable, oldValue, newValue) -> + { + design.setEnableCustomBackgroundColor(newValue); + backgroundColorButton.setDisable(!newValue); + }); + playColorCheckbox.selectedProperty().addListener((observable, oldValue, newValue) -> + { + design.setEnableCustomPlayColor(newValue); + playColorButton.setDisable(!newValue); + }); + cueInColorCheckbox.selectedProperty().addListener((observable, oldValue, newValue) -> + { + design.setEnableCustomCueInColor(newValue); + cueInColorButton.setDisable(!newValue); + }); + + backgroundColorButton.setDisable(true); + playColorButton.setDisable(true); + cueInColorButton.setDisable(true); + addIconToButton(backgroundColorButton); addIconToButton(playColorButton); addIconToButton(cueInColorButton); @@ -56,22 +87,22 @@ public class ModernCartDesignViewController extends NVC implements IColorButton @FXML private void resetButtonHandler(ActionEvent event) { design.reset(); - setLayout(); + setDesign(); } @FXML private void backgroundColorButtonHandler(ActionEvent event) { - colorChooser(backgroundColorButton, design.getBackgroundColor(), color -> design.setBackgroundColor(color)); + colorChooser(backgroundColorButton, design.getBackgroundColor(), design::setBackgroundColor); } @FXML private void playColorButtonHandler(ActionEvent event) { - colorChooser(playColorButton, design.getPlayColor(), color -> design.setPlayColor(color)); + colorChooser(playColorButton, design.getPlayColor(), design::setPlayColor); } @FXML private void cueInColorButtonHandler(ActionEvent event) { - colorChooser(cueInColorButton, design.getPlayColor(), color -> design.setCueInColor(color)); + colorChooser(cueInColorButton, design.getPlayColor(), design::setCueInColor); } private void colorChooser(Button anchorNode, ModernColor startColor, Consumer<ModernColor> onFinish) { @@ -95,11 +126,10 @@ public class ModernCartDesignViewController extends NVC implements IColorButton } private String getLinearGradientCss(ModernColor color) { - if (Profile.currentProfile().getProfileSettings().getDesign().isFlatDesign()) { + if(Profile.currentProfile().getProfileSettings().getDesign().isFlatDesign()) { return "-fx-background-color: " + color.paint() + ";"; } else { return "-fx-background-color: " + color.linearGradient() + ";"; } } - } diff --git a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/option/pad/DesignPadTabViewController.java b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/option/pad/DesignPadTabViewController.java index 9350b63841d763894290086376d135a3df8b02cf..c08a6a30d3ee2a2822d4ad105b73eb1dc09941c2 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/option/pad/DesignPadTabViewController.java +++ b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/option/pad/DesignPadTabViewController.java @@ -6,23 +6,18 @@ import de.tobias.playpad.PlayPadPlugin; import de.tobias.playpad.Strings; import de.tobias.playpad.design.modern.model.ModernCartDesign; import de.tobias.playpad.pad.Pad; -import de.tobias.playpad.pad.PadSettings; -import de.tobias.playpad.profile.Profile; import de.tobias.playpad.viewcontroller.PadSettingsTabViewController; import de.tobias.playpad.viewcontroller.design.ModernCartDesignViewController; import de.tobias.playpad.viewcontroller.main.IMainViewController; import javafx.fxml.FXML; -import javafx.scene.control.CheckBox; import javafx.scene.layout.VBox; public class DesignPadTabViewController extends PadSettingsTabViewController { @FXML private VBox layoutContainer; - @FXML - private CheckBox enableLayoutCheckBox; - private Pad pad; + private final Pad pad; DesignPadTabViewController(Pad pad) { load("view/option/pad", "LayoutTab", Localization.getBundle()); @@ -31,26 +26,6 @@ public class DesignPadTabViewController extends PadSettingsTabViewController { @Override public void init() { - enableLayoutCheckBox.selectedProperty().addListener((a, b, c) -> - { - PadSettings padSettings = pad.getPadSettings(); - if (c && !padSettings.isCustomDesign()) { - try { - padSettings.setCustomDesign(true); - - ModernCartDesign layout = padSettings.getDesign(); - layout.copyGlobalLayout(Profile.currentProfile().getProfileSettings().getDesign()); - - setLayoutViewController(pad); - } catch (Exception e) { - showErrorMessage(Localization.getString(Strings.ERROR_STANDARD_GEN, e.getLocalizedMessage())); - Logger.error(e); - } - } else if (!c && padSettings.isCustomDesign()) { - padSettings.setCustomDesign(false); - setLayoutViewController(null); - } - }); } @Override @@ -60,12 +35,7 @@ public class DesignPadTabViewController extends PadSettingsTabViewController { @Override public void loadSettings(Pad pad) { - PadSettings padSettings = pad.getPadSettings(); - - enableLayoutCheckBox.setSelected(padSettings.isCustomDesign()); - if (padSettings.isCustomDesign()) { - setLayoutViewController(pad); - } + setLayoutViewController(pad); } private void setLayoutViewController(Pad pad) { diff --git a/PlayWall/src/main/resources/style/modern-pad-cue-in.css b/PlayWall/src/main/resources/style/modern-pad-cue-in.css new file mode 100644 index 0000000000000000000000000000000000000000..65ea71f1be01bb6a98b7e566b10c8e995bd4c33d --- /dev/null +++ b/PlayWall/src/main/resources/style/modern-pad-cue-in.css @@ -0,0 +1,4 @@ + +.pad${#prefix}-cue-in { + -fx-background-color: ${#padCueInColor} !important; +} \ No newline at end of file diff --git a/PlayWall/src/main/resources/style/modern-pad.css b/PlayWall/src/main/resources/style/modern-pad.css index abd17dbdf936ab7d80a0c9fd7a022c98935d9669..11df504e7820334526c06d2003bd0ce425313b1c 100644 --- a/PlayWall/src/main/resources/style/modern-pad.css +++ b/PlayWall/src/main/resources/style/modern-pad.css @@ -21,15 +21,10 @@ -fx-background-color: ${#padColor}; } -.pad${#prefix}-cue-in${#class} { - -fx-background-color: ${#padCueInColor}; -} - - .pad${#prefix}-info${#class} { -fx-text-fill: ${#fontColor}; } .pad${#prefix}-title${#class} { -fx-text-fill: ${#fontColor}; -} \ No newline at end of file +} diff --git a/PlayWall/src/main/resources/view/option/layout/ModernLayoutCart.fxml b/PlayWall/src/main/resources/view/option/layout/ModernLayoutCart.fxml index 4d3d165be6852b06cfdf2750f2bb8af7b6be3023..1044f83b5a0e9b552eab50d00b3929b7b1f787f3 100644 --- a/PlayWall/src/main/resources/view/option/layout/ModernLayoutCart.fxml +++ b/PlayWall/src/main/resources/view/option/layout/ModernLayoutCart.fxml @@ -1,51 +1,51 @@ <?xml version="1.0" encoding="UTF-8"?> <?import javafx.geometry.Insets?> -<?import javafx.scene.control.*?> -<?import javafx.scene.layout.*?> -<VBox spacing="14.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"> +<?import javafx.scene.control.Button?> +<?import javafx.scene.control.CheckBox?> +<?import javafx.scene.control.Label?> +<?import javafx.scene.layout.HBox?> +<?import javafx.scene.layout.VBox?> + +<VBox spacing="14.0" xmlns="http://javafx.com/javafx/16" xmlns:fx="http://javafx.com/fxml/1"> <children> <HBox spacing="14.0"> <children> <VBox alignment="BOTTOM_LEFT" prefWidth="150.0"> <children> - <Label alignment="CENTER_RIGHT" prefWidth="150.0" text="%layout.label.color" - VBox.vgrow="ALWAYS"> + <Label alignment="CENTER_RIGHT" prefWidth="150.0" text="%layout.label.color" VBox.vgrow="ALWAYS"> <VBox.margin> - <Insets bottom="5.0"/> + <Insets bottom="5.0" /> </VBox.margin> </Label> </children> </VBox> <VBox layoutX="110.0" layoutY="8.0" maxWidth="1.7976931348623157E308" prefWidth="125.0" spacing="14.0"> <children> - <Label alignment="BOTTOM_LEFT" layoutX="110.0" layoutY="8.0" prefHeight="60.0" prefWidth="150.0" - text="%layout.label.background" wrapText="true" VBox.vgrow="ALWAYS"/> - <Button fx:id="backgroundColorButton" focusTraversable="false" mnemonicParsing="false" - onAction="#backgroundColorButtonHandler" prefWidth="150.0"/> + <CheckBox fx:id="backgroundColorCheckbox" mnemonicParsing="false" text="%padSettings.layout.checkbox.custom" /> + <Label alignment="BOTTOM_LEFT" layoutX="110.0" layoutY="8.0" prefWidth="150.0" text="%layout.label.background" wrapText="true" VBox.vgrow="ALWAYS" /> + <Button fx:id="backgroundColorButton" focusTraversable="false" mnemonicParsing="false" onAction="#backgroundColorButtonHandler" prefWidth="150.0" /> </children> </VBox> <VBox layoutX="243.0" layoutY="8.0" maxWidth="1.7976931348623157E308" prefWidth="125.0" spacing="14.0"> <children> - <Label alignment="BOTTOM_LEFT" layoutX="243.0" layoutY="8.0" prefHeight="60.0" prefWidth="150.0" - text="%layout.label.play" wrapText="true" VBox.vgrow="ALWAYS"/> - <Button fx:id="playColorButton" focusTraversable="false" mnemonicParsing="false" - onAction="#playColorButtonHandler" prefWidth="150.0"/> + <CheckBox fx:id="playColorCheckbox" mnemonicParsing="false" text="%padSettings.layout.checkbox.custom" /> + <Label alignment="BOTTOM_LEFT" layoutX="243.0" layoutY="8.0" prefWidth="150.0" text="%layout.label.play" wrapText="true" VBox.vgrow="ALWAYS" /> + <Button fx:id="playColorButton" focusTraversable="false" mnemonicParsing="false" onAction="#playColorButtonHandler" prefWidth="150.0" /> </children> </VBox> <VBox layoutX="243.0" layoutY="8.0" maxWidth="1.7976931348623157E308" prefWidth="125.0" spacing="14.0"> <children> - <Label alignment="BOTTOM_LEFT" layoutX="243.0" layoutY="8.0" prefHeight="60.0" prefWidth="150.0" - text="%layout.label.cueIn" wrapText="true" VBox.vgrow="ALWAYS"/> - <Button fx:id="cueInColorButton" focusTraversable="false" mnemonicParsing="false" - onAction="#cueInColorButtonHandler" prefWidth="150.0"/> + <CheckBox fx:id="cueInColorCheckbox" mnemonicParsing="false" text="%padSettings.layout.checkbox.custom" /> + <Label alignment="BOTTOM_LEFT" layoutX="243.0" layoutY="8.0" prefWidth="150.0" text="%layout.label.cueIn" wrapText="true" VBox.vgrow="ALWAYS" /> + <Button fx:id="cueInColorButton" focusTraversable="false" mnemonicParsing="false" onAction="#cueInColorButtonHandler" prefWidth="150.0" /> </children> </VBox> </children> </HBox> - <Button fx:id="resetButton" mnemonicParsing="false" onAction="#resetButtonHandler" text="%layout.button.reset"> + <Button fx:id="resetButton" alignment="CENTER" mnemonicParsing="false" onAction="#resetButtonHandler" text="%layout.button.reset"> <VBox.margin> - <Insets left="164.0"/> + <Insets left="164.0" top="28.0" /> </VBox.margin> </Button> </children> diff --git a/PlayWall/src/main/resources/view/option/pad/LayoutTab.fxml b/PlayWall/src/main/resources/view/option/pad/LayoutTab.fxml index fa3222571bdfb80064b4638bb51585ef124bc1aa..b1c294e8842611ebf04793fe6815835d8fa8aa9c 100644 --- a/PlayWall/src/main/resources/view/option/pad/LayoutTab.fxml +++ b/PlayWall/src/main/resources/view/option/pad/LayoutTab.fxml @@ -1,27 +1,24 @@ <?xml version="1.0" encoding="UTF-8"?> - <?import javafx.geometry.Insets?> -<?import javafx.scene.control.CheckBox?> <?import javafx.scene.control.Label?> -<?import javafx.scene.layout.*?> -<VBox spacing="14.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"> +<?import javafx.scene.layout.AnchorPane?> +<?import javafx.scene.layout.HBox?> +<?import javafx.scene.layout.VBox?> + +<VBox spacing="14.0" xmlns="http://javafx.com/javafx/16" xmlns:fx="http://javafx.com/fxml/1"> <children> - <HBox layoutX="14.0" layoutY="13.0" spacing="14.0" AnchorPane.leftAnchor="14.0" AnchorPane.rightAnchor="14.0" - AnchorPane.topAnchor="14.0"> + <HBox layoutX="14.0" layoutY="13.0" spacing="14.0" AnchorPane.leftAnchor="14.0" AnchorPane.rightAnchor="14.0" AnchorPane.topAnchor="14.0"> <children> - <Label alignment="CENTER_RIGHT" layoutX="14.0" layoutY="14.0" prefWidth="150.0" - text="%padSettings.layout.label.custom"/> - <CheckBox fx:id="enableLayoutCheckBox" layoutX="127.0" layoutY="13.0" mnemonicParsing="false" - text="%padSettings.layout.checkbox.custom"/> + <Label alignment="CENTER_RIGHT" layoutX="14.0" layoutY="14.0" prefWidth="150.0" text="%padSettings.layout.label.custom" /> </children> <VBox.margin> - <Insets/> + <Insets /> </VBox.margin> </HBox> - <VBox fx:id="layoutContainer" prefHeight="200.0" prefWidth="100.0"/> + <VBox fx:id="layoutContainer" prefHeight="200.0" prefWidth="100.0" /> </children> <padding> - <Insets bottom="14.0" left="14.0" right="14.0" top="14.0"/> + <Insets bottom="14.0" left="14.0" right="14.0" top="14.0" /> </padding> </VBox> diff --git a/PlayWall/src/main/scala/de/tobias/playpad/design/ModernCartDesignHandlerImpl.scala b/PlayWall/src/main/scala/de/tobias/playpad/design/ModernCartDesignHandlerImpl.scala index b639f9099419bd956a0b420216f9c01568b2c679..945eddab9b05903d35ceed1e7b0b189be15315fb 100644 --- a/PlayWall/src/main/scala/de/tobias/playpad/design/ModernCartDesignHandlerImpl.scala +++ b/PlayWall/src/main/scala/de/tobias/playpad/design/ModernCartDesignHandlerImpl.scala @@ -1,13 +1,10 @@ package de.tobias.playpad.design import de.thecodelabs.utils.application.ApplicationUtils -import de.tobias.playpad.design.modern.model.{ModernCartDesign, ModernGlobalDesign} +import de.tobias.playpad.design.modern.model.ModernCartDesign import de.tobias.playpad.design.modern.{ModernCartDesignHandler, ModernColor} -import de.tobias.playpad.pad.content.play.Durationable -import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController import de.tobias.playpad.util.Minifier import de.tobias.playpad.view.PseudoClasses -import javafx.util.Duration import org.springframework.expression.ExpressionParser import org.springframework.expression.common.TemplateParserContext import org.springframework.expression.spel.standard.SpelExpressionParser @@ -18,20 +15,28 @@ import scala.jdk.CollectionConverters._ class ModernCartDesignHandlerImpl extends ModernCartDesignHandler { override def generateCss(design: ModernCartDesign, classSuffix: String, flat: Boolean): String = { - String.join( - generateCss(design, flat, classSuffix, design.getBackgroundColor), - generateCss(design, flat, classSuffix, design.getPlayColor, s":${PseudoClasses.PLAY_CLASS.getPseudoClassName}"), - generateCss(design, flat, classSuffix, design.getBackgroundColor, s":${PseudoClasses.WARN_CLASS.getPseudoClassName}") - ) - } + var result = "" - private def generateCss(design: ModernCartDesign, flat: Boolean, padIdentifier: String, color: ModernColor, styleState: String = ""): String = { - val expressionParser: ExpressionParser = new SpelExpressionParser() - val context = new StandardEvaluationContext() + if(design.isEnableCustomBackgroundColor) + { + result += generatePadCss(design, flat, classSuffix, design.getBackgroundColor) + result += generatePadCss(design, flat, classSuffix, design.getBackgroundColor, s":${PseudoClasses.WARN_CLASS.getPseudoClassName}") + } - val resource = ApplicationUtils.getApplication.getClasspathResource("style/modern-pad.css") - val string = Minifier minify resource.getAsString + if(design.isEnableCustomPlayColor) + { + result += generatePadCss(design, flat, classSuffix, design.getPlayColor, s":${PseudoClasses.PLAY_CLASS.getPseudoClassName}") + } + if(design.isEnableCustomCueInColor) + { + result += generateCueInCss(design, flat, classSuffix) + } + + result + } + + private def generatePadCss(design: ModernCartDesign, flat: Boolean, padIdentifier: String, color: ModernColor, styleState: String = ""): String = { val values: Map[String, AnyRef] = Map( "prefix" -> padIdentifier, "class" -> styleState, @@ -43,33 +48,27 @@ class ModernCartDesignHandlerImpl extends ModernCartDesignHandler { "fontColor" -> color.getFontColor ) - context.setVariables(values.asJava) - expressionParser.parseExpression(string, new TemplateParserContext("${", "}")).getValue(context, classOf[String]) + generateCss("style/modern-pad.css", values) } - override def handleWarning(design: ModernCartDesign, controller: AbstractPadViewController, warning: Duration, globalDesign: ModernGlobalDesign): Unit = { - if (globalDesign.isWarnAnimation) { - val playColor = design.getPlayColor - val backgroundColor = design.getBackgroundColor - - val fadeStopColor = if (globalDesign.isFlatDesign) backgroundColor.toFlatFadeableColor else backgroundColor.toFadeableColor - val fadePlayColor = if (globalDesign.isFlatDesign) playColor.toFlatFadeableColor else playColor.toFadeableColor + private def generateCueInCss(design: ModernCartDesign, flat: Boolean, padIdentifier: String): String = { + val values: Map[String, AnyRef] = Map( + "prefix" -> padIdentifier, + "padCueInColor" -> (if (flat) design.getCueInColor.paint() else design.getCueInColor.linearGradient()) + ) - val pad = controller.getPad - val animationDuration = pad.getContent match { - case durationable: Durationable => - if (warning greaterThan durationable.getDuration) { - durationable.getDuration - } else { - warning - } - case _ => warning - } - ModernDesignAnimator.animateWarn(controller, fadePlayColor, fadeStopColor, animationDuration) - } else { - ModernDesignAnimator.warnFlash(controller) - } + generateCss("style/modern-pad-cue-in.css", values) } - override def stopWarning(design: ModernCartDesign, controller: AbstractPadViewController): Unit = ModernDesignAnimator.stopAnimation(controller) + private def generateCss(templatePath: String, values: Map[String, AnyRef]): String = + { + val expressionParser: ExpressionParser = new SpelExpressionParser() + val context = new StandardEvaluationContext() + + val resource = ApplicationUtils.getApplication.getClasspathResource(templatePath) + val content = Minifier minify resource.getAsString + + context.setVariables(values.asJava) + expressionParser.parseExpression(content, new TemplateParserContext("${", "}")).getValue(context, classOf[String]) + } } diff --git a/PlayWall/src/main/scala/de/tobias/playpad/design/ModernGlobalDesignHandlerImpl.scala b/PlayWall/src/main/scala/de/tobias/playpad/design/ModernGlobalDesignHandlerImpl.scala index 3eea45b74878a931b801b72ea341ce13375be7d2..2f36bbb65034d438a9473f72d4036f8b598e6276 100644 --- a/PlayWall/src/main/scala/de/tobias/playpad/design/ModernGlobalDesignHandlerImpl.scala +++ b/PlayWall/src/main/scala/de/tobias/playpad/design/ModernGlobalDesignHandlerImpl.scala @@ -4,8 +4,6 @@ import de.thecodelabs.utils.application.ApplicationUtils import de.thecodelabs.utils.application.container.PathType import de.tobias.playpad.design.modern.model.{ModernCartDesign, ModernGlobalDesign} import de.tobias.playpad.design.modern.{ModernColor, ModernGlobalDesignHandler} -import de.tobias.playpad.pad.content.play.Durationable -import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController import de.tobias.playpad.project.Project import de.tobias.playpad.util.Minifier import de.tobias.playpad.view.{ColorPickerView, PseudoClasses} @@ -13,7 +11,6 @@ import de.tobias.playpad.viewcontroller.main.IMainViewController import de.tobias.playpad.{DisplayableColor, PlayPadMain} import javafx.scene.paint.Color import javafx.stage.Stage -import javafx.util.Duration import org.springframework.expression.ExpressionParser import org.springframework.expression.common.TemplateParserContext import org.springframework.expression.spel.standard.SpelExpressionParser @@ -50,10 +47,8 @@ class ModernGlobalDesignHandlerImpl extends ModernGlobalDesignHandler with Color project.getPage(controller.getPage).getPads.forEach(pad => { val padSettings = pad.getPadSettings - if (padSettings.isCustomDesign) { - val cartDesign = padSettings.getDesign - stringBuilder.append(cartDesignHandler.generateCss(cartDesign, s"${pad.getPadIndex}", design.isFlatDesign)) - } + val cartDesign = padSettings.getDesign + stringBuilder.append(cartDesignHandler.generateCss(cartDesign, s"${pad.getPadIndex}", design.isFlatDesign)) }) Files.write(customCss, stringBuilder.toString().getBytes()) @@ -92,33 +87,6 @@ class ModernGlobalDesignHandlerImpl extends ModernGlobalDesignHandler with Color expressionParser.parseExpression(string, new TemplateParserContext("${", "}")).getValue(context, classOf[String]) } - override def handleWarning(design: ModernGlobalDesign, controller: AbstractPadViewController, warning: Duration): Unit = { - if (design.isWarnAnimation) { - warnAnimation(design, controller, warning) - } else { - ModernDesignAnimator.warnFlash(controller) - } - } - - private def warnAnimation(design: ModernGlobalDesign, controller: AbstractPadViewController, warning: Duration): Unit = { - val stopColor = if (design.isFlatDesign) design.getBackgroundColor.toFlatFadeableColor else design.getBackgroundColor.toFadeableColor - val playColor = if (design.isFlatDesign) design.getPlayColor.toFlatFadeableColor else design.getPlayColor.toFadeableColor - - val pad = controller.getPad - val duration = pad.getContent match { - case durationable: Durationable => - if (warning.greaterThan(durationable.getDuration)) { - durationable.getDuration - } else { - warning - } - case _ => warning - } - ModernDesignAnimator.animateWarn(controller, playColor, stopColor, duration) - } - - override def stopWarning(design: ModernGlobalDesign, controller: AbstractPadViewController): Unit = ModernDesignAnimator.stopAnimation(controller) - override def getColorInterface(onSelection: Consumer[DisplayableColor]) = new ColorPickerView(null, ModernColor.values.asInstanceOf[Array[DisplayableColor]], onSelection) override def setColor(design: ModernCartDesign, color: DisplayableColor): Unit = { diff --git a/PlayWall/src/main/scala/de/tobias/playpad/design/ModernWarningDesignHandlerImpl.scala b/PlayWall/src/main/scala/de/tobias/playpad/design/ModernWarningDesignHandlerImpl.scala new file mode 100644 index 0000000000000000000000000000000000000000..5e288d06813b1e649212c703fc51e60c1afcc4bb --- /dev/null +++ b/PlayWall/src/main/scala/de/tobias/playpad/design/ModernWarningDesignHandlerImpl.scala @@ -0,0 +1,20 @@ +package de.tobias.playpad.design + +import de.tobias.playpad.design.modern.ModernWarningDesignHandler +import de.tobias.playpad.design.modern.model.ModernGlobalDesign +import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController +import de.tobias.playpad.util.FadeableColor +import javafx.util.Duration + +class ModernWarningDesignHandlerImpl extends ModernWarningDesignHandler { + + override def performWarning(design: ModernGlobalDesign, fadeStartColor: FadeableColor, fadeStopColor: FadeableColor, controller: AbstractPadViewController, warningDuration: Duration): Unit = { + if (design.isWarnAnimation) { + ModernDesignAnimator.animateWarn(controller, fadeStartColor, fadeStopColor, warningDuration) + } else { + ModernDesignAnimator.warnFlash(controller) + } + } + + override def stopWarning(controller: AbstractPadViewController): Unit = ModernDesignAnimator.stopAnimation(controller) +} diff --git a/PlayWall/src/test/java/de/tobias/playpad/update/VersionUpdaterTest.java b/PlayWall/src/test/java/de/tobias/playpad/update/VersionUpdaterTest.java new file mode 100644 index 0000000000000000000000000000000000000000..15339be0643a1dc3aa66ae68d6a7735129be8e0a --- /dev/null +++ b/PlayWall/src/test/java/de/tobias/playpad/update/VersionUpdaterTest.java @@ -0,0 +1,45 @@ +package de.tobias.playpad.update; + +import org.dom4j.Document; +import org.dom4j.DocumentException; +import org.dom4j.Element; +import org.junit.Test; + +import java.io.InputStream; + +import static org.assertj.core.api.Assertions.assertThat; + +public class VersionUpdaterTest +{ + @Test + public void testMigrateProject_UpdatePadDesignSettings() throws DocumentException + { + final InputStream projectInputStream = VersionUpdaterTest.class.getClassLoader().getResourceAsStream("de/tobias/playpad/update/ProjectToMigrateToVersion44.xml"); + final Document migratedProject = VersionUpdater.updateProject(projectInputStream); + + final Element rootElement = migratedProject.getRootElement(); + final Element pageElement = rootElement.elements().get(0); + + // pad with custom design enabled + final Element padElement = pageElement.elements().get(0); + final Element designElement = padElement.element("Settings").element("Design"); + + assertThat(designElement.attribute("custom")).isNull(); + + assertThat(designElement.element("EnableCustomBackgroundColor").getStringValue()).isEqualTo("true"); + assertThat(designElement.element("BackgroundColor").getStringValue()).isEqualTo("RED2"); + + assertThat(designElement.element("EnableCustomPlayColor").getStringValue()).isEqualTo("true"); + assertThat(designElement.element("PlayColor").getStringValue()).isEqualTo("YELLOW2"); + + assertThat(designElement.element("EnableCustomCueInColor").getStringValue()).isEqualTo("true"); + assertThat(designElement.element("CueInColor").getStringValue()).isEqualTo("LIGHT_GREEN2"); + + + // pad without custom design + final Element padElement2 = pageElement.elements().get(1); + final Element designElement2 = padElement2.element("Settings").element("Design"); + + assertThat(designElement2.attribute("custom")).isNull(); + } +} diff --git a/PlayWall/src/test/resources/de/tobias/playpad/update/ProjectToMigrateToVersion44.xml b/PlayWall/src/test/resources/de/tobias/playpad/update/ProjectToMigrateToVersion44.xml new file mode 100644 index 0000000000000000000000000000000000000000..86a23a31d6079ae067eb9329594ba46cc50d65d9 --- /dev/null +++ b/PlayWall/src/test/resources/de/tobias/playpad/update/ProjectToMigrateToVersion44.xml @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<Project> + <Page uuid="a40033c7-4a85-49c9-bdfe-00e0e8a35fa2" id="0" name=""> + <Pad uuid="1028ee71-aebb-4975-8bfd-40d6872bc1b0" index="0" name="" status="EMPTY"> + <Settings id="cc73d33f-e3dc-4b58-b199-2a77577b1d89"> + <Volume>1.0</Volume> + <Loop>false</Loop> + <Design id="5603c0a3-f3e6-4191-857b-978ba3846e28" custom="true"> + <BackgroundColor>RED2</BackgroundColor> + <PlayColor>YELLOW2</PlayColor> + <CueInColor>LIGHT_GREEN2</CueInColor> + </Design> + <CustomSettings/> + <Triggers> + <Trigger point="START"/> + <Trigger point="EOF_STOP"/> + </Triggers> + </Settings> + </Pad> + <Pad uuid="bde56734-a606-4c19-a19b-7ef20aa7b827" index="1" name="" status="EMPTY"> + <Settings id="0be18dbe-f914-4a11-a470-b4279fe98e0f"> + <Volume>1.0</Volume> + <Loop>false</Loop> + <Design custom="false"/> + <CustomSettings/> + <Triggers> + <Trigger point="START"/> + <Trigger point="EOF_STOP"/> + </Triggers> + </Settings> + </Pad> + </Page> + <Settings> + <Columns>2</Columns> + <Rows>1</Rows> + <MediaPath active="false"/> + </Settings> +</Project> diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/action/feedback/ColorAdjuster.java b/PlayWallCore/src/main/java/de/tobias/playpad/action/feedback/ColorAdjuster.java index 43b68616b2f60bfe777cb52cef208acb88f6ea2a..90d9df8f322498968c13d61d962f3898b197fb1b 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/action/feedback/ColorAdjuster.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/action/feedback/ColorAdjuster.java @@ -12,6 +12,7 @@ import de.thecodelabs.midi.mapping.MidiKey; import de.thecodelabs.midi.midi.Midi; import de.thecodelabs.midi.midi.feedback.MidiFeedbackTranscript; import de.tobias.playpad.design.FeedbackDesignColorSuggester; +import de.tobias.playpad.design.modern.model.ModernCartDesign; import de.tobias.playpad.pad.Pad; import de.tobias.playpad.profile.Profile; import javafx.scene.paint.Color; @@ -69,19 +70,23 @@ public class ColorAdjuster { Pad pad = suggester.getPad(action); - Color layoutStdColor = null; - Color layoutEvColor = null; + FeedbackDesignColorSuggester globalDesign = Profile.currentProfile().getProfileSettings().getDesign(); + Color layoutStdColor = globalDesign.getDesignDefaultColor(); + Color layoutEvColor = globalDesign.getDesignEventColor(); - FeedbackDesignColorSuggester design; - if (pad != null && pad.getPadSettings().isCustomDesign()) { - design = pad.getPadSettings().getDesign(); - } else { - design = Profile.currentProfile().getProfileSettings().getDesign(); - } + if(pad != null) + { + final ModernCartDesign padDesign = pad.getPadSettings().getDesign(); + + if(padDesign.isEnableCustomBackgroundColor()) + { + layoutStdColor = padDesign.getDesignDefaultColor(); + } - if (design != null) { - layoutStdColor = design.getDesignDefaultColor(); - layoutEvColor = design.getDesignEventColor(); + if(padDesign.isEnableCustomPlayColor()) + { + layoutEvColor = padDesign.getDesignEventColor(); + } } if (layoutStdColor != null) { @@ -96,9 +101,7 @@ public class ColorAdjuster { final byte channel = suggester.suggestFeedbackChannel(FeedbackType.EVENT); key.setEventFeedback(new Feedback(channel, matchedColor.getValue())); }); - } - if (layoutEvColor != null) { searchColor(transcript, layoutEvColor).ifPresent(matchedColor -> { final byte channel = suggester.suggestFeedbackChannel(FeedbackType.WARNING); key.setWarningFeedback(new Feedback(channel, matchedColor.getValue())); diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/design/ModernDesignHandler.java b/PlayWallCore/src/main/java/de/tobias/playpad/design/ModernDesignProvider.java similarity index 61% rename from PlayWallCore/src/main/java/de/tobias/playpad/design/ModernDesignHandler.java rename to PlayWallCore/src/main/java/de/tobias/playpad/design/ModernDesignProvider.java index a96e7a9bf1223c41a82a522f03f0a2ebc1769f04..08c41f82f6ebaf0f30c044fede65d5d616f877e4 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/design/ModernDesignHandler.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/design/ModernDesignProvider.java @@ -2,8 +2,12 @@ package de.tobias.playpad.design; import de.tobias.playpad.design.modern.ModernCartDesignHandler; import de.tobias.playpad.design.modern.ModernGlobalDesignHandler; +import de.tobias.playpad.design.modern.ModernWarningDesignHandler; + +public interface ModernDesignProvider +{ + ModernWarningDesignHandler warning(); -public interface ModernDesignHandler { ModernGlobalDesignHandler global(); ModernCartDesignHandler cart(); diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/ModernCartDesignHandler.java b/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/ModernCartDesignHandler.java index 200ead1fd6e412137370b6393167bb1092adc90d..7f7afe2d3b7fcf1e2ab6687e2539ea71200949e0 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/ModernCartDesignHandler.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/ModernCartDesignHandler.java @@ -1,20 +1,8 @@ package de.tobias.playpad.design.modern; import de.tobias.playpad.design.modern.model.ModernCartDesign; -import de.tobias.playpad.design.modern.model.ModernGlobalDesign; -import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController; -import javafx.util.Duration; - -public interface ModernCartDesignHandler { +public interface ModernCartDesignHandler +{ String generateCss(ModernCartDesign design, String classSuffix, boolean flat); - - /* - * Wird in einem neuen Thread aufgerufen - */ - void handleWarning(ModernCartDesign design, AbstractPadViewController controller, Duration warning, ModernGlobalDesign globalDesign); - - default void stopWarning(ModernCartDesign design, AbstractPadViewController controller) { - } - } diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/ModernGlobalDesignHandler.java b/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/ModernGlobalDesignHandler.java index bca1e4aa9cee672852326f41dffe582e115f10e4..826e3409a7e0ea7170b9598f563e995d4ac4f158 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/ModernGlobalDesignHandler.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/ModernGlobalDesignHandler.java @@ -1,23 +1,14 @@ package de.tobias.playpad.design.modern; import de.tobias.playpad.design.modern.model.ModernGlobalDesign; -import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController; import de.tobias.playpad.project.Project; import de.tobias.playpad.viewcontroller.main.IMainViewController; import javafx.stage.Stage; -import javafx.util.Duration; -public interface ModernGlobalDesignHandler { +public interface ModernGlobalDesignHandler +{ void applyStyleSheet(Stage stage); void applyStyleSheetToMainViewController(ModernGlobalDesign design, IMainViewController controller, Stage stage, Project project); - - /* - * Wird in einem neuen Thread aufgerufen - */ - void handleWarning(ModernGlobalDesign design, AbstractPadViewController controller, Duration warning); - - default void stopWarning(ModernGlobalDesign design, AbstractPadViewController controller) { - } } diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/ModernWarningDesignHandler.java b/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/ModernWarningDesignHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..f365d2311a6f0cc8c09cf6d8d18391e8fc09f0c8 --- /dev/null +++ b/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/ModernWarningDesignHandler.java @@ -0,0 +1,57 @@ +package de.tobias.playpad.design.modern; + +import de.tobias.playpad.design.modern.model.ModernCartDesign; +import de.tobias.playpad.design.modern.model.ModernGlobalDesign; +import de.tobias.playpad.pad.Pad; +import de.tobias.playpad.pad.content.play.Durationable; +import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController; +import de.tobias.playpad.util.FadeableColor; +import javafx.util.Duration; + +public interface ModernWarningDesignHandler +{ + default void handleWarning(ModernGlobalDesign globalDesign, ModernCartDesign cartDesign, AbstractPadViewController controller, Duration warningDuration) + { + ModernColor backgroundColor = globalDesign.getBackgroundColor(); + ModernColor playColor = globalDesign.getPlayColor(); + + if(cartDesign.isEnableCustomBackgroundColor()) + { + backgroundColor = cartDesign.getBackgroundColor(); + } + + if(cartDesign.isEnableCustomPlayColor()) + { + playColor = cartDesign.getPlayColor(); + } + + final FadeableColor fadeStartColor = globalDesign.isFlatDesign() ? playColor.toFlatFadeableColor() : playColor.toFadeableColor(); + final FadeableColor fadeStopColor = globalDesign.isFlatDesign() ? backgroundColor.toFlatFadeableColor() : backgroundColor.toFadeableColor(); + final Duration duration = determineDuration(controller.getPad(), warningDuration); + + performWarning(globalDesign, fadeStartColor, fadeStopColor, controller, duration); + } + + default Duration determineDuration(Pad pad, Duration warningDuration) + { + if(pad.getContent() instanceof Durationable) + { + final Durationable durationable = (Durationable) pad.getContent(); + if(warningDuration.greaterThan(durationable.getDuration())) + { + return durationable.getDuration(); + } + } + + return warningDuration; + } + + /* + * Wird in einem neuen Thread aufgerufen + */ + void performWarning(ModernGlobalDesign design, FadeableColor fadeStartColor, FadeableColor fadeStopColor, AbstractPadViewController controller, Duration duration); + + default void stopWarning(AbstractPadViewController controller) + { + } +} 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 0d79598ab08bdc44c125ee494909fe9925942abc..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,36 +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); @@ -49,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(); } @@ -61,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(); } @@ -73,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(); } @@ -94,12 +199,11 @@ public class ModernCartDesign implements FeedbackDesignColorSuggester { } public void reset() { - backgroundColor.set(ModernColor.GRAY1); - playColor.set(ModernColor.RED3); - cueInColor.set(ModernColor.RED2); + backgroundColor.set(DEFAULT_COLOR_BACKGROUND); + playColor.set(DEFAULT_COLOR_PLAY); + cueInColor.set(DEFAULT_COLOR_CUE_IN); } - // Color Associator @Override public Color getDesignEventColor() { @@ -112,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()) { @@ -129,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..279347a6b281505606cf61770ce7cc3ca192acfd 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.isEnableCustomPlayColor())); rootElement.addElement("PlayColor").addText(design.getPlayColor().name()); + + rootElement.addElement("EnableCustomCueInColor").addText(String.valueOf(design.isEnableCustomCueInColor())); 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..8e8e3faf88ad68c8f82dfddfb11c7b1b32ac1454 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/pad/PadSettings.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/pad/PadSettings.java @@ -35,7 +35,6 @@ public class PadSettings { private ObjectProperty<Duration> warningProperty = new SimpleObjectProperty<>(); private ObjectProperty<Duration> cueInProperty = new SimpleObjectProperty<>(); - private BooleanProperty customDesignProperty = new SimpleBooleanProperty(false); private ModernCartDesign design; private Map<TriggerPoint, Trigger> triggers = new EnumMap<>(TriggerPoint.class); @@ -187,21 +186,9 @@ public class PadSettings { return cueInProperty.get(); } - public boolean isCustomDesign() { - return customDesignProperty.get(); - } - - public void setCustomDesign(boolean customLayout) { - this.customDesignProperty.set(customLayout); - } - - public BooleanProperty customDesignProperty() { - return customDesignProperty; - } - 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); @@ -271,10 +258,7 @@ public class PadSettings { else clone.warningProperty = new SimpleObjectProperty<>(); - clone.customDesignProperty = new SimpleBooleanProperty(isCustomDesign()); - if (design != null) { - clone.design = design.copy(pad); - } + clone.design = design.copy(pad); clone.triggers = new EnumMap<>(TriggerPoint.class); triggers.forEach((key, value) -> clone.triggers.put(key, value.copy())); @@ -307,10 +291,11 @@ public class PadSettings { //// Computed public ModernColor getBackgroundColor() { - if (isCustomDesign()) { + if(design.isEnableCustomBackgroundColor()) + { return design.getBackgroundColor(); - } else { - return Profile.currentProfile().getProfileSettings().getDesign().getBackgroundColor(); } + + return Profile.currentProfile().getProfileSettings().getDesign().getBackgroundColor(); } } 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..f0854591d54fe67f2ea5f9a1a835e5627a4a7a5b 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/pad/PadSettingsSerializer.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/pad/PadSettingsSerializer.java @@ -72,9 +72,6 @@ public class PadSettingsSerializer { // Layout Element designElement = settingsElement.element(DESIGN_ELEMENT); if (designElement != null) { - if (designElement.attributeValue(CUSTOM_DESIGN_ELEMENT) != null) { - padSettings.setCustomDesign(Boolean.parseBoolean(designElement.attributeValue(CUSTOM_DESIGN_ELEMENT))); - } ModernCartDesignSerializer serializer = new ModernCartDesignSerializer(); ModernCartDesign design = serializer.load(designElement, pad); padSettings.setDesign(design); @@ -124,11 +121,8 @@ public class PadSettingsSerializer { // Layout Element designElement = settingsElement.addElement(DESIGN_ELEMENT); - if (padSettings.isCustomDesign()) { - ModernCartDesignSerializer serializer = new ModernCartDesignSerializer(); - serializer.save(designElement, padSettings.getDesign()); - } - designElement.addAttribute(CUSTOM_DESIGN_ELEMENT, String.valueOf(padSettings.isCustomDesign())); + ModernCartDesignSerializer serializer = new ModernCartDesignSerializer(); + serializer.save(designElement, padSettings.getDesign()); Element userInfoElement = settingsElement.addElement(CUSTOM_SETTINGS_ELEMENT); for (String key : padSettings.getCustomSettings().keySet()) { diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/project/ProjectSettings.java b/PlayWallCore/src/main/java/de/tobias/playpad/project/ProjectSettings.java index 34c065494f144ce1e3321292514e2b14a5f87c90..5681a250bc37d717584a425ab31cb9920ad6b811 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/project/ProjectSettings.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/project/ProjectSettings.java @@ -1,5 +1,6 @@ package de.tobias.playpad.project; +import de.thecodelabs.storage.settings.UserDefaults; import de.thecodelabs.storage.settings.annotation.Key; import de.thecodelabs.utils.application.ApplicationUtils; import de.tobias.playpad.project.api.IProjectSettings; @@ -8,14 +9,17 @@ import java.nio.file.Path; public class ProjectSettings implements IProjectSettings { - public static final int MAX_PAGES; + public static int MAX_PAGES = 10; static { - Object maxPages = ApplicationUtils.getApplication().getUserDefaults().getData("MAX_PAGES"); - if (maxPages != null) { - MAX_PAGES = Integer.parseInt(maxPages.toString()); - } else { - MAX_PAGES = 10; + final UserDefaults userDefaults = ApplicationUtils.getApplication().getUserDefaults(); + if(userDefaults != null) + { + Object maxPages = userDefaults.getData("MAX_PAGES"); + if(maxPages != null) + { + MAX_PAGES = Integer.parseInt(maxPages.toString()); + } } } 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); } } diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/server/sync/listener/downstream/pad/settings/design/DesignUpdateListener.java b/PlayWallCore/src/main/java/de/tobias/playpad/server/sync/listener/downstream/pad/settings/design/DesignUpdateListener.java index fd06d289d49901d970a3dcf8e980e9fe2822af26..47914b9c414aa7020c013b219bb35854dc4e6db4 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/server/sync/listener/downstream/pad/settings/design/DesignUpdateListener.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/server/sync/listener/downstream/pad/settings/design/DesignUpdateListener.java @@ -41,13 +41,11 @@ public class DesignUpdateListener implements ServerListener { if (field.equals(PropertyDef.DESIGN_BACKGROUND_COLOR)) { Platform.runLater(() -> { design.setBackgroundColor(color); - pad.getPadSettings().setCustomDesign(true); mainViewController.loadUserCss(); }); } else if (field.equals(PropertyDef.DESIGN_PLAY_COLOR)) { Platform.runLater(() -> { design.setPlayColor(color); - pad.getPadSettings().setCustomDesign(true); mainViewController.loadUserCss(); }); } diff --git a/PlayWallCore/src/test/java/de/tobias/playpad/pad/PadSettingsSerializerTest.java b/PlayWallCore/src/test/java/de/tobias/playpad/pad/PadSettingsSerializerTest.java new file mode 100644 index 0000000000000000000000000000000000000000..c4c7191c307cb2af2fdedbcfc887c990561713ae --- /dev/null +++ b/PlayWallCore/src/test/java/de/tobias/playpad/pad/PadSettingsSerializerTest.java @@ -0,0 +1,60 @@ +package de.tobias.playpad.pad; + +import de.tobias.playpad.design.modern.model.ModernCartDesign; +import de.tobias.playpad.project.Project; +import de.tobias.playpad.project.ref.ProjectReference; +import de.tobias.playpad.settings.FadeSettings; +import de.tobias.playpad.tigger.Trigger; +import de.tobias.playpad.tigger.TriggerPoint; +import javafx.util.Duration; +import org.dom4j.Document; +import org.dom4j.DocumentHelper; +import org.dom4j.Element; +import org.junit.Test; + +import java.util.EnumMap; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +import static de.tobias.playpad.pad.PadSerializer.SETTINGS_ELEMENT; +import static org.assertj.core.api.Assertions.assertThat; + +public class PadSettingsSerializerTest +{ + @Test + public void testSave_General() + { + // arrange + final Document document = DocumentHelper.createDocument(); + final Element rootElement = document.addElement(SETTINGS_ELEMENT); + + final Project project = new Project(new ProjectReference(UUID.randomUUID(), "TestProject", false)); + final Pad pad = new Pad(project, 1, null); + + final UUID padUUID = UUID.randomUUID(); + final PadSettings padSettings = new PadSettings(pad, padUUID); + padSettings.setVolume(0.5); + padSettings.setLoop(true); + padSettings.setTimeMode(TimeMode.REST); + padSettings.setFade(new FadeSettings(Duration.seconds(1), Duration.seconds(2))); + + final Duration expectedWarningDuration = Duration.seconds(3); + padSettings.setWarning(expectedWarningDuration); + final Duration expectedCueInDuration = Duration.seconds(4); + padSettings.setCueIn(expectedCueInDuration); + + // act + final PadSettingsSerializer serializer = new PadSettingsSerializer(); + serializer.saveElement(rootElement, padSettings); + + // assert + assertThat(rootElement.attribute("id").getStringValue()).isEqualTo(padUUID.toString()); + assertThat(rootElement.element("Volume").getStringValue()).isEqualTo("0.5"); + assertThat(rootElement.element("Loop").getStringValue()).isEqualTo("true"); + assertThat(rootElement.element("TimeMode").getStringValue()).isEqualTo(TimeMode.REST.toString()); + assertThat(rootElement.element("Fade").getStringValue()).isNotNull(); + assertThat(rootElement.element("Warning").getStringValue()).isEqualTo(expectedWarningDuration.toString()); + assertThat(rootElement.element("CueIn").getStringValue()).isEqualTo(expectedCueInDuration.toString()); + } +} diff --git a/PlayWallCore/src/test/resources/colors/ModernColor.json b/PlayWallCore/src/test/resources/colors/ModernColor.json new file mode 100644 index 0000000000000000000000000000000000000000..eae7057a68a2decc1663d87c5c93690720c835ac --- /dev/null +++ b/PlayWallCore/src/test/resources/colors/ModernColor.json @@ -0,0 +1,470 @@ +[ + { + "name": "RED1", + "colors": { + "hi": "#ef9a9a", + "low": "#ef5350", + "font": "#000000", + "button": "#000000", + "playbar": { + "background": "#ffffff", + "track": "#333333" + } + } + }, + { + "name": "RED2", + "colors": { + "hi": "#ef5350", + "low": "#e53935", + "font": "#000000", + "button": "#000000", + "playbar": { + "background": "#ffffff", + "track": "#333333" + } + } + }, + { + "name": "RED3", + "colors": { + "hi": "#e53935", + "low": "#c62828", + "font": "#ffffff", + "button": "#ffffff", + "playbar": { + "background": "#ffffff", + "track": "#333333" + } + } + }, + { + "name": "DARK_RED1", + "colors": { + "hi": "#D92349", + "low": "#AD2039", + "font": "#ffffff", + "button": "#ffffff", + "playbar": { + "background": "#ffffff", + "track": "#333333" + } + } + }, + { + "name": "DARK_RED2", + "colors": { + "hi": "#C92349", + "low": "#8D2039", + "font": "#ffffff", + "button": "#ffffff", + "playbar": { + "background": "#ffffff", + "track": "#333333" + } + } + }, + { + "name": "DARK_RED3", + "colors": { + "hi": "#A90329", + "low": "#6D0019", + "font": "#ffffff", + "button": "#ffffff", + "playbar": { + "background": "#ffffff", + "track": "#333333" + } + } + }, + { + "name": "PINK1", + "colors": { + "hi": "#f48fb1", + "low": "#ec407a", + "font": "#000000", + "button": "#000000", + "playbar": { + "background": "#ffffff", + "track": "#333333" + } + } + }, + { + "name": "PINK2", + "colors": { + "hi": "#ec407a", + "low": "#d81b60", + "font": "#000000", + "button": "#000000", + "playbar": { + "background": "#ffffff", + "track": "#333333" + } + } + }, + { + "name": "PINK3", + "colors": { + "hi": "#d81b60", + "low": "#ad1457", + "font": "#ffffff", + "button": "#ffffff", + "playbar": { + "background": "#ffffff", + "track": "#333333" + } + } + }, + { + "name": "PURPLE1", + "colors": { + "hi": "#ce93d8", + "low": "#ab47bc", + "font": "#ffffff", + "button": "#ffffff", + "playbar": { + "background": "#ffffff", + "track": "#333333" + } + } + }, + { + "name": "PURPLE2", + "colors": { + "hi": "#ab47bc", + "low": "#8e24aa", + "font": "#ffffff", + "button": "#ffffff", + "playbar": { + "background": "#ffffff", + "track": "#333333" + } + } + }, + { + "name": "PURPLE3", + "colors": { + "hi": "#8e24aa", + "low": "#6a1b9a", + "font": "#ffffff", + "button": "#ffffff", + "playbar": { + "background": "#ffffff", + "track": "#333333" + } + } + }, + { + "name": "LIGHT_BLUE1", + "colors": { + "hi": "#80deea", + "low": "#26c6da", + "font": "#000000", + "button": "#000000", + "playbar": { + "background": "#ffffff", + "track": "#333333" + } + } + }, + { + "name": "LIGHT_BLUE2", + "colors": { + "hi": "#26c6da", + "low": "#00acc1", + "font": "#ffffff", + "button": "#ffffff", + "playbar": { + "background": "#ffffff", + "track": "#333333" + } + } + }, + { + "name": "LIGHT_BLUE3", + "colors": { + "hi": "#00acc1", + "low": "#00838f", + "font": "#ffffff", + "button": "#ffffff", + "playbar": { + "background": "#ffffff", + "track": "#333333" + } + } + }, + { + "name": "BLUE1", + "colors": { + "hi": "#90caf9", + "low": "#42a5f5", + "font": "#000000", + "button": "#000000", + "playbar": { + "background": "#ffffff", + "track": "#333333" + } + } + }, + { + "name": "BLUE2", + "colors": { + "hi": "#42a5f5", + "low": "#1e88e5", + "font": "#ffffff", + "button": "#ffffff", + "playbar": { + "background": "#ffffff", + "track": "#333333" + } + } + }, + { + "name": "BLUE3", + "colors": { + "hi": "#1e88e5", + "low": "#1565c0", + "font": "#ffffff", + "button": "#ffffff", + "playbar": { + "background": "#ffffff", + "track": "#333333" + } + } + }, + { + "name": "LIGHT_GREEN1", + "colors": { + "hi": "#c5e1a5", + "low": "#9ccc65", + "font": "#000000", + "button": "#000000", + "playbar": { + "background": "#ffffff", + "track": "#333333" + } + } + }, + { + "name": "LIGHT_GREEN2", + "colors": { + "hi": "#9ccc65", + "low": "#7cb342", + "font": "#ffffff", + "button": "#ffffff", + "playbar": { + "background": "#ffffff", + "track": "#333333" + } + } + }, + { + "name": "LIGHT_GREEN3", + "colors": { + "hi": "#7cb342", + "low": "#558b2f", + "font": "#ffffff", + "button": "#ffffff", + "playbar": { + "background": "#ffffff", + "track": "#333333" + } + } + }, + { + "name": "LIME1", + "colors": { + "hi": "#e6ee9c", + "low": "#d4e157", + "font": "#000000", + "button": "#000000", + "playbar": { + "background": "#ffffff", + "track": "#333333" + } + } + }, + { + "name": "LIME2", + "colors": { + "hi": "#d4e157", + "low": "#c0ca33", + "font": "#000000", + "button": "#000000", + "playbar": { + "background": "#ffffff", + "track": "#333333" + } + } + }, + { + "name": "LIME3", + "colors": { + "hi": "#c0ca33", + "low": "#9e9d24", + "font": "#000000", + "button": "#000000", + "playbar": { + "background": "#ffffff", + "track": "#333333" + } + } + }, + { + "name": "YELLOW1", + "colors": { + "hi": "#fff59d", + "low": "#ffee58", + "font": "#000000", + "button": "#000000", + "playbar": { + "background": "#333333", + "track": "#FFFFFF" + } + } + }, + { + "name": "YELLOW2", + "colors": { + "hi": "#ffee58", + "low": "#fdd835", + "font": "#000000", + "button": "#000000", + "playbar": { + "background": "#333333", + "track": "#FFFFFF" + } + } + }, + { + "name": "YELLOW3", + "colors": { + "hi": "#fdd835", + "low": "#f9a825", + "font": "#000000", + "button": "#000000", + "playbar": { + "background": "#ffffff", + "track": "#333333" + } + } + }, + { + "name": "ORANGE1", + "colors": { + "hi": "#ffcc80", + "low": "#ffa726", + "font": "#000000", + "button": "#000000", + "playbar": { + "background": "#ffffff", + "track": "#333333" + } + } + }, + { + "name": "ORANGE2", + "colors": { + "hi": "#ffa726", + "low": "#fb8c00", + "font": "#000000", + "button": "#000000", + "playbar": { + "background": "#ffffff", + "track": "#333333" + } + } + }, + { + "name": "ORANGE3", + "colors": { + "hi": "#fb8c00", + "low": "#ef6c00", + "font": "#000000", + "button": "#000000", + "playbar": { + "background": "#ffffff", + "track": "#333333" + } + } + }, + { + "name": "GRAY1", + "colors": { + "hi": "#eeeeee", + "low": "#cccccc", + "font": "#000000", + "button": "#000000", + "playbar": { + "background": "#333333", + "track": "#FFFFFF" + } + } + }, + { + "name": "GRAY2", + "colors": { + "hi": "#cccccc", + "low": "#aaaaaa", + "font": "#000000", + "button": "#000000", + "playbar": { + "background": "#ffffff", + "track": "#333333" + } + } + }, + { + "name": "GRAY3", + "colors": { + "hi": "#aaaaaa", + "low": "#888888", + "font": "#FFFFFF", + "button": "#FFFFFF", + "playbar": { + "background": "#ffffff", + "track": "#333333" + } + } + }, + { + "name": "GRAY4", + "colors": { + "hi": "#888888", + "low": "#666666", + "font": "#FFFFFF", + "button": "#FFFFFF", + "playbar": { + "background": "#ffffff", + "track": "#333333" + } + } + }, + { + "name": "GRAY5", + "colors": { + "hi": "#666666", + "low": "#444444", + "font": "#FFFFFF", + "button": "#FFFFFF", + "playbar": { + "background": "#ffffff", + "track": "#333333" + } + } + }, + { + "name": "GRAY6", + "colors": { + "hi": "#444444", + "low": "#222222", + "font": "#FFFFFF", + "button": "#FFFFFF", + "playbar": { + "background": "#ffffff", + "track": "#333333" + } + } + } +] \ No newline at end of file diff --git a/pom.xml b/pom.xml index 4e735ed3fdaf7d8165254248ab14d39fffd7fba2..c55300adc97f3a64a49997d54a7e54c79cd20602 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ <packaging>pom</packaging> <properties> - <project.build.code>43</project.build.code> + <project.build.code>44</project.build.code> <project.versionDate>${maven.build.timestamp}</project.versionDate> <maven.build.timestamp.format>yyyy-MM-dd</maven.build.timestamp.format>