From 641081b0a5842fbff79b52b87b851f763dfdf28a Mon Sep 17 00:00:00 2001 From: songdragon Date: Tue, 22 Aug 2023 13:08:43 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix:=20#I7UJZL=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E6=8D=A2=E8=A1=8C=E4=B8=8D=E7=94=9F=E6=95=88?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Interface/ControllerInterface.java | 8 ---- .../jnotepad/app/config/GlobalConfig.java | 38 +++++++++++++++++++ .../controller/event/handler/LineFeed.java | 20 ++++++---- .../controller/manager/Controller.java | 11 ------ .../jnotepad/ui/menu/JNotepadMenuBar.java | 10 ++++- .../org/jcnc/jnotepad/ui/tab/JNotepadTab.java | 3 ++ .../jcnc/jnotepad/ui/tab/JNotepadTabPane.java | 11 ++++++ 7 files changed, 72 insertions(+), 29 deletions(-) create mode 100644 src/main/java/org/jcnc/jnotepad/app/config/GlobalConfig.java diff --git a/src/main/java/org/jcnc/jnotepad/Interface/ControllerInterface.java b/src/main/java/org/jcnc/jnotepad/Interface/ControllerInterface.java index 3914ac4..98e7b05 100644 --- a/src/main/java/org/jcnc/jnotepad/Interface/ControllerInterface.java +++ b/src/main/java/org/jcnc/jnotepad/Interface/ControllerInterface.java @@ -21,14 +21,6 @@ public interface ControllerInterface { */ LineNumberTextArea openAssociatedFileAndCreateTextArea(List rawParameters); - /** - * 获取换行符处理事件处理程序 - * - * @param textArea 文本区域 - * @return 换行符处理事件处理程序 - */ - EventHandler getLineFeedEventHandler(LineNumberTextArea textArea); - /** * 获取新建文件处理事件处理程序 * diff --git a/src/main/java/org/jcnc/jnotepad/app/config/GlobalConfig.java b/src/main/java/org/jcnc/jnotepad/app/config/GlobalConfig.java new file mode 100644 index 0000000..9782a8c --- /dev/null +++ b/src/main/java/org/jcnc/jnotepad/app/config/GlobalConfig.java @@ -0,0 +1,38 @@ +package org.jcnc.jnotepad.app.config; + +import org.jcnc.jnotepad.Interface.ConfigInterface; +import org.jcnc.jnotepad.init.Config; + +import java.util.Properties; + +public class GlobalConfig { + + public static final String TEXT_WRAP = "text.wrap"; + private static final GlobalConfig APP_GLOBAL_CONFIG = new GlobalConfig(); + + private ConfigInterface configLoader; + private Properties properties; + + private GlobalConfig() { + this.configLoader = new Config(); + properties = this.configLoader.readPropertiesFromFile(); + } + + /** + * 获取自动换行设置,默认自动换行 + * + * @return true, 自动换行;false,不自动换行 + */ + public boolean getAutoLineConfig() { + return Boolean.parseBoolean(this.properties.getProperty(TEXT_WRAP, "true")); + } + + public void setAutoLineConfig(boolean isAutoLine) { + String autoLineConfig = String.valueOf(isAutoLine); + this.properties.setProperty(TEXT_WRAP, autoLineConfig); + } + + public static GlobalConfig getConfig() { + return APP_GLOBAL_CONFIG; + } +} diff --git a/src/main/java/org/jcnc/jnotepad/controller/event/handler/LineFeed.java b/src/main/java/org/jcnc/jnotepad/controller/event/handler/LineFeed.java index 8c5af37..a3c65fd 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/event/handler/LineFeed.java +++ b/src/main/java/org/jcnc/jnotepad/controller/event/handler/LineFeed.java @@ -2,32 +2,36 @@ package org.jcnc.jnotepad.controller.event.handler; import javafx.event.ActionEvent; import javafx.event.EventHandler; -import org.jcnc.jnotepad.ui.LineNumberTextArea; /** - * 换行程序。 + * 换行事件处理,针对当前选中tab进行格式化。 + * 配置变更时: + * 1. 更新内存全局配置, see {@linkplain org.jcnc.jnotepad.app.config.GlobalConfig} + * 2. 对当前tab生效配置。每次tab切换,根据全局配置设置进行变更 *

* 用于在文本区域中插入一个换行符。 + * + * @Deprecated 事件处理使用item的listener实现 + * * @author 许轲 */ +@Deprecated public class LineFeed implements EventHandler { - private final LineNumberTextArea textArea; /** * 构造函数,初始化 LineFeed 对象。 - * @param textArea 要操作的文本区域 */ - public LineFeed(LineNumberTextArea textArea) { - this.textArea = textArea; + public LineFeed() { } /** * 处理事件的方法,将一个换行符插入到文本区域的末尾。 + * * @param event 触发的事件对象 */ @Override public void handle(ActionEvent event) { - String text = textArea.getMainTextArea().getText(); - textArea.getMainTextArea().setText(text + "\n"); + // + } } diff --git a/src/main/java/org/jcnc/jnotepad/controller/manager/Controller.java b/src/main/java/org/jcnc/jnotepad/controller/manager/Controller.java index 334db75..db3448a 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/manager/Controller.java +++ b/src/main/java/org/jcnc/jnotepad/controller/manager/Controller.java @@ -63,17 +63,6 @@ public class Controller implements ControllerInterface { } } - /** - * 获取行分隔事件处理程序。 - * - * @param textArea 文本区域 - * @return 行分隔事件处理程序 - */ - @Override - public EventHandler getLineFeedEventHandler(LineNumberTextArea textArea) { - return new LineFeed(textArea); - } - /** * 获取新建文件事件处理程序。 * diff --git a/src/main/java/org/jcnc/jnotepad/ui/menu/JNotepadMenuBar.java b/src/main/java/org/jcnc/jnotepad/ui/menu/JNotepadMenuBar.java index a1c0d5b..1745d6e 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/menu/JNotepadMenuBar.java +++ b/src/main/java/org/jcnc/jnotepad/ui/menu/JNotepadMenuBar.java @@ -4,11 +4,11 @@ import javafx.scene.control.CheckMenuItem; import javafx.scene.control.Menu; import javafx.scene.control.MenuBar; import javafx.scene.control.MenuItem; +import org.jcnc.jnotepad.app.config.GlobalConfig; import org.jcnc.jnotepad.controller.event.handler.LineFeed; import org.jcnc.jnotepad.controller.event.handler.NewFile; import org.jcnc.jnotepad.controller.event.handler.OpenFile; import org.jcnc.jnotepad.controller.event.handler.SaveAsFile; -import org.jcnc.jnotepad.ui.LineNumberTextArea; import org.jcnc.jnotepad.ui.tab.JNotepadTab; import org.jcnc.jnotepad.ui.tab.JNotepadTabPane; @@ -143,7 +143,13 @@ public class JNotepadMenuBar extends MenuBar { newItem.setOnAction(new NewFile()); openItem.setOnAction(new OpenFile()); saveAsItem.setOnAction(new SaveAsFile()); - lineFeedItem.setOnAction(new LineFeed(new LineNumberTextArea())); + lineFeedItem.setOnAction(new LineFeed()); + lineFeedItem.selectedProperty().addListener((observableValue, before, after) -> { + // 1. 更新全局配置 + GlobalConfig.getConfig().setAutoLineConfig(after); + // 2. 对当前tab生效配置 + JNotepadTabPane.getInstance().fireTabSelected(); + }); } public Map getItemMap() { diff --git a/src/main/java/org/jcnc/jnotepad/ui/tab/JNotepadTab.java b/src/main/java/org/jcnc/jnotepad/ui/tab/JNotepadTab.java index 7a59a97..4dfbc50 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/tab/JNotepadTab.java +++ b/src/main/java/org/jcnc/jnotepad/ui/tab/JNotepadTab.java @@ -1,6 +1,7 @@ package org.jcnc.jnotepad.ui.tab; import javafx.scene.control.Tab; +import org.jcnc.jnotepad.app.config.GlobalConfig; import org.jcnc.jnotepad.ui.LineNumberTextArea; /** @@ -25,6 +26,7 @@ public class JNotepadTab extends Tab { super(tabTitle); lineNumberTextArea = textArea; this.setContent(lineNumberTextArea); + setAutoLine(GlobalConfig.getConfig().getAutoLineConfig()); } public boolean isAutoLine() { @@ -33,6 +35,7 @@ public class JNotepadTab extends Tab { public void setAutoLine(boolean autoLine) { this.autoLine = autoLine; + lineNumberTextArea.getMainTextArea().setWrapText(autoLine); } public LineNumberTextArea getLineNumberTextArea() { diff --git a/src/main/java/org/jcnc/jnotepad/ui/tab/JNotepadTabPane.java b/src/main/java/org/jcnc/jnotepad/ui/tab/JNotepadTabPane.java index 970aca9..ca98c9b 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/tab/JNotepadTabPane.java +++ b/src/main/java/org/jcnc/jnotepad/ui/tab/JNotepadTabPane.java @@ -1,6 +1,7 @@ package org.jcnc.jnotepad.ui.tab; import javafx.scene.control.TabPane; +import org.jcnc.jnotepad.app.config.GlobalConfig; import org.jcnc.jnotepad.ui.menu.JNotepadMenuBar; /** @@ -45,6 +46,7 @@ public class JNotepadTabPane extends TabPane { } this.getTabs().add(tab); this.getSelectionModel().select(tab); + fireTabSelected(); } /** @@ -55,4 +57,13 @@ public class JNotepadTabPane extends TabPane { public JNotepadTab getSelected() { return (JNotepadTab) this.getSelectionModel().getSelectedItem(); } + + /** + * tab选中行为。 + * 应用当前菜单上选中的自动换行设置。 + */ + public void fireTabSelected() { + JNotepadTab selectedTab = getSelected(); + selectedTab.setAutoLine(GlobalConfig.getConfig().getAutoLineConfig()); + } } -- Gitee From 60d4de6832276472310ec504f7ca8975fae9de3c Mon Sep 17 00:00:00 2001 From: songdragon Date: Tue, 22 Aug 2023 13:14:29 +0800 Subject: [PATCH 2/2] =?UTF-8?q?doc:=20=E5=A2=9E=E5=8A=A0GlobalConfig?= =?UTF-8?q?=E6=B3=A8=E9=87=8A=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/jcnc/jnotepad/app/config/GlobalConfig.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/org/jcnc/jnotepad/app/config/GlobalConfig.java b/src/main/java/org/jcnc/jnotepad/app/config/GlobalConfig.java index 9782a8c..2d6f512 100644 --- a/src/main/java/org/jcnc/jnotepad/app/config/GlobalConfig.java +++ b/src/main/java/org/jcnc/jnotepad/app/config/GlobalConfig.java @@ -5,8 +5,16 @@ import org.jcnc.jnotepad.init.Config; import java.util.Properties; +/** + * 内存中,运行过程中的全局配置项 + * + * @author zhaoteng.song + */ public class GlobalConfig { + /** + * 自动换行配置key + */ public static final String TEXT_WRAP = "text.wrap"; private static final GlobalConfig APP_GLOBAL_CONFIG = new GlobalConfig(); -- Gitee