diff --git a/src/main/java/cn/octopusyan/alistgui/config/Context.java b/src/main/java/cn/octopusyan/alistgui/config/Context.java index 471a71e..8f72290 100644 --- a/src/main/java/cn/octopusyan/alistgui/config/Context.java +++ b/src/main/java/cn/octopusyan/alistgui/config/Context.java @@ -6,6 +6,7 @@ import cn.octopusyan.alistgui.controller.MainController; import cn.octopusyan.alistgui.controller.RootController; import cn.octopusyan.alistgui.controller.SetupController; import cn.octopusyan.alistgui.manager.ConfigManager; +import cn.octopusyan.alistgui.manager.ConsoleLog; import cn.octopusyan.alistgui.util.FxmlUtil; import javafx.application.Platform; import javafx.beans.binding.StringBinding; @@ -112,6 +113,10 @@ public class Context { Locale.setDefault(locale); ConfigManager.language(locale); LANGUAGE_RESOURCE_FACTORY.setResourceBundle(ResourceBundle.getBundle(LANGUAGE_RESOURCE_NAME, locale)); + + log.info("language changed to {}", locale); + if (ConsoleLog.isInit()) + ConsoleLog.info(STR."language changed to \{locale}"); } /** diff --git a/src/main/java/cn/octopusyan/alistgui/controller/MainController.java b/src/main/java/cn/octopusyan/alistgui/controller/MainController.java index cc2ef60..5513d27 100644 --- a/src/main/java/cn/octopusyan/alistgui/controller/MainController.java +++ b/src/main/java/cn/octopusyan/alistgui/controller/MainController.java @@ -1,7 +1,9 @@ package cn.octopusyan.alistgui.controller; import cn.octopusyan.alistgui.base.BaseController; +import cn.octopusyan.alistgui.manager.ConsoleLog; import javafx.fxml.FXML; +import javafx.scene.control.ScrollPane; import javafx.scene.layout.VBox; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -16,6 +18,10 @@ public class MainController extends BaseController { @FXML public VBox mainView; + @FXML + public VBox logArea; + @FXML + public ScrollPane logAreaSp; @Override public VBox getRootPanel() { @@ -24,7 +30,7 @@ public class MainController extends BaseController { @Override public void initData() { - + ConsoleLog.init(logAreaSp, logArea); } @Override diff --git a/src/main/java/cn/octopusyan/alistgui/manager/ConsoleLog.java b/src/main/java/cn/octopusyan/alistgui/manager/ConsoleLog.java new file mode 100644 index 0000000..25886b1 --- /dev/null +++ b/src/main/java/cn/octopusyan/alistgui/manager/ConsoleLog.java @@ -0,0 +1,103 @@ +package cn.octopusyan.alistgui.manager; + +import atlantafx.base.util.BBCodeParser; +import cn.hutool.core.util.StrUtil; +import javafx.application.Platform; +import javafx.scene.Node; +import javafx.scene.control.ScrollPane; +import javafx.scene.layout.VBox; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.time.DateFormatUtils; + +import java.util.Date; + +/** + * 模拟控制台输出 + * + * @author octopus_yan + */ +public class ConsoleLog { + public static final String format = "yyyy/MM/dd hh:mm:ss"; + private volatile static ConsoleLog log; + private final ScrollPane logAreaSp; + private final VBox textArea; + + private ConsoleLog(ScrollPane logAreaSp, VBox textArea) { + this.textArea = textArea; + this.logAreaSp = logAreaSp; + + textArea.maxWidthProperty().bind(logAreaSp.prefWidthProperty()); + + textArea.heightProperty().subscribe(() -> { + logAreaSp.vvalueProperty().setValue(1); + }); + } + + public static ConsoleLog getInstance() { + if (log == null) { + throw new RuntimeException("are you ready ?"); + } + return log; + } + + public static void init(ScrollPane logAreaSp, VBox textArea) { + synchronized (ConsoleLog.class) { + log = new ConsoleLog(logAreaSp, textArea); + } + } + + public static boolean isInit() { + return log != null; + } + + public static void info(String message, Object... param) { + info("", message, param); + } + + public static void warning(String message, Object... param) { + warning("", message, param); + } + + public static void error(String message, Object... param) { + error("", message, param); + } + + public static void info(String tag, String message, Object... param) { + printLog(tag, "INFO", message, param); + } + + public static void warning(String tag, String message, Object... param) { + printLog(tag, "[color=-color-chart-2]WARN[/color]", message, param); + } + + public static void error(String tag, String message, Object... param) { + printLog(tag, "[color=-color-chart-3]ERROR[/color]", message, param); + } + + public static void msg(String message, Object... param) { + Node text = BBCodeParser.createFormattedText(STR."\{StrUtil.format(message, param)}\n\n"); + Platform.runLater(() -> log.textArea.getChildren().add(text)); + } + + public static void printLog(String tag, String level, String message, Object... param) { + + String time = DateFormatUtils.format(new Date(), format); + time = STR."[color=-color-accent-emphasis]\{time}[/color]"; + + String levelStr = StringUtils.substringBetween(level, "]", "["); + if (levelStr == null) levelStr = level; + level = StringUtils.replace(level, levelStr, StringUtils.center(levelStr, 5)); + + tag = StringUtils.isEmpty(tag) ? "" : STR."\{tag}: "; + + String msg = STR."[color=-color-fg-muted]\{StrUtil.format(message, param)}[/color]"; + + Node text; + if (msg.contains("\n")) { + text = BBCodeParser.createLayout(STR."\{time} \{level} \{tag}\{msg}"); + } else { + text = BBCodeParser.createFormattedText(STR."\{time} \{level} \{tag}\{msg}"); + } + Platform.runLater(() -> log.textArea.getChildren().add(text)); + } +} diff --git a/src/main/resources/css/main-view.scss b/src/main/resources/css/main-view.scss index 7a8e895..a919991 100644 --- a/src/main/resources/css/main-view.scss +++ b/src/main/resources/css/main-view.scss @@ -8,42 +8,52 @@ #statusLabel { -fx-padding: 2 5 2 5; - -fx-text-fill: white; -fx-font-size: 15; - -fx-background-color: -color-success-3; -fx-background-radius: 10; -fx-text-alignment: CENTER; -fx-border-radius: 10; + -color-button-bg: -color-success-3; + -color-button-border: -color-button-bg; + -color-button-border-hover: -color-button-bg; + -color-button-bg-hover: -color-button-bg; } -.control-menu { +.control-menu, #startButton, #passwordButton, #restartButton, #moreButton { -fx-font-size: 15; -fx-background-radius: 15; -fx-padding: 10 40 10 40; -fx-border-radius: 15; -fx-border-width: 2; - -fx-opacity: 1; - - &:hover { - -fx-opacity: 0.9; - } } #startButton { - -fx-background-color: -color-danger-emphasis; - -fx-border-color: -color-danger-emphasis; - -fx-text-fill: white; + -color-button-bg: -color-danger-4; + -color-button-bg-hover: -color-button-bg; + -color-button-bg-focused: -color-button-bg; + -color-button-bg-pressed: -color-button-bg; + -color-button-border: -color-button-bg; + -color-button-border-hover: -color-button-bg; + -fx-border-color: -color-button-bg; } #passwordButton { - -fx-background-color: -color-success-3; - -fx-border-color: -color-success-3; + -color-button-bg: -color-success-3; + -color-button-bg-hover: -color-button-bg; + -color-button-bg-focused: -color-button-bg; + -color-button-bg-pressed: -color-button-bg; + -color-button-border: -color-button-bg; + -color-button-border-hover: -color-button-bg; + -fx-border-color: -color-button-bg; } #restartButton { - -fx-background-color: linear-gradient(to bottom right, -color-accent-3, -color-chart-6); - -fx-border-color: linear-gradient(to bottom right, -color-accent-3, -color-chart-6); - -fx-text-fill: white; + -color-button-bg: linear-gradient(to bottom right, -color-accent-3, -color-chart-6); + -color-button-bg-hover: -color-button-bg; + -color-button-bg-focused: -color-button-bg; + -color-button-bg-pressed: -color-button-bg; + -color-button-border: -color-button-bg; + -color-button-border-hover: -color-button-bg; + -fx-border-color: -color-button-bg; } #moreButton { @@ -52,17 +62,11 @@ -fx-border-color: -color-chart-6; } -#logArea { +.logArea { -fx-font-family: "Lucida Console"; - -fx-font-size: 20; + -fx-font-size: 15; -fx-background-radius: 15; -fx-border-radius: 15; - -fx-background-insets: 0; - - .content { - -fx-padding: 0 15 0 15; - -fx-background-radius: 15; - -fx-border-radius: 15; - } - + -fx-padding: 5 15 5 15; + -fx-background-color: -color-neutral-muted; } \ No newline at end of file diff --git a/src/main/resources/fxml/main-view.fxml b/src/main/resources/fxml/main-view.fxml index 3f82c29..fde4e3a 100644 --- a/src/main/resources/fxml/main-view.fxml +++ b/src/main/resources/fxml/main-view.fxml @@ -3,19 +3,19 @@ - @@ -24,16 +24,18 @@ -