From 8608ad6e75db9896899dcce8485772c16f169411 Mon Sep 17 00:00:00 2001 From: gewuyou <1063891901@qq.com> Date: Wed, 4 Oct 2023 18:25:31 +0800 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=20=E9=87=8D=E6=9E=84=E9=A1=B6=E9=83=A8?= =?UTF-8?q?=E8=8F=9C=E5=8D=95=E6=A0=8F=E7=AE=A1=E7=90=86=E7=B1=BB=EF=BC=8C?= =?UTF-8?q?=E5=87=8F=E5=B0=91=E8=80=A6=E5=90=88=E6=96=B9=E4=BE=BF=E6=89=A9?= =?UTF-8?q?=E5=B1=95=20=F0=9F=90=9B=20=E4=BF=AE=E5=A4=8D=20BUG=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E9=87=8D=E5=A4=8D=E7=82=B9=E5=87=BB=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E6=8C=89=E9=92=AE=E5=AF=BC=E8=87=B4=E9=87=8D=E5=A4=8D=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E8=AE=BE=E7=BD=AE=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 +- src/main/java/module-info.java | 8 +- src/main/java/org/jcnc/jnotepad/LunchApp.java | 2 +- .../config/BaseConfigController.java | 10 +- .../interfaces/ConfigController.java | 2 +- .../core/manager/AbstractCacheManager.java | 2 +- .../api/core/ui/stage/AbstractPaneStage.java | 2 +- .../core/views/manager/AbstractManager.java | 2 +- .../manager/builder/SideBarButtonBuilder.java | 2 +- .../bottom/AbstractFunctionChildrenBox.java | 2 +- .../core/views/top/menu/AbstractTopMenu.java | 126 +++++++ .../util/EncodingDetector.java | 2 +- .../{common => api}/util/FileUtil.java | 4 +- .../{common => api}/util/JsonUtil.java | 2 +- .../{common => api}/util/LogUtil.java | 2 +- .../{common => api}/util/PopUpUtil.java | 2 +- .../jnotepad/{common => api}/util/UiUtil.java | 2 +- .../app/manager/ApplicationManager.java | 4 +- .../manager/ApplicationCacheManager.java | 2 +- .../common/manager/ThreadPoolManager.java | 2 +- .../controller/ResourceController.java | 2 +- .../controller/cache/CacheController.java | 15 +- .../config/AppConfigController.java | 2 +- .../config/PluginConfigController.java | 2 +- .../config/UserConfigController.java | 2 +- .../{menubar => menuitem}/NewFile.java | 2 +- .../{menubar => menuitem}/OpenConfig.java | 4 +- .../{menubar => menuitem}/OpenDirectory.java | 6 +- .../{menubar => menuitem}/OpenFile.java | 10 +- .../{menubar => menuitem}/RenameFile.java | 8 +- .../{menubar => menuitem}/SaveAsFile.java | 4 +- .../{menubar => menuitem}/SaveFile.java | 6 +- .../controller/manager/Controller.java | 4 +- .../jcnc/jnotepad/plugin/PluginLoader.java | 4 +- .../plugin/PluginManagerInterface.java | 6 +- .../plugin/manager/PluginManager.java | 4 +- .../jnotepad/ui/dialog/AppDialogBuilder.java | 2 +- .../ui/setstage/DeveloperDebugStage.java | 6 +- .../jnotepad/ui/setstage/HelpPaneStage.java | 6 +- .../jcnc/jnotepad/ui/setstage/SetStage.java | 10 +- .../pluginstage/PluginManagementPane.java | 8 +- .../views/manager/CenterTabPaneManager.java | 6 +- .../manager/DirectorySidebarManager.java | 4 +- .../manager/RootTopBorderPaneManager.java | 2 +- .../views/manager/SidebarToolBarManager.java | 6 +- .../views/manager/TopMenuBarManager.java | 324 ++---------------- .../directory/DirectorySidebarPane.java | 2 +- .../center/main/center/tab/CenterTab.java | 2 +- .../top/{menu => menubar}/TopMenuBar.java | 8 +- .../root/top/menubar/menu/FileTopMenu.java | 71 ++++ .../root/top/menubar/menu/HelpTopMenu.java | 68 ++++ .../top/menubar/menu/LanguageTopMenu.java | 123 +++++++ .../root/top/menubar/menu/PluginTopMenu.java | 68 ++++ .../root/top/menubar/menu/SettingTopMenu.java | 87 +++++ 54 files changed, 669 insertions(+), 397 deletions(-) rename src/main/java/org/jcnc/jnotepad/{plugin => }/api/core/controller/config/BaseConfigController.java (91%) rename src/main/java/org/jcnc/jnotepad/{plugin => }/api/core/controller/interfaces/ConfigController.java (92%) rename src/main/java/org/jcnc/jnotepad/{plugin => }/api/core/manager/AbstractCacheManager.java (98%) rename src/main/java/org/jcnc/jnotepad/{plugin => }/api/core/ui/stage/AbstractPaneStage.java (95%) rename src/main/java/org/jcnc/jnotepad/{plugin => }/api/core/views/manager/AbstractManager.java (84%) rename src/main/java/org/jcnc/jnotepad/{plugin => }/api/core/views/manager/builder/SideBarButtonBuilder.java (97%) rename src/main/java/org/jcnc/jnotepad/{plugin => }/api/core/views/sidebar/bottom/AbstractFunctionChildrenBox.java (93%) create mode 100644 src/main/java/org/jcnc/jnotepad/api/core/views/top/menu/AbstractTopMenu.java rename src/main/java/org/jcnc/jnotepad/{common => api}/util/EncodingDetector.java (98%) rename src/main/java/org/jcnc/jnotepad/{common => api}/util/FileUtil.java (97%) rename src/main/java/org/jcnc/jnotepad/{common => api}/util/JsonUtil.java (98%) rename src/main/java/org/jcnc/jnotepad/{common => api}/util/LogUtil.java (95%) rename src/main/java/org/jcnc/jnotepad/{common => api}/util/PopUpUtil.java (99%) rename src/main/java/org/jcnc/jnotepad/{common => api}/util/UiUtil.java (98%) rename src/main/java/org/jcnc/jnotepad/controller/event/handler/{menubar => menuitem}/NewFile.java (97%) rename src/main/java/org/jcnc/jnotepad/controller/event/handler/{menubar => menuitem}/OpenConfig.java (88%) rename src/main/java/org/jcnc/jnotepad/controller/event/handler/{menubar => menuitem}/OpenDirectory.java (94%) rename src/main/java/org/jcnc/jnotepad/controller/event/handler/{menubar => menuitem}/OpenFile.java (94%) rename src/main/java/org/jcnc/jnotepad/controller/event/handler/{menubar => menuitem}/RenameFile.java (96%) rename src/main/java/org/jcnc/jnotepad/controller/event/handler/{menubar => menuitem}/SaveAsFile.java (86%) rename src/main/java/org/jcnc/jnotepad/controller/event/handler/{menubar => menuitem}/SaveFile.java (96%) rename src/main/java/org/jcnc/jnotepad/views/root/top/{menu => menubar}/TopMenuBar.java (95%) create mode 100644 src/main/java/org/jcnc/jnotepad/views/root/top/menubar/menu/FileTopMenu.java create mode 100644 src/main/java/org/jcnc/jnotepad/views/root/top/menubar/menu/HelpTopMenu.java create mode 100644 src/main/java/org/jcnc/jnotepad/views/root/top/menubar/menu/LanguageTopMenu.java create mode 100644 src/main/java/org/jcnc/jnotepad/views/root/top/menubar/menu/PluginTopMenu.java create mode 100644 src/main/java/org/jcnc/jnotepad/views/root/top/menubar/menu/SettingTopMenu.java diff --git a/.gitignore b/.gitignore index beaa425..d1e3e13 100644 --- a/.gitignore +++ b/.gitignore @@ -15,7 +15,7 @@ test/ ### 此处排除证书目录 certificate/ -### 此处排除了项目文件 +### 此处排除项目文件 .jnotepad/ ### Eclipse ### diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index 0216e6e..f7facd2 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -29,8 +29,8 @@ module org.jcnc.jnotepad { exports org.jcnc.jnotepad.controller.manager; exports org.jcnc.jnotepad.controller.i18n; exports org.jcnc.jnotepad.controller.event.handler.setting; - exports org.jcnc.jnotepad.controller.event.handler.menubar; - exports org.jcnc.jnotepad.common.util; + exports org.jcnc.jnotepad.controller.event.handler.menuitem; + exports org.jcnc.jnotepad.api.util; exports org.jcnc.jnotepad.common.interfaces; opens org.jcnc.jnotepad.app.config; exports org.jcnc.jnotepad.plugin.interfaces; @@ -41,7 +41,7 @@ module org.jcnc.jnotepad { exports org.jcnc.jnotepad.model.entity; exports org.jcnc.jnotepad.views.root.bottom; exports org.jcnc.jnotepad.views.root.bottom.status; - exports org.jcnc.jnotepad.plugin.api.core.views.sidebar.bottom; - exports org.jcnc.jnotepad.plugin.api.core.controller.config; + exports org.jcnc.jnotepad.api.core.views.sidebar.bottom; + exports org.jcnc.jnotepad.api.core.controller.config; } \ No newline at end of file diff --git a/src/main/java/org/jcnc/jnotepad/LunchApp.java b/src/main/java/org/jcnc/jnotepad/LunchApp.java index 6fed3a3..e8a4201 100644 --- a/src/main/java/org/jcnc/jnotepad/LunchApp.java +++ b/src/main/java/org/jcnc/jnotepad/LunchApp.java @@ -2,8 +2,8 @@ package org.jcnc.jnotepad; import javafx.application.Application; import javafx.stage.Stage; +import org.jcnc.jnotepad.api.util.LogUtil; import org.jcnc.jnotepad.app.manager.ApplicationManager; -import org.jcnc.jnotepad.common.util.LogUtil; /** diff --git a/src/main/java/org/jcnc/jnotepad/plugin/api/core/controller/config/BaseConfigController.java b/src/main/java/org/jcnc/jnotepad/api/core/controller/config/BaseConfigController.java similarity index 91% rename from src/main/java/org/jcnc/jnotepad/plugin/api/core/controller/config/BaseConfigController.java rename to src/main/java/org/jcnc/jnotepad/api/core/controller/config/BaseConfigController.java index f6b0386..ee8f816 100644 --- a/src/main/java/org/jcnc/jnotepad/plugin/api/core/controller/config/BaseConfigController.java +++ b/src/main/java/org/jcnc/jnotepad/api/core/controller/config/BaseConfigController.java @@ -1,10 +1,10 @@ -package org.jcnc.jnotepad.plugin.api.core.controller.config; +package org.jcnc.jnotepad.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.api.core.controller.interfaces.ConfigController; +import org.jcnc.jnotepad.api.util.JsonUtil; +import org.jcnc.jnotepad.api.util.LogUtil; +import org.jcnc.jnotepad.api.util.PopUpUtil; import org.jcnc.jnotepad.exception.AppException; -import org.jcnc.jnotepad.plugin.api.core.controller.interfaces.ConfigController; import org.slf4j.Logger; import java.io.BufferedWriter; diff --git a/src/main/java/org/jcnc/jnotepad/plugin/api/core/controller/interfaces/ConfigController.java b/src/main/java/org/jcnc/jnotepad/api/core/controller/interfaces/ConfigController.java similarity index 92% rename from src/main/java/org/jcnc/jnotepad/plugin/api/core/controller/interfaces/ConfigController.java rename to src/main/java/org/jcnc/jnotepad/api/core/controller/interfaces/ConfigController.java index ddf716c..e4b110a 100644 --- a/src/main/java/org/jcnc/jnotepad/plugin/api/core/controller/interfaces/ConfigController.java +++ b/src/main/java/org/jcnc/jnotepad/api/core/controller/interfaces/ConfigController.java @@ -1,4 +1,4 @@ -package org.jcnc.jnotepad.plugin.api.core.controller.interfaces; +package org.jcnc.jnotepad.api.core.controller.interfaces; import java.nio.file.Path; diff --git a/src/main/java/org/jcnc/jnotepad/plugin/api/core/manager/AbstractCacheManager.java b/src/main/java/org/jcnc/jnotepad/api/core/manager/AbstractCacheManager.java similarity index 98% rename from src/main/java/org/jcnc/jnotepad/plugin/api/core/manager/AbstractCacheManager.java rename to src/main/java/org/jcnc/jnotepad/api/core/manager/AbstractCacheManager.java index f9ea8b8..0bdfc32 100644 --- a/src/main/java/org/jcnc/jnotepad/plugin/api/core/manager/AbstractCacheManager.java +++ b/src/main/java/org/jcnc/jnotepad/api/core/manager/AbstractCacheManager.java @@ -1,4 +1,4 @@ -package org.jcnc.jnotepad.plugin.api.core.manager; +package org.jcnc.jnotepad.api.core.manager; import org.jcnc.jnotepad.model.entity.Cache; diff --git a/src/main/java/org/jcnc/jnotepad/plugin/api/core/ui/stage/AbstractPaneStage.java b/src/main/java/org/jcnc/jnotepad/api/core/ui/stage/AbstractPaneStage.java similarity index 95% rename from src/main/java/org/jcnc/jnotepad/plugin/api/core/ui/stage/AbstractPaneStage.java rename to src/main/java/org/jcnc/jnotepad/api/core/ui/stage/AbstractPaneStage.java index c20bc13..e2b7471 100644 --- a/src/main/java/org/jcnc/jnotepad/plugin/api/core/ui/stage/AbstractPaneStage.java +++ b/src/main/java/org/jcnc/jnotepad/api/core/ui/stage/AbstractPaneStage.java @@ -1,4 +1,4 @@ -package org.jcnc.jnotepad.plugin.api.core.ui.stage; +package org.jcnc.jnotepad.api.core.ui.stage; import javafx.scene.Scene; import javafx.scene.image.Image; diff --git a/src/main/java/org/jcnc/jnotepad/plugin/api/core/views/manager/AbstractManager.java b/src/main/java/org/jcnc/jnotepad/api/core/views/manager/AbstractManager.java similarity index 84% rename from src/main/java/org/jcnc/jnotepad/plugin/api/core/views/manager/AbstractManager.java rename to src/main/java/org/jcnc/jnotepad/api/core/views/manager/AbstractManager.java index 136db38..3ac79b1 100644 --- a/src/main/java/org/jcnc/jnotepad/plugin/api/core/views/manager/AbstractManager.java +++ b/src/main/java/org/jcnc/jnotepad/api/core/views/manager/AbstractManager.java @@ -1,4 +1,4 @@ -package org.jcnc.jnotepad.plugin.api.core.views.manager; +package org.jcnc.jnotepad.api.core.views.manager; import java.util.List; diff --git a/src/main/java/org/jcnc/jnotepad/plugin/api/core/views/manager/builder/SideBarButtonBuilder.java b/src/main/java/org/jcnc/jnotepad/api/core/views/manager/builder/SideBarButtonBuilder.java similarity index 97% rename from src/main/java/org/jcnc/jnotepad/plugin/api/core/views/manager/builder/SideBarButtonBuilder.java rename to src/main/java/org/jcnc/jnotepad/api/core/views/manager/builder/SideBarButtonBuilder.java index bf0160e..9be20d3 100644 --- a/src/main/java/org/jcnc/jnotepad/plugin/api/core/views/manager/builder/SideBarButtonBuilder.java +++ b/src/main/java/org/jcnc/jnotepad/api/core/views/manager/builder/SideBarButtonBuilder.java @@ -1,4 +1,4 @@ -package org.jcnc.jnotepad.plugin.api.core.views.manager.builder; +package org.jcnc.jnotepad.api.core.views.manager.builder; import javafx.event.ActionEvent; import javafx.event.EventHandler; diff --git a/src/main/java/org/jcnc/jnotepad/plugin/api/core/views/sidebar/bottom/AbstractFunctionChildrenBox.java b/src/main/java/org/jcnc/jnotepad/api/core/views/sidebar/bottom/AbstractFunctionChildrenBox.java similarity index 93% rename from src/main/java/org/jcnc/jnotepad/plugin/api/core/views/sidebar/bottom/AbstractFunctionChildrenBox.java rename to src/main/java/org/jcnc/jnotepad/api/core/views/sidebar/bottom/AbstractFunctionChildrenBox.java index eac456b..294de08 100644 --- a/src/main/java/org/jcnc/jnotepad/plugin/api/core/views/sidebar/bottom/AbstractFunctionChildrenBox.java +++ b/src/main/java/org/jcnc/jnotepad/api/core/views/sidebar/bottom/AbstractFunctionChildrenBox.java @@ -1,4 +1,4 @@ -package org.jcnc.jnotepad.plugin.api.core.views.sidebar.bottom; +package org.jcnc.jnotepad.api.core.views.sidebar.bottom; import javafx.scene.control.Label; import javafx.scene.control.Menu; diff --git a/src/main/java/org/jcnc/jnotepad/api/core/views/top/menu/AbstractTopMenu.java b/src/main/java/org/jcnc/jnotepad/api/core/views/top/menu/AbstractTopMenu.java new file mode 100644 index 0000000..cbb075b --- /dev/null +++ b/src/main/java/org/jcnc/jnotepad/api/core/views/top/menu/AbstractTopMenu.java @@ -0,0 +1,126 @@ +package org.jcnc.jnotepad.api.core.views.top.menu; + +import javafx.beans.value.ChangeListener; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.scene.control.CheckMenuItem; +import javafx.scene.control.Menu; +import javafx.scene.control.MenuItem; +import javafx.scene.control.RadioMenuItem; +import org.jcnc.jnotepad.api.util.LogUtil; +import org.jcnc.jnotepad.app.i18n.UiResourceBundle; +import org.jcnc.jnotepad.views.root.top.menubar.TopMenuBar; +import org.slf4j.Logger; + +import java.util.Map; + +/** + * 抽象顶部菜单 + * + * @author gewuyou + */ +public abstract class AbstractTopMenu { + protected final TopMenuBar topMenuBar = TopMenuBar.getInstance(); + + protected Logger logger = LogUtil.getLogger(this.getClass()); + + /** + * 获取菜单名称 + * + * @return 菜单名称 + */ + public abstract String getMenuName(); + + /** + * 获取菜单 + * + * @return 菜单 + */ + public abstract Menu getMenu(); + + /** + * 获取菜单项集合 + * + * @return 菜单项集合 + */ + public abstract Map getMenuItems(); + + /** + * 注册顶部菜单 + */ + protected abstract void registerTopMenu(); + + /** + * 注册菜单项 + * + * @param menuItem 菜单项 + * @param menuItemName 菜单项名称 + * @param userData 用户数据,用来存放必要的数据,比如按钮菜单项名称 + * @param eventHandler 事件 + */ + public void registerMenuItem(MenuItem menuItem, String menuItemName, Object userData, EventHandler eventHandler) { + getMenuItems().put(menuItemName, menuItem); + menuItem.setUserData(userData); + menuItem.setOnAction(eventHandler); + } + + /** + * 注册检查菜单项 + * + * @param checkMenuItem 检查菜单项 + * @param menuItemName 菜单项名称 + * @param userData 用户数据,用来存放必要的数据,比如按钮菜单项名称 + * @param listener 监听事件 + */ + + public void registerMenuItem(CheckMenuItem checkMenuItem, String menuItemName, Object userData, ChangeListener listener) { + getMenuItems().put(menuItemName, checkMenuItem); + checkMenuItem.setUserData(userData); + checkMenuItem.selectedProperty().addListener(listener); + } + + /** + * 注册单选菜单项 + * + * @param radioMenuItem 单选菜单项 + * @param menuItemName 菜单项名称 + * @param userData 用户数据,用来存放必要的数据 + * @param eventHandler 操作事件 + */ + + public void registerRadioMenuItem(Map radioMenuItems, RadioMenuItem radioMenuItem, String menuItemName, Object userData, EventHandler eventHandler) { + radioMenuItems.put(menuItemName, radioMenuItem); + radioMenuItem.setUserData(userData); + radioMenuItem.setOnAction(eventHandler); + } + + /** + * 初始化菜单栏 + */ + public void initMenu() { + registerTopMenu(); + logger.info("初始化菜单!"); + Menu menu = getMenu(); + // 文件菜单 + UiResourceBundle.bindStringProperty(menu.textProperty(), getMenuName()); + // 初始化菜单项 + initMenuItems(getMenuItems(), menu); + } + + /** + * 初始化菜单项 + * + * @param menuItems 菜单项集合 + * @param menu 菜单 + */ + + private void initMenuItems(Map menuItems, Menu menu) { + logger.info("初始化菜单项!"); + var itemMap = topMenuBar.getAllItemMap(); + menuItems.forEach((key, value) -> { + UiResourceBundle.bindStringProperty(value.textProperty(), key); + itemMap.put((String) value.getUserData(), value); + menu.getItems().add(value); + }); + } +} diff --git a/src/main/java/org/jcnc/jnotepad/common/util/EncodingDetector.java b/src/main/java/org/jcnc/jnotepad/api/util/EncodingDetector.java similarity index 98% rename from src/main/java/org/jcnc/jnotepad/common/util/EncodingDetector.java rename to src/main/java/org/jcnc/jnotepad/api/util/EncodingDetector.java index 8bdf43b..49b762f 100644 --- a/src/main/java/org/jcnc/jnotepad/common/util/EncodingDetector.java +++ b/src/main/java/org/jcnc/jnotepad/api/util/EncodingDetector.java @@ -1,4 +1,4 @@ -package org.jcnc.jnotepad.common.util; +package org.jcnc.jnotepad.api.util; import com.ibm.icu.text.CharsetDetector; import com.ibm.icu.text.CharsetMatch; diff --git a/src/main/java/org/jcnc/jnotepad/common/util/FileUtil.java b/src/main/java/org/jcnc/jnotepad/api/util/FileUtil.java similarity index 97% rename from src/main/java/org/jcnc/jnotepad/common/util/FileUtil.java rename to src/main/java/org/jcnc/jnotepad/api/util/FileUtil.java index ddbbe4d..47674bd 100644 --- a/src/main/java/org/jcnc/jnotepad/common/util/FileUtil.java +++ b/src/main/java/org/jcnc/jnotepad/api/util/FileUtil.java @@ -1,6 +1,6 @@ -package org.jcnc.jnotepad.common.util; +package org.jcnc.jnotepad.api.util; -import org.jcnc.jnotepad.controller.event.handler.menubar.OpenFile; +import org.jcnc.jnotepad.controller.event.handler.menuitem.OpenFile; import org.jcnc.jnotepad.exception.AppException; import org.jcnc.jnotepad.model.entity.DirFileModel; import org.kordamp.ikonli.javafx.FontIcon; diff --git a/src/main/java/org/jcnc/jnotepad/common/util/JsonUtil.java b/src/main/java/org/jcnc/jnotepad/api/util/JsonUtil.java similarity index 98% rename from src/main/java/org/jcnc/jnotepad/common/util/JsonUtil.java rename to src/main/java/org/jcnc/jnotepad/api/util/JsonUtil.java index ee21c6c..6096427 100644 --- a/src/main/java/org/jcnc/jnotepad/common/util/JsonUtil.java +++ b/src/main/java/org/jcnc/jnotepad/api/util/JsonUtil.java @@ -1,4 +1,4 @@ -package org.jcnc.jnotepad.common.util; +package org.jcnc.jnotepad.api.util; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; diff --git a/src/main/java/org/jcnc/jnotepad/common/util/LogUtil.java b/src/main/java/org/jcnc/jnotepad/api/util/LogUtil.java similarity index 95% rename from src/main/java/org/jcnc/jnotepad/common/util/LogUtil.java rename to src/main/java/org/jcnc/jnotepad/api/util/LogUtil.java index 3359952..4fda39f 100644 --- a/src/main/java/org/jcnc/jnotepad/common/util/LogUtil.java +++ b/src/main/java/org/jcnc/jnotepad/api/util/LogUtil.java @@ -1,4 +1,4 @@ -package org.jcnc.jnotepad.common.util; +package org.jcnc.jnotepad.api.util; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/org/jcnc/jnotepad/common/util/PopUpUtil.java b/src/main/java/org/jcnc/jnotepad/api/util/PopUpUtil.java similarity index 99% rename from src/main/java/org/jcnc/jnotepad/common/util/PopUpUtil.java rename to src/main/java/org/jcnc/jnotepad/api/util/PopUpUtil.java index 51fce4d..ca53364 100644 --- a/src/main/java/org/jcnc/jnotepad/common/util/PopUpUtil.java +++ b/src/main/java/org/jcnc/jnotepad/api/util/PopUpUtil.java @@ -1,4 +1,4 @@ -package org.jcnc.jnotepad.common.util; +package org.jcnc.jnotepad.api.util; import org.jcnc.jnotepad.model.enums.DialogType; import org.jcnc.jnotepad.ui.dialog.AppDialogBuilder; diff --git a/src/main/java/org/jcnc/jnotepad/common/util/UiUtil.java b/src/main/java/org/jcnc/jnotepad/api/util/UiUtil.java similarity index 98% rename from src/main/java/org/jcnc/jnotepad/common/util/UiUtil.java rename to src/main/java/org/jcnc/jnotepad/api/util/UiUtil.java index 6ccbe97..b5598d0 100644 --- a/src/main/java/org/jcnc/jnotepad/common/util/UiUtil.java +++ b/src/main/java/org/jcnc/jnotepad/api/util/UiUtil.java @@ -1,4 +1,4 @@ -package org.jcnc.jnotepad.common.util; +package org.jcnc.jnotepad.api.util; import atlantafx.base.theme.Styles; import javafx.scene.image.Image; 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 a811044..e998241 100644 --- a/src/main/java/org/jcnc/jnotepad/app/manager/ApplicationManager.java +++ b/src/main/java/org/jcnc/jnotepad/app/manager/ApplicationManager.java @@ -8,12 +8,12 @@ import javafx.scene.layout.Pane; import javafx.stage.Stage; import javafx.stage.Window; import org.jcnc.jnotepad.LunchApp; +import org.jcnc.jnotepad.api.util.LogUtil; +import org.jcnc.jnotepad.api.util.UiUtil; import org.jcnc.jnotepad.app.i18n.UiResourceBundle; import org.jcnc.jnotepad.common.constants.AppConstants; import org.jcnc.jnotepad.common.constants.TextConstants; import org.jcnc.jnotepad.common.manager.ThreadPoolManager; -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.PluginConfigController; diff --git a/src/main/java/org/jcnc/jnotepad/common/manager/ApplicationCacheManager.java b/src/main/java/org/jcnc/jnotepad/common/manager/ApplicationCacheManager.java index f509922..12c46ea 100644 --- a/src/main/java/org/jcnc/jnotepad/common/manager/ApplicationCacheManager.java +++ b/src/main/java/org/jcnc/jnotepad/common/manager/ApplicationCacheManager.java @@ -1,6 +1,6 @@ package org.jcnc.jnotepad.common.manager; -import org.jcnc.jnotepad.plugin.api.core.manager.AbstractCacheManager; +import org.jcnc.jnotepad.api.core.manager.AbstractCacheManager; /** * 应用程序缓存管理类 diff --git a/src/main/java/org/jcnc/jnotepad/common/manager/ThreadPoolManager.java b/src/main/java/org/jcnc/jnotepad/common/manager/ThreadPoolManager.java index ffe01c0..6068928 100644 --- a/src/main/java/org/jcnc/jnotepad/common/manager/ThreadPoolManager.java +++ b/src/main/java/org/jcnc/jnotepad/common/manager/ThreadPoolManager.java @@ -1,6 +1,6 @@ package org.jcnc.jnotepad.common.manager; -import org.jcnc.jnotepad.common.util.LogUtil; +import org.jcnc.jnotepad.api.util.LogUtil; import org.slf4j.Logger; import java.util.concurrent.*; diff --git a/src/main/java/org/jcnc/jnotepad/controller/ResourceController.java b/src/main/java/org/jcnc/jnotepad/controller/ResourceController.java index ba4a70c..28fb24f 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/ResourceController.java +++ b/src/main/java/org/jcnc/jnotepad/controller/ResourceController.java @@ -1,6 +1,6 @@ package org.jcnc.jnotepad.controller; -import org.jcnc.jnotepad.common.util.LogUtil; +import org.jcnc.jnotepad.api.util.LogUtil; import org.jcnc.jnotepad.controller.config.PluginConfigController; import org.jcnc.jnotepad.controller.i18n.LocalizationController; import org.jcnc.jnotepad.exception.AppException; 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 801ba95..ac75c9c 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/cache/CacheController.java +++ b/src/main/java/org/jcnc/jnotepad/controller/cache/CacheController.java @@ -1,11 +1,10 @@ package org.jcnc.jnotepad.controller.cache; import com.fasterxml.jackson.core.type.TypeReference; +import org.jcnc.jnotepad.api.util.JsonUtil; +import org.jcnc.jnotepad.api.util.LogUtil; 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; @@ -130,7 +129,7 @@ public class CacheController { return true; } } catch (IOException e) { - throw new AppException(e); + logger.error("清理缓存文件或文件夹出错!", e); } return false; } @@ -164,10 +163,10 @@ public class CacheController { try { boolean flag = groupFile.createNewFile(); if (!flag) { - throw new AppException("创建文件失败"); + logger.error("创建缓存文件失败:{}", groupFile); } } catch (IOException e) { - throw new AppException(e); + logger.error("创建缓存文件失败!", e); } } fileMap.computeIfAbsent(groupFile, k -> new HashMap<>(16)); @@ -180,7 +179,7 @@ public class CacheController { try (FileOutputStream fileOutputStream = new FileOutputStream(file)) { fileOutputStream.write(new byte[0]); } catch (IOException e) { - throw new AppException(e); + logger.error("清空缓存文件失败!", e); } }); // 写入缓存 @@ -188,7 +187,7 @@ public class CacheController { try (FileWriter writer = new FileWriter(entry.getKey(), true)) { writer.write(JsonUtil.toJsonString(entry.getValue())); } catch (IOException e) { - throw new AppException(e); + logger.error("写入缓存文件失败!", e); } } } 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 84c2a37..5e67393 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/config/AppConfigController.java +++ b/src/main/java/org/jcnc/jnotepad/controller/config/AppConfigController.java @@ -1,7 +1,7 @@ package org.jcnc.jnotepad.controller.config; +import org.jcnc.jnotepad.api.core.controller.config.BaseConfigController; import org.jcnc.jnotepad.app.config.AppConfig; -import org.jcnc.jnotepad.plugin.api.core.controller.config.BaseConfigController; import java.nio.file.Paths; 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 6e0a8c9..085c56b 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/config/PluginConfigController.java +++ b/src/main/java/org/jcnc/jnotepad/controller/config/PluginConfigController.java @@ -1,7 +1,7 @@ package org.jcnc.jnotepad.controller.config; +import org.jcnc.jnotepad.api.core.controller.config.BaseConfigController; import org.jcnc.jnotepad.app.config.PluginConfig; -import org.jcnc.jnotepad.plugin.api.core.controller.config.BaseConfigController; import java.nio.file.Path; import java.nio.file.Paths; diff --git a/src/main/java/org/jcnc/jnotepad/controller/config/UserConfigController.java b/src/main/java/org/jcnc/jnotepad/controller/config/UserConfigController.java index 22ec82a..c0c88ce 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/config/UserConfigController.java +++ b/src/main/java/org/jcnc/jnotepad/controller/config/UserConfigController.java @@ -1,8 +1,8 @@ package org.jcnc.jnotepad.controller.config; +import org.jcnc.jnotepad.api.core.controller.config.BaseConfigController; 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; diff --git a/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/NewFile.java b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuitem/NewFile.java similarity index 97% rename from src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/NewFile.java rename to src/main/java/org/jcnc/jnotepad/controller/event/handler/menuitem/NewFile.java index 204aeae..0310a53 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/NewFile.java +++ b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuitem/NewFile.java @@ -1,4 +1,4 @@ -package org.jcnc.jnotepad.controller.event.handler.menubar; +package org.jcnc.jnotepad.controller.event.handler.menuitem; import javafx.event.ActionEvent; import javafx.event.EventHandler; 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/menuitem/OpenConfig.java similarity index 88% rename from src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/OpenConfig.java rename to src/main/java/org/jcnc/jnotepad/controller/event/handler/menuitem/OpenConfig.java index 09fd736..51ed9f8 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/OpenConfig.java +++ b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuitem/OpenConfig.java @@ -1,7 +1,7 @@ -package org.jcnc.jnotepad.controller.event.handler.menubar; +package org.jcnc.jnotepad.controller.event.handler.menuitem; import javafx.event.ActionEvent; -import org.jcnc.jnotepad.common.util.LogUtil; +import org.jcnc.jnotepad.api.util.LogUtil; import org.jcnc.jnotepad.controller.config.UserConfigController; import java.io.File; diff --git a/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/OpenDirectory.java b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuitem/OpenDirectory.java similarity index 94% rename from src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/OpenDirectory.java rename to src/main/java/org/jcnc/jnotepad/controller/event/handler/menuitem/OpenDirectory.java index 6b4eb98..1dd4bef 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/OpenDirectory.java +++ b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuitem/OpenDirectory.java @@ -1,13 +1,13 @@ -package org.jcnc.jnotepad.controller.event.handler.menubar; +package org.jcnc.jnotepad.controller.event.handler.menuitem; import javafx.event.ActionEvent; import javafx.event.EventHandler; +import org.jcnc.jnotepad.api.util.FileUtil; +import org.jcnc.jnotepad.api.util.UiUtil; import org.jcnc.jnotepad.app.i18n.UiResourceBundle; import org.jcnc.jnotepad.common.constants.TextConstants; import org.jcnc.jnotepad.common.manager.ApplicationCacheManager; -import org.jcnc.jnotepad.common.util.FileUtil; -import org.jcnc.jnotepad.common.util.UiUtil; import org.jcnc.jnotepad.model.entity.Cache; import org.jcnc.jnotepad.model.entity.DirFileModel; import org.jcnc.jnotepad.model.enums.CacheExpirationTime; diff --git a/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/OpenFile.java b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuitem/OpenFile.java similarity index 94% rename from src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/OpenFile.java rename to src/main/java/org/jcnc/jnotepad/controller/event/handler/menuitem/OpenFile.java index 6c419d8..cb452a3 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/OpenFile.java +++ b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuitem/OpenFile.java @@ -1,15 +1,15 @@ -package org.jcnc.jnotepad.controller.event.handler.menubar; +package org.jcnc.jnotepad.controller.event.handler.menuitem; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.control.Tab; import javafx.stage.FileChooser; +import org.jcnc.jnotepad.api.util.EncodingDetector; +import org.jcnc.jnotepad.api.util.LogUtil; +import org.jcnc.jnotepad.api.util.UiUtil; import org.jcnc.jnotepad.app.i18n.UiResourceBundle; import org.jcnc.jnotepad.common.constants.TextConstants; import org.jcnc.jnotepad.common.manager.ApplicationCacheManager; -import org.jcnc.jnotepad.common.util.EncodingDetector; -import org.jcnc.jnotepad.common.util.LogUtil; -import org.jcnc.jnotepad.common.util.UiUtil; import org.jcnc.jnotepad.model.entity.Cache; import org.jcnc.jnotepad.model.enums.CacheExpirationTime; import org.jcnc.jnotepad.ui.dialog.factory.impl.BasicFileChooserFactory; @@ -21,7 +21,7 @@ import org.jcnc.jnotepad.views.root.center.main.center.tab.CenterTabPane; import java.io.File; import java.nio.charset.Charset; -import static org.jcnc.jnotepad.common.util.FileUtil.getFileText; +import static org.jcnc.jnotepad.api.util.FileUtil.getFileText; /** * 打开文件的事件处理程序。 diff --git a/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/RenameFile.java b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuitem/RenameFile.java similarity index 96% rename from src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/RenameFile.java rename to src/main/java/org/jcnc/jnotepad/controller/event/handler/menuitem/RenameFile.java index f52f27a..4f9031a 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/RenameFile.java +++ b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuitem/RenameFile.java @@ -1,15 +1,15 @@ -package org.jcnc.jnotepad.controller.event.handler.menubar; +package org.jcnc.jnotepad.controller.event.handler.menuitem; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.control.TextField; import javafx.scene.input.KeyCode; import javafx.stage.FileChooser; +import org.jcnc.jnotepad.api.util.LogUtil; +import org.jcnc.jnotepad.api.util.PopUpUtil; +import org.jcnc.jnotepad.api.util.UiUtil; import org.jcnc.jnotepad.app.i18n.UiResourceBundle; import org.jcnc.jnotepad.common.constants.TextConstants; -import org.jcnc.jnotepad.common.util.LogUtil; -import org.jcnc.jnotepad.common.util.PopUpUtil; -import org.jcnc.jnotepad.common.util.UiUtil; import org.jcnc.jnotepad.ui.dialog.factory.impl.BasicFileChooserFactory; import org.jcnc.jnotepad.views.manager.CenterTabPaneManager; import org.jcnc.jnotepad.views.root.center.main.center.tab.CenterTab; diff --git a/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/SaveAsFile.java b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuitem/SaveAsFile.java similarity index 86% rename from src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/SaveAsFile.java rename to src/main/java/org/jcnc/jnotepad/controller/event/handler/menuitem/SaveAsFile.java index 0ea14f3..2f5fa40 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/SaveAsFile.java +++ b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuitem/SaveAsFile.java @@ -1,7 +1,7 @@ -package org.jcnc.jnotepad.controller.event.handler.menubar; +package org.jcnc.jnotepad.controller.event.handler.menuitem; import javafx.event.ActionEvent; -import org.jcnc.jnotepad.common.util.LogUtil; +import org.jcnc.jnotepad.api.util.LogUtil; /** 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/menuitem/SaveFile.java similarity index 96% rename from src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/SaveFile.java rename to src/main/java/org/jcnc/jnotepad/controller/event/handler/menuitem/SaveFile.java index adde7d6..a14c1f2 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/SaveFile.java +++ b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuitem/SaveFile.java @@ -1,13 +1,13 @@ -package org.jcnc.jnotepad.controller.event.handler.menubar; +package org.jcnc.jnotepad.controller.event.handler.menuitem; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.stage.FileChooser; +import org.jcnc.jnotepad.api.util.LogUtil; +import org.jcnc.jnotepad.api.util.UiUtil; import org.jcnc.jnotepad.app.i18n.UiResourceBundle; 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.UserConfigController; import org.jcnc.jnotepad.controller.i18n.LocalizationController; import org.jcnc.jnotepad.model.entity.Cache; 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 b4e1abc..d07ea28 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/manager/Controller.java +++ b/src/main/java/org/jcnc/jnotepad/controller/manager/Controller.java @@ -2,8 +2,8 @@ package org.jcnc.jnotepad.controller.manager; import org.jcnc.jnotepad.common.interfaces.ControllerAble; import org.jcnc.jnotepad.common.manager.ApplicationCacheManager; -import org.jcnc.jnotepad.controller.event.handler.menubar.NewFile; -import org.jcnc.jnotepad.controller.event.handler.menubar.OpenFile; +import org.jcnc.jnotepad.controller.event.handler.menuitem.NewFile; +import org.jcnc.jnotepad.controller.event.handler.menuitem.OpenFile; import java.io.File; import java.util.Collections; diff --git a/src/main/java/org/jcnc/jnotepad/plugin/PluginLoader.java b/src/main/java/org/jcnc/jnotepad/plugin/PluginLoader.java index 9b7512e..be9e5d6 100644 --- a/src/main/java/org/jcnc/jnotepad/plugin/PluginLoader.java +++ b/src/main/java/org/jcnc/jnotepad/plugin/PluginLoader.java @@ -1,8 +1,8 @@ package org.jcnc.jnotepad.plugin; +import org.jcnc.jnotepad.api.util.JsonUtil; +import org.jcnc.jnotepad.api.util.LogUtil; import org.jcnc.jnotepad.common.manager.ThreadPoolManager; -import org.jcnc.jnotepad.common.util.JsonUtil; -import org.jcnc.jnotepad.common.util.LogUtil; import org.jcnc.jnotepad.controller.config.PluginConfigController; import org.jcnc.jnotepad.exception.AppException; import org.jcnc.jnotepad.model.entity.PluginDescriptor; diff --git a/src/main/java/org/jcnc/jnotepad/plugin/PluginManagerInterface.java b/src/main/java/org/jcnc/jnotepad/plugin/PluginManagerInterface.java index de20f47..bda6b72 100644 --- a/src/main/java/org/jcnc/jnotepad/plugin/PluginManagerInterface.java +++ b/src/main/java/org/jcnc/jnotepad/plugin/PluginManagerInterface.java @@ -6,9 +6,9 @@ import javafx.scene.control.Label; import javafx.scene.layout.VBox; import javafx.stage.FileChooser; import javafx.stage.Stage; -import org.jcnc.jnotepad.common.util.LogUtil; -import org.jcnc.jnotepad.common.util.PopUpUtil; -import org.jcnc.jnotepad.common.util.UiUtil; +import org.jcnc.jnotepad.api.util.LogUtil; +import org.jcnc.jnotepad.api.util.PopUpUtil; +import org.jcnc.jnotepad.api.util.UiUtil; import org.jcnc.jnotepad.plugin.manager.PluginManager; import org.jcnc.jnotepad.ui.dialog.factory.impl.BasicFileChooserFactory; import org.slf4j.Logger; diff --git a/src/main/java/org/jcnc/jnotepad/plugin/manager/PluginManager.java b/src/main/java/org/jcnc/jnotepad/plugin/manager/PluginManager.java index 2b60291..21fa55c 100644 --- a/src/main/java/org/jcnc/jnotepad/plugin/manager/PluginManager.java +++ b/src/main/java/org/jcnc/jnotepad/plugin/manager/PluginManager.java @@ -1,9 +1,9 @@ package org.jcnc.jnotepad.plugin.manager; +import org.jcnc.jnotepad.api.util.LogUtil; +import org.jcnc.jnotepad.api.util.PopUpUtil; import org.jcnc.jnotepad.app.manager.ApplicationManager; import org.jcnc.jnotepad.common.manager.ThreadPoolManager; -import org.jcnc.jnotepad.common.util.LogUtil; -import org.jcnc.jnotepad.common.util.PopUpUtil; import org.jcnc.jnotepad.controller.config.PluginConfigController; import org.jcnc.jnotepad.model.entity.PluginDescriptor; import org.slf4j.Logger; diff --git a/src/main/java/org/jcnc/jnotepad/ui/dialog/AppDialogBuilder.java b/src/main/java/org/jcnc/jnotepad/ui/dialog/AppDialogBuilder.java index ff69a43..030cea0 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/dialog/AppDialogBuilder.java +++ b/src/main/java/org/jcnc/jnotepad/ui/dialog/AppDialogBuilder.java @@ -5,7 +5,7 @@ import javafx.geometry.Pos; import javafx.scene.image.Image; import javafx.stage.Modality; import javafx.stage.Stage; -import org.jcnc.jnotepad.common.util.UiUtil; +import org.jcnc.jnotepad.api.util.UiUtil; import org.jcnc.jnotepad.model.enums.DialogType; import org.jcnc.jnotepad.ui.dialog.interfaces.DialogButtonAction; import org.kordamp.ikonli.javafx.FontIcon; diff --git a/src/main/java/org/jcnc/jnotepad/ui/setstage/DeveloperDebugStage.java b/src/main/java/org/jcnc/jnotepad/ui/setstage/DeveloperDebugStage.java index 7894a66..c5e1bb5 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/setstage/DeveloperDebugStage.java +++ b/src/main/java/org/jcnc/jnotepad/ui/setstage/DeveloperDebugStage.java @@ -7,10 +7,10 @@ import javafx.scene.control.Label; import javafx.scene.layout.HBox; import javafx.scene.layout.VBox; import javafx.stage.Stage; +import org.jcnc.jnotepad.api.util.LogUtil; +import org.jcnc.jnotepad.api.util.PopUpUtil; +import org.jcnc.jnotepad.api.util.UiUtil; import org.jcnc.jnotepad.app.manager.ApplicationManager; -import org.jcnc.jnotepad.common.util.LogUtil; -import org.jcnc.jnotepad.common.util.PopUpUtil; -import org.jcnc.jnotepad.common.util.UiUtil; import org.slf4j.Logger; /** diff --git a/src/main/java/org/jcnc/jnotepad/ui/setstage/HelpPaneStage.java b/src/main/java/org/jcnc/jnotepad/ui/setstage/HelpPaneStage.java index cc64037..46174c4 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/setstage/HelpPaneStage.java +++ b/src/main/java/org/jcnc/jnotepad/ui/setstage/HelpPaneStage.java @@ -17,9 +17,9 @@ import javafx.scene.input.ClipboardContent; import javafx.scene.layout.HBox; import javafx.scene.layout.VBox; import javafx.stage.Stage; -import org.jcnc.jnotepad.common.util.LogUtil; -import org.jcnc.jnotepad.common.util.UiUtil; -import org.jcnc.jnotepad.plugin.api.core.ui.stage.AbstractPaneStage; +import org.jcnc.jnotepad.api.core.ui.stage.AbstractPaneStage; +import org.jcnc.jnotepad.api.util.LogUtil; +import org.jcnc.jnotepad.api.util.UiUtil; import org.jcnc.jnotepad.views.manager.RootManager; import static org.jcnc.jnotepad.common.constants.AppConstants.*; diff --git a/src/main/java/org/jcnc/jnotepad/ui/setstage/SetStage.java b/src/main/java/org/jcnc/jnotepad/ui/setstage/SetStage.java index 4f1f0e5..a2656dc 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/setstage/SetStage.java +++ b/src/main/java/org/jcnc/jnotepad/ui/setstage/SetStage.java @@ -1,10 +1,7 @@ package org.jcnc.jnotepad.ui.setstage; import atlantafx.base.controls.CustomTextField; -import atlantafx.base.theme.Dracula; -import atlantafx.base.theme.PrimerDark; import atlantafx.base.theme.Styles; -import javafx.application.Application; import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.Node; @@ -17,8 +14,9 @@ import javafx.scene.layout.VBox; import javafx.scene.paint.Color; import javafx.scene.text.Font; import javafx.scene.text.Text; +import javafx.stage.Modality; import javafx.stage.Stage; -import org.jcnc.jnotepad.common.util.UiUtil; +import org.jcnc.jnotepad.api.util.UiUtil; import org.jcnc.jnotepad.plugin.PluginManagerInterface; import org.jcnc.jnotepad.ui.module.CustomSetButton; import org.jcnc.jnotepad.ui.module.SettingsComponent; @@ -71,7 +69,8 @@ public class SetStage extends Stage { Stage primaryStage = new Stage(); primaryStage.getIcons().add(UiUtil.getAppIcon()); primaryStage.setTitle("设置窗口"); - + // 将窗口设置为模态 + primaryStage.initModality(Modality.APPLICATION_MODAL); contentDisplay = new StackPane(); @@ -93,7 +92,6 @@ public class SetStage extends Stage { cancelButton.setOnAction(event -> { Stage stage = (Stage) cancelButton.getScene().getWindow(); stage.close(); - }); cancelButton.getStyleClass().addAll(Styles.SMALL); Button applicationButton = new Button(" 应用 "); diff --git a/src/main/java/org/jcnc/jnotepad/ui/setstage/pluginstage/PluginManagementPane.java b/src/main/java/org/jcnc/jnotepad/ui/setstage/pluginstage/PluginManagementPane.java index fcbc1d1..84fd1ba 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/setstage/pluginstage/PluginManagementPane.java +++ b/src/main/java/org/jcnc/jnotepad/ui/setstage/pluginstage/PluginManagementPane.java @@ -25,11 +25,11 @@ import javafx.scene.web.WebView; import javafx.stage.Stage; import org.commonmark.parser.Parser; import org.commonmark.renderer.html.HtmlRenderer; -import org.jcnc.jnotepad.common.util.LogUtil; -import org.jcnc.jnotepad.common.util.PopUpUtil; -import org.jcnc.jnotepad.common.util.UiUtil; +import org.jcnc.jnotepad.api.core.ui.stage.AbstractPaneStage; +import org.jcnc.jnotepad.api.util.LogUtil; +import org.jcnc.jnotepad.api.util.PopUpUtil; +import org.jcnc.jnotepad.api.util.UiUtil; import org.jcnc.jnotepad.model.entity.PluginDescriptor; -import org.jcnc.jnotepad.plugin.api.core.ui.stage.AbstractPaneStage; import org.jcnc.jnotepad.plugin.manager.PluginManager; import org.jcnc.jnotepad.ui.module.CustomSetButton; import org.slf4j.Logger; 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 79f0ab3..61f55e0 100644 --- a/src/main/java/org/jcnc/jnotepad/views/manager/CenterTabPaneManager.java +++ b/src/main/java/org/jcnc/jnotepad/views/manager/CenterTabPaneManager.java @@ -3,15 +3,15 @@ package org.jcnc.jnotepad.views.manager; import javafx.collections.ObservableList; import javafx.scene.control.Tab; import javafx.stage.Stage; +import org.jcnc.jnotepad.api.util.FileUtil; +import org.jcnc.jnotepad.api.util.PopUpUtil; 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.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; import org.jcnc.jnotepad.views.root.center.main.center.tab.CenterTabPane; -import org.jcnc.jnotepad.views.root.top.menu.TopMenuBar; +import org.jcnc.jnotepad.views.root.top.menubar.TopMenuBar; import java.io.File; import java.util.ArrayList; 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 468b723..61d6d79 100644 --- a/src/main/java/org/jcnc/jnotepad/views/manager/DirectorySidebarManager.java +++ b/src/main/java/org/jcnc/jnotepad/views/manager/DirectorySidebarManager.java @@ -3,9 +3,9 @@ package org.jcnc.jnotepad.views.manager; import javafx.beans.value.ChangeListener; import javafx.scene.control.SplitPane; import javafx.scene.control.TreeItem; +import org.jcnc.jnotepad.api.util.FileUtil; import org.jcnc.jnotepad.common.manager.ApplicationCacheManager; -import org.jcnc.jnotepad.common.util.FileUtil; -import org.jcnc.jnotepad.controller.event.handler.menubar.OpenDirectory; +import org.jcnc.jnotepad.controller.event.handler.menuitem.OpenDirectory; import org.jcnc.jnotepad.model.entity.DirFileModel; import org.jcnc.jnotepad.views.root.center.main.MainBorderPane; import org.jcnc.jnotepad.views.root.center.main.center.directory.DirectorySidebarPane; diff --git a/src/main/java/org/jcnc/jnotepad/views/manager/RootTopBorderPaneManager.java b/src/main/java/org/jcnc/jnotepad/views/manager/RootTopBorderPaneManager.java index 5eb6591..0d8308c 100644 --- a/src/main/java/org/jcnc/jnotepad/views/manager/RootTopBorderPaneManager.java +++ b/src/main/java/org/jcnc/jnotepad/views/manager/RootTopBorderPaneManager.java @@ -1,7 +1,7 @@ package org.jcnc.jnotepad.views.manager; import org.jcnc.jnotepad.views.root.top.RootTopBorderPane; -import org.jcnc.jnotepad.views.root.top.menu.TopMenuBar; +import org.jcnc.jnotepad.views.root.top.menubar.TopMenuBar; /** * 顶部边界面板管理类 diff --git a/src/main/java/org/jcnc/jnotepad/views/manager/SidebarToolBarManager.java b/src/main/java/org/jcnc/jnotepad/views/manager/SidebarToolBarManager.java index 5de164b..1ec053a 100644 --- a/src/main/java/org/jcnc/jnotepad/views/manager/SidebarToolBarManager.java +++ b/src/main/java/org/jcnc/jnotepad/views/manager/SidebarToolBarManager.java @@ -3,10 +3,10 @@ package org.jcnc.jnotepad.views.manager; import javafx.scene.Node; import javafx.scene.image.Image; import javafx.scene.image.ImageView; +import org.jcnc.jnotepad.api.core.views.manager.AbstractManager; +import org.jcnc.jnotepad.api.core.views.manager.builder.SideBarButtonBuilder; import org.jcnc.jnotepad.controller.event.handler.setting.DirTreeBtn; import org.jcnc.jnotepad.controller.event.handler.setting.SetBtn; -import org.jcnc.jnotepad.plugin.api.core.views.manager.AbstractManager; -import org.jcnc.jnotepad.plugin.api.core.views.manager.builder.SideBarButtonBuilder; import org.jcnc.jnotepad.views.root.left.sidebar.tools.SidebarToolBar; import java.util.ArrayList; @@ -57,8 +57,6 @@ public class SidebarToolBarManager extends AbstractManager { } - - /** * 获取节点列表 * 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 ec6038b..95de559 100644 --- a/src/main/java/org/jcnc/jnotepad/views/manager/TopMenuBarManager.java +++ b/src/main/java/org/jcnc/jnotepad/views/manager/TopMenuBarManager.java @@ -1,29 +1,20 @@ package org.jcnc.jnotepad.views.manager; -import javafx.beans.value.ChangeListener; import javafx.collections.ObservableList; -import javafx.event.ActionEvent; -import javafx.event.EventHandler; import javafx.geometry.Insets; -import javafx.scene.control.*; +import javafx.scene.control.Menu; +import javafx.scene.control.MenuItem; import javafx.scene.input.KeyCombination; -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.api.core.views.manager.AbstractManager; +import org.jcnc.jnotepad.api.util.LogUtil; 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; -import org.jcnc.jnotepad.plugin.api.core.views.manager.AbstractManager; -import org.jcnc.jnotepad.ui.setstage.HelpPaneStage; -import org.jcnc.jnotepad.ui.setstage.pluginstage.PluginManagementPane; -import org.jcnc.jnotepad.views.root.top.menu.TopMenuBar; +import org.jcnc.jnotepad.views.root.top.menubar.TopMenuBar; +import org.jcnc.jnotepad.views.root.top.menubar.menu.*; import org.slf4j.Logger; -import java.util.*; - -import static org.jcnc.jnotepad.common.constants.TextConstants.*; +import java.util.ArrayList; +import java.util.List; /** * 顶部菜单栏管理类 @@ -34,18 +25,16 @@ public class TopMenuBarManager extends AbstractManager { private static final TopMenuBarManager INSTANCE = new TopMenuBarManager(); private final TopMenuBar topMenuBar = TopMenuBar.getInstance(); private final List nodeList = new ArrayList<>(); - private final Map fileMenuItems = new HashMap<>(); - - private final Map setMenuItems = new HashMap<>(); - - private final Map pluginMenuItems = new HashMap<>(); - - private final Map helpMenuItems = new HashMap<>(); - - private final Map languageMenuItems = new HashMap<>(); Logger logger = LogUtil.getLogger(this.getClass()); UserConfigController userConfigController = UserConfigController.getInstance(); + FileTopMenu fileTopMenu = FileTopMenu.getInstance(); + LanguageTopMenu languageTopMenu = LanguageTopMenu.getInstance(); + + SettingTopMenu settingTopMenu = SettingTopMenu.getInstance(); + HelpTopMenu helpTopMenu = HelpTopMenu.getInstance(); + + PluginTopMenu pluginTopMenu = PluginTopMenu.getInstance(); private TopMenuBarManager() { } @@ -62,17 +51,15 @@ public class TopMenuBarManager extends AbstractManager { topMenuBar.setPadding(new Insets(-3, 0, -3, 0)); registerTopMenuBar(); // 初始化文件菜单 - initFileMenu(); + fileTopMenu.initMenu(); // 初始化语言菜单 - initLanguageMenu(); - // 设置当前语言选中状态 - toggleLanguageCheck(userConfigController.getLanguage()); + languageTopMenu.initMenu(); // 初始化设置菜单 - initSettingMenu(); - // 初始化设置菜单 - initHelpMenu(); + settingTopMenu.initMenu(); + // 初始化帮助菜单 + helpTopMenu.initMenu(); // 初始化插件菜单 - initPluginMenu(); + pluginTopMenu.initMenu(); // 刷新顶部菜单栏 refreshTopMenuBar(); @@ -85,188 +72,15 @@ public class TopMenuBarManager extends AbstractManager { */ public void registerTopMenuBar() { // 文件菜单 - registerFileMenuItem(topMenuBar.getNewItem(), NEW, "newItem", new NewFile()); - registerFileMenuItem(topMenuBar.getOpenItem(), OPEN, "openItem", new OpenFile()); - registerFileMenuItem(topMenuBar.getSaveItem(), SAVE, "saveItem", new SaveFile()); - registerFileMenuItem(topMenuBar.getSaveAsItem(), SAVE_AS, "saveAsItem", new SaveAsFile()); - registerFileMenuItem(topMenuBar.getRenameItem(), RENAME, "renameItem", new RenameFile()); - // 打开文件夹按钮 - registerFileMenuItem(topMenuBar.getOpenDirItem(), OPEN_DIRECTORY, "openDirItem", new OpenDirectory()); - - // 语言菜单 - registerLanguageMenuItem(topMenuBar.getChineseItem(), UPPER_CHINESE, Locale.CHINESE, this::toggleLanguage); - registerLanguageMenuItem(topMenuBar.getEnglishItem(), UPPER_ENGLISH, Locale.ENGLISH, this::toggleLanguage); - - + registerNode(fileTopMenu.getMenu()); // 设置菜单 - registerSetMenuItem(topMenuBar.getLineFeedItem(), WORD_WRAP, "lineFeedItem", (observableValue, before, after) -> { - // 1. 更新全局配置 - UserConfigController.getInstance().setAutoLineConfig(after); - // 2. 对当前tab生效配置 - CenterTabPaneManager.getInstance().fireTabSelected(); - }); - topMenuBar.getLineFeedItem().selectedProperty().set(true); - - registerSetMenuItem(topMenuBar.getTopItem(), TOP, "topItem", (observableValue, before, after) -> { - // 获取窗口容器 - Stage primaryStage = (Stage) UiUtil.getAppWindow(); - // 设置窗口为置顶 - primaryStage.setAlwaysOnTop(after); - }); - - registerSetMenuItem(topMenuBar.getOpenConfigItem(), OPEN_CONFIGURATION_FILE, "openConfigItem", new OpenConfig()); - registerSetMenuItem(topMenuBar.getLanguageMenu(), LANGUAGE, "languageMenu", actionEvent -> { - }); - - //插件菜单 - registerPluginMenuItem(topMenuBar.getPluginManagerItem(), MANAGER_PLUGIN, "pluginManagerItem", event -> new PluginManagementPane().run()); - registerPluginMenuItem(topMenuBar.getCountItem(), STATISTICS, "countItem", event -> { - }); - //帮助菜单 - registerHelpMenuItem(topMenuBar.getAboutItem(), ABOUT, "aboutItem", event -> new HelpPaneStage().run(new Stage())); - } - - - /** - * 切换语言 - * - * @param actionEvent 点击事件 - */ - private void toggleLanguage(ActionEvent actionEvent) { - if (actionEvent == null) { - return; - } - RadioMenuItem languageItem = (RadioMenuItem) actionEvent.getSource(); - if (languageItem == null) { - return; - } - LocalizationController.setCurrentLocal((Locale) languageItem.getUserData()); - } - - /** - * 设置当前语言选中状态 - * - * @param language 语言 - */ - public void toggleLanguageCheck(String language) { - languageMenuItems.forEach((k, v) -> v.setSelected(language.toUpperCase().equals(k))); - } - - /** - * 注册文件菜单项 - * - * @param menuItem 菜单项 - * @param menuItemName 菜单项名称 - * @param buttonName 按钮名称 - * @param eventHandler 操作事件 - */ - public void registerFileMenuItem(MenuItem menuItem, String menuItemName, String buttonName, EventHandler eventHandler) { - fileMenuItems.put(menuItemName, menuItem); - setMenuItem(menuItem, buttonName, eventHandler); - } - - /** - * 注册帮助菜单项 - * - * @param menuItem 菜单项 - * @param menuItemName 菜单项名称 - * @param buttonName 按钮名称 - * @param eventHandler 操作事件 - */ - public void registerHelpMenuItem(MenuItem menuItem, String menuItemName, String buttonName, EventHandler eventHandler) { - helpMenuItems.put(menuItemName, menuItem); - setMenuItem(menuItem, buttonName, eventHandler); - } - - /** - * 注册设置菜单项 - * - * @param menuItem 菜单项 - * @param menuItemName 菜单项名称 - * @param buttonName 按钮名称 - * @param eventHandler 操作事件 - */ - public void registerSetMenuItem(MenuItem menuItem, String menuItemName, String buttonName, EventHandler eventHandler) { - setMenuItems.put(menuItemName, menuItem); - setMenuItem(menuItem, buttonName, eventHandler); - } - - /** - * 注册设置菜单项 - * - * @param checkMenuItem 检查菜单项 - * @param menuItemName 菜单项名称 - * @param buttonName 按钮名称 - * @param listener 监听事件 - */ - - public void registerSetMenuItem(CheckMenuItem checkMenuItem, String menuItemName, String buttonName, ChangeListener listener) { - setMenuItems.put(menuItemName, checkMenuItem); - setCheckMenuItem(checkMenuItem, buttonName, listener); - } - - /** - * 注册语言菜单 - * - * @param radioMenuItem 单选菜单项 - * @param menuItemName 菜单项名称 - * @param locale 语言 - * @param eventHandler 操作事件 - */ - - public void registerLanguageMenuItem(RadioMenuItem radioMenuItem, String menuItemName, Locale locale, EventHandler eventHandler) { - languageMenuItems.put(menuItemName, radioMenuItem); - setRadioMenuItem(radioMenuItem, locale, eventHandler); - } - - /** - * 注册插件菜单 - * - * @param menuItem 菜单项 - * @param menuItemName 菜单项名称 - * @param buttonName 按钮名称 - * @param eventHandler 操作事件 - */ - public void registerPluginMenuItem(MenuItem menuItem, String menuItemName, String buttonName, EventHandler eventHandler) { - pluginMenuItems.put(menuItemName, menuItem); - setMenuItem(menuItem, buttonName, eventHandler); - } - - /** - * 注册菜单项 - * - * @param menuItem 菜单项 - * @param buttonName 按钮名称 - * @param eventHandler 操作事件 - */ - private void setMenuItem(MenuItem menuItem, String buttonName, EventHandler eventHandler) { - menuItem.setUserData(buttonName); - menuItem.setOnAction(eventHandler); - } - - /** - * 注册单选菜单项 - * - * @param radioMenuItem 单选菜单项 - * @param locale 语言 - * @param eventHandler 操作事件 - */ - private void setRadioMenuItem(RadioMenuItem radioMenuItem, Locale locale, EventHandler eventHandler) { - radioMenuItem.setUserData(locale); - radioMenuItem.setOnAction(eventHandler); + registerNode(topMenuBar.getSetMenu()); + // 帮助菜单 + registerNode(helpTopMenu.getMenu()); + // 插件菜单 + registerNode(topMenuBar.getPluginMenu()); } - /** - * 注册检查菜单项 - * - * @param checkMenuItem 检查菜单项 - * @param buttonName 按钮名称 - * @param listener 监听事件 - */ - private void setCheckMenuItem(CheckMenuItem checkMenuItem, String buttonName, ChangeListener listener) { - checkMenuItem.setUserData(buttonName); - checkMenuItem.selectedProperty().addListener(listener); - } /** * 初始化快捷键 @@ -276,7 +90,7 @@ public class TopMenuBarManager extends AbstractManager { List shortcutKeyConfigs = userConfigController.getShortcutKey(); for (ShortcutKey shortcutKey : shortcutKeyConfigs) { // 保证json的key必须和变量名一致 - MenuItem menuItem = topMenuBar.getItemMap().get(shortcutKey.getButtonName()); + MenuItem menuItem = topMenuBar.getAllItemMap().get(shortcutKey.getButtonName()); String shortKeyValue = shortcutKey.getShortcutKeyValue(); if ("".equals(shortKeyValue) && menuItem != null) { itemsToUnbind.add(menuItem); @@ -293,7 +107,7 @@ public class TopMenuBarManager extends AbstractManager { } /** - * 初始化顶部菜单 + * 刷新顶部菜单 */ private void refreshTopMenuBar() { ObservableList menus = topMenuBar.getMenus(); @@ -301,86 +115,6 @@ public class TopMenuBarManager extends AbstractManager { menus.addAll(nodeList); } - /** - * 初始化插件菜单 - */ - private void initPluginMenu() { - logger.info("初始化插件菜单!"); - var pluginMenu = topMenuBar.getPluginMenu(); - // 插件菜单 - UiResourceBundle.bindStringProperty(pluginMenu.textProperty(), PLUGIN); - initMenuItems(pluginMenuItems, pluginMenu); - } - - /** - * 初始化插件菜单 - */ - private void initHelpMenu() { - logger.info("初始化帮助菜单!"); - var helpMenu = topMenuBar.getHelpMenu(); - // 插件菜单 - UiResourceBundle.bindStringProperty(helpMenu.textProperty(), HELP); - - initMenuItems(helpMenuItems, helpMenu); - } - - /** - * 初始化设置菜单 - */ - private void initSettingMenu() { - logger.info("初始化设置菜单!"); - var setMenu = topMenuBar.getSetMenu(); - // 设置菜单 - UiResourceBundle.bindStringProperty(setMenu.textProperty(), SET); - // 初始化菜单项 - initMenuItems(setMenuItems, setMenu); - } - - /** - * 初始化语言菜单 - */ - private void initLanguageMenu() { - logger.info("初始化语言菜单!"); - // 语言菜单 - ToggleGroup languageToggleGroup = new ToggleGroup(); - var itemMap = topMenuBar.getItemMap(); - languageMenuItems.forEach((key, value) -> { - UiResourceBundle.bindStringProperty(value.textProperty(), key); - itemMap.put(key, value); - languageToggleGroup.getToggles().add(value); - topMenuBar.getLanguageMenu().getItems().add(value); - }); - } - - /** - * 初始化文件菜单 - */ - private void initFileMenu() { - logger.info("初始化文件菜单!"); - Menu fileMenu = topMenuBar.getFileMenu(); - // 文件菜单 - UiResourceBundle.bindStringProperty(fileMenu.textProperty(), FILE); - // 初始化菜单项 - initMenuItems(fileMenuItems, fileMenu); - } - - /** - * 初始化菜单项 - * - * @param menuItems 菜单项集合 - * @param menu 菜单 - */ - - private void initMenuItems(Map menuItems, Menu menu) { - var itemMap = topMenuBar.getItemMap(); - menuItems.forEach((key, value) -> { - UiResourceBundle.bindStringProperty(value.textProperty(), key); - itemMap.put((String) value.getUserData(), value); - menu.getItems().add(value); - }); - registerNode(menu); - } - /** * 获取节点列表 * diff --git a/src/main/java/org/jcnc/jnotepad/views/root/center/main/center/directory/DirectorySidebarPane.java b/src/main/java/org/jcnc/jnotepad/views/root/center/main/center/directory/DirectorySidebarPane.java index fec7434..9df82d8 100644 --- a/src/main/java/org/jcnc/jnotepad/views/root/center/main/center/directory/DirectorySidebarPane.java +++ b/src/main/java/org/jcnc/jnotepad/views/root/center/main/center/directory/DirectorySidebarPane.java @@ -2,7 +2,7 @@ package org.jcnc.jnotepad.views.root.center.main.center.directory; import javafx.scene.control.TreeItem; import javafx.scene.control.TreeView; -import org.jcnc.jnotepad.controller.event.handler.menubar.OpenFile; +import org.jcnc.jnotepad.controller.event.handler.menuitem.OpenFile; import org.jcnc.jnotepad.model.entity.DirFileModel; import java.io.File; 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 e7b7b72..f50359d 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 @@ -2,7 +2,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.api.util.LogUtil; import org.jcnc.jnotepad.controller.config.UserConfigController; import org.jcnc.jnotepad.ui.module.LineNumberTextArea; import org.jcnc.jnotepad.views.manager.BottomStatusBoxManager; diff --git a/src/main/java/org/jcnc/jnotepad/views/root/top/menu/TopMenuBar.java b/src/main/java/org/jcnc/jnotepad/views/root/top/menubar/TopMenuBar.java similarity index 95% rename from src/main/java/org/jcnc/jnotepad/views/root/top/menu/TopMenuBar.java rename to src/main/java/org/jcnc/jnotepad/views/root/top/menubar/TopMenuBar.java index c1a8d92..d3b1723 100644 --- a/src/main/java/org/jcnc/jnotepad/views/root/top/menu/TopMenuBar.java +++ b/src/main/java/org/jcnc/jnotepad/views/root/top/menubar/TopMenuBar.java @@ -1,4 +1,4 @@ -package org.jcnc.jnotepad.views.root.top.menu; +package org.jcnc.jnotepad.views.root.top.menubar; import javafx.scene.control.*; import org.jcnc.jnotepad.views.manager.CenterTabPaneManager; @@ -18,7 +18,7 @@ public class TopMenuBar extends MenuBar { /** * 按钮集合 */ - private final Map itemMap = new HashMap<>(); + private final Map allItemMap = new HashMap<>(); /** * 标签页布局组件封装。 */ @@ -145,8 +145,8 @@ public class TopMenuBar extends MenuBar { return languageMenu; } - public Map getItemMap() { - return itemMap; + public Map getAllItemMap() { + return allItemMap; } public MenuItem getNewItem() { diff --git a/src/main/java/org/jcnc/jnotepad/views/root/top/menubar/menu/FileTopMenu.java b/src/main/java/org/jcnc/jnotepad/views/root/top/menubar/menu/FileTopMenu.java new file mode 100644 index 0000000..eeabecc --- /dev/null +++ b/src/main/java/org/jcnc/jnotepad/views/root/top/menubar/menu/FileTopMenu.java @@ -0,0 +1,71 @@ +package org.jcnc.jnotepad.views.root.top.menubar.menu; + +import javafx.scene.control.Menu; +import javafx.scene.control.MenuItem; +import org.jcnc.jnotepad.api.core.views.top.menu.AbstractTopMenu; +import org.jcnc.jnotepad.controller.event.handler.menuitem.*; + +import java.util.HashMap; +import java.util.Map; + +import static org.jcnc.jnotepad.common.constants.TextConstants.*; + +/** + * 文件菜单 + * + * @author gewuyou + */ +public class FileTopMenu extends AbstractTopMenu { + private static final FileTopMenu INSTANCE = new FileTopMenu(); + private final Map fileMenuItems = new HashMap<>(); + + public static FileTopMenu getInstance() { + return INSTANCE; + } + + /** + * 获取菜单名称 + * + * @return 菜单名称 + */ + @Override + public String getMenuName() { + return FILE; + } + + /** + * 获取菜单 + * + * @return 菜单 + */ + @Override + public Menu getMenu() { + return topMenuBar.getFileMenu(); + } + + /** + * 获取菜单项集合 + * + * @return 菜单项集合 + */ + @Override + public Map getMenuItems() { + return fileMenuItems; + } + + + /** + * 注册顶部菜单 + */ + @Override + protected void registerTopMenu() { + // 文件菜单 + registerMenuItem(topMenuBar.getNewItem(), NEW, "newItem", new NewFile()); + registerMenuItem(topMenuBar.getOpenItem(), OPEN, "openItem", new OpenFile()); + registerMenuItem(topMenuBar.getSaveItem(), SAVE, "saveItem", new SaveFile()); + registerMenuItem(topMenuBar.getSaveAsItem(), SAVE_AS, "saveAsItem", new SaveAsFile()); + registerMenuItem(topMenuBar.getRenameItem(), RENAME, "renameItem", new RenameFile()); + // 打开文件夹按钮 + registerMenuItem(topMenuBar.getOpenDirItem(), OPEN_DIRECTORY, "openDirItem", new OpenDirectory()); + } +} diff --git a/src/main/java/org/jcnc/jnotepad/views/root/top/menubar/menu/HelpTopMenu.java b/src/main/java/org/jcnc/jnotepad/views/root/top/menubar/menu/HelpTopMenu.java new file mode 100644 index 0000000..2d9b728 --- /dev/null +++ b/src/main/java/org/jcnc/jnotepad/views/root/top/menubar/menu/HelpTopMenu.java @@ -0,0 +1,68 @@ +package org.jcnc.jnotepad.views.root.top.menubar.menu; + +import javafx.scene.control.Menu; +import javafx.scene.control.MenuItem; +import javafx.stage.Stage; +import org.jcnc.jnotepad.api.core.views.top.menu.AbstractTopMenu; +import org.jcnc.jnotepad.ui.setstage.HelpPaneStage; + +import java.util.HashMap; +import java.util.Map; + +import static org.jcnc.jnotepad.common.constants.TextConstants.ABOUT; +import static org.jcnc.jnotepad.common.constants.TextConstants.HELP; + +/** + * 帮助菜单 + * + * @author gewuyou + */ +public class HelpTopMenu extends AbstractTopMenu { + + private static final HelpTopMenu INSTANCE = new HelpTopMenu(); + + private final Map helpMenuItems = new HashMap<>(); + + public static HelpTopMenu getInstance() { + return INSTANCE; + } + + + /** + * 获取菜单名称 + * + * @return 菜单名称 + */ + @Override + public String getMenuName() { + return HELP; + } + + /** + * 获取菜单 + * + * @return 菜单 + */ + @Override + public Menu getMenu() { + return topMenuBar.getHelpMenu(); + } + + /** + * 获取菜单项集合 + * + * @return 菜单项集合 + */ + @Override + public Map getMenuItems() { + return helpMenuItems; + } + + /** + * 注册顶部菜单 + */ + @Override + protected void registerTopMenu() { + registerMenuItem(topMenuBar.getAboutItem(), ABOUT, "aboutItem", event -> new HelpPaneStage().run(new Stage())); + } +} diff --git a/src/main/java/org/jcnc/jnotepad/views/root/top/menubar/menu/LanguageTopMenu.java b/src/main/java/org/jcnc/jnotepad/views/root/top/menubar/menu/LanguageTopMenu.java new file mode 100644 index 0000000..98e0b60 --- /dev/null +++ b/src/main/java/org/jcnc/jnotepad/views/root/top/menubar/menu/LanguageTopMenu.java @@ -0,0 +1,123 @@ +package org.jcnc.jnotepad.views.root.top.menubar.menu; + +import javafx.event.ActionEvent; +import javafx.scene.control.Menu; +import javafx.scene.control.MenuItem; +import javafx.scene.control.RadioMenuItem; +import javafx.scene.control.ToggleGroup; +import org.jcnc.jnotepad.api.core.views.top.menu.AbstractTopMenu; +import org.jcnc.jnotepad.app.i18n.UiResourceBundle; +import org.jcnc.jnotepad.controller.config.UserConfigController; +import org.jcnc.jnotepad.controller.i18n.LocalizationController; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; + +import static org.jcnc.jnotepad.common.constants.TextConstants.*; + +/** + * 语言顶部菜单 + * + * @author gewuyou + */ +public class LanguageTopMenu extends AbstractTopMenu { + + private static final LanguageTopMenu INSTANCE = new LanguageTopMenu(); + + private final Map languageMenuItems = new HashMap<>(); + + UserConfigController userConfigController = UserConfigController.getInstance(); + + public static LanguageTopMenu getInstance() { + return INSTANCE; + } + + /** + * 获取菜单名称 + * + * @return 菜单名称 + */ + @Override + public String getMenuName() { + return LANGUAGE; + } + + /** + * 获取菜单 + * + * @return 菜单 + */ + @Override + public Menu getMenu() { + return topMenuBar.getLanguageMenu(); + } + + /** + * 获取菜单项集合 + * + * @return 菜单项集合 + */ + @Override + public Map getMenuItems() { + return Collections.emptyMap(); + } + + /** + * 初始化菜单栏 + */ + @Override + public void initMenu() { + registerTopMenu(); + logger.info("初始化语言菜单!"); + // 语言菜单 + ToggleGroup languageToggleGroup = new ToggleGroup(); + var itemMap = topMenuBar.getAllItemMap(); + languageMenuItems.forEach((key, value) -> { + UiResourceBundle.bindStringProperty(value.textProperty(), key); + itemMap.put(key, value); + languageToggleGroup.getToggles().add(value); + topMenuBar.getLanguageMenu().getItems().add(value); + }); + // 设置当前语言选中状态 + toggleLanguageCheck(userConfigController.getLanguage()); + } + + + /** + * 注册顶部菜单 + * + * @apiNote 此方法 + */ + @Override + protected void registerTopMenu() { + registerRadioMenuItem(languageMenuItems, topMenuBar.getChineseItem(), UPPER_CHINESE, Locale.CHINESE, this::toggleLanguage); + registerRadioMenuItem(languageMenuItems, topMenuBar.getEnglishItem(), UPPER_ENGLISH, Locale.ENGLISH, this::toggleLanguage); + } + + /** + * 设置当前语言选中状态 + * + * @param language 语言 + */ + private void toggleLanguageCheck(String language) { + languageMenuItems.forEach((k, v) -> v.setSelected(language.toUpperCase().equals(k))); + } + + /** + * 切换语言 + * + * @param actionEvent 点击事件 + */ + private void toggleLanguage(ActionEvent actionEvent) { + if (actionEvent == null) { + return; + } + RadioMenuItem languageItem = (RadioMenuItem) actionEvent.getSource(); + if (languageItem == null) { + return; + } + LocalizationController.setCurrentLocal((Locale) languageItem.getUserData()); + } +} diff --git a/src/main/java/org/jcnc/jnotepad/views/root/top/menubar/menu/PluginTopMenu.java b/src/main/java/org/jcnc/jnotepad/views/root/top/menubar/menu/PluginTopMenu.java new file mode 100644 index 0000000..d2ec180 --- /dev/null +++ b/src/main/java/org/jcnc/jnotepad/views/root/top/menubar/menu/PluginTopMenu.java @@ -0,0 +1,68 @@ +package org.jcnc.jnotepad.views.root.top.menubar.menu; + +import javafx.scene.control.Menu; +import javafx.scene.control.MenuItem; +import org.jcnc.jnotepad.api.core.views.top.menu.AbstractTopMenu; +import org.jcnc.jnotepad.ui.setstage.pluginstage.PluginManagementPane; + +import java.util.HashMap; +import java.util.Map; + +import static org.jcnc.jnotepad.common.constants.TextConstants.*; + +/** + * 插件菜单 + * + * @author gewuyou + */ +public class PluginTopMenu extends AbstractTopMenu { + + private static final PluginTopMenu INSTANCE = new PluginTopMenu(); + + private final Map pluginMenuItems = new HashMap<>(); + + public static PluginTopMenu getInstance() { + return INSTANCE; + } + + + /** + * 获取菜单名称 + * + * @return 菜单名称 + */ + @Override + public String getMenuName() { + return PLUGIN; + } + + /** + * 获取菜单 + * + * @return 菜单 + */ + @Override + public Menu getMenu() { + return topMenuBar.getPluginMenu(); + } + + /** + * 获取菜单项集合 + * + * @return 菜单项集合 + */ + @Override + public Map getMenuItems() { + return pluginMenuItems; + } + + /** + * 注册顶部菜单 + */ + @Override + protected void registerTopMenu() { + registerMenuItem(topMenuBar.getPluginManagerItem(), MANAGER_PLUGIN, "pluginManagerItem", event -> new PluginManagementPane().run()); + registerMenuItem(topMenuBar.getCountItem(), STATISTICS, "countItem", event -> { + }); + } +} diff --git a/src/main/java/org/jcnc/jnotepad/views/root/top/menubar/menu/SettingTopMenu.java b/src/main/java/org/jcnc/jnotepad/views/root/top/menubar/menu/SettingTopMenu.java new file mode 100644 index 0000000..9282707 --- /dev/null +++ b/src/main/java/org/jcnc/jnotepad/views/root/top/menubar/menu/SettingTopMenu.java @@ -0,0 +1,87 @@ +package org.jcnc.jnotepad.views.root.top.menubar.menu; + +import javafx.scene.control.Menu; +import javafx.scene.control.MenuItem; +import javafx.stage.Stage; +import org.jcnc.jnotepad.api.core.views.top.menu.AbstractTopMenu; +import org.jcnc.jnotepad.api.util.UiUtil; +import org.jcnc.jnotepad.controller.config.UserConfigController; +import org.jcnc.jnotepad.controller.event.handler.menuitem.OpenConfig; +import org.jcnc.jnotepad.views.manager.CenterTabPaneManager; + +import java.util.HashMap; +import java.util.Map; + +import static org.jcnc.jnotepad.common.constants.TextConstants.*; + +/** + * 设置菜单 + * + * @author gewuyou + */ +public class SettingTopMenu extends AbstractTopMenu { + + private static final SettingTopMenu INSTANCE = new SettingTopMenu(); + private final Map setMenuItems = new HashMap<>(); + + public static SettingTopMenu getInstance() { + return INSTANCE; + } + + /** + * 获取菜单名称 + * + * @return 菜单名称 + */ + @Override + public String getMenuName() { + return SET; + } + + /** + * 获取菜单 + * + * @return 菜单 + */ + @Override + public Menu getMenu() { + return topMenuBar.getSetMenu(); + } + + /** + * 获取菜单项集合 + * + * @return 菜单项集合 + */ + @Override + public Map getMenuItems() { + return setMenuItems; + } + + /** + * 注册顶部菜单 + * + * @apiNote 此方法 + */ + @Override + protected void registerTopMenu() { + registerMenuItem(topMenuBar.getLineFeedItem(), WORD_WRAP, "lineFeedItem", (observableValue, before, after) -> { + // 1. 更新全局配置 + UserConfigController.getInstance().setAutoLineConfig(after); + // 2. 对当前tab生效配置 + CenterTabPaneManager.getInstance().fireTabSelected(); + }); + topMenuBar.getLineFeedItem().selectedProperty().set(true); + + registerMenuItem(topMenuBar.getTopItem(), TOP, "topItem", (observableValue, before, after) -> { + // 获取窗口容器 + Stage primaryStage = (Stage) UiUtil.getAppWindow(); + // 设置窗口为置顶 + primaryStage.setAlwaysOnTop(after); + }); + + registerMenuItem(topMenuBar.getOpenConfigItem(), OPEN_CONFIGURATION_FILE, "openConfigItem", new OpenConfig()); + registerMenuItem(topMenuBar.getLanguageMenu(), LANGUAGE, "languageMenu", actionEvent -> { + }); + } +} -- Gitee