diff --git a/src/main/java/org/jcnc/jnotepad/Interface/ControllerInterface.java b/src/main/java/org/jcnc/jnotepad/Interface/ControllerInterface.java index 3914ac4b024d721bfc639585dfa669e28eea890b..98e7b0556886afd2b77fa51206a00cbc900f686b 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 0000000000000000000000000000000000000000..2d6f51287080e910519071a487c21cfb7d7a88c8 --- /dev/null +++ b/src/main/java/org/jcnc/jnotepad/app/config/GlobalConfig.java @@ -0,0 +1,46 @@ +package org.jcnc.jnotepad.app.config; + +import org.jcnc.jnotepad.Interface.ConfigInterface; +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(); + + 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 8c5af377b4c2abbdb96658db6e84b817d75fd9c3..a3c65fdc467ef09a931aeceff2e05df127f2677f 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 334db75e0c9078f4feccd80a9840ac06bec22e2a..db3448a2a5ec315a9748d280ce0e75131eddb3b8 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 a1c0d5bc4577f2b9b32bb574414d174ec0097ee5..1745d6ed457dd2f274d2407a0153d85bcfdb742d 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 7a59a9712a29501297177aa1f638af0879f23e09..4dfbc50d7cf77df8c03b1db581cc56b2b2e105d3 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 970aca9138bc4712566a4037b0175664b4dd6fe4..ca98c9bd3e52c1b1971ceffedfa17f0bbf45aa2f 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()); + } }