From 0fffcb6828a4355fcb1b9fd08704eabc895e7559 Mon Sep 17 00:00:00 2001 From: gewuyou <1063891901@qq.com> Date: Sun, 24 Sep 2023 11:39:17 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E6=8F=92=E4=BB=B6=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/manager/ApplicationManager.java | 2 +- .../model/entity/PluginDescriptor.java | 35 ++++++++++++++ .../jcnc/jnotepad/plugin/PluginLoader.java | 1 + .../plugin/PluginManagerInterface.java | 1 + .../plugin/{ => manager}/PluginManager.java | 47 ++++++++++++++++++- .../ui/pluginstage/PluginManagementPane.java | 21 ++++++--- 6 files changed, 98 insertions(+), 9 deletions(-) rename src/main/java/org/jcnc/jnotepad/plugin/{ => manager}/PluginManager.java (77%) 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 6e34722..7f38459 100644 --- a/src/main/java/org/jcnc/jnotepad/app/manager/ApplicationManager.java +++ b/src/main/java/org/jcnc/jnotepad/app/manager/ApplicationManager.java @@ -13,7 +13,7 @@ import org.jcnc.jnotepad.common.manager.ThreadPoolManager; import org.jcnc.jnotepad.controller.ResourceController; import org.jcnc.jnotepad.controller.config.PluginConfigController; import org.jcnc.jnotepad.controller.manager.Controller; -import org.jcnc.jnotepad.plugin.PluginManager; +import org.jcnc.jnotepad.plugin.manager.PluginManager; import org.jcnc.jnotepad.util.UiUtil; import org.jcnc.jnotepad.views.manager.RootManager; import org.jcnc.jnotepad.views.manager.SidebarToolBarManager; diff --git a/src/main/java/org/jcnc/jnotepad/model/entity/PluginDescriptor.java b/src/main/java/org/jcnc/jnotepad/model/entity/PluginDescriptor.java index fb5a529..af34454 100644 --- a/src/main/java/org/jcnc/jnotepad/model/entity/PluginDescriptor.java +++ b/src/main/java/org/jcnc/jnotepad/model/entity/PluginDescriptor.java @@ -9,6 +9,10 @@ import org.jcnc.jnotepad.plugin.interfaces.Plugin; * @author gewuyou */ public class PluginDescriptor { + /** + * 插件id + */ + private String id; /** * 插件名称 */ @@ -79,6 +83,29 @@ public class PluginDescriptor { @JsonIgnore private Plugin plugin; + public PluginDescriptor() { + } + + public PluginDescriptor(PluginDescriptor pluginDescriptor) { + this.id = pluginDescriptor.getId(); + this.name = pluginDescriptor.getName(); + this.version = pluginDescriptor.getVersion(); + this.enabled = pluginDescriptor.isEnabled(); + this.author = pluginDescriptor.getAuthor(); + this.category = pluginDescriptor.getCategory(); + this.icon = pluginDescriptor.getIcon(); + this.size = pluginDescriptor.getSize(); + this.description = pluginDescriptor.getDescription(); + this.detailedIntroduction = pluginDescriptor.getDetailedIntroduction(); + this.log = pluginDescriptor.getLog(); + this.pluginUrl = pluginDescriptor.getPluginUrl(); + this.mainClass = pluginDescriptor.getMainClass(); + this.assetFolder = pluginDescriptor.getAssetFolder(); + this.readMe = pluginDescriptor.getReadMe(); + this.score = pluginDescriptor.getScore(); + this.plugin = pluginDescriptor.getPlugin(); + } + public String getName() { return name; } @@ -206,4 +233,12 @@ public class PluginDescriptor { public void setScore(Float score) { this.score = score; } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } } diff --git a/src/main/java/org/jcnc/jnotepad/plugin/PluginLoader.java b/src/main/java/org/jcnc/jnotepad/plugin/PluginLoader.java index 98e3093..681b8d0 100644 --- a/src/main/java/org/jcnc/jnotepad/plugin/PluginLoader.java +++ b/src/main/java/org/jcnc/jnotepad/plugin/PluginLoader.java @@ -5,6 +5,7 @@ import org.jcnc.jnotepad.controller.config.PluginConfigController; import org.jcnc.jnotepad.exception.AppException; import org.jcnc.jnotepad.model.entity.PluginDescriptor; import org.jcnc.jnotepad.plugin.interfaces.Plugin; +import org.jcnc.jnotepad.plugin.manager.PluginManager; import org.jcnc.jnotepad.util.JsonUtil; import org.jcnc.jnotepad.util.LogUtil; import org.slf4j.Logger; diff --git a/src/main/java/org/jcnc/jnotepad/plugin/PluginManagerInterface.java b/src/main/java/org/jcnc/jnotepad/plugin/PluginManagerInterface.java index a36beea..0bda44a 100644 --- a/src/main/java/org/jcnc/jnotepad/plugin/PluginManagerInterface.java +++ b/src/main/java/org/jcnc/jnotepad/plugin/PluginManagerInterface.java @@ -6,6 +6,7 @@ import javafx.scene.control.Label; import javafx.scene.layout.VBox; import javafx.stage.FileChooser; import javafx.stage.Stage; +import org.jcnc.jnotepad.plugin.manager.PluginManager; import org.jcnc.jnotepad.ui.dialog.factory.impl.BasicFileChooserFactory; import org.jcnc.jnotepad.util.LogUtil; import org.jcnc.jnotepad.util.PopUpUtil; diff --git a/src/main/java/org/jcnc/jnotepad/plugin/PluginManager.java b/src/main/java/org/jcnc/jnotepad/plugin/manager/PluginManager.java similarity index 77% rename from src/main/java/org/jcnc/jnotepad/plugin/PluginManager.java rename to src/main/java/org/jcnc/jnotepad/plugin/manager/PluginManager.java index 6848df7..1d10825 100644 --- a/src/main/java/org/jcnc/jnotepad/plugin/PluginManager.java +++ b/src/main/java/org/jcnc/jnotepad/plugin/manager/PluginManager.java @@ -1,4 +1,4 @@ -package org.jcnc.jnotepad.plugin; +package org.jcnc.jnotepad.plugin.manager; import org.jcnc.jnotepad.common.manager.ThreadPoolManager; import org.jcnc.jnotepad.controller.config.PluginConfigController; @@ -35,7 +35,12 @@ public class PluginManager { /** * 插件信息 */ - private final List pluginDescriptors = new ArrayList<>(); + private List pluginDescriptors = new ArrayList<>(); + + /** + * 插件信息临时集合 + */ + private List temporaryPluginDescriptors; Logger logger = LogUtil.getLogger(this.getClass()); private PluginManager() { @@ -46,6 +51,13 @@ public class PluginManager { return INSTANCE; } + /** + * 初始化插件临时集合 + */ + public void initializeTemporaryPluginDescriptors() { + temporaryPluginDescriptors = new ArrayList<>(pluginDescriptors.size()); + pluginDescriptors.forEach(pluginDescriptor -> temporaryPluginDescriptors.add(new PluginDescriptor(pluginDescriptor))); + } /** * 卸载插件 @@ -149,6 +161,15 @@ public class PluginManager { return pluginDescriptors; } + + public List getTemporaryPluginDescriptors() { + return temporaryPluginDescriptors; + } + + public void setTemporaryPluginDescriptors(List temporaryPluginDescriptors) { + this.temporaryPluginDescriptors = temporaryPluginDescriptors; + } + /** * 启用插件 * @@ -157,4 +178,26 @@ public class PluginManager { public void enablePlugIn(PluginDescriptor pluginDescriptor) { pluginDescriptor.setEnabled(true); } + + /** + * 保存插件设置并退出 + */ + public void saveAndExitSettings() { + pluginDescriptors = temporaryPluginDescriptors; + clearTemporarySettings(); + } + + /** + * 保存插件设置但不退出 + */ + public void saveNotExitSettings() { + pluginDescriptors = temporaryPluginDescriptors; + } + + /** + * 清除插件临时设置 + */ + public void clearTemporarySettings() { + temporaryPluginDescriptors = null; + } } diff --git a/src/main/java/org/jcnc/jnotepad/ui/pluginstage/PluginManagementPane.java b/src/main/java/org/jcnc/jnotepad/ui/pluginstage/PluginManagementPane.java index 8f33b61..d33a8f4 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/pluginstage/PluginManagementPane.java +++ b/src/main/java/org/jcnc/jnotepad/ui/pluginstage/PluginManagementPane.java @@ -25,7 +25,7 @@ import javafx.stage.Stage; import org.commonmark.parser.Parser; import org.commonmark.renderer.html.HtmlRenderer; import org.jcnc.jnotepad.model.entity.PluginDescriptor; -import org.jcnc.jnotepad.plugin.PluginManager; +import org.jcnc.jnotepad.plugin.manager.PluginManager; import org.jcnc.jnotepad.ui.module.CustomSetButton; import org.jcnc.jnotepad.util.LogUtil; import org.slf4j.Logger; @@ -82,6 +82,8 @@ public class PluginManagementPane extends BorderPane { * 初始化插件管理面板。 */ private void initialize() { + // 初始化插件临时集合 + pluginManager.initializeTemporaryPluginDescriptors(); // 创建选项卡面板 TabPane rootTabPane = new TabPane(); @@ -149,18 +151,26 @@ public class PluginManagementPane extends BorderPane { bottomBox.setPadding(new Insets(7, 15, 7, 0)); Button confirmButton = new Button(" 确认 "); confirmButton.setTextFill(Color.WHITE); - confirmButton.getStyleClass().addAll(Styles.SMALL); confirmButton.setStyle("-fx-background-color: rgb(54,88,128);"); + confirmButton.setOnAction(event -> { + Stage stage = (Stage) confirmButton.getScene().getWindow(); + // 保存设置 + pluginManager.saveAndExitSettings(); + stage.close(); + }); + CustomSetButton cancelButton = new CustomSetButton(" 取消 "); cancelButton.setOnAction(event -> { Stage stage = (Stage) cancelButton.getScene().getWindow(); + // 清空临时集合 + pluginManager.clearTemporarySettings(); stage.close(); - }); cancelButton.getStyleClass().addAll(Styles.SMALL); Button applicationButton = new Button(" 应用 "); applicationButton.getStyleClass().addAll(Styles.SMALL); + applicationButton.setOnAction(event -> pluginManager.saveNotExitSettings()); bottomBox.getChildren().addAll(confirmButton, cancelButton, applicationButton); this.setBottom(bottomBox); @@ -173,8 +183,8 @@ public class PluginManagementPane extends BorderPane { */ private ScrollPane getScrollPane() { List tiles = new ArrayList<>(); - - pluginManager.getPluginDescriptors().forEach(pluginDescriptor -> tiles.add(createPlugInListItem(pluginDescriptor))); + // 将拷贝的插件信息类添加进列表 + pluginManager.getTemporaryPluginDescriptors().forEach(pluginDescriptor -> tiles.add(createPlugInListItem(pluginDescriptor))); // 创建VBox并将插件列表项添加到其中 var box = new VBox(); @@ -195,7 +205,6 @@ public class PluginManagementPane extends BorderPane { /** * 创建插件列表项Tile。 * - * @return 创建的插件列表项Tile */ private Tile createPlugInListItem(PluginDescriptor pluginDescriptor) {