From 8a94fb67ec0c3dc79ad5e3ee2f6bbfec9c14d0ca Mon Sep 17 00:00:00 2001 From: gewuyou <1063891901@qq.com> Date: Tue, 3 Oct 2023 13:07:21 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=F0=9F=9A=A9=20=E4=B8=BA=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E6=A0=91=E6=B7=BB=E5=8A=A0=E5=9B=BE=E6=A0=87=EF=BC=8C=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E9=A1=B9=E7=9B=AE=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/module-info.java | 3 +- src/main/java/org/jcnc/jnotepad/LunchApp.java | 2 +- .../app/manager/ApplicationManager.java | 27 +++++++++++++++- .../app/util/ApplicationRestarter.java | 32 ------------------- .../manager/ApplicationCacheManager.java | 2 ++ .../jcnc/jnotepad/common/util/FileUtil.java | 7 ++-- .../config/AppConfigController.java | 1 + .../config/PluginConfigController.java | 1 + .../jnotepad/model/entity/DirFileModel.java | 28 +++++++++++++++- .../config/BaseConfigController.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 +- .../plugin/manager/PluginManager.java | 4 +-- .../ui/setstage/DeveloperDebugStage.java | 4 +-- .../jnotepad/ui/setstage/HelpPaneStage.java | 1 + .../pluginstage/PluginManagementPane.java | 2 +- .../manager/DirectorySidebarManager.java | 27 +++++++++++++--- .../views/manager/SidebarToolBarManager.java | 3 +- .../views/manager/TopMenuBarManager.java | 2 +- .../directory/DirectorySidebarPane.java | 29 ++++++++--------- 23 files changed, 116 insertions(+), 71 deletions(-) delete mode 100644 src/main/java/org/jcnc/jnotepad/app/util/ApplicationRestarter.java rename src/main/java/org/jcnc/jnotepad/{ => plugin/api/core}/controller/config/BaseConfigController.java (98%) rename src/main/java/org/jcnc/jnotepad/{common => plugin/api/core}/manager/AbstractCacheManager.java (98%) rename src/main/java/org/jcnc/jnotepad/{ui/setstage => 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/{views/root/bottom/function/interfaces => plugin/api/core/views/sidebar/bottom}/AbstractFunctionChildrenBox.java (93%) diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index 353c159..0216e6e 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -35,12 +35,13 @@ module org.jcnc.jnotepad { opens org.jcnc.jnotepad.app.config; exports org.jcnc.jnotepad.plugin.interfaces; exports org.jcnc.jnotepad.views.root.bottom.function; - exports org.jcnc.jnotepad.views.root.bottom.function.interfaces; exports org.jcnc.jnotepad.ui.dialog; exports org.jcnc.jnotepad.ui.dialog.interfaces; exports org.jcnc.jnotepad.ui.module; 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; } \ 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 4a48cf2..fde6cc0 100644 --- a/src/main/java/org/jcnc/jnotepad/LunchApp.java +++ b/src/main/java/org/jcnc/jnotepad/LunchApp.java @@ -36,7 +36,7 @@ public class LunchApp extends Application { // 初始化应用程序 APPLICATION_MANAGER.initializeApp(); // 初始化默认操作 - APPLICATION_MANAGER.initializeDefaultAction(); + APPLICATION_MANAGER.executeDefaultAction(); primaryStage.show(); } 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 af1eff1..ecbf91e 100644 --- a/src/main/java/org/jcnc/jnotepad/app/manager/ApplicationManager.java +++ b/src/main/java/org/jcnc/jnotepad/app/manager/ApplicationManager.java @@ -7,10 +7,12 @@ import javafx.scene.Scene; import javafx.scene.layout.Pane; import javafx.stage.Stage; import javafx.stage.Window; +import org.jcnc.jnotepad.LunchApp; 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; @@ -20,6 +22,7 @@ import org.jcnc.jnotepad.controller.manager.Controller; import org.jcnc.jnotepad.plugin.manager.PluginManager; import org.jcnc.jnotepad.views.manager.*; +import java.io.IOException; import java.util.List; import java.util.Objects; import java.util.concurrent.ExecutorService; @@ -77,7 +80,10 @@ public class ApplicationManager { initPrimaryStage(); } - public void initializeDefaultAction() { + /** + * 执行默认操作 + */ + public void executeDefaultAction() { // 使用加载关联文件并创建文本区域 List rawParameters = application.getParameters().getRaw(); Controller.getInstance().openAssociatedFileAndCreateTextArea(rawParameters); @@ -192,6 +198,25 @@ public class ApplicationManager { } + public void restart() { + try { + // 获取当前Java应用程序的命令 + String javaCommand = System.getProperty("java.home") + "/bin/java"; + String mainClass = LunchApp.class.getName(); + + // 构建新进程来重新启动应用程序 + ProcessBuilder builder = new ProcessBuilder(javaCommand, "-cp", System.getProperty("java.class.path"), mainClass); + builder.start(); + + // 关闭当前应用程序 + System.exit(0); + } catch (IOException e) { + LogUtil.getLogger("正在重启当前应用程序".getClass()); + + } + } + + public Pane getRoot() { return root; } diff --git a/src/main/java/org/jcnc/jnotepad/app/util/ApplicationRestarter.java b/src/main/java/org/jcnc/jnotepad/app/util/ApplicationRestarter.java deleted file mode 100644 index 736b198..0000000 --- a/src/main/java/org/jcnc/jnotepad/app/util/ApplicationRestarter.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.jcnc.jnotepad.app.util; - -import org.jcnc.jnotepad.LunchApp; -import org.jcnc.jnotepad.common.util.LogUtil; - -import java.io.IOException; - -/** - * @author luke - */ -public class ApplicationRestarter { - private ApplicationRestarter() { - } - - public static void restart() { - try { - // 获取当前Java应用程序的命令 - String javaCommand = System.getProperty("java.home") + "/bin/java"; - String mainClass = LunchApp.class.getName(); - - // 构建新进程来重新启动应用程序 - ProcessBuilder builder = new ProcessBuilder(javaCommand, "-cp", System.getProperty("java.class.path"), mainClass); - builder.start(); - - // 关闭当前应用程序 - System.exit(0); - } catch (IOException e) { - LogUtil.getLogger("正在重启当前应用程序".getClass()); - - } - } -} 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 69282b0..f509922 100644 --- a/src/main/java/org/jcnc/jnotepad/common/manager/ApplicationCacheManager.java +++ b/src/main/java/org/jcnc/jnotepad/common/manager/ApplicationCacheManager.java @@ -1,5 +1,7 @@ package org.jcnc.jnotepad.common.manager; +import org.jcnc.jnotepad.plugin.api.core.manager.AbstractCacheManager; + /** * 应用程序缓存管理类 * diff --git a/src/main/java/org/jcnc/jnotepad/common/util/FileUtil.java b/src/main/java/org/jcnc/jnotepad/common/util/FileUtil.java index 63cac97..ac45805 100644 --- a/src/main/java/org/jcnc/jnotepad/common/util/FileUtil.java +++ b/src/main/java/org/jcnc/jnotepad/common/util/FileUtil.java @@ -3,6 +3,7 @@ package org.jcnc.jnotepad.common.util; import org.jcnc.jnotepad.controller.event.handler.menubar.OpenFile; import org.jcnc.jnotepad.exception.AppException; import org.jcnc.jnotepad.model.entity.DirFileModel; +import org.kordamp.ikonli.javafx.FontIcon; import java.io.*; import java.nio.ByteBuffer; @@ -13,6 +14,8 @@ import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.ArrayList; +import static org.kordamp.ikonli.antdesignicons.AntDesignIconsFilled.*; + /** * 文件工具 * @@ -140,7 +143,7 @@ public class FileUtil { return null; } - DirFileModel dirFileModel = new DirFileModel(file.getAbsolutePath(), file.getName(), new ArrayList<>()); + DirFileModel dirFileModel = new DirFileModel(file.getAbsolutePath(), file.getName(), new ArrayList<>(), new FontIcon(FOLDER), new FontIcon(FOLDER_OPEN)); File[] files = file.listFiles(); if (files != null) { @@ -149,7 +152,7 @@ public class FileUtil { DirFileModel childDirFileModel = getDirFileModel(f); dirFileModel.getChildFile().add(childDirFileModel); } else { - dirFileModel.getChildFile().add(new DirFileModel(f.getAbsolutePath(), f.getName(), null)); + dirFileModel.getChildFile().add(new DirFileModel(f.getAbsolutePath(), f.getName(), null, new FontIcon(FILE), new FontIcon(FILE))); } } } 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 466af46..ccabd1f 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/config/AppConfigController.java +++ b/src/main/java/org/jcnc/jnotepad/controller/config/AppConfigController.java @@ -2,6 +2,7 @@ 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; 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 d26531a..c85a27b 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/config/PluginConfigController.java +++ b/src/main/java/org/jcnc/jnotepad/controller/config/PluginConfigController.java @@ -1,6 +1,7 @@ package org.jcnc.jnotepad.controller.config; 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/model/entity/DirFileModel.java b/src/main/java/org/jcnc/jnotepad/model/entity/DirFileModel.java index e67c6bf..42f4e39 100644 --- a/src/main/java/org/jcnc/jnotepad/model/entity/DirFileModel.java +++ b/src/main/java/org/jcnc/jnotepad/model/entity/DirFileModel.java @@ -1,5 +1,7 @@ package org.jcnc.jnotepad.model.entity; +import org.kordamp.ikonli.javafx.FontIcon; + import java.util.List; /** @@ -11,14 +13,22 @@ public class DirFileModel { private String path; private String name; + private FontIcon iconIsNotSelected; + + private FontIcon iconIsSelected; + private List childFile; - public DirFileModel(String path, String name, List childFile) { + + public DirFileModel(String path, String name, List childFile, FontIcon iconIsNotSelected, FontIcon iconIsSelected) { this.path = path; this.name = name; this.childFile = childFile; + this.iconIsNotSelected = iconIsNotSelected; + this.iconIsSelected = iconIsSelected; } + public List getChildFile() { return childFile; } @@ -47,4 +57,20 @@ public class DirFileModel { public String toString() { return name; } + + public FontIcon getIconIsNotSelected() { + return iconIsNotSelected; + } + + public void setIconIsNotSelected(FontIcon iconIsNotSelected) { + this.iconIsNotSelected = iconIsNotSelected; + } + + public FontIcon getIconIsSelected() { + return iconIsSelected; + } + + public void setIconIsSelected(FontIcon iconIsSelected) { + this.iconIsSelected = iconIsSelected; + } } \ No newline at end of file diff --git a/src/main/java/org/jcnc/jnotepad/controller/config/BaseConfigController.java b/src/main/java/org/jcnc/jnotepad/plugin/api/core/controller/config/BaseConfigController.java similarity index 98% rename from src/main/java/org/jcnc/jnotepad/controller/config/BaseConfigController.java rename to src/main/java/org/jcnc/jnotepad/plugin/api/core/controller/config/BaseConfigController.java index b640d96..7a2bd38 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/config/BaseConfigController.java +++ b/src/main/java/org/jcnc/jnotepad/plugin/api/core/controller/config/BaseConfigController.java @@ -1,4 +1,4 @@ -package org.jcnc.jnotepad.controller.config; +package org.jcnc.jnotepad.plugin.api.core.controller.config; import org.jcnc.jnotepad.common.util.JsonUtil; import org.jcnc.jnotepad.common.util.LogUtil; diff --git a/src/main/java/org/jcnc/jnotepad/common/manager/AbstractCacheManager.java b/src/main/java/org/jcnc/jnotepad/plugin/api/core/manager/AbstractCacheManager.java similarity index 98% rename from src/main/java/org/jcnc/jnotepad/common/manager/AbstractCacheManager.java rename to src/main/java/org/jcnc/jnotepad/plugin/api/core/manager/AbstractCacheManager.java index 5c176c6..f9ea8b8 100644 --- a/src/main/java/org/jcnc/jnotepad/common/manager/AbstractCacheManager.java +++ b/src/main/java/org/jcnc/jnotepad/plugin/api/core/manager/AbstractCacheManager.java @@ -1,4 +1,4 @@ -package org.jcnc.jnotepad.common.manager; +package org.jcnc.jnotepad.plugin.api.core.manager; import org.jcnc.jnotepad.model.entity.Cache; diff --git a/src/main/java/org/jcnc/jnotepad/ui/setstage/AbstractPaneStage.java b/src/main/java/org/jcnc/jnotepad/plugin/api/core/ui/stage/AbstractPaneStage.java similarity index 95% rename from src/main/java/org/jcnc/jnotepad/ui/setstage/AbstractPaneStage.java rename to src/main/java/org/jcnc/jnotepad/plugin/api/core/ui/stage/AbstractPaneStage.java index 17291a8..c20bc13 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/setstage/AbstractPaneStage.java +++ b/src/main/java/org/jcnc/jnotepad/plugin/api/core/ui/stage/AbstractPaneStage.java @@ -1,4 +1,4 @@ -package org.jcnc.jnotepad.ui.setstage; +package org.jcnc.jnotepad.plugin.api.core.ui.stage; import javafx.scene.Scene; import javafx.scene.image.Image; diff --git a/src/main/java/org/jcnc/jnotepad/views/manager/AbstractManager.java b/src/main/java/org/jcnc/jnotepad/plugin/api/core/views/manager/AbstractManager.java similarity index 84% rename from src/main/java/org/jcnc/jnotepad/views/manager/AbstractManager.java rename to src/main/java/org/jcnc/jnotepad/plugin/api/core/views/manager/AbstractManager.java index 5237106..136db38 100644 --- a/src/main/java/org/jcnc/jnotepad/views/manager/AbstractManager.java +++ b/src/main/java/org/jcnc/jnotepad/plugin/api/core/views/manager/AbstractManager.java @@ -1,4 +1,4 @@ -package org.jcnc.jnotepad.views.manager; +package org.jcnc.jnotepad.plugin.api.core.views.manager; import java.util.List; diff --git a/src/main/java/org/jcnc/jnotepad/views/manager/builder/SideBarButtonBuilder.java b/src/main/java/org/jcnc/jnotepad/plugin/api/core/views/manager/builder/SideBarButtonBuilder.java similarity index 97% rename from src/main/java/org/jcnc/jnotepad/views/manager/builder/SideBarButtonBuilder.java rename to src/main/java/org/jcnc/jnotepad/plugin/api/core/views/manager/builder/SideBarButtonBuilder.java index 75747f0..bf0160e 100644 --- a/src/main/java/org/jcnc/jnotepad/views/manager/builder/SideBarButtonBuilder.java +++ b/src/main/java/org/jcnc/jnotepad/plugin/api/core/views/manager/builder/SideBarButtonBuilder.java @@ -1,4 +1,4 @@ -package org.jcnc.jnotepad.views.manager.builder; +package org.jcnc.jnotepad.plugin.api.core.views.manager.builder; import javafx.event.ActionEvent; import javafx.event.EventHandler; diff --git a/src/main/java/org/jcnc/jnotepad/views/root/bottom/function/interfaces/AbstractFunctionChildrenBox.java b/src/main/java/org/jcnc/jnotepad/plugin/api/core/views/sidebar/bottom/AbstractFunctionChildrenBox.java similarity index 93% rename from src/main/java/org/jcnc/jnotepad/views/root/bottom/function/interfaces/AbstractFunctionChildrenBox.java rename to src/main/java/org/jcnc/jnotepad/plugin/api/core/views/sidebar/bottom/AbstractFunctionChildrenBox.java index 785c429..eac456b 100644 --- a/src/main/java/org/jcnc/jnotepad/views/root/bottom/function/interfaces/AbstractFunctionChildrenBox.java +++ b/src/main/java/org/jcnc/jnotepad/plugin/api/core/views/sidebar/bottom/AbstractFunctionChildrenBox.java @@ -1,4 +1,4 @@ -package org.jcnc.jnotepad.views.root.bottom.function.interfaces; +package org.jcnc.jnotepad.plugin.api.core.views.sidebar.bottom; import javafx.scene.control.Label; import javafx.scene.control.Menu; 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 771f6db..2b60291 100644 --- a/src/main/java/org/jcnc/jnotepad/plugin/manager/PluginManager.java +++ b/src/main/java/org/jcnc/jnotepad/plugin/manager/PluginManager.java @@ -1,6 +1,6 @@ package org.jcnc.jnotepad.plugin.manager; -import org.jcnc.jnotepad.app.util.ApplicationRestarter; +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; @@ -201,7 +201,7 @@ public class PluginManager { appDialog -> { appDialog.close(); // 执行重启操作 - ApplicationRestarter.restart(); + ApplicationManager.getInstance().restart(); }, null, "重启", "以后再说"); } } 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 c6f69fc..7894a66 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/setstage/DeveloperDebugStage.java +++ b/src/main/java/org/jcnc/jnotepad/ui/setstage/DeveloperDebugStage.java @@ -7,7 +7,7 @@ import javafx.scene.control.Label; import javafx.scene.layout.HBox; import javafx.scene.layout.VBox; import javafx.stage.Stage; -import org.jcnc.jnotepad.app.util.ApplicationRestarter; +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; @@ -75,7 +75,7 @@ public class DeveloperDebugStage extends Stage { debugButton6.setOnAction(event -> { logger.debug("开发者调试: {}启动!", debugButton6.getText()); // 执行重启操作 - ApplicationRestarter.restart(); + ApplicationManager.getInstance().restart(); }); alertBox.getChildren().addAll(debugButton1, debugButton2, debugButton3, debugButton4, debugButton5); 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 b8fea56..cc64037 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/setstage/HelpPaneStage.java +++ b/src/main/java/org/jcnc/jnotepad/ui/setstage/HelpPaneStage.java @@ -19,6 +19,7 @@ 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.views.manager.RootManager; import static org.jcnc.jnotepad.common.constants.AppConstants.*; 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 61db8c6..fcbc1d1 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 @@ -29,9 +29,9 @@ 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.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.jcnc.jnotepad.ui.setstage.AbstractPaneStage; import org.slf4j.Logger; import java.awt.*; 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 3dc35b5..8f1a4c1 100644 --- a/src/main/java/org/jcnc/jnotepad/views/manager/DirectorySidebarManager.java +++ b/src/main/java/org/jcnc/jnotepad/views/manager/DirectorySidebarManager.java @@ -1,5 +1,6 @@ package org.jcnc.jnotepad.views.manager; +import javafx.beans.value.ChangeListener; import javafx.scene.control.TreeItem; import org.jcnc.jnotepad.common.manager.ApplicationCacheManager; import org.jcnc.jnotepad.common.util.FileUtil; @@ -12,9 +13,9 @@ import java.io.File; import java.util.List; /** + * 文件树管理类 + * * @author : cccqyu - * @createTime 2023/10/2 20:33 - * @description 文件树管理类 */ public class DirectorySidebarManager { @@ -67,16 +68,26 @@ public class DirectorySidebarManager { } + private static ChangeListener getTreeItemListener(TreeItem item) { + return (observable, oldValue, newValue) -> { + if (Boolean.TRUE.equals(newValue)) { + item.setGraphic(item.getValue().getIconIsSelected()); + } else { + item.setGraphic(item.getValue().getIconIsNotSelected()); + } + }; + } + /** * 设置文件树内容 * * @param dirFileModel 文件 */ public void setTreeView(DirFileModel dirFileModel) { - TreeItem rootItem = new TreeItem<>(dirFileModel); + TreeItem rootItem = new TreeItem<>(dirFileModel, dirFileModel.getIconIsNotSelected()); DIRECTORY_SIDEBAR_PANE.setRoot(rootItem); - + rootItem.expandedProperty().addListener(getTreeItemListener(rootItem)); expandFolder(dirFileModel, rootItem); } @@ -90,7 +101,8 @@ public class DirectorySidebarManager { List childFileList = dirFileModel.getChildFile(); if (childFileList != null) { for (DirFileModel childFile : childFileList) { - TreeItem childItem = new TreeItem<>(childFile); + TreeItem childItem = new TreeItem<>(childFile, childFile.getIconIsNotSelected()); + childItem.expandedProperty().addListener(getTreeItemListener(childItem)); item.getChildren().add(childItem); expandFolder(childFile, childItem); } @@ -98,6 +110,11 @@ public class DirectorySidebarManager { } } + /** + * 展开已打开文件树 + * + * @since 2023/10/2 23:12 + */ public void expandTheOpenFileTree() { // 获取缓存 Object cacheData = CACHE_MANAGER.getCacheData(OpenDirectory.GROUP, "folderThatWasOpened"); 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 c3828ed..5de164b 100644 --- a/src/main/java/org/jcnc/jnotepad/views/manager/SidebarToolBarManager.java +++ b/src/main/java/org/jcnc/jnotepad/views/manager/SidebarToolBarManager.java @@ -5,7 +5,8 @@ import javafx.scene.image.Image; import javafx.scene.image.ImageView; import org.jcnc.jnotepad.controller.event.handler.setting.DirTreeBtn; import org.jcnc.jnotepad.controller.event.handler.setting.SetBtn; -import org.jcnc.jnotepad.views.manager.builder.SideBarButtonBuilder; +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; 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 bb51f50..aa508f7 100644 --- a/src/main/java/org/jcnc/jnotepad/views/manager/TopMenuBarManager.java +++ b/src/main/java/org/jcnc/jnotepad/views/manager/TopMenuBarManager.java @@ -15,6 +15,7 @@ import org.jcnc.jnotepad.controller.config.AppConfigController; 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; @@ -23,7 +24,6 @@ import org.slf4j.Logger; import java.util.*; import static org.jcnc.jnotepad.common.constants.TextConstants.*; -import static org.jcnc.jnotepad.common.constants.TextConstants.OPEN_DIRECTORY; /** * 顶部菜单栏管理类 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 823951c..8f171a0 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 @@ -1,9 +1,7 @@ package org.jcnc.jnotepad.views.root.center.main.center.directory; -import javafx.event.EventHandler; import javafx.scene.control.TreeItem; import javafx.scene.control.TreeView; -import javafx.scene.input.MouseEvent; import org.jcnc.jnotepad.controller.event.handler.menubar.OpenFile; import org.jcnc.jnotepad.model.entity.DirFileModel; @@ -20,23 +18,24 @@ public class DirectorySidebarPane extends TreeView { private static final DirectorySidebarPane INSTANCE = new DirectorySidebarPane(); + private static final int CLICK_COUNT = 2; + private DirectorySidebarPane() { this.setVisible(false); - this.setOnMouseClicked(new EventHandler() { - @Override - public void handle(MouseEvent mouseEvent) { - if (mouseEvent.getClickCount() == 2) { - TreeItem item = DirectorySidebarPane.this.getSelectionModel().getSelectedItem(); - if (Objects.isNull(item)) return; - File file = new File(item.getValue().getPath()); - - if(!file.isFile()){ - return; - } - new OpenFile().openFile(file); - + this.setOnMouseClicked(mouseEvent -> { + if (mouseEvent.getClickCount() == CLICK_COUNT) { + TreeItem item = DirectorySidebarPane.this.getSelectionModel().getSelectedItem(); + if (Objects.isNull(item)) { + return; } + File file = new File(item.getValue().getPath()); + + if (!file.isFile()) { + return; + } + OpenFile.openFile(file); + } }); } From b542a9322bfc90bbdf56916321a73283c0e2b48c Mon Sep 17 00:00:00 2001 From: gewuyou <1063891901@qq.com> Date: Tue, 3 Oct 2023 13:10:50 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=F0=9F=9A=A9=20=E4=B8=BA=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E6=A0=91=E6=B7=BB=E5=8A=A0=E5=9B=BE=E6=A0=87=EF=BC=8C=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E9=A1=B9=E7=9B=AE=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/org/jcnc/jnotepad/common/util/FileUtil.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/org/jcnc/jnotepad/common/util/FileUtil.java b/src/main/java/org/jcnc/jnotepad/common/util/FileUtil.java index ac45805..ddbbe4d 100644 --- a/src/main/java/org/jcnc/jnotepad/common/util/FileUtil.java +++ b/src/main/java/org/jcnc/jnotepad/common/util/FileUtil.java @@ -152,6 +152,7 @@ public class FileUtil { DirFileModel childDirFileModel = getDirFileModel(f); dirFileModel.getChildFile().add(childDirFileModel); } else { + // todo 在此监测文件后缀,设置对应的图标 dirFileModel.getChildFile().add(new DirFileModel(f.getAbsolutePath(), f.getName(), null, new FontIcon(FILE), new FontIcon(FILE))); } } From 429fb3cc073aaf60df881a059fd9db7524f6f0f5 Mon Sep 17 00:00:00 2001 From: gewuyou <1063891901@qq.com> Date: Tue, 3 Oct 2023 13:22:13 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/jcnc/jnotepad/model/entity/DirFileModel.java | 4 ++++ .../jnotepad/views/manager/DirectorySidebarManager.java | 8 ++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/jcnc/jnotepad/model/entity/DirFileModel.java b/src/main/java/org/jcnc/jnotepad/model/entity/DirFileModel.java index d3df0f0..0d65f28 100644 --- a/src/main/java/org/jcnc/jnotepad/model/entity/DirFileModel.java +++ b/src/main/java/org/jcnc/jnotepad/model/entity/DirFileModel.java @@ -72,4 +72,8 @@ public class DirFileModel { public void setIconIsSelected(FontIcon iconIsSelected) { this.iconIsSelected = iconIsSelected; } + + public void setChildFile(List childFile) { + this.childFile = childFile; + } } \ No newline at end of file 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 f1aae48..ad68785 100644 --- a/src/main/java/org/jcnc/jnotepad/views/manager/DirectorySidebarManager.java +++ b/src/main/java/org/jcnc/jnotepad/views/manager/DirectorySidebarManager.java @@ -42,7 +42,7 @@ public class DirectorySidebarManager { private static final DirectorySidebarPane DIRECTORY_SIDEBAR_PANE = DirectorySidebarPane.getInstance(); - private static final double lastDividerPosition = 0.3; + private static final double LAST_DIVIDER_POSITION = 0.3; /** * 控制文件树显示 @@ -57,13 +57,13 @@ public class DirectorySidebarManager { double roundedNumber = Double.parseDouble(formattedNumber); // 分割条位置不等于 代表展开 - if (roundedNumber != 0.0) { + if (Double.compare(roundedNumber, 0.0) != 0) { // 收缩分割条 收缩文件树 center.setDividerPositions(0.0); } else { // 展开分割条,文件树 - center.setDividerPositions(lastDividerPosition); + center.setDividerPositions(LAST_DIVIDER_POSITION); } } @@ -77,7 +77,7 @@ public class DirectorySidebarManager { if (bool) { // 获取分割面板 SplitPane center = (SplitPane) MAIN_BORDER_PANE.getCenter(); - center.setDividerPositions(lastDividerPosition); + center.setDividerPositions(LAST_DIVIDER_POSITION); } }