!130 细微修改与解决冲突

Merge pull request !130 from 格物方能致知/develop
This commit is contained in:
格物方能致知 2023-10-02 14:08:04 +00:00 committed by Gitee
commit 3d54349bdc
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
8 changed files with 80 additions and 67 deletions

View File

@ -81,6 +81,8 @@ public class ApplicationManager {
// 使用加载关联文件并创建文本区域
List<String> 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());
}
});
}
/**

View File

@ -9,6 +9,8 @@ import java.io.IOException;
* @author luke
*/
public class ApplicationRestarter {
private ApplicationRestarter() {
}
public static void restart() {
try {

View File

@ -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;
}
}

View File

@ -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<ActionEvent> {
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<ActionEvent> {
}
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);
}
}

View File

@ -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, "重启", "以后再说");
}
}

View File

@ -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;
}
}

View File

@ -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();
// 获取当前标签页对应文件上次修改时间

View File

@ -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<DirFileModel> rootItem = new TreeItem<DirFileModel>(dirFileModel);
TreeItem<DirFileModel> 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<DirFileModel> item) {
List<DirFileModel> 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);
}
}