From 230a0f43b9d0656d33b32e6f6739b7f69527cd0f Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Sat, 4 Feb 2023 23:52:25 +0100 Subject: [PATCH] #186 - convert modern cart design scala classes to java --- .../design/ModernCartDesignHandlerImpl.java | 106 +++++++++++++ .../design/ModernCartDesignHandlerImpl.scala | 70 --------- .../design/ModernGlobalDesignHandlerImpl.java | 148 ++++++++++++++++++ .../ModernGlobalDesignHandlerImpl.scala | 99 ------------ .../ModernWarningDesignHandlerImpl.java | 30 ++++ .../ModernWarningDesignHandlerImpl.scala | 21 --- 6 files changed, 284 insertions(+), 190 deletions(-) create mode 100644 PlayWall/src/main/scala/de/tobias/playpad/design/ModernCartDesignHandlerImpl.java delete mode 100644 PlayWall/src/main/scala/de/tobias/playpad/design/ModernCartDesignHandlerImpl.scala create mode 100644 PlayWall/src/main/scala/de/tobias/playpad/design/ModernGlobalDesignHandlerImpl.java delete mode 100644 PlayWall/src/main/scala/de/tobias/playpad/design/ModernGlobalDesignHandlerImpl.scala create mode 100644 PlayWall/src/main/scala/de/tobias/playpad/design/ModernWarningDesignHandlerImpl.java delete mode 100644 PlayWall/src/main/scala/de/tobias/playpad/design/ModernWarningDesignHandlerImpl.scala diff --git a/PlayWall/src/main/scala/de/tobias/playpad/design/ModernCartDesignHandlerImpl.java b/PlayWall/src/main/scala/de/tobias/playpad/design/ModernCartDesignHandlerImpl.java new file mode 100644 index 00000000..33457714 --- /dev/null +++ b/PlayWall/src/main/scala/de/tobias/playpad/design/ModernCartDesignHandlerImpl.java @@ -0,0 +1,106 @@ +package de.tobias.playpad.design; + +import de.thecodelabs.utils.application.ApplicationUtils; +import de.thecodelabs.utils.application.resources.classpath.ClasspathResource; +import de.tobias.playpad.design.modern.ModernCartDesignHandler; +import de.tobias.playpad.design.modern.ModernColor; +import de.tobias.playpad.design.modern.model.ModernCartDesign; +import de.tobias.playpad.util.Minifier; +import de.tobias.playpad.view.PseudoClasses; +import org.springframework.expression.ExpressionParser; +import org.springframework.expression.common.TemplateParserContext; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; + +import java.text.MessageFormat; +import java.util.HashMap; +import java.util.Map; + +public class ModernCartDesignHandlerImpl implements ModernCartDesignHandler +{ + @Override + public String generateCss(ModernCartDesign design, String classSuffix, boolean flat) + { + String result = ""; + + if(design.isEnableCustomBackgroundColor()) + { + result += generatePadCss(design, flat, classSuffix, design.getBackgroundColor(), ""); + result += generatePadCss(design, flat, classSuffix, design.getBackgroundColor(), MessageFormat.format(":{0}", PseudoClasses.WARN_CLASS.getPseudoClassName())); + } + + if(design.isEnableCustomPlayColor()) + { + result += generatePadCss(design, flat, classSuffix, design.getPlayColor(), MessageFormat.format(":{0}", PseudoClasses.PLAY_CLASS.getPseudoClassName())); + ; + } + + if(design.isEnableCustomCueInColor()) + { + result += generateCueInCss(design, flat, classSuffix); + } + + return result; + } + + private String generatePadCss(ModernCartDesign design, Boolean flat, String padIdentifier, ModernColor color, String styleState) + { + final Map<String, Object> values = new HashMap<>(); + values.put("prefix", padIdentifier); + values.put("class", styleState); + values.put("buttonColor", color.getButtonColor()); + values.put("playbarTrackColor", color.getPlaybarColor()); + values.put("playbarBarColor", color.getPlaybarTrackColor()); + + if(flat) + { + values.put("padColor", color.paint()); + } + else + { + values.put("padColor", color.linearGradient()); + } + + if(flat) + { + values.put("padCueInColor", design.getCueInColor().paint()); + } + else + { + values.put("padCueInColor", design.getCueInColor().linearGradient()); + } + + values.put("fontColor", color.getFontColor()); + + return generateCss("style/modern-pad.css", values); + } + + private String generateCueInCss(ModernCartDesign design, Boolean flat, String padIdentifier) + { + final Map<String, Object> values = new HashMap<>(); + values.put("prefix", padIdentifier); + if(flat) + { + values.put("padCueInColor", design.getCueInColor().paint()); + } + else + { + values.put("padCueInColor", design.getCueInColor().linearGradient()); + } + + return generateCss("style/modern-pad-cue-in.css", values); + } + + private String generateCss(String templatePath, Map<String, Object> values) + { + final ExpressionParser expressionParser = new SpelExpressionParser(); + + final StandardEvaluationContext context = new StandardEvaluationContext(); + + final ClasspathResource resource = ApplicationUtils.getApplication().getClasspathResource(templatePath); + final String content = Minifier.minify(resource.getAsString()); + + context.setVariables(values); + return expressionParser.parseExpression(content, new TemplateParserContext("${", "}")).getValue(context, String.class); + } +} diff --git a/PlayWall/src/main/scala/de/tobias/playpad/design/ModernCartDesignHandlerImpl.scala b/PlayWall/src/main/scala/de/tobias/playpad/design/ModernCartDesignHandlerImpl.scala deleted file mode 100644 index 51039642..00000000 --- a/PlayWall/src/main/scala/de/tobias/playpad/design/ModernCartDesignHandlerImpl.scala +++ /dev/null @@ -1,70 +0,0 @@ -package de.tobias.playpad.design - -import de.thecodelabs.utils.application.ApplicationUtils -import de.tobias.playpad.design.modern.model.ModernCartDesign -import de.tobias.playpad.design.modern.{ModernCartDesignHandler, ModernColor} -import de.tobias.playpad.util.Minifier -import de.tobias.playpad.view.PseudoClasses -import org.springframework.expression.ExpressionParser -import org.springframework.expression.common.TemplateParserContext -import org.springframework.expression.spel.standard.SpelExpressionParser -import org.springframework.expression.spel.support.StandardEvaluationContext - -import scala.jdk.CollectionConverters._ - -class ModernCartDesignHandlerImpl extends ModernCartDesignHandler { - - override def generateCss(design: ModernCartDesign, classSuffix: String, flat: Boolean): String = { - var result = "" - - if (design.isEnableCustomBackgroundColor) { - result += generatePadCss(design, flat, classSuffix, design.getBackgroundColor) - result += generatePadCss(design, flat, classSuffix, design.getBackgroundColor, s":${PseudoClasses.WARN_CLASS.getPseudoClassName}") - } - - 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, - "buttonColor" -> color.getButtonColor, - "playbarTrackColor" -> color.getPlaybarColor, - "playbarBarColor" -> color.getPlaybarTrackColor, - "padColor" -> (if (flat) color.paint() else color.linearGradient()), - "padCueInColor" -> (if (flat) design.getCueInColor.paint() else design.getCueInColor.linearGradient()), - "fontColor" -> color.getFontColor - ) - - generateCss("style/modern-pad.css", values) - } - - 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()) - ) - - generateCss("style/modern-pad-cue-in.css", values) - } - - 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.java b/PlayWall/src/main/scala/de/tobias/playpad/design/ModernGlobalDesignHandlerImpl.java new file mode 100644 index 00000000..2cde8dfa --- /dev/null +++ b/PlayWall/src/main/scala/de/tobias/playpad/design/ModernGlobalDesignHandlerImpl.java @@ -0,0 +1,148 @@ +package de.tobias.playpad.design; + +import de.thecodelabs.logger.Logger; +import de.thecodelabs.utils.application.ApplicationUtils; +import de.thecodelabs.utils.application.container.PathType; +import de.thecodelabs.utils.application.resources.classpath.ClasspathResource; +import de.tobias.playpad.DisplayableColor; +import de.tobias.playpad.PlayPadMain; +import de.tobias.playpad.design.modern.ModernCartDesignHandler; +import de.tobias.playpad.design.modern.ModernColor; +import de.tobias.playpad.design.modern.ModernGlobalDesignHandler; +import de.tobias.playpad.design.modern.model.ModernCartDesign; +import de.tobias.playpad.design.modern.model.ModernGlobalDesign; +import de.tobias.playpad.pad.PadSettings; +import de.tobias.playpad.project.Project; +import de.tobias.playpad.util.Minifier; +import de.tobias.playpad.view.ColorPickerView; +import de.tobias.playpad.view.PseudoClasses; +import de.tobias.playpad.viewcontroller.main.IMainViewController; +import javafx.scene.Node; +import javafx.scene.paint.Color; +import javafx.stage.Stage; +import org.springframework.expression.ExpressionParser; +import org.springframework.expression.common.TemplateParserContext; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.text.MessageFormat; +import java.util.HashMap; +import java.util.Map; +import java.util.function.Consumer; + +public class ModernGlobalDesignHandlerImpl implements ModernGlobalDesignHandler, ColorModeHandler +{ + @Override + public void applyStyleSheet(Stage stage) + { + stage.getScene().getStylesheets().add("style/style.css"); + stage.getScene().getStylesheets().add("style/modern.css"); + + // Custom style for playwall available + final Path customCss = ApplicationUtils.getApplication().getPath(PathType.CONFIGURATION, "style.css"); + if(Files.exists(customCss)) + { + stage.getScene().getStylesheets().add(customCss.toUri().toString()); + } + } + + @Override + public void applyStyleSheetToMainViewController(ModernGlobalDesign design, IMainViewController controller, Stage stage, Project project) + { + applyStyleSheet(stage); + + controller.setGridColor(Color.TRANSPARENT); + + // generate dynamic style sheet + final Path customCss = ApplicationUtils.getApplication().getPath(PathType.CONFIGURATION, "custom_style.css"); + final StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append(generateCss(design)); + + final ModernCartDesignHandler cartDesignHandler = PlayPadMain.getProgramInstance().getModernDesign().cart(); + project.getPage(controller.getPage()).getPads().forEach(pad -> { + final PadSettings padSettings = pad.getPadSettings(); + + final ModernCartDesign cartDesign = padSettings.getDesign(); + stringBuilder.append(cartDesignHandler.generateCss(cartDesign, String.valueOf(pad.getPadIndex()), design.isFlatDesign())); + }); + + try + { + Files.write(customCss, stringBuilder.toString().getBytes()); + } + catch(IOException e) + { + Logger.error(e); + } + + stage.getScene().getStylesheets().remove(customCss.toUri().toString()); + stage.getScene().getStylesheets().add(customCss.toUri().toString()); + } + + private String generateCss(ModernGlobalDesign design) + { + return String.join( + generateCss(design, design.getBackgroundColor(), ""), + generateCss(design, design.getPlayColor(), MessageFormat.format(":{0}", PseudoClasses.PLAY_CLASS.getPseudoClassName())), + generateCss(design, design.getBackgroundColor(), MessageFormat.format(":{0}", PseudoClasses.WARN_CLASS.getPseudoClassName())) + ); + } + + private String generateCss(ModernGlobalDesign design, ModernColor color, String styleState) + { + final ExpressionParser expressionParser = new SpelExpressionParser(); + final StandardEvaluationContext context = new StandardEvaluationContext(); + + final ClasspathResource resource = ApplicationUtils.getApplication().getClasspathResource("style/modern-global.css"); + final String content = Minifier.minify(resource.getAsString()); + + final Map<String, Object> values = new HashMap<>(); + values.put("class", styleState); + values.put("buttonColor", color.getButtonColor()); + values.put("playbarTrackColor", color.getPlaybarColor()); + values.put("playbarBarColor", color.getPlaybarTrackColor()); + + if(design.isFlatDesign()) + { + values.put("padColor", color.paint()); + } + else + { + values.put("padColor", color.linearGradient()); + } + + if(design.isFlatDesign()) + { + values.put("padCueInColor", design.getCueInColor().paint()); + } + else + { + values.put("padCueInColor", design.getCueInColor().linearGradient()); + } + + values.put("fontColor", color.getFontColor()); + values.put("infoFontSize", String.valueOf(design.getInfoFontSize())); + values.put("titleFontSize", String.valueOf(design.getTitleFontSize())); + + context.setVariables(values); + return expressionParser.parseExpression(content, new TemplateParserContext("${", "}")).getValue(context, String.class); + } + + @Override + public Node getColorInterface(Consumer<DisplayableColor> onSelection) + { + return new ColorPickerView(null, ModernColor.values(), onSelection); + } + + @Override + public void setColor(ModernCartDesign design, DisplayableColor color) + { + if(color instanceof ModernColor) + { + design.setBackgroundColor((ModernColor) color); + } + } +} diff --git a/PlayWall/src/main/scala/de/tobias/playpad/design/ModernGlobalDesignHandlerImpl.scala b/PlayWall/src/main/scala/de/tobias/playpad/design/ModernGlobalDesignHandlerImpl.scala deleted file mode 100644 index 2f36bbb6..00000000 --- a/PlayWall/src/main/scala/de/tobias/playpad/design/ModernGlobalDesignHandlerImpl.scala +++ /dev/null @@ -1,99 +0,0 @@ -package de.tobias.playpad.design - -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.project.Project -import de.tobias.playpad.util.Minifier -import de.tobias.playpad.view.{ColorPickerView, PseudoClasses} -import de.tobias.playpad.viewcontroller.main.IMainViewController -import de.tobias.playpad.{DisplayableColor, PlayPadMain} -import javafx.scene.paint.Color -import javafx.stage.Stage -import org.springframework.expression.ExpressionParser -import org.springframework.expression.common.TemplateParserContext -import org.springframework.expression.spel.standard.SpelExpressionParser -import org.springframework.expression.spel.support.StandardEvaluationContext - -import java.nio.file.Files -import java.util.function.Consumer -import scala.jdk.CollectionConverters._ - -class ModernGlobalDesignHandlerImpl extends ModernGlobalDesignHandler with ColorModeHandler { - - override def applyStyleSheet(stage: Stage): Unit = { - stage.getScene.getStylesheets.add("style/style.css") - stage.getScene.getStylesheets.add("style/modern.css") - - // Custom style for playwall available - val customCss = ApplicationUtils.getApplication.getPath(PathType.CONFIGURATION, "style.css") - if (Files exists customCss) { - stage.getScene.getStylesheets.add(customCss.toUri.toString) - } - } - - override def applyStyleSheetToMainViewController(design: ModernGlobalDesign, controller: IMainViewController, stage: Stage, project: Project): Unit = { - applyStyleSheet(stage) - - controller.setGridColor(Color.TRANSPARENT) - - // generate dynamic style sheet - val customCss = ApplicationUtils.getApplication.getPath(PathType.CONFIGURATION, "custom_style.css") - val stringBuilder = new StringBuilder() - stringBuilder.append(generateCss(design)) - - val cartDesignHandler = PlayPadMain.getProgramInstance.getModernDesign.cart - project.getPage(controller.getPage).getPads.forEach(pad => { - val padSettings = pad.getPadSettings - - val cartDesign = padSettings.getDesign - stringBuilder.append(cartDesignHandler.generateCss(cartDesign, s"${pad.getPadIndex}", design.isFlatDesign)) - }) - Files.write(customCss, stringBuilder.toString().getBytes()) - - stage.getScene.getStylesheets.remove(customCss.toUri.toString) - stage.getScene.getStylesheets.add(customCss.toUri.toString) - } - - private def generateCss(design: ModernGlobalDesign): String = { - String.join( - generateCss(design, design.getBackgroundColor), - generateCss(design, design.getPlayColor, s":${PseudoClasses.PLAY_CLASS.getPseudoClassName}"), - generateCss(design, design.getBackgroundColor, s":${PseudoClasses.WARN_CLASS.getPseudoClassName}") - ) - } - - private def generateCss(design: ModernGlobalDesign, color: ModernColor, styleState: String = ""): String = { - val expressionParser: ExpressionParser = new SpelExpressionParser() - val context = new StandardEvaluationContext() - - val resource = ApplicationUtils.getApplication.getClasspathResource("style/modern-global.css") - val string = Minifier minify resource.getAsString - - val values: Map[String, AnyRef] = Map( - "class" -> styleState, - "buttonColor" -> color.getButtonColor, - "playbarTrackColor" -> color.getPlaybarColor, - "playbarBarColor" -> color.getPlaybarTrackColor, - "padColor" -> (if (design.isFlatDesign) color.paint() else color.linearGradient()), - "padCueInColor" -> (if (design.isFlatDesign) design.getCueInColor.paint() else design.getCueInColor.linearGradient()), - "fontColor" -> color.getFontColor, - "infoFontSize" -> s"${design.getInfoFontSize}", - "titleFontSize" -> s"${design.getTitleFontSize}" - ) - - context.setVariables(values.asJava) - expressionParser.parseExpression(string, new TemplateParserContext("${", "}")).getValue(context, classOf[String]) - } - - override def getColorInterface(onSelection: Consumer[DisplayableColor]) = new ColorPickerView(null, ModernColor.values.asInstanceOf[Array[DisplayableColor]], onSelection) - - override def setColor(design: ModernCartDesign, color: DisplayableColor): Unit = { - color match { - case c: ModernColor => - design.setBackgroundColor(c) - case _ => - } - } -} diff --git a/PlayWall/src/main/scala/de/tobias/playpad/design/ModernWarningDesignHandlerImpl.java b/PlayWall/src/main/scala/de/tobias/playpad/design/ModernWarningDesignHandlerImpl.java new file mode 100644 index 00000000..609f6581 --- /dev/null +++ b/PlayWall/src/main/scala/de/tobias/playpad/design/ModernWarningDesignHandlerImpl.java @@ -0,0 +1,30 @@ +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.project.api.IPad; +import de.tobias.playpad.util.FadeableColor; +import javafx.util.Duration; + +public class ModernWarningDesignHandlerImpl implements ModernWarningDesignHandler +{ + @Override + public void performWarning(ModernGlobalDesign design, FadeableColor fadeStartColor, FadeableColor fadeStopColor, AbstractPadViewController controller, Duration warningDuration) + { + if(design.isWarnAnimation()) + { + ModernDesignAnimator.animateWarn(controller.getPad(), controller.getView(), fadeStartColor, fadeStopColor, warningDuration); + } + else + { + ModernDesignAnimator.warnFlash(controller.getView()); + } + } + + @Override + public void stopWarning(IPad pad) + { + ModernDesignAnimator.stopAnimation(pad); + } +} diff --git a/PlayWall/src/main/scala/de/tobias/playpad/design/ModernWarningDesignHandlerImpl.scala b/PlayWall/src/main/scala/de/tobias/playpad/design/ModernWarningDesignHandlerImpl.scala deleted file mode 100644 index c849a213..00000000 --- a/PlayWall/src/main/scala/de/tobias/playpad/design/ModernWarningDesignHandlerImpl.scala +++ /dev/null @@ -1,21 +0,0 @@ -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.project.api.IPad -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.getPad, controller.getView, fadeStartColor, fadeStopColor, warningDuration) - } else { - ModernDesignAnimator.warnFlash(controller.getView) - } - } - - override def stopWarning(pad: IPad): Unit = ModernDesignAnimator.stopAnimation(pad) -} -- GitLab