From f9812e2d634fdd1759985ee806e31ea49756b596 Mon Sep 17 00:00:00 2001 From: gewuyou <1063891901@qq.com> Date: Wed, 4 Oct 2023 00:05:16 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9A=82=E6=97=B6=E5=B0=86=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E8=BE=93=E5=87=BA=E6=94=B9=E5=9C=A8=E7=94=A8=E6=88=B7=E7=9B=AE?= =?UTF-8?q?=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 + pom.xml | 2 +- src/main/java/org/jcnc/jnotepad/LunchApp.java | 5 + .../jcnc/jnotepad/app/config/AppConfig.java | 84 ++------- .../jnotepad/app/config/PluginConfig.java | 14 -- .../jcnc/jnotepad/app/config/UserConfig.java | 44 +++++ .../app/manager/ApplicationManager.java | 4 +- .../common/constants/TextConstants.java | 2 +- .../controller/cache/CacheController.java | 6 +- .../config/AppConfigController.java | 93 +++------- .../config/PluginConfigController.java | 31 ++-- .../config/UserConfigController.java | 166 ++++++++++++++++++ .../event/handler/menubar/OpenConfig.java | 4 +- .../event/handler/menubar/SaveFile.java | 6 +- .../i18n/LocalizationController.java | 10 +- .../controller/manager/Controller.java | 2 +- .../config/BaseConfigController.java | 27 +-- .../interfaces/ConfigController.java | 8 +- .../views/manager/CenterTabPaneManager.java | 4 +- .../manager/DirectorySidebarManager.java | 8 +- .../views/manager/TopMenuBarManager.java | 10 +- .../center/main/center/tab/CenterTab.java | 4 +- src/main/resources/logback.xml | 4 +- tool/jpackage.sh | 11 ++ 24 files changed, 320 insertions(+), 232 deletions(-) create mode 100644 src/main/java/org/jcnc/jnotepad/app/config/UserConfig.java create mode 100644 src/main/java/org/jcnc/jnotepad/controller/config/UserConfigController.java rename src/main/java/org/jcnc/jnotepad/{ => plugin/api/core}/controller/interfaces/ConfigController.java (84%) create mode 100644 tool/jpackage.sh diff --git a/.gitignore b/.gitignore index 4ebcc43..beaa425 100644 --- a/.gitignore +++ b/.gitignore @@ -15,6 +15,9 @@ test/ ### 此处排除证书目录 certificate/ +### 此处排除了项目文件 +.jnotepad/ + ### Eclipse ### .apt_generated .classpath diff --git a/pom.xml b/pom.xml index c5092ad..ea9cb4a 100644 --- a/pom.xml +++ b/pom.xml @@ -147,7 +147,7 @@ org.jcnc.jnotepad/org.jcnc.jnotepad.LunchApp - org.jcnc.jnotepad.app.config.AppConfig,org.jcnc.jnotepad.app.config.AppConfig$ShortcutKey + org.jcnc.jnotepad.app.config.UserConfig,org.jcnc.jnotepad.app.config.UserConfig$ShortcutKey i18n/i18n diff --git a/src/main/java/org/jcnc/jnotepad/LunchApp.java b/src/main/java/org/jcnc/jnotepad/LunchApp.java index fde6cc0..6fed3a3 100644 --- a/src/main/java/org/jcnc/jnotepad/LunchApp.java +++ b/src/main/java/org/jcnc/jnotepad/LunchApp.java @@ -3,6 +3,7 @@ package org.jcnc.jnotepad; import javafx.application.Application; import javafx.stage.Stage; import org.jcnc.jnotepad.app.manager.ApplicationManager; +import org.jcnc.jnotepad.common.util.LogUtil; /** @@ -26,6 +27,10 @@ public class LunchApp extends Application { @Override public void start(Stage primaryStage) { + // 获取当前启动位置 + String currentWorkingDirectory = System.getProperty("user.dir"); + LogUtil.getLogger(this.getClass()).info("当前启动位置:{}", currentWorkingDirectory); + // 设置参数 APPLICATION_MANAGER.setApplication(this); APPLICATION_MANAGER.setPrimaryStage(primaryStage); diff --git a/src/main/java/org/jcnc/jnotepad/app/config/AppConfig.java b/src/main/java/org/jcnc/jnotepad/app/config/AppConfig.java index fc1a831..8423b5e 100644 --- a/src/main/java/org/jcnc/jnotepad/app/config/AppConfig.java +++ b/src/main/java/org/jcnc/jnotepad/app/config/AppConfig.java @@ -1,89 +1,25 @@ package org.jcnc.jnotepad.app.config; -import com.fasterxml.jackson.annotation.JsonIgnore; -import org.jcnc.jnotepad.model.entity.ShortcutKey; +import java.util.Optional; -import java.util.ArrayList; -import java.util.List; - -import static org.jcnc.jnotepad.common.constants.TextConstants.CHINESE; +import static org.jcnc.jnotepad.common.constants.AppConstants.DEFAULT_PROPERTY; /** - * 数据模型类,用于表示 MyData 对象的数据结构。 + * 应用程序配置文件 * - * @author 许轲 + * @author gewuyou */ public class AppConfig { - private static final String CTRL_N = "ctrl+n"; - private static final String CTRL_O = "ctrl+o"; - private static final String CTRL_S = "ctrl+s"; - private static final String CTRL_ALT_S = "ctrl+alt+s"; - private static final String ALT_S = "alt+s"; - private String language; - @JsonIgnore - private boolean textWrap; - private List shortcutKey; - /** - * 生成默认应用配置对象。 - * - * @return 默认应用配置对象 + * 程序根路径 */ - public static AppConfig generateDefaultAppConfig() { - AppConfig config = new AppConfig(); - config.setLanguage(CHINESE); - config.setTextWrap(false); + private String rootPath; - List shortcutKeys = new ArrayList<>(); - shortcutKeys.add(createShortcutKey("newItem", CTRL_N)); - shortcutKeys.add(createShortcutKey("openItem", CTRL_O)); - shortcutKeys.add(createShortcutKey("saveItem", CTRL_S)); - shortcutKeys.add(createShortcutKey("saveAsItem", CTRL_ALT_S)); - shortcutKeys.add(createShortcutKey("lineFeedItem", "")); - shortcutKeys.add(createShortcutKey("openConfigItem", ALT_S)); - shortcutKeys.add(createShortcutKey("pluginManager", "")); - shortcutKeys.add(createShortcutKey("countItem", "")); - shortcutKeys.add(createShortcutKey("aboutItem", "")); - - config.setShortcutKey(shortcutKeys); - return config; + public String getRootPath() { + return Optional.of(rootPath).orElse(System.getProperty(DEFAULT_PROPERTY)); } - /** - * 创建 ShortcutKey 对象。 - * - * @param buttonName 按钮名称 - * @param shortcutKeyValue 快捷键值 - * @return ShortcutKey 对象 - */ - private static ShortcutKey createShortcutKey(String buttonName, String shortcutKeyValue) { - ShortcutKey shortcutKey = new ShortcutKey(); - shortcutKey.setButtonName(buttonName); - shortcutKey.setShortcutKeyValue(shortcutKeyValue); - return shortcutKey; - } - - public String getLanguage() { - return language; - } - - public void setLanguage(String language) { - this.language = language; - } - - public List getShortcutKey() { - return shortcutKey; - } - - public void setShortcutKey(List shortcutKey) { - this.shortcutKey = shortcutKey; - } - - public boolean isTextWrap() { - return textWrap; - } - - public void setTextWrap(boolean textWrap) { - this.textWrap = textWrap; + public void setRootPath(String rootPath) { + this.rootPath = rootPath; } } diff --git a/src/main/java/org/jcnc/jnotepad/app/config/PluginConfig.java b/src/main/java/org/jcnc/jnotepad/app/config/PluginConfig.java index 1859b7d..2b05c81 100644 --- a/src/main/java/org/jcnc/jnotepad/app/config/PluginConfig.java +++ b/src/main/java/org/jcnc/jnotepad/app/config/PluginConfig.java @@ -2,7 +2,6 @@ package org.jcnc.jnotepad.app.config; import org.jcnc.jnotepad.model.entity.PluginDescriptor; -import java.util.ArrayList; import java.util.List; /** @@ -13,19 +12,6 @@ import java.util.List; public class PluginConfig { private List plugins; - /** - * 生成默认的插件配置文件 - * - * @return org.jcnc.jnotepad.app.config.PluginConfig 插件配置文件 - * @apiNote - * @since 2023/9/17 0:57 - */ - public static PluginConfig generateDefaultPluginConfig() { - PluginConfig pluginConfig = new PluginConfig(); - pluginConfig.setPlugins(new ArrayList<>()); - return pluginConfig; - } - public List getPlugins() { return plugins; } diff --git a/src/main/java/org/jcnc/jnotepad/app/config/UserConfig.java b/src/main/java/org/jcnc/jnotepad/app/config/UserConfig.java new file mode 100644 index 0000000..c828a33 --- /dev/null +++ b/src/main/java/org/jcnc/jnotepad/app/config/UserConfig.java @@ -0,0 +1,44 @@ +package org.jcnc.jnotepad.app.config; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import org.jcnc.jnotepad.model.entity.ShortcutKey; + +import java.util.List; + +/** + * 用户配置文件类 + * + * @author 许轲 + */ +public class UserConfig { + + private String language; + @JsonIgnore + private boolean textWrap; + private List shortcutKey; + + + public String getLanguage() { + return language; + } + + public void setLanguage(String language) { + this.language = language; + } + + public List getShortcutKey() { + return shortcutKey; + } + + public void setShortcutKey(List shortcutKey) { + this.shortcutKey = shortcutKey; + } + + public boolean isTextWrap() { + return textWrap; + } + + public void setTextWrap(boolean textWrap) { + this.textWrap = textWrap; + } +} diff --git a/src/main/java/org/jcnc/jnotepad/app/manager/ApplicationManager.java b/src/main/java/org/jcnc/jnotepad/app/manager/ApplicationManager.java index ecbf91e..a811044 100644 --- a/src/main/java/org/jcnc/jnotepad/app/manager/ApplicationManager.java +++ b/src/main/java/org/jcnc/jnotepad/app/manager/ApplicationManager.java @@ -16,8 +16,8 @@ import org.jcnc.jnotepad.common.util.LogUtil; import org.jcnc.jnotepad.common.util.UiUtil; import org.jcnc.jnotepad.controller.ResourceController; import org.jcnc.jnotepad.controller.cache.CacheController; -import org.jcnc.jnotepad.controller.config.AppConfigController; import org.jcnc.jnotepad.controller.config.PluginConfigController; +import org.jcnc.jnotepad.controller.config.UserConfigController; import org.jcnc.jnotepad.controller.manager.Controller; import org.jcnc.jnotepad.plugin.manager.PluginManager; import org.jcnc.jnotepad.views.manager.*; @@ -141,7 +141,7 @@ public class ApplicationManager { pluginConfigController.getConfig().setPlugins(PluginManager.getInstance().getPluginDescriptors()); pluginConfigController.writeConfig(); // 保存配置文件 - AppConfigController.getInstance().writeConfig(); + UserConfigController.getInstance().writeConfig(); // 销毁插件可能申请的资源 PluginManager.getInstance().destroyPlugins(); // 保存已打开的文件标签页 diff --git a/src/main/java/org/jcnc/jnotepad/common/constants/TextConstants.java b/src/main/java/org/jcnc/jnotepad/common/constants/TextConstants.java index 9bd36f3..754f0ef 100644 --- a/src/main/java/org/jcnc/jnotepad/common/constants/TextConstants.java +++ b/src/main/java/org/jcnc/jnotepad/common/constants/TextConstants.java @@ -40,7 +40,7 @@ public class TextConstants { */ public static final String ENGLISH = "english"; - /// Config 文本常量 + /// BaseConfig 文本常量 /** * 中文小写 */ diff --git a/src/main/java/org/jcnc/jnotepad/controller/cache/CacheController.java b/src/main/java/org/jcnc/jnotepad/controller/cache/CacheController.java index 3f9f87d..801ba95 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/cache/CacheController.java +++ b/src/main/java/org/jcnc/jnotepad/controller/cache/CacheController.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.core.type.TypeReference; import org.jcnc.jnotepad.common.manager.ApplicationCacheManager; import org.jcnc.jnotepad.common.util.JsonUtil; import org.jcnc.jnotepad.common.util.LogUtil; +import org.jcnc.jnotepad.controller.config.AppConfigController; import org.jcnc.jnotepad.exception.AppException; import org.jcnc.jnotepad.model.entity.Cache; import org.slf4j.Logger; @@ -19,8 +20,6 @@ import java.util.Map; import java.util.Objects; import java.util.Set; -import static org.jcnc.jnotepad.common.constants.AppConstants.DEFAULT_PROPERTY; - /** * 缓存控制器 * @@ -36,7 +35,7 @@ public class CacheController { private String cacheDir; private CacheController() { - cacheDir = Paths.get(System.getProperty(DEFAULT_PROPERTY), ".jnotepad", "caches").toString(); + cacheDir = Paths.get(AppConfigController.getInstance().getConfig().getRootPath(), ".jnotepad", "caches").toString(); } public static CacheController getInstance() { @@ -48,7 +47,6 @@ public class CacheController { if (createCachesIfNotExists()) { return; } - // 检查并获取缓存根目录 File cacheFileDir = createCacheRootIfNotExist(); // 获取缓存命名空间 diff --git a/src/main/java/org/jcnc/jnotepad/controller/config/AppConfigController.java b/src/main/java/org/jcnc/jnotepad/controller/config/AppConfigController.java index ccabd1f..84c2a37 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/config/AppConfigController.java +++ b/src/main/java/org/jcnc/jnotepad/controller/config/AppConfigController.java @@ -1,44 +1,37 @@ package org.jcnc.jnotepad.controller.config; import org.jcnc.jnotepad.app.config.AppConfig; -import org.jcnc.jnotepad.model.entity.ShortcutKey; import org.jcnc.jnotepad.plugin.api.core.controller.config.BaseConfigController; import java.nio.file.Paths; -import java.util.List; import static org.jcnc.jnotepad.common.constants.AppConstants.DEFAULT_PROPERTY; /** - * 应用程序配置控制器 + * 应用程序配置文件控制器 * - *

该类负责管理应用程序的配置文件,包括加载、持久化和更新配置信息等操作。

- * - * @author songdragon + * @author gewuyou */ public class AppConfigController extends BaseConfigController { + private static final AppConfigController INSTANCE = new AppConfigController(); + + public static AppConfigController getInstance() { + return INSTANCE; + } + /** * 配置文件名 */ - public static final String CONFIG_NAME = "jnotepadConfig.json"; - private static final AppConfigController INSTANCE = new AppConfigController(); - private String configDir; + public static final String CONFIG_NAME = "appConfig.json"; - private AppConfigController() { - configDir = Paths.get(System.getProperty(DEFAULT_PROPERTY), ".jnotepad").toString(); + private final String configDir; + + public AppConfigController() { + configDir = Paths.get(System.getProperty(DEFAULT_PROPERTY), ".jnotepad", ROOT_CONFIG_DIR).toString(); loadConfig(); } - /** - * 获取 AppConfigController 的实例。 - * - * @return AppConfigController 的实例 - */ - public static AppConfigController getInstance() { - return INSTANCE; - } - /** * 获取配置文件Class类 * @@ -49,15 +42,6 @@ public class AppConfigController extends BaseConfigController { return AppConfig.class; } - /** - * 生成默认的配置文件 - * - * @return 默认的配置文件 - */ - @Override - protected AppConfig generateDefaultConfig() { - return AppConfig.generateDefaultAppConfig(); - } /** * 获取配置文件名称 @@ -79,51 +63,16 @@ public class AppConfigController extends BaseConfigController { return configDir; } - public void setConfigDir(String configDir) { - this.configDir = configDir; - } - /** - * 获取自动换行设置,默认自动换行。 + * 创建配置文件实体 * - * @return true,自动换行;false,不自动换行 + * @return 默认的配置文件实体 + * @apiNote 返回默认的配置文件实体用于序列化json */ - public boolean getAutoLineConfig() { - return getConfig().isTextWrap(); - } - - public void setAutoLineConfig(boolean isAutoLine) { - getConfig().setTextWrap(isAutoLine); - } - - /** - * 更新配置文件中的语言设置。 - * - * @param language 更新后的语言设置 - */ - public void updateLanguage(String language) { - if (getLanguage().equals(language)) { - return; - } - getConfig().setLanguage(language); - writeConfig(); - } - - /** - * 获取当前的语言设置。 - * - * @return 语言设置 - */ - public String getLanguage() { - return getConfig().getLanguage(); - } - - /** - * 获取快捷键设置。 - * - * @return 快捷键设置列表 - */ - public List getShortcutKey() { - return getConfig().getShortcutKey(); + @Override + public AppConfig generateDefaultConfig() { + AppConfig config = new AppConfig(); + config.setRootPath(System.getProperty(DEFAULT_PROPERTY)); + return config; } } diff --git a/src/main/java/org/jcnc/jnotepad/controller/config/PluginConfigController.java b/src/main/java/org/jcnc/jnotepad/controller/config/PluginConfigController.java index c85a27b..6e0a8c9 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/config/PluginConfigController.java +++ b/src/main/java/org/jcnc/jnotepad/controller/config/PluginConfigController.java @@ -5,8 +5,7 @@ import org.jcnc.jnotepad.plugin.api.core.controller.config.BaseConfigController; import java.nio.file.Path; import java.nio.file.Paths; - -import static org.jcnc.jnotepad.common.constants.AppConstants.DEFAULT_PROPERTY; +import java.util.ArrayList; /** * 插件控制器 @@ -24,8 +23,9 @@ public class PluginConfigController extends BaseConfigController { private String pluginsDir; private PluginConfigController() { - configDir = Paths.get(System.getProperty(DEFAULT_PROPERTY), ".jnotepad").toString(); - setPluginsDir(Paths.get(System.getProperty(DEFAULT_PROPERTY), ".jnotepad", "plugins").toString()); + String rootPath = AppConfigController.getInstance().getConfig().getRootPath(); + configDir = Paths.get(rootPath, ".jnotepad", ROOT_CONFIG_DIR).toString(); + setPluginsDir(Paths.get(rootPath, ".jnotepad", "plugins").toString()); loadConfig(); } @@ -43,15 +43,6 @@ public class PluginConfigController extends BaseConfigController { return PluginConfig.class; } - /** - * 生成默认的配置文件 - * - * @return 默认的配置文件 - */ - @Override - protected PluginConfig generateDefaultConfig() { - return PluginConfig.generateDefaultPluginConfig(); - } /** * 获取配置文件名称 @@ -73,6 +64,20 @@ public class PluginConfigController extends BaseConfigController { return configDir; } + /** + * 创建配置文件实体 + * + * @return 默认的配置文件实体 + * @apiNote 返回默认的配置文件实体用于序列化json + */ + @Override + public PluginConfig generateDefaultConfig() { + PluginConfig pluginConfig = new PluginConfig(); + pluginConfig.setPlugins(new ArrayList<>()); + return pluginConfig; + } + + public void setConfigDir(String configDir) { this.configDir = configDir; } diff --git a/src/main/java/org/jcnc/jnotepad/controller/config/UserConfigController.java b/src/main/java/org/jcnc/jnotepad/controller/config/UserConfigController.java new file mode 100644 index 0000000..22ec82a --- /dev/null +++ b/src/main/java/org/jcnc/jnotepad/controller/config/UserConfigController.java @@ -0,0 +1,166 @@ +package org.jcnc.jnotepad.controller.config; + +import org.jcnc.jnotepad.app.config.UserConfig; +import org.jcnc.jnotepad.model.entity.ShortcutKey; +import org.jcnc.jnotepad.plugin.api.core.controller.config.BaseConfigController; + +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.List; + +import static org.jcnc.jnotepad.common.constants.TextConstants.CHINESE; + +/** + * 应用程序配置控制器 + * + *

该类负责管理应用程序的配置文件,包括加载、持久化和更新配置信息等操作。

+ * + * @author songdragon + */ +public class UserConfigController extends BaseConfigController { + /** + * 配置文件名 + */ + public static final String CONFIG_NAME = "userConfig.json"; + private static final String CTRL_N = "ctrl+n"; + private static final String CTRL_O = "ctrl+o"; + private static final String CTRL_S = "ctrl+s"; + private static final String CTRL_ALT_S = "ctrl+alt+s"; + private static final String ALT_S = "alt+s"; + private static final UserConfigController INSTANCE = new UserConfigController(); + private String configDir; + + private UserConfigController() { + configDir = Paths.get(AppConfigController.getInstance().getConfig().getRootPath(), ".jnotepad", ROOT_CONFIG_DIR).toString(); + loadConfig(); + } + + /** + * 获取 UserConfigController 的实例。 + * + * @return UserConfigController 的实例 + */ + public static UserConfigController getInstance() { + return INSTANCE; + } + + /** + * 创建 ShortcutKey 对象。 + * + * @param buttonName 按钮名称 + * @param shortcutKeyValue 快捷键值 + * @return ShortcutKey 对象 + */ + private static ShortcutKey createShortcutKey(String buttonName, String shortcutKeyValue) { + ShortcutKey shortcutKey = new ShortcutKey(); + shortcutKey.setButtonName(buttonName); + shortcutKey.setShortcutKeyValue(shortcutKeyValue); + return shortcutKey; + } + + /** + * 获取配置文件Class类 + * + * @return 配置文件Class类 + */ + @Override + protected Class getConfigClass() { + return UserConfig.class; + } + + /** + * 获取配置文件名称 + * + * @return 配置文件名称 + */ + @Override + protected String getConfigName() { + return CONFIG_NAME; + } + + /** + * 获取配置文件文件夹路径 + * + * @return 配置文件夹路径 + */ + @Override + protected String getConfigDir() { + return configDir; + } + + public void setConfigDir(String configDir) { + this.configDir = configDir; + } + + /** + * 创建配置文件实体 + * + * @return 默认的配置文件实体 + * @apiNote 返回默认的配置文件实体用于序列化json + */ + @Override + public UserConfig generateDefaultConfig() { + UserConfig config = new UserConfig(); + config.setLanguage(CHINESE); + config.setTextWrap(false); + + List shortcutKeys = new ArrayList<>(); + shortcutKeys.add(createShortcutKey("newItem", CTRL_N)); + shortcutKeys.add(createShortcutKey("openItem", CTRL_O)); + shortcutKeys.add(createShortcutKey("saveItem", CTRL_S)); + shortcutKeys.add(createShortcutKey("saveAsItem", CTRL_ALT_S)); + shortcutKeys.add(createShortcutKey("lineFeedItem", "")); + shortcutKeys.add(createShortcutKey("openConfigItem", ALT_S)); + shortcutKeys.add(createShortcutKey("pluginManager", "")); + shortcutKeys.add(createShortcutKey("countItem", "")); + shortcutKeys.add(createShortcutKey("aboutItem", "")); + + config.setShortcutKey(shortcutKeys); + return config; + } + + /** + * 获取自动换行设置,默认自动换行。 + * + * @return true,自动换行;false,不自动换行 + */ + public boolean getAutoLineConfig() { + return getConfig().isTextWrap(); + } + + public void setAutoLineConfig(boolean isAutoLine) { + getConfig().setTextWrap(isAutoLine); + } + + /** + * 更新配置文件中的语言设置。 + * + * @param language 更新后的语言设置 + */ + public void updateLanguage(String language) { + if (getLanguage().equals(language)) { + return; + } + getConfig().setLanguage(language); + writeConfig(); + } + + /** + * 获取当前的语言设置。 + * + * @return 语言设置 + */ + public String getLanguage() { + return getConfig().getLanguage(); + } + + /** + * 获取快捷键设置。 + * + * @return 快捷键设置列表 + */ + public List getShortcutKey() { + return getConfig().getShortcutKey(); + } + +} diff --git a/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/OpenConfig.java b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/OpenConfig.java index 0f02c63..09fd736 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/OpenConfig.java +++ b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/OpenConfig.java @@ -2,7 +2,7 @@ package org.jcnc.jnotepad.controller.event.handler.menubar; import javafx.event.ActionEvent; import org.jcnc.jnotepad.common.util.LogUtil; -import org.jcnc.jnotepad.controller.config.AppConfigController; +import org.jcnc.jnotepad.controller.config.UserConfigController; import java.io.File; @@ -23,7 +23,7 @@ public class OpenConfig extends OpenFile { @Override public void handle(ActionEvent actionEvent) { // 显示文件选择对话框,并获取配置文件 - File file = AppConfigController.getInstance().getConfigPath().toFile(); + File file = UserConfigController.getInstance().getConfigPath().toFile(); LogUtil.getLogger(this.getClass()).info("已调用打开配置文件功能, {}", file); // 创建打开文件的任务并启动线程执行任务 openFile(file); diff --git a/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/SaveFile.java b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/SaveFile.java index 2e66f7a..adde7d6 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/SaveFile.java +++ b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/SaveFile.java @@ -8,7 +8,7 @@ import org.jcnc.jnotepad.common.constants.TextConstants; import org.jcnc.jnotepad.common.manager.ApplicationCacheManager; import org.jcnc.jnotepad.common.util.LogUtil; import org.jcnc.jnotepad.common.util.UiUtil; -import org.jcnc.jnotepad.controller.config.AppConfigController; +import org.jcnc.jnotepad.controller.config.UserConfigController; import org.jcnc.jnotepad.controller.i18n.LocalizationController; import org.jcnc.jnotepad.model.entity.Cache; import org.jcnc.jnotepad.model.enums.CacheExpirationTime; @@ -20,7 +20,7 @@ import org.slf4j.Logger; import java.io.File; -import static org.jcnc.jnotepad.controller.config.AppConfigController.CONFIG_NAME; +import static org.jcnc.jnotepad.controller.config.UserConfigController.CONFIG_NAME; /** * 保存文件事件处理程序。 @@ -59,7 +59,7 @@ public class SaveFile implements EventHandler { // 如果该文件是配置文件,则刷新快捷键 if (CONFIG_NAME.equals(selectedTab.getText())) { // 重新加载语言包和快捷键 - AppConfigController.getInstance().loadConfig(); + UserConfigController.getInstance().loadConfig(); TopMenuBarManager.getInstance().initShortcutKeys(); LocalizationController.initLocal(); logger.info("已刷新语言包!"); diff --git a/src/main/java/org/jcnc/jnotepad/controller/i18n/LocalizationController.java b/src/main/java/org/jcnc/jnotepad/controller/i18n/LocalizationController.java index d4ccead..d8ee887 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/i18n/LocalizationController.java +++ b/src/main/java/org/jcnc/jnotepad/controller/i18n/LocalizationController.java @@ -2,7 +2,7 @@ package org.jcnc.jnotepad.controller.i18n; import org.jcnc.jnotepad.LunchApp; import org.jcnc.jnotepad.app.i18n.UiResourceBundle; -import org.jcnc.jnotepad.controller.config.AppConfigController; +import org.jcnc.jnotepad.controller.config.UserConfigController; import java.util.HashMap; import java.util.LinkedHashMap; @@ -37,10 +37,10 @@ public class LocalizationController { SUPPORT_LANGUAGES.put(Locale.ENGLISH, ENGLISH); } - private final AppConfigController appConfigController; + private final UserConfigController userConfigController; private LocalizationController() { - this.appConfigController = AppConfigController.getInstance(); + this.userConfigController = UserConfigController.getInstance(); } /** @@ -87,10 +87,10 @@ public class LocalizationController { * @return appConfig中的当前语言配置 */ public String getLanguage() { - return appConfigController.getLanguage(); + return userConfigController.getLanguage(); } private void setLanguage(String language) { - appConfigController.updateLanguage(language); + userConfigController.updateLanguage(language); } } diff --git a/src/main/java/org/jcnc/jnotepad/controller/manager/Controller.java b/src/main/java/org/jcnc/jnotepad/controller/manager/Controller.java index cd3bba8..b4e1abc 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/manager/Controller.java +++ b/src/main/java/org/jcnc/jnotepad/controller/manager/Controller.java @@ -40,7 +40,7 @@ public class Controller implements ControllerAble { @Override public void openAssociatedFileAndCreateTextArea(List rawParameters) { // 获取上次打开的页面 - Optional cacheData = Optional.of(CACHE_MANAGER.getCacheData("tabs", "centerTabs")); + Optional cacheData = Optional.ofNullable(CACHE_MANAGER.getCacheData("tabs", "centerTabs")); // 判空 List fileTab = (List) cacheData.orElse(Collections.emptyList()); // 打开上次打开的标签页 diff --git a/src/main/java/org/jcnc/jnotepad/plugin/api/core/controller/config/BaseConfigController.java b/src/main/java/org/jcnc/jnotepad/plugin/api/core/controller/config/BaseConfigController.java index 7a2bd38..f6b0386 100644 --- a/src/main/java/org/jcnc/jnotepad/plugin/api/core/controller/config/BaseConfigController.java +++ b/src/main/java/org/jcnc/jnotepad/plugin/api/core/controller/config/BaseConfigController.java @@ -3,8 +3,8 @@ package org.jcnc.jnotepad.plugin.api.core.controller.config; import org.jcnc.jnotepad.common.util.JsonUtil; import org.jcnc.jnotepad.common.util.LogUtil; import org.jcnc.jnotepad.common.util.PopUpUtil; -import org.jcnc.jnotepad.controller.interfaces.ConfigController; import org.jcnc.jnotepad.exception.AppException; +import org.jcnc.jnotepad.plugin.api.core.controller.interfaces.ConfigController; import org.slf4j.Logger; import java.io.BufferedWriter; @@ -22,6 +22,8 @@ import java.nio.file.Paths; */ public abstract class BaseConfigController implements ConfigController { + public static final String ROOT_CONFIG_DIR = "config"; + protected T config; Logger logger = LogUtil.getLogger(this.getClass()); @@ -32,13 +34,6 @@ public abstract class BaseConfigController implements ConfigController { */ protected abstract Class getConfigClass(); - /** - * 生成默认的配置文件 - * - * @return 默认的配置文件 - */ - protected abstract T generateDefaultConfig(); - /** * 获取配置文件名称 * @@ -62,9 +57,6 @@ public abstract class BaseConfigController implements ConfigController { return config; } - public void setConfig(T config) { - this.config = config; - } /** * 加载配置文件内容 @@ -102,7 +94,7 @@ public abstract class BaseConfigController implements ConfigController { public void writeConfig(T config) { try (BufferedWriter writer = new BufferedWriter(new FileWriter(getConfigPath().toString()))) { if (config == null) { - config = createConfigJson(); + config = generateDefaultConfig(); } writer.write(JsonUtil.toJsonString(config)); } catch (Exception e) { @@ -127,17 +119,6 @@ public abstract class BaseConfigController implements ConfigController { writeConfig(null); } - /** - * 创建配置文件json实体 - * - * @return 默认的配置文件实体 - * @apiNote 返回默认的配置文件实体用于序列化jso - */ - @Override - public T createConfigJson() { - return generateDefaultConfig(); - } - /** * 获取配置文件路径 * diff --git a/src/main/java/org/jcnc/jnotepad/controller/interfaces/ConfigController.java b/src/main/java/org/jcnc/jnotepad/plugin/api/core/controller/interfaces/ConfigController.java similarity index 84% rename from src/main/java/org/jcnc/jnotepad/controller/interfaces/ConfigController.java rename to src/main/java/org/jcnc/jnotepad/plugin/api/core/controller/interfaces/ConfigController.java index 42e4621..ddf716c 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/interfaces/ConfigController.java +++ b/src/main/java/org/jcnc/jnotepad/plugin/api/core/controller/interfaces/ConfigController.java @@ -1,4 +1,4 @@ -package org.jcnc.jnotepad.controller.interfaces; +package org.jcnc.jnotepad.plugin.api.core.controller.interfaces; import java.nio.file.Path; @@ -31,12 +31,12 @@ public interface ConfigController { void createConfigIfNotExists(); /** - * 创建配置文件json实体 + * 创建配置文件实体 * * @return 默认的配置文件实体 - * @apiNote 返回默认的配置文件实体用于序列化jso + * @apiNote 返回默认的配置文件实体用于序列化json */ - T createConfigJson(); + T generateDefaultConfig(); /** * 获取配置文件路径 diff --git a/src/main/java/org/jcnc/jnotepad/views/manager/CenterTabPaneManager.java b/src/main/java/org/jcnc/jnotepad/views/manager/CenterTabPaneManager.java index 12481d5..79f0ab3 100644 --- a/src/main/java/org/jcnc/jnotepad/views/manager/CenterTabPaneManager.java +++ b/src/main/java/org/jcnc/jnotepad/views/manager/CenterTabPaneManager.java @@ -6,7 +6,7 @@ import javafx.stage.Stage; import org.jcnc.jnotepad.common.manager.ApplicationCacheManager; import org.jcnc.jnotepad.common.util.FileUtil; import org.jcnc.jnotepad.common.util.PopUpUtil; -import org.jcnc.jnotepad.controller.config.AppConfigController; +import org.jcnc.jnotepad.controller.config.UserConfigController; import org.jcnc.jnotepad.model.enums.CacheExpirationTime; import org.jcnc.jnotepad.ui.module.LineNumberTextArea; import org.jcnc.jnotepad.views.root.center.main.center.tab.CenterTab; @@ -137,7 +137,7 @@ public class CenterTabPaneManager { if (selectedTab == null) { return; } - selectedTab.setAutoLine(AppConfigController.getInstance().getAutoLineConfig()); + selectedTab.setAutoLine(UserConfigController.getInstance().getAutoLineConfig()); bottomStatusBoxManager.updateWhenTabSelected(); } diff --git a/src/main/java/org/jcnc/jnotepad/views/manager/DirectorySidebarManager.java b/src/main/java/org/jcnc/jnotepad/views/manager/DirectorySidebarManager.java index ad68785..468b723 100644 --- a/src/main/java/org/jcnc/jnotepad/views/manager/DirectorySidebarManager.java +++ b/src/main/java/org/jcnc/jnotepad/views/manager/DirectorySidebarManager.java @@ -60,11 +60,9 @@ public class DirectorySidebarManager { if (Double.compare(roundedNumber, 0.0) != 0) { // 收缩分割条 收缩文件树 center.setDividerPositions(0.0); - } else { // 展开分割条,文件树 center.setDividerPositions(LAST_DIVIDER_POSITION); - } } @@ -82,6 +80,12 @@ public class DirectorySidebarManager { } + /** + * 设置文件树项监听事件 + * + * @param item 文件树项 + * @return 监听事件 + */ private static ChangeListener getTreeItemListener(TreeItem item) { return (observable, oldValue, newValue) -> { if (Boolean.TRUE.equals(newValue)) { diff --git a/src/main/java/org/jcnc/jnotepad/views/manager/TopMenuBarManager.java b/src/main/java/org/jcnc/jnotepad/views/manager/TopMenuBarManager.java index aa508f7..ec6038b 100644 --- a/src/main/java/org/jcnc/jnotepad/views/manager/TopMenuBarManager.java +++ b/src/main/java/org/jcnc/jnotepad/views/manager/TopMenuBarManager.java @@ -11,7 +11,7 @@ import javafx.stage.Stage; import org.jcnc.jnotepad.app.i18n.UiResourceBundle; import org.jcnc.jnotepad.common.util.LogUtil; import org.jcnc.jnotepad.common.util.UiUtil; -import org.jcnc.jnotepad.controller.config.AppConfigController; +import org.jcnc.jnotepad.controller.config.UserConfigController; import org.jcnc.jnotepad.controller.event.handler.menubar.*; import org.jcnc.jnotepad.controller.i18n.LocalizationController; import org.jcnc.jnotepad.model.entity.ShortcutKey; @@ -44,7 +44,7 @@ public class TopMenuBarManager extends AbstractManager { private final Map languageMenuItems = new HashMap<>(); Logger logger = LogUtil.getLogger(this.getClass()); - AppConfigController appConfigController = AppConfigController.getInstance(); + UserConfigController userConfigController = UserConfigController.getInstance(); private TopMenuBarManager() { @@ -66,7 +66,7 @@ public class TopMenuBarManager extends AbstractManager { // 初始化语言菜单 initLanguageMenu(); // 设置当前语言选中状态 - toggleLanguageCheck(appConfigController.getLanguage()); + toggleLanguageCheck(userConfigController.getLanguage()); // 初始化设置菜单 initSettingMenu(); // 初始化设置菜单 @@ -101,7 +101,7 @@ public class TopMenuBarManager extends AbstractManager { // 设置菜单 registerSetMenuItem(topMenuBar.getLineFeedItem(), WORD_WRAP, "lineFeedItem", (observableValue, before, after) -> { // 1. 更新全局配置 - AppConfigController.getInstance().setAutoLineConfig(after); + UserConfigController.getInstance().setAutoLineConfig(after); // 2. 对当前tab生效配置 CenterTabPaneManager.getInstance().fireTabSelected(); }); @@ -273,7 +273,7 @@ public class TopMenuBarManager extends AbstractManager { */ public void initShortcutKeys() { List itemsToUnbind = new ArrayList<>(); - List shortcutKeyConfigs = appConfigController.getShortcutKey(); + List shortcutKeyConfigs = userConfigController.getShortcutKey(); for (ShortcutKey shortcutKey : shortcutKeyConfigs) { // 保证json的key必须和变量名一致 MenuItem menuItem = topMenuBar.getItemMap().get(shortcutKey.getButtonName()); diff --git a/src/main/java/org/jcnc/jnotepad/views/root/center/main/center/tab/CenterTab.java b/src/main/java/org/jcnc/jnotepad/views/root/center/main/center/tab/CenterTab.java index b698b83..e7b7b72 100644 --- a/src/main/java/org/jcnc/jnotepad/views/root/center/main/center/tab/CenterTab.java +++ b/src/main/java/org/jcnc/jnotepad/views/root/center/main/center/tab/CenterTab.java @@ -3,7 +3,7 @@ package org.jcnc.jnotepad.views.root.center.main.center.tab; import javafx.scene.control.Tab; import org.fxmisc.flowless.VirtualizedScrollPane; import org.jcnc.jnotepad.common.util.LogUtil; -import org.jcnc.jnotepad.controller.config.AppConfigController; +import org.jcnc.jnotepad.controller.config.UserConfigController; import org.jcnc.jnotepad.ui.module.LineNumberTextArea; import org.jcnc.jnotepad.views.manager.BottomStatusBoxManager; import org.jcnc.jnotepad.views.manager.CenterTabPaneManager; @@ -51,7 +51,7 @@ public class CenterTab extends Tab { lineNumberTextArea = textArea; initTextAreaListeners(); this.setContent(new VirtualizedScrollPane<>(lineNumberTextArea)); - setAutoLine(AppConfigController.getInstance().getAutoLineConfig()); + setAutoLine(UserConfigController.getInstance().getAutoLineConfig()); this.charset = charset; } diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml index b23a028..824db1d 100644 --- a/src/main/resources/logback.xml +++ b/src/main/resources/logback.xml @@ -9,9 +9,9 @@ - + - + diff --git a/tool/jpackage.sh b/tool/jpackage.sh new file mode 100644 index 0000000..d88f20d --- /dev/null +++ b/tool/jpackage.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +cd .. +jpackage \ + --name JNotepad \ + --type app-image \ + -m org.jcnc.jnotepad/org.jcnc.jnotepad.LunchApp \ + --runtime-image ./target/JNotepad/ \ + --icon src/main/resources/img/icon.ico \ + --app-version 1.1.13 \ + --vendor "JCNC"