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 67176e31dc7d6324d1f3fea81f2af15e5e9224f7..af1eff162c82c65e6e75bdbf00cfae90b25771a0 100644 --- a/src/main/java/org/jcnc/jnotepad/app/manager/ApplicationManager.java +++ b/src/main/java/org/jcnc/jnotepad/app/manager/ApplicationManager.java @@ -81,6 +81,8 @@ public class ApplicationManager { // 使用加载关联文件并创建文本区域 List rawParameters = application.getParameters().getRaw(); Controller.getInstance().openAssociatedFileAndCreateTextArea(rawParameters); + // 加载已打开的文件夹 + DirectorySidebarManager.getInstance().expandTheOpenFileTree(); } private void initScene() { @@ -96,6 +98,12 @@ public class ApplicationManager { primaryStage.setWidth(scene.getWidth()); primaryStage.setHeight(scene.getHeight()); primaryStage.getIcons().add(UiUtil.getAppIcon()); + primaryStage.focusedProperty().addListener((observable, oldValue, newValue) -> { + if (Boolean.TRUE.equals(newValue)) { + CenterTabPaneManager instance = CenterTabPaneManager.getInstance(); + instance.checkFileTabStatus(instance.getSelected()); + } + }); } /** diff --git a/src/main/java/org/jcnc/jnotepad/app/util/ApplicationRestarter.java b/src/main/java/org/jcnc/jnotepad/app/util/ApplicationRestarter.java index 7f2207597af7d029df361966c48d0f07c12f5a59..736b1982c094b99ab75967b6f5d53996b84499a5 100644 --- a/src/main/java/org/jcnc/jnotepad/app/util/ApplicationRestarter.java +++ b/src/main/java/org/jcnc/jnotepad/app/util/ApplicationRestarter.java @@ -9,6 +9,8 @@ import java.io.IOException; * @author luke */ public class ApplicationRestarter { + private ApplicationRestarter() { + } public static void restart() { try { 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 e78bed308165873ac48141f2879319ed032aec03..63cac979bffa8be72335fa6ee1af3a714d5083d1 100644 --- a/src/main/java/org/jcnc/jnotepad/common/util/FileUtil.java +++ b/src/main/java/org/jcnc/jnotepad/common/util/FileUtil.java @@ -2,6 +2,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 java.io.*; import java.nio.ByteBuffer; @@ -10,6 +11,7 @@ import java.nio.charset.Charset; import java.nio.file.Path; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; +import java.util.ArrayList; /** * 文件工具 @@ -126,4 +128,32 @@ public class FileUtil { } return stringBuilder.toString(); } + + /** + * 将文件夹转为DirFileModel + * + * @param file 文件 + * @return DirFileModel 存储文件夹与文件关系的实体类 + */ + public static DirFileModel getDirFileModel(File file) { + if (!file.exists()) { + return null; + } + + DirFileModel dirFileModel = new DirFileModel(file.getAbsolutePath(), file.getName(), new ArrayList<>()); + + File[] files = file.listFiles(); + if (files != null) { + for (File f : files) { + if (f.isDirectory()) { + DirFileModel childDirFileModel = getDirFileModel(f); + dirFileModel.getChildFile().add(childDirFileModel); + } else { + dirFileModel.getChildFile().add(new DirFileModel(f.getAbsolutePath(), f.getName(), null)); + } + } + } + + return dirFileModel; + } } 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/menubar/OpenDirectory.java index 496d81ca66d50939d4a36029fd60c836f22ff2aa..8e919eeb672c5f1bec542bf085b02034361adfd7 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/OpenDirectory.java +++ b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menubar/OpenDirectory.java @@ -6,12 +6,12 @@ import javafx.event.EventHandler; 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; import org.jcnc.jnotepad.ui.dialog.factory.impl.BasicDirectoryChooserFactory; -import org.jcnc.jnotepad.util.FileUtil; -import org.jcnc.jnotepad.util.UiUtil; import org.jcnc.jnotepad.views.manager.DirectorySidebarManager; import java.io.File; @@ -24,7 +24,8 @@ import java.io.File; public class OpenDirectory implements EventHandler { private static final ApplicationCacheManager CACHE_MANAGER = ApplicationCacheManager.getInstance(); - private static final DirectorySidebarManager DIRECTORY_SIDEBAR_MANAGER=DirectorySidebarManager.getInstance(); + private static final DirectorySidebarManager DIRECTORY_SIDEBAR_MANAGER = DirectorySidebarManager.getInstance(); + @Override public void handle(ActionEvent actionEvent) { // 获取缓存 @@ -50,13 +51,14 @@ public class OpenDirectory implements EventHandler { } - public void flushDirSidebar(File file){ + public void flushDirSidebar(File file) { // 将文件转为实体类 DirFileModel dirFileModel = FileUtil.getDirFileModel(file); + // 缓存已打开的文件夹 + CACHE_MANAGER.addCache(CACHE_MANAGER.createCache("directory", "folderThatWasOpened", dirFileModel, CacheExpirationTime.NEVER_EXPIRES.getValue())); // 打开侧边栏 DIRECTORY_SIDEBAR_MANAGER.controlShow(true); // 设置文件树功能 DIRECTORY_SIDEBAR_MANAGER.setTreeView(dirFileModel); - } } 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 686ec0f28509758c196c443787fcc1121be1ffea..771f6db1578230403bbabfa1adab8f566e9e2b0e 100644 --- a/src/main/java/org/jcnc/jnotepad/plugin/manager/PluginManager.java +++ b/src/main/java/org/jcnc/jnotepad/plugin/manager/PluginManager.java @@ -134,7 +134,7 @@ public class PluginManager { /** * 执行加载的插件 - * todo 待移除 + * @deprecated 待删除 */ public void executePlugins() { for (PluginDescriptor pluginDescriptor : pluginDescriptors) { @@ -202,7 +202,7 @@ public class PluginManager { appDialog.close(); // 执行重启操作 ApplicationRestarter.restart(); - }, null); + }, null, "重启", "以后再说"); } } diff --git a/src/main/java/org/jcnc/jnotepad/util/FileUtil.java b/src/main/java/org/jcnc/jnotepad/util/FileUtil.java deleted file mode 100644 index df8b7523d5561fcbcd8487fd2807ce0c98c168e0..0000000000000000000000000000000000000000 --- a/src/main/java/org/jcnc/jnotepad/util/FileUtil.java +++ /dev/null @@ -1,43 +0,0 @@ -package org.jcnc.jnotepad.util; - -import org.jcnc.jnotepad.model.entity.DirFileModel; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -/** - * @author : cccqyu - * @createTime 2023/10/2 2:31 - * @description 文件工具类 - */ -public class FileUtil { - - /** - * 将文件夹转为DirFileModel - * - * @param file 文件 - * @return DirFileModel 存储文件夹与文件关系的实体类 - */ - public static DirFileModel getDirFileModel(File file) { - if (!file.exists()) { - return null; - } - - DirFileModel dirFileModel = new DirFileModel(file.getAbsolutePath(), file.getName(), new ArrayList<>()); - - File[] files = file.listFiles(); - if (files != null) { - for (File f : files) { - if (f.isDirectory()) { - DirFileModel childDirFileModel = getDirFileModel(f); - dirFileModel.getChildFile().add(childDirFileModel); - } else { - dirFileModel.getChildFile().add(new DirFileModel(f.getAbsolutePath(), f.getName(), null)); - } - } - } - - return dirFileModel; - } -} 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 c579d7e2baed2eb2857a8287a05ea2b9fc805375..12481d58b7d963b9d9b755a1e9959135601d0cb9 100644 --- a/src/main/java/org/jcnc/jnotepad/views/manager/CenterTabPaneManager.java +++ b/src/main/java/org/jcnc/jnotepad/views/manager/CenterTabPaneManager.java @@ -3,10 +3,8 @@ package org.jcnc.jnotepad.views.manager; import javafx.collections.ObservableList; import javafx.scene.control.Tab; import javafx.stage.Stage; -import org.jcnc.jnotepad.app.manager.ApplicationManager; import org.jcnc.jnotepad.common.manager.ApplicationCacheManager; import org.jcnc.jnotepad.common.util.FileUtil; -import org.jcnc.jnotepad.common.util.LogUtil; import org.jcnc.jnotepad.common.util.PopUpUtil; import org.jcnc.jnotepad.controller.config.AppConfigController; import org.jcnc.jnotepad.model.enums.CacheExpirationTime; @@ -67,11 +65,6 @@ public class CenterTabPaneManager { bottomStatusBoxManager.updateWhenTabSelected(); } ); - ApplicationManager.getInstance().getPrimaryStage().focusedProperty().addListener((observable, oldValue, newValue) -> { - if (Boolean.TRUE.equals(newValue)) { - checkFileTabStatus(getSelected()); - } - }); } @@ -80,10 +73,11 @@ public class CenterTabPaneManager { * * @apiNote 该方法检查当前文件是否被修改,如果被修改,则返回true */ - private void checkFileTabStatus(CenterTab tab) { + public void checkFileTabStatus(CenterTab tab) { + if (tab == null) { + return; + } if (tab.isRelevance()) { - LogUtil.getLogger(this.getClass()).info("当前标签页关联文件"); - // 获取当前文本域对象 LineNumberTextArea lineNumberTextArea = tab.getLineNumberTextArea(); // 获取当前标签页对应文件上次修改时间 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 4970965116931fd333477d501e65914522b85b79..316eedf56a73ceff60e435618396b6dbe5a0c4be 100644 --- a/src/main/java/org/jcnc/jnotepad/views/manager/DirectorySidebarManager.java +++ b/src/main/java/org/jcnc/jnotepad/views/manager/DirectorySidebarManager.java @@ -1,6 +1,7 @@ package org.jcnc.jnotepad.views.manager; import javafx.scene.control.TreeItem; +import org.jcnc.jnotepad.common.manager.ApplicationCacheManager; 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; @@ -17,7 +18,8 @@ public class DirectorySidebarManager { private DirectorySidebarManager() { } - ; + private static final ApplicationCacheManager CACHE_MANAGER = ApplicationCacheManager.getInstance(); + /** * 单例模式,保证只有一个 DirectorySidebar 实例 */ @@ -34,7 +36,7 @@ public class DirectorySidebarManager { /** * 控制文件树显示 - * */ + */ public void controlShow() { boolean isVisible = DIRECTORY_SIDEBAR_PANE.isVisible(); // 设置自身显示 @@ -47,10 +49,12 @@ public class DirectorySidebarManager { } } + /** * 控制文件树显示 + * * @param bool 打开 - * */ + */ public void controlShow(boolean bool) { // 设置自身显示 DIRECTORY_SIDEBAR_PANE.setVisible(bool); @@ -62,20 +66,23 @@ public class DirectorySidebarManager { /** * 设置文件树内容 + * * @param dirFileModel 文件 - * */ + */ public void setTreeView(DirFileModel dirFileModel) { - TreeItem rootItem = new TreeItem(dirFileModel); + TreeItem rootItem = new TreeItem<>(dirFileModel); DIRECTORY_SIDEBAR_PANE.setRoot(rootItem); expandFolder(dirFileModel, rootItem); } + /** * 递归展开 dirFileModel + * * @param dirFileModel 文件 - * @param item 文件树子项内容 - * */ + * @param item 文件树子项内容 + */ private void expandFolder(DirFileModel dirFileModel, TreeItem item) { List childFileList = dirFileModel.getChildFile(); if (childFileList != null) { @@ -88,5 +95,18 @@ public class DirectorySidebarManager { } } + public void expandTheOpenFileTree() { + // 获取缓存 + Object cacheData = CACHE_MANAGER.getCacheData("directory", "folderThatWasOpened"); + // 判空 + if (cacheData == null) { + return; + } + // 打开侧边栏 + controlShow(true); + // 设置文件树功能 + setTreeView((DirFileModel) cacheData); + } + }