diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index 353c159c141e804ab4a3c0c1b04a6577ea5d4773..0216e6eef05af39c35cde1f6a616272e26207e0d 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 4a48cf24e48a22a91dc3fc9203af12b74c3f734b..fde6cc09982150db08685ac2b0861aa5a3dbb60e 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 af1eff162c82c65e6e75bdbf00cfae90b25771a0..ecbf91ecb1ebe90a1755dcc534cd83416db8b87a 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 736b1982c094b99ab75967b6f5d53996b84499a5..0000000000000000000000000000000000000000 --- 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 69282b0ac0d60d6f2954e48b7c3087e291470ddf..f509922403b68e724d176585b001c048fd072a5c 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 63cac979bffa8be72335fa6ee1af3a714d5083d1..ddbbe4d9e8f4ec09da8452aa062c71d9ac3893ad 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,8 @@ public class FileUtil { DirFileModel childDirFileModel = getDirFileModel(f); dirFileModel.getChildFile().add(childDirFileModel); } else { - dirFileModel.getChildFile().add(new DirFileModel(f.getAbsolutePath(), f.getName(), null)); + // todo 在此监测文件后缀,设置对应的图标 + 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 466af465cd47efca23e8da42d649f0a95819e3d9..ccabd1f67f98db0b9ae984c7e355523f66eb885a 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 d26531a211ea8a088e2af406bcc8109e9f985596..c85a27bd6d186839b71b2735d68af3d1d127e30a 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 9dd30e0d92f9f679662f0cc143984cd5a9ff7d5f..0d65f28f5d81e9210bd4a264ff61dcbb47f5dead 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; @@ -14,14 +16,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; } @@ -46,4 +56,24 @@ 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; + } + + public void setChildFile(List childFile) { + this.childFile = childFile; + } } \ 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 b640d96ae99cc13ea87305d77ee3fe8339b4465c..7a2bd3847f99354be434db4ce14c114ed466fa9c 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 5c176c60e1ef6e417522ff8a8ea063ff2a6df40b..f9ea8b89a935c3f93f1a8752bbf2d06ccc1cc28c 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 17291a81fe9bf1c8ef9835eb14070aa9185bb84d..c20bc1362b255600126dd54eae5a6019b96d7653 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 52371060505f61a05f3577b28fea054cae55f8b0..136db3808f508393af741d638c1350095ffc54c7 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 75747f04c7c72063a7ed6873176d379de2f67c46..bf0160e393efbb2223397c501192590650f0032d 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 785c42971ec6bce5f8cff052606b0e587b2bc6db..eac456b18875b9a3916bef40c4c45c8ef9b6697f 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 771f6db1578230403bbabfa1adab8f566e9e2b0e..2b60291637e4ef1cb42b7250a4cc434b883aae4f 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 c6f69fcf70213bfe77ae0b5ace58f4a8bd38eecd..7894a66a3f53e75c28d488acbf70864ab6d60f5a 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 b8fea56618d4a57e585b0deaafdc8025a5fe8e7a..cc640373dc6dc7f7aa5d8795a5d9d1d553fc281a 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 61db8c6f417f00d3d25d7f6e3a7c31544dd37f4e..fcbc1d1f03cb2f94db45f917c528768e4aaf185c 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 50da325b72ef564fd2a08abde2ad64d7463b2adc..ad687852ebaa49543176bfd0f0122e4295a64d93 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.SplitPane; import javafx.scene.control.TreeItem; import org.jcnc.jnotepad.common.manager.ApplicationCacheManager; @@ -41,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; /** * 控制文件树显示 @@ -56,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); } } @@ -76,8 +77,19 @@ public class DirectorySidebarManager { if (bool) { // 获取分割面板 SplitPane center = (SplitPane) MAIN_BORDER_PANE.getCenter(); - center.setDividerPositions(lastDividerPosition); + center.setDividerPositions(LAST_DIVIDER_POSITION); } + + } + + 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()); + } + }; } /** @@ -86,10 +98,10 @@ public class DirectorySidebarManager { * @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); } @@ -103,7 +115,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); } @@ -111,6 +124,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 c3828ed7f32664e51fa090150373f6b077bfc5f4..5de164b07932713e91ebf23eaece51fdeff05c78 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 bb51f50e62ce0f3374e6356798fa62af1380760b..aa508f746e08b98e102511e4fcec54d3a29b0be5 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 6ac1d0bc1edf3298d3346aec7991e4d44a9971aa..fec743421d45c48a2f8862173debccabd1263b0d 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 @@ -20,18 +20,21 @@ public class DirectorySidebarPane extends TreeView { private static final DirectorySidebarPane INSTANCE = new DirectorySidebarPane(); + private static final int CLICK_COUNT = 2; + private DirectorySidebarPane() { this.setOnMouseClicked(mouseEvent -> { - if (mouseEvent.getClickCount() == 2) { + if (mouseEvent.getClickCount() == CLICK_COUNT) { TreeItem item = DirectorySidebarPane.this.getSelectionModel().getSelectedItem(); - if (Objects.isNull(item)) return; + if (Objects.isNull(item)) { + return; + } File file = new File(item.getValue().getPath()); if (!file.isFile()) { return; } OpenFile.openFile(file); - } }); }