!139 refactor: #I85GVX 重构项目整体结构
Merge pull request !139 from Luke/refactor-I85GVX
This commit is contained in:
commit
325819f92e
@ -21,7 +21,7 @@ module org.jcnc.jnotepad {
|
||||
requires javafx.web;
|
||||
|
||||
exports org.jcnc.jnotepad;
|
||||
exports org.jcnc.jnotepad.model.enums;
|
||||
exports org.jcnc.jnotepad.cache.enums;
|
||||
exports org.jcnc.jnotepad.app.config;
|
||||
exports org.jcnc.jnotepad.app.i18n;
|
||||
exports org.jcnc.jnotepad.common.constants;
|
||||
@ -30,18 +30,20 @@ module org.jcnc.jnotepad {
|
||||
exports org.jcnc.jnotepad.controller.i18n;
|
||||
exports org.jcnc.jnotepad.controller.event.handler.setting;
|
||||
exports org.jcnc.jnotepad.controller.event.handler.menuitem;
|
||||
exports org.jcnc.jnotepad.api.util;
|
||||
exports org.jcnc.jnotepad.common.interfaces;
|
||||
exports org.jcnc.jnotepad.component.module.interfaces;
|
||||
opens org.jcnc.jnotepad.app.config;
|
||||
exports org.jcnc.jnotepad.plugin.interfaces;
|
||||
exports org.jcnc.jnotepad.views.root.bottom.function;
|
||||
exports org.jcnc.jnotepad.ui.dialog;
|
||||
exports org.jcnc.jnotepad.ui.dialog.interfaces;
|
||||
exports org.jcnc.jnotepad.ui.module;
|
||||
exports org.jcnc.jnotepad.model.entity;
|
||||
|
||||
exports org.jcnc.jnotepad.component.module;
|
||||
exports org.jcnc.jnotepad.cache.entity;
|
||||
exports org.jcnc.jnotepad.views.root.bottom;
|
||||
exports org.jcnc.jnotepad.views.root.bottom.status;
|
||||
exports org.jcnc.jnotepad.api.core.views.sidebar.bottom;
|
||||
exports org.jcnc.jnotepad.api.core.controller.config;
|
||||
exports org.jcnc.jnotepad.component.module.base;
|
||||
exports org.jcnc.jnotepad.component.stage.setting;
|
||||
exports org.jcnc.jnotepad.component.module.vbox;
|
||||
exports org.jcnc.jnotepad.component.module.hbox;
|
||||
|
||||
}
|
||||
@ -2,8 +2,8 @@ package org.jcnc.jnotepad;
|
||||
|
||||
import javafx.application.Application;
|
||||
import javafx.stage.Stage;
|
||||
import org.jcnc.jnotepad.api.util.LogUtil;
|
||||
import org.jcnc.jnotepad.app.manager.ApplicationManager;
|
||||
import org.jcnc.jnotepad.util.LogUtil;
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@ -1,10 +1,10 @@
|
||||
package org.jcnc.jnotepad.api.core.controller.config;
|
||||
|
||||
import org.jcnc.jnotepad.api.core.controller.interfaces.ConfigController;
|
||||
import org.jcnc.jnotepad.api.util.JsonUtil;
|
||||
import org.jcnc.jnotepad.api.util.LogUtil;
|
||||
import org.jcnc.jnotepad.api.util.PopUpUtil;
|
||||
import org.jcnc.jnotepad.exception.AppException;
|
||||
import org.jcnc.jnotepad.controller.exception.AppException;
|
||||
import org.jcnc.jnotepad.util.JsonUtil;
|
||||
import org.jcnc.jnotepad.util.LogUtil;
|
||||
import org.jcnc.jnotepad.util.PopUpUtil;
|
||||
import org.slf4j.Logger;
|
||||
|
||||
import java.io.BufferedWriter;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package org.jcnc.jnotepad.api.core.manager;
|
||||
|
||||
import org.jcnc.jnotepad.model.entity.Cache;
|
||||
import org.jcnc.jnotepad.cache.entity.Cache;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
|
||||
@ -7,8 +7,8 @@ import javafx.scene.control.CheckMenuItem;
|
||||
import javafx.scene.control.Menu;
|
||||
import javafx.scene.control.MenuItem;
|
||||
import javafx.scene.control.RadioMenuItem;
|
||||
import org.jcnc.jnotepad.api.util.LogUtil;
|
||||
import org.jcnc.jnotepad.app.i18n.UiResourceBundle;
|
||||
import org.jcnc.jnotepad.util.LogUtil;
|
||||
import org.jcnc.jnotepad.views.root.top.menubar.TopMenuBar;
|
||||
import org.slf4j.Logger;
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package org.jcnc.jnotepad.app.config;
|
||||
|
||||
import org.jcnc.jnotepad.model.entity.PluginDescriptor;
|
||||
import org.jcnc.jnotepad.cache.entity.PluginDescriptor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package org.jcnc.jnotepad.app.config;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import org.jcnc.jnotepad.model.entity.ShortcutKey;
|
||||
import org.jcnc.jnotepad.cache.entity.ShortcutKey;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@ -8,8 +8,6 @@ import javafx.scene.layout.Pane;
|
||||
import javafx.stage.Stage;
|
||||
import javafx.stage.Window;
|
||||
import org.jcnc.jnotepad.LunchApp;
|
||||
import org.jcnc.jnotepad.api.util.LogUtil;
|
||||
import org.jcnc.jnotepad.api.util.UiUtil;
|
||||
import org.jcnc.jnotepad.app.i18n.UiResourceBundle;
|
||||
import org.jcnc.jnotepad.common.constants.AppConstants;
|
||||
import org.jcnc.jnotepad.common.constants.TextConstants;
|
||||
@ -20,6 +18,8 @@ import org.jcnc.jnotepad.controller.config.PluginConfigController;
|
||||
import org.jcnc.jnotepad.controller.config.UserConfigController;
|
||||
import org.jcnc.jnotepad.controller.manager.Controller;
|
||||
import org.jcnc.jnotepad.plugin.manager.PluginManager;
|
||||
import org.jcnc.jnotepad.util.LogUtil;
|
||||
import org.jcnc.jnotepad.util.UiUtil;
|
||||
import org.jcnc.jnotepad.views.manager.*;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package org.jcnc.jnotepad.model.entity;
|
||||
package org.jcnc.jnotepad.cache.entity;
|
||||
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
@ -1,4 +1,4 @@
|
||||
package org.jcnc.jnotepad.model.entity;
|
||||
package org.jcnc.jnotepad.cache.entity;
|
||||
|
||||
import org.kordamp.ikonli.javafx.FontIcon;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package org.jcnc.jnotepad.model.entity;
|
||||
package org.jcnc.jnotepad.cache.entity;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import org.jcnc.jnotepad.plugin.interfaces.Plugin;
|
||||
@ -1,4 +1,4 @@
|
||||
package org.jcnc.jnotepad.model.entity;
|
||||
package org.jcnc.jnotepad.cache.entity;
|
||||
|
||||
|
||||
/**
|
||||
@ -1,4 +1,4 @@
|
||||
package org.jcnc.jnotepad.model.enums;
|
||||
package org.jcnc.jnotepad.cache.enums;
|
||||
|
||||
/**
|
||||
* 缓存过期时间枚举
|
||||
@ -1,4 +1,4 @@
|
||||
package org.jcnc.jnotepad.model.enums;
|
||||
package org.jcnc.jnotepad.cache.enums;
|
||||
|
||||
/**
|
||||
* 对话框类型
|
||||
@ -1,6 +1,6 @@
|
||||
package org.jcnc.jnotepad.common.manager;
|
||||
|
||||
import org.jcnc.jnotepad.api.util.LogUtil;
|
||||
import org.jcnc.jnotepad.util.LogUtil;
|
||||
import org.slf4j.Logger;
|
||||
|
||||
import java.util.concurrent.*;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package org.jcnc.jnotepad.ui.module;
|
||||
package org.jcnc.jnotepad.component.module;
|
||||
|
||||
import javafx.application.Platform;
|
||||
import javafx.geometry.Insets;
|
||||
@ -6,7 +6,6 @@ import javafx.scene.control.ContextMenu;
|
||||
import javafx.scene.control.MenuItem;
|
||||
import javafx.scene.input.KeyCode;
|
||||
import javafx.scene.input.KeyEvent;
|
||||
import org.fxmisc.richtext.CodeArea;
|
||||
import org.fxmisc.richtext.GenericStyledArea;
|
||||
import org.fxmisc.richtext.LineNumberFactory;
|
||||
import org.fxmisc.richtext.model.Paragraph;
|
||||
@ -31,7 +30,7 @@ import java.util.regex.Pattern;
|
||||
*
|
||||
* @author luke
|
||||
*/
|
||||
public class LineNumberTextArea extends CodeArea {
|
||||
public class CodeArea extends org.fxmisc.richtext.CodeArea {
|
||||
|
||||
private static final String[] KEYWORDS = new String[]{
|
||||
"abstract", "assert", "boolean", "break", "byte",
|
||||
@ -80,7 +79,7 @@ public class LineNumberTextArea extends CodeArea {
|
||||
* <p>
|
||||
* 用于创建 LineNumberTextArea 对象
|
||||
*/
|
||||
public LineNumberTextArea() {
|
||||
public CodeArea() {
|
||||
// 上、右、下、左
|
||||
this.setPadding(new Insets(8, 0, 0, 0));
|
||||
|
||||
@ -98,7 +97,7 @@ public class LineNumberTextArea extends CodeArea {
|
||||
|
||||
this.getVisibleParagraphs().addModificationObserver
|
||||
(
|
||||
new LineNumberTextArea.VisibleParagraphStyler<>(this, this::computeHighlighting)
|
||||
new CodeArea.VisibleParagraphStyler<>(this, this::computeHighlighting)
|
||||
);
|
||||
|
||||
// 自动缩进:在按下回车键时插入上一行的缩进
|
||||
@ -209,19 +208,19 @@ public class LineNumberTextArea extends CodeArea {
|
||||
* 折叠多行所选文本,仅显示第一行并隐藏其余部分。
|
||||
*/
|
||||
private void fold() {
|
||||
((CodeArea) getOwnerNode()).foldSelectedParagraphs();
|
||||
((org.fxmisc.richtext.CodeArea) getOwnerNode()).foldSelectedParagraphs();
|
||||
}
|
||||
|
||||
/**
|
||||
* 展开当前行/段落(如果有折叠)。
|
||||
*/
|
||||
private void unfold() {
|
||||
CodeArea area = (CodeArea) getOwnerNode();
|
||||
org.fxmisc.richtext.CodeArea area = (org.fxmisc.richtext.CodeArea) getOwnerNode();
|
||||
area.unfoldParagraphs(area.getCurrentParagraph());
|
||||
}
|
||||
|
||||
private void print() {
|
||||
System.out.println(((CodeArea) getOwnerNode()).getText());
|
||||
System.out.println(((org.fxmisc.richtext.CodeArea) getOwnerNode()).getText());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,8 +1,8 @@
|
||||
package org.jcnc.jnotepad.ui.module;
|
||||
package org.jcnc.jnotepad.component.module.base;
|
||||
|
||||
import javafx.scene.Node;
|
||||
import javafx.scene.layout.BorderPane;
|
||||
import org.jcnc.jnotepad.common.interfaces.BorderPaneAble;
|
||||
import org.jcnc.jnotepad.component.module.interfaces.BorderPaneAble;
|
||||
|
||||
/**
|
||||
* 抽象边界面板类
|
||||
@ -1,8 +1,8 @@
|
||||
package org.jcnc.jnotepad.ui.module;
|
||||
package org.jcnc.jnotepad.component.module.base;
|
||||
|
||||
import javafx.scene.Node;
|
||||
import javafx.scene.layout.HBox;
|
||||
import org.jcnc.jnotepad.common.interfaces.HorizontalBoxAble;
|
||||
import org.jcnc.jnotepad.component.module.interfaces.HorizontalBoxAble;
|
||||
|
||||
/**
|
||||
* 抽象水平盒子类
|
||||
@ -1,8 +1,8 @@
|
||||
package org.jcnc.jnotepad.ui.module;
|
||||
package org.jcnc.jnotepad.component.module.base;
|
||||
|
||||
import javafx.scene.Node;
|
||||
import javafx.scene.layout.VBox;
|
||||
import org.jcnc.jnotepad.common.interfaces.VerticalBoxAble;
|
||||
import org.jcnc.jnotepad.component.module.interfaces.VerticalBoxAble;
|
||||
|
||||
/**
|
||||
* 抽象垂直盒子类
|
||||
@ -1,4 +1,4 @@
|
||||
package org.jcnc.jnotepad.ui.titlebar;
|
||||
package org.jcnc.jnotepad.component.module.hbox;
|
||||
|
||||
import javafx.animation.TranslateTransition;
|
||||
import javafx.geometry.Pos;
|
||||
@ -16,10 +16,10 @@ import javafx.util.Duration;
|
||||
*
|
||||
* @author 许轲
|
||||
*/
|
||||
public class CustomTitleBar extends HBox {
|
||||
private static CustomTitleBar instance;
|
||||
public class CustomTitleBarBox extends HBox {
|
||||
private static CustomTitleBarBox instance;
|
||||
|
||||
public CustomTitleBar() {
|
||||
public CustomTitleBarBox() {
|
||||
// 设置样式和布局
|
||||
this.setAlignment(Pos.CENTER);
|
||||
|
||||
@ -69,9 +69,9 @@ public class CustomTitleBar extends HBox {
|
||||
*
|
||||
* @return CustomTitleBar的单例实例
|
||||
*/
|
||||
public static CustomTitleBar getInstance() {
|
||||
public static CustomTitleBarBox getInstance() {
|
||||
if (instance == null) {
|
||||
instance = new CustomTitleBar();
|
||||
instance = new CustomTitleBarBox();
|
||||
}
|
||||
return instance;
|
||||
}
|
||||
@ -1,4 +1,4 @@
|
||||
package org.jcnc.jnotepad.common.interfaces;
|
||||
package org.jcnc.jnotepad.component.module.interfaces;
|
||||
|
||||
import javafx.scene.Node;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package org.jcnc.jnotepad.common.interfaces;
|
||||
package org.jcnc.jnotepad.component.module.interfaces;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package org.jcnc.jnotepad.common.interfaces;
|
||||
package org.jcnc.jnotepad.component.module.interfaces;
|
||||
|
||||
import javafx.scene.Node;
|
||||
import javafx.scene.layout.HBox;
|
||||
@ -1,4 +1,4 @@
|
||||
package org.jcnc.jnotepad.common.interfaces;
|
||||
package org.jcnc.jnotepad.component.module.interfaces;
|
||||
|
||||
import javafx.scene.Node;
|
||||
import javafx.scene.layout.VBox;
|
||||
@ -1,4 +1,4 @@
|
||||
package org.jcnc.jnotepad.ui;
|
||||
package org.jcnc.jnotepad.component.module.vbox;
|
||||
|
||||
import javafx.animation.KeyFrame;
|
||||
import javafx.animation.Timeline;
|
||||
@ -10,7 +10,7 @@ import javafx.scene.layout.Priority;
|
||||
import javafx.scene.layout.VBox;
|
||||
import javafx.util.Duration;
|
||||
import org.fxmisc.richtext.StyleClassedTextArea;
|
||||
import org.jcnc.jnotepad.api.util.LogUtil;
|
||||
import org.jcnc.jnotepad.util.LogUtil;
|
||||
|
||||
import java.io.*;
|
||||
import java.nio.charset.Charset;
|
||||
@ -20,7 +20,7 @@ import java.nio.charset.Charset;
|
||||
*
|
||||
* @author luke
|
||||
*/
|
||||
public class CmdTerminal extends VBox {
|
||||
public class CmdTerminalBox extends VBox {
|
||||
|
||||
/**
|
||||
* 用于显示命令输出的文本区域
|
||||
@ -44,7 +44,7 @@ public class CmdTerminal extends VBox {
|
||||
/**
|
||||
* 创建CmdTerminal对象的构造函数。
|
||||
*/
|
||||
public CmdTerminal() {
|
||||
public CmdTerminalBox() {
|
||||
// 创建UI元素
|
||||
cmdOutput = new StyleClassedTextArea();
|
||||
cmdInput = new TextField();
|
||||
@ -1,13 +1,13 @@
|
||||
package org.jcnc.jnotepad.ui.dialog;
|
||||
package org.jcnc.jnotepad.component.stage.dialog;
|
||||
|
||||
import javafx.geometry.Insets;
|
||||
import javafx.geometry.Pos;
|
||||
import javafx.scene.image.Image;
|
||||
import javafx.stage.Modality;
|
||||
import javafx.stage.Stage;
|
||||
import org.jcnc.jnotepad.api.util.UiUtil;
|
||||
import org.jcnc.jnotepad.model.enums.DialogType;
|
||||
import org.jcnc.jnotepad.ui.dialog.interfaces.DialogButtonAction;
|
||||
import org.jcnc.jnotepad.cache.enums.DialogType;
|
||||
import org.jcnc.jnotepad.component.stage.dialog.interfaces.DialogButtonAction;
|
||||
import org.jcnc.jnotepad.util.UiUtil;
|
||||
import org.kordamp.ikonli.javafx.FontIcon;
|
||||
|
||||
/**
|
||||
@ -16,7 +16,7 @@ import org.kordamp.ikonli.javafx.FontIcon;
|
||||
* @author gewuyou
|
||||
*/
|
||||
public class AppDialogBuilder {
|
||||
private AppDialog appDialog;
|
||||
private AppDialogStage appDialogStage;
|
||||
private Image appIcon = UiUtil.getAppIcon();
|
||||
private String title;
|
||||
private String headerText;
|
||||
@ -87,9 +87,9 @@ public class AppDialogBuilder {
|
||||
}
|
||||
}
|
||||
|
||||
public AppDialog build() {
|
||||
appDialog = new AppDialog(this);
|
||||
return appDialog;
|
||||
public AppDialogStage build() {
|
||||
appDialogStage = new AppDialogStage(this);
|
||||
return appDialogStage;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -280,7 +280,7 @@ public class AppDialogBuilder {
|
||||
return this;
|
||||
}
|
||||
|
||||
public double getHBoxSpacing() {
|
||||
public double getBoxSpacing() {
|
||||
return hBoxSpacing;
|
||||
}
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package org.jcnc.jnotepad.ui.dialog;
|
||||
package org.jcnc.jnotepad.component.stage.dialog;
|
||||
|
||||
import javafx.scene.Scene;
|
||||
import javafx.scene.control.Button;
|
||||
@ -7,7 +7,7 @@ import javafx.scene.layout.BorderPane;
|
||||
import javafx.scene.layout.HBox;
|
||||
import javafx.scene.layout.VBox;
|
||||
import javafx.stage.Stage;
|
||||
import org.jcnc.jnotepad.ui.dialog.interfaces.DialogButtonAction;
|
||||
import org.jcnc.jnotepad.component.stage.dialog.interfaces.DialogButtonAction;
|
||||
|
||||
/**
|
||||
* 应用对话框
|
||||
@ -16,13 +16,13 @@ import org.jcnc.jnotepad.ui.dialog.interfaces.DialogButtonAction;
|
||||
*
|
||||
* @author luke gewuyou
|
||||
*/
|
||||
public class AppDialog extends Stage {
|
||||
public class AppDialogStage extends Stage {
|
||||
/**
|
||||
* 构造一个自定义提示框
|
||||
*
|
||||
* @param builder 提示框构建器
|
||||
*/
|
||||
public AppDialog(
|
||||
public AppDialogStage(
|
||||
AppDialogBuilder builder) {
|
||||
// 设置窗口图标
|
||||
this.getIcons().add(builder.getAppIcon());
|
||||
@ -46,7 +46,7 @@ public class AppDialog extends Stage {
|
||||
BorderPane borderPane = new BorderPane();
|
||||
HBox iconBox = new HBox(builder.getIcon());
|
||||
iconBox.setPadding(builder.getIconCoxPaddingInsets());
|
||||
VBox vbox = new VBox(builder.getHBoxSpacing());
|
||||
VBox vbox = new VBox(builder.getBoxSpacing());
|
||||
vbox.setAlignment(builder.getVboxPos());
|
||||
|
||||
Label label = new Label(builder.getHeaderText());
|
||||
@ -57,7 +57,7 @@ public class AppDialog extends Stage {
|
||||
Button confirmButton = createButton(builder.getLeftBtnText(), builder.getLeftBtnAction());
|
||||
Button cancelButton = createButton(builder.getRightBtnText(), builder.getRightBtnAction());
|
||||
|
||||
HBox hBox = new HBox(builder.getHBoxSpacing(), confirmButton, cancelButton);
|
||||
HBox hBox = new HBox(builder.getBoxSpacing(), confirmButton, cancelButton);
|
||||
hBox.setAlignment(builder.getHboxPos());
|
||||
hBox.setPadding(builder.gethBoxPaddingInsets());
|
||||
vbox.getChildren().addAll(label, customTextLabel, hBox);
|
||||
@ -1,4 +1,4 @@
|
||||
package org.jcnc.jnotepad.ui.dialog.factory;
|
||||
package org.jcnc.jnotepad.component.stage.dialog.factory;
|
||||
|
||||
import javafx.stage.DirectoryChooser;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package org.jcnc.jnotepad.ui.dialog.factory;
|
||||
package org.jcnc.jnotepad.component.stage.dialog.factory;
|
||||
|
||||
import javafx.stage.FileChooser;
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package org.jcnc.jnotepad.ui.dialog.factory.impl;
|
||||
package org.jcnc.jnotepad.component.stage.dialog.factory.impl;
|
||||
|
||||
import javafx.stage.DirectoryChooser;
|
||||
import org.jcnc.jnotepad.ui.dialog.factory.DirectoryChooserFactory;
|
||||
import org.jcnc.jnotepad.component.stage.dialog.factory.DirectoryChooserFactory;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package org.jcnc.jnotepad.ui.dialog.factory.impl;
|
||||
package org.jcnc.jnotepad.component.stage.dialog.factory.impl;
|
||||
|
||||
import javafx.stage.FileChooser;
|
||||
import org.jcnc.jnotepad.ui.dialog.factory.FileChooserFactory;
|
||||
import org.jcnc.jnotepad.component.stage.dialog.factory.FileChooserFactory;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
@ -1,6 +1,6 @@
|
||||
package org.jcnc.jnotepad.ui.dialog.interfaces;
|
||||
package org.jcnc.jnotepad.component.stage.dialog.interfaces;
|
||||
|
||||
import org.jcnc.jnotepad.ui.dialog.AppDialog;
|
||||
import org.jcnc.jnotepad.component.stage.dialog.AppDialogStage;
|
||||
|
||||
/**
|
||||
* 对话框按钮点击事件接口
|
||||
@ -10,10 +10,10 @@ import org.jcnc.jnotepad.ui.dialog.AppDialog;
|
||||
public interface DialogButtonAction {
|
||||
/**
|
||||
* 处理按钮的操作。子类必须实现此方法以定义按钮的行为
|
||||
* @param appDialog 对话框
|
||||
* @param appDialogStage 对话框
|
||||
* @apiNote
|
||||
* @since 2023/9/3 22:53
|
||||
*/
|
||||
|
||||
void handleAction(AppDialog appDialog);
|
||||
void handleAction(AppDialogStage appDialogStage);
|
||||
}
|
||||
@ -1,4 +1,4 @@
|
||||
package org.jcnc.jnotepad.ui.module;
|
||||
package org.jcnc.jnotepad.component.stage.setting;
|
||||
|
||||
import javafx.scene.control.Button;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package org.jcnc.jnotepad.ui.setstage;
|
||||
package org.jcnc.jnotepad.component.stage.setting;
|
||||
|
||||
import javafx.geometry.Insets;
|
||||
import javafx.scene.Scene;
|
||||
@ -7,10 +7,10 @@ import javafx.scene.control.Label;
|
||||
import javafx.scene.layout.HBox;
|
||||
import javafx.scene.layout.VBox;
|
||||
import javafx.stage.Stage;
|
||||
import org.jcnc.jnotepad.api.util.LogUtil;
|
||||
import org.jcnc.jnotepad.api.util.PopUpUtil;
|
||||
import org.jcnc.jnotepad.api.util.UiUtil;
|
||||
import org.jcnc.jnotepad.app.manager.ApplicationManager;
|
||||
import org.jcnc.jnotepad.util.LogUtil;
|
||||
import org.jcnc.jnotepad.util.PopUpUtil;
|
||||
import org.jcnc.jnotepad.util.UiUtil;
|
||||
import org.slf4j.Logger;
|
||||
|
||||
/**
|
||||
@ -1,4 +1,4 @@
|
||||
package org.jcnc.jnotepad.ui.setstage;
|
||||
package org.jcnc.jnotepad.component.stage.setting;
|
||||
|
||||
import atlantafx.base.controls.Notification;
|
||||
import atlantafx.base.theme.Styles;
|
||||
@ -18,8 +18,8 @@ import javafx.scene.layout.HBox;
|
||||
import javafx.scene.layout.VBox;
|
||||
import javafx.stage.Stage;
|
||||
import org.jcnc.jnotepad.api.core.ui.stage.AbstractPaneStage;
|
||||
import org.jcnc.jnotepad.api.util.LogUtil;
|
||||
import org.jcnc.jnotepad.api.util.UiUtil;
|
||||
import org.jcnc.jnotepad.util.LogUtil;
|
||||
import org.jcnc.jnotepad.util.UiUtil;
|
||||
import org.jcnc.jnotepad.views.manager.RootManager;
|
||||
|
||||
import static org.jcnc.jnotepad.common.constants.AppConstants.*;
|
||||
@ -1,4 +1,4 @@
|
||||
package org.jcnc.jnotepad.ui.module;
|
||||
package org.jcnc.jnotepad.component.stage.setting;
|
||||
|
||||
import javafx.event.ActionEvent;
|
||||
import javafx.event.EventHandler;
|
||||
@ -26,7 +26,7 @@ import javafx.scene.layout.VBox;
|
||||
* @author luke
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public class SettingsComponent extends VBox {
|
||||
public class SetDevBox extends VBox {
|
||||
private final Label label;
|
||||
private final Button button;
|
||||
|
||||
@ -36,7 +36,7 @@ public class SettingsComponent extends VBox {
|
||||
* @param labelText 标签文本
|
||||
* @param buttonText 按钮文本
|
||||
*/
|
||||
public SettingsComponent(String labelText, String buttonText) {
|
||||
public SetDevBox(String labelText, String buttonText) {
|
||||
setSpacing(10);
|
||||
|
||||
// 初始化标签
|
||||
@ -1,4 +1,4 @@
|
||||
package org.jcnc.jnotepad.ui.setstage;
|
||||
package org.jcnc.jnotepad.component.stage.setting;
|
||||
|
||||
import atlantafx.base.controls.CustomTextField;
|
||||
import atlantafx.base.theme.Styles;
|
||||
@ -16,10 +16,8 @@ import javafx.scene.text.Font;
|
||||
import javafx.scene.text.Text;
|
||||
import javafx.stage.Modality;
|
||||
import javafx.stage.Stage;
|
||||
import org.jcnc.jnotepad.api.util.UiUtil;
|
||||
import org.jcnc.jnotepad.plugin.PluginManagerInterface;
|
||||
import org.jcnc.jnotepad.ui.module.CustomSetButton;
|
||||
import org.jcnc.jnotepad.ui.module.SettingsComponent;
|
||||
import org.jcnc.jnotepad.util.UiUtil;
|
||||
|
||||
import static org.jcnc.jnotepad.common.constants.AppConstants.SCREEN_LENGTH;
|
||||
import static org.jcnc.jnotepad.common.constants.AppConstants.SCREEN_WIDTH;
|
||||
@ -198,7 +196,7 @@ public class SetStage extends Stage {
|
||||
VBox generalLayout = new VBox(10);
|
||||
generalLayout.setPadding(new Insets(25));
|
||||
|
||||
SettingsComponent devBox = new SettingsComponent("打开开发者调试页面", DEVELOPER_DEBUG_PAGE);
|
||||
SetDevBox devBox = new SetDevBox("打开开发者调试页面", DEVELOPER_DEBUG_PAGE);
|
||||
devBox.setButtonAction(event -> {
|
||||
// 创建并启动DeveloperDebugPage
|
||||
DeveloperDebugStage debugPage = new DeveloperDebugStage();
|
||||
@ -1,4 +1,4 @@
|
||||
package org.jcnc.jnotepad.ui.setstage.pluginstage;
|
||||
package org.jcnc.jnotepad.component.stage.setting.plugin;
|
||||
|
||||
import javafx.geometry.Orientation;
|
||||
import javafx.scene.control.SplitPane;
|
||||
@ -1,4 +1,4 @@
|
||||
package org.jcnc.jnotepad.ui.setstage.pluginstage;
|
||||
package org.jcnc.jnotepad.component.stage.setting.plugin;
|
||||
|
||||
import atlantafx.base.controls.Tile;
|
||||
import atlantafx.base.controls.ToggleSwitch;
|
||||
@ -26,12 +26,12 @@ import javafx.stage.Stage;
|
||||
import org.commonmark.parser.Parser;
|
||||
import org.commonmark.renderer.html.HtmlRenderer;
|
||||
import org.jcnc.jnotepad.api.core.ui.stage.AbstractPaneStage;
|
||||
import org.jcnc.jnotepad.api.util.LogUtil;
|
||||
import org.jcnc.jnotepad.api.util.PopUpUtil;
|
||||
import org.jcnc.jnotepad.api.util.UiUtil;
|
||||
import org.jcnc.jnotepad.model.entity.PluginDescriptor;
|
||||
import org.jcnc.jnotepad.cache.entity.PluginDescriptor;
|
||||
import org.jcnc.jnotepad.component.stage.setting.CustomSetButton;
|
||||
import org.jcnc.jnotepad.plugin.manager.PluginManager;
|
||||
import org.jcnc.jnotepad.ui.module.CustomSetButton;
|
||||
import org.jcnc.jnotepad.util.LogUtil;
|
||||
import org.jcnc.jnotepad.util.PopUpUtil;
|
||||
import org.jcnc.jnotepad.util.UiUtil;
|
||||
import org.slf4j.Logger;
|
||||
|
||||
import java.awt.*;
|
||||
@ -1,10 +1,10 @@
|
||||
package org.jcnc.jnotepad.controller;
|
||||
|
||||
import org.jcnc.jnotepad.api.util.LogUtil;
|
||||
import org.jcnc.jnotepad.controller.config.PluginConfigController;
|
||||
import org.jcnc.jnotepad.controller.exception.AppException;
|
||||
import org.jcnc.jnotepad.controller.i18n.LocalizationController;
|
||||
import org.jcnc.jnotepad.exception.AppException;
|
||||
import org.jcnc.jnotepad.plugin.PluginLoader;
|
||||
import org.jcnc.jnotepad.util.LogUtil;
|
||||
import org.slf4j.Logger;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
package org.jcnc.jnotepad.controller.cache;
|
||||
|
||||
import com.fasterxml.jackson.core.type.TypeReference;
|
||||
import org.jcnc.jnotepad.api.util.JsonUtil;
|
||||
import org.jcnc.jnotepad.api.util.LogUtil;
|
||||
import org.jcnc.jnotepad.cache.entity.Cache;
|
||||
import org.jcnc.jnotepad.common.manager.ApplicationCacheManager;
|
||||
import org.jcnc.jnotepad.controller.config.AppConfigController;
|
||||
import org.jcnc.jnotepad.model.entity.Cache;
|
||||
import org.jcnc.jnotepad.util.JsonUtil;
|
||||
import org.jcnc.jnotepad.util.LogUtil;
|
||||
import org.slf4j.Logger;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
@ -2,7 +2,7 @@ package org.jcnc.jnotepad.controller.config;
|
||||
|
||||
import org.jcnc.jnotepad.api.core.controller.config.BaseConfigController;
|
||||
import org.jcnc.jnotepad.app.config.UserConfig;
|
||||
import org.jcnc.jnotepad.model.entity.ShortcutKey;
|
||||
import org.jcnc.jnotepad.cache.entity.ShortcutKey;
|
||||
|
||||
import java.nio.file.Paths;
|
||||
import java.util.ArrayList;
|
||||
|
||||
@ -6,7 +6,7 @@ import javafx.scene.control.Tab;
|
||||
import org.jcnc.jnotepad.app.i18n.UiResourceBundle;
|
||||
import org.jcnc.jnotepad.common.constants.AppConstants;
|
||||
import org.jcnc.jnotepad.common.constants.TextConstants;
|
||||
import org.jcnc.jnotepad.ui.module.LineNumberTextArea;
|
||||
import org.jcnc.jnotepad.component.module.CodeArea;
|
||||
import org.jcnc.jnotepad.views.manager.BottomStatusBoxManager;
|
||||
import org.jcnc.jnotepad.views.manager.CenterTabPaneManager;
|
||||
import org.jcnc.jnotepad.views.root.center.main.center.tab.CenterTab;
|
||||
@ -38,7 +38,7 @@ public class NewFile implements EventHandler<ActionEvent> {
|
||||
*/
|
||||
public void addNewFileTab() {
|
||||
// 创建一个新的文本编辑区
|
||||
LineNumberTextArea textArea = new LineNumberTextArea();
|
||||
CodeArea textArea = new CodeArea();
|
||||
// TODO: refactor:统一TextArea新建、绑定监听器入口
|
||||
// 设定初始索引
|
||||
int index = 1;
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
package org.jcnc.jnotepad.controller.event.handler.menuitem;
|
||||
|
||||
import javafx.event.ActionEvent;
|
||||
import org.jcnc.jnotepad.api.util.LogUtil;
|
||||
import org.jcnc.jnotepad.controller.config.UserConfigController;
|
||||
import org.jcnc.jnotepad.util.LogUtil;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
|
||||
@ -3,15 +3,15 @@ package org.jcnc.jnotepad.controller.event.handler.menuitem;
|
||||
|
||||
import javafx.event.ActionEvent;
|
||||
import javafx.event.EventHandler;
|
||||
import org.jcnc.jnotepad.api.util.FileUtil;
|
||||
import org.jcnc.jnotepad.api.util.UiUtil;
|
||||
import org.jcnc.jnotepad.app.i18n.UiResourceBundle;
|
||||
import org.jcnc.jnotepad.cache.entity.Cache;
|
||||
import org.jcnc.jnotepad.cache.entity.DirFileModel;
|
||||
import org.jcnc.jnotepad.cache.enums.CacheExpirationTime;
|
||||
import org.jcnc.jnotepad.common.constants.TextConstants;
|
||||
import org.jcnc.jnotepad.common.manager.ApplicationCacheManager;
|
||||
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.component.stage.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;
|
||||
|
||||
@ -4,16 +4,16 @@ import javafx.event.ActionEvent;
|
||||
import javafx.event.EventHandler;
|
||||
import javafx.scene.control.Tab;
|
||||
import javafx.stage.FileChooser;
|
||||
import org.jcnc.jnotepad.api.util.EncodingDetector;
|
||||
import org.jcnc.jnotepad.api.util.LogUtil;
|
||||
import org.jcnc.jnotepad.api.util.UiUtil;
|
||||
import org.jcnc.jnotepad.app.i18n.UiResourceBundle;
|
||||
import org.jcnc.jnotepad.cache.entity.Cache;
|
||||
import org.jcnc.jnotepad.cache.enums.CacheExpirationTime;
|
||||
import org.jcnc.jnotepad.common.constants.TextConstants;
|
||||
import org.jcnc.jnotepad.common.manager.ApplicationCacheManager;
|
||||
import org.jcnc.jnotepad.model.entity.Cache;
|
||||
import org.jcnc.jnotepad.model.enums.CacheExpirationTime;
|
||||
import org.jcnc.jnotepad.ui.dialog.factory.impl.BasicFileChooserFactory;
|
||||
import org.jcnc.jnotepad.ui.module.LineNumberTextArea;
|
||||
import org.jcnc.jnotepad.component.module.CodeArea;
|
||||
import org.jcnc.jnotepad.component.stage.dialog.factory.impl.BasicFileChooserFactory;
|
||||
import org.jcnc.jnotepad.util.EncodingDetector;
|
||||
import org.jcnc.jnotepad.util.LogUtil;
|
||||
import org.jcnc.jnotepad.util.UiUtil;
|
||||
import org.jcnc.jnotepad.views.manager.CenterTabPaneManager;
|
||||
import org.jcnc.jnotepad.views.root.center.main.center.tab.CenterTab;
|
||||
import org.jcnc.jnotepad.views.root.center.main.center.tab.CenterTabPane;
|
||||
@ -21,7 +21,8 @@ import org.jcnc.jnotepad.views.root.center.main.center.tab.CenterTabPane;
|
||||
import java.io.File;
|
||||
import java.nio.charset.Charset;
|
||||
|
||||
import static org.jcnc.jnotepad.api.util.FileUtil.getFileText;
|
||||
import static org.jcnc.jnotepad.util.FileUtil.getFileText;
|
||||
|
||||
|
||||
/**
|
||||
* 打开文件的事件处理程序。
|
||||
@ -92,7 +93,7 @@ public class OpenFile implements EventHandler<ActionEvent> {
|
||||
* @param file 文件对象
|
||||
*/
|
||||
public static void getText(File file) {
|
||||
LineNumberTextArea textArea = createNewTextArea();
|
||||
CodeArea textArea = createNewTextArea();
|
||||
// 检测文件编码
|
||||
Charset encoding = EncodingDetector.detectEncodingCharset(file);
|
||||
String fileText = getFileText(file, encoding);
|
||||
@ -114,8 +115,8 @@ public class OpenFile implements EventHandler<ActionEvent> {
|
||||
*
|
||||
* @return 新的文本区域
|
||||
*/
|
||||
private static LineNumberTextArea createNewTextArea() {
|
||||
return new LineNumberTextArea();
|
||||
private static CodeArea createNewTextArea() {
|
||||
return new CodeArea();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -125,7 +126,7 @@ public class OpenFile implements EventHandler<ActionEvent> {
|
||||
* @param textArea 文本区域
|
||||
* @return 新的标签页
|
||||
*/
|
||||
private static CenterTab createNewTab(String tabName, LineNumberTextArea textArea, Charset charset) {
|
||||
private static CenterTab createNewTab(String tabName, CodeArea textArea, Charset charset) {
|
||||
return new CenterTab(tabName, textArea, charset);
|
||||
}
|
||||
}
|
||||
|
||||
@ -5,12 +5,12 @@ import javafx.event.EventHandler;
|
||||
import javafx.scene.control.TextField;
|
||||
import javafx.scene.input.KeyCode;
|
||||
import javafx.stage.FileChooser;
|
||||
import org.jcnc.jnotepad.api.util.LogUtil;
|
||||
import org.jcnc.jnotepad.api.util.PopUpUtil;
|
||||
import org.jcnc.jnotepad.api.util.UiUtil;
|
||||
import org.jcnc.jnotepad.app.i18n.UiResourceBundle;
|
||||
import org.jcnc.jnotepad.common.constants.TextConstants;
|
||||
import org.jcnc.jnotepad.ui.dialog.factory.impl.BasicFileChooserFactory;
|
||||
import org.jcnc.jnotepad.component.stage.dialog.factory.impl.BasicFileChooserFactory;
|
||||
import org.jcnc.jnotepad.util.LogUtil;
|
||||
import org.jcnc.jnotepad.util.PopUpUtil;
|
||||
import org.jcnc.jnotepad.util.UiUtil;
|
||||
import org.jcnc.jnotepad.views.manager.CenterTabPaneManager;
|
||||
import org.jcnc.jnotepad.views.root.center.main.center.tab.CenterTab;
|
||||
import org.jcnc.jnotepad.views.root.center.main.center.tab.CenterTabPane;
|
||||
|
||||
@ -1,8 +1,7 @@
|
||||
package org.jcnc.jnotepad.controller.event.handler.menuitem;
|
||||
|
||||
import javafx.event.ActionEvent;
|
||||
import org.jcnc.jnotepad.api.util.LogUtil;
|
||||
|
||||
import org.jcnc.jnotepad.util.LogUtil;
|
||||
|
||||
/**
|
||||
* 保存文件事件处理器。
|
||||
|
||||
@ -3,16 +3,16 @@ package org.jcnc.jnotepad.controller.event.handler.menuitem;
|
||||
import javafx.event.ActionEvent;
|
||||
import javafx.event.EventHandler;
|
||||
import javafx.stage.FileChooser;
|
||||
import org.jcnc.jnotepad.api.util.LogUtil;
|
||||
import org.jcnc.jnotepad.api.util.UiUtil;
|
||||
import org.jcnc.jnotepad.app.i18n.UiResourceBundle;
|
||||
import org.jcnc.jnotepad.cache.entity.Cache;
|
||||
import org.jcnc.jnotepad.cache.enums.CacheExpirationTime;
|
||||
import org.jcnc.jnotepad.common.constants.TextConstants;
|
||||
import org.jcnc.jnotepad.common.manager.ApplicationCacheManager;
|
||||
import org.jcnc.jnotepad.component.stage.dialog.factory.impl.BasicFileChooserFactory;
|
||||
import org.jcnc.jnotepad.controller.config.UserConfigController;
|
||||
import org.jcnc.jnotepad.controller.i18n.LocalizationController;
|
||||
import org.jcnc.jnotepad.model.entity.Cache;
|
||||
import org.jcnc.jnotepad.model.enums.CacheExpirationTime;
|
||||
import org.jcnc.jnotepad.ui.dialog.factory.impl.BasicFileChooserFactory;
|
||||
import org.jcnc.jnotepad.util.LogUtil;
|
||||
import org.jcnc.jnotepad.util.UiUtil;
|
||||
import org.jcnc.jnotepad.views.manager.CenterTabPaneManager;
|
||||
import org.jcnc.jnotepad.views.manager.TopMenuBarManager;
|
||||
import org.jcnc.jnotepad.views.root.center.main.center.tab.CenterTab;
|
||||
|
||||
@ -2,7 +2,7 @@ package org.jcnc.jnotepad.controller.event.handler.setting;
|
||||
|
||||
import javafx.event.ActionEvent;
|
||||
import javafx.event.EventHandler;
|
||||
import org.jcnc.jnotepad.ui.setstage.SetStage;
|
||||
import org.jcnc.jnotepad.component.stage.setting.SetStage;
|
||||
|
||||
/**
|
||||
* 设置按钮事件的事件处理程序。
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package org.jcnc.jnotepad.exception;
|
||||
package org.jcnc.jnotepad.controller.exception;
|
||||
|
||||
/**
|
||||
* 应用异常类,用于处理应用程序中的异常情况。
|
||||
@ -1,7 +1,7 @@
|
||||
package org.jcnc.jnotepad.controller.manager;
|
||||
|
||||
import org.jcnc.jnotepad.common.interfaces.ControllerAble;
|
||||
import org.jcnc.jnotepad.common.manager.ApplicationCacheManager;
|
||||
import org.jcnc.jnotepad.component.module.interfaces.ControllerAble;
|
||||
import org.jcnc.jnotepad.controller.event.handler.menuitem.NewFile;
|
||||
import org.jcnc.jnotepad.controller.event.handler.menuitem.OpenFile;
|
||||
|
||||
|
||||
@ -1,13 +1,13 @@
|
||||
package org.jcnc.jnotepad.plugin;
|
||||
|
||||
import org.jcnc.jnotepad.api.util.JsonUtil;
|
||||
import org.jcnc.jnotepad.api.util.LogUtil;
|
||||
import org.jcnc.jnotepad.cache.entity.PluginDescriptor;
|
||||
import org.jcnc.jnotepad.common.manager.ThreadPoolManager;
|
||||
import org.jcnc.jnotepad.controller.config.PluginConfigController;
|
||||
import org.jcnc.jnotepad.exception.AppException;
|
||||
import org.jcnc.jnotepad.model.entity.PluginDescriptor;
|
||||
import org.jcnc.jnotepad.controller.exception.AppException;
|
||||
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;
|
||||
|
||||
import java.io.*;
|
||||
|
||||
@ -6,11 +6,11 @@ import javafx.scene.control.Label;
|
||||
import javafx.scene.layout.VBox;
|
||||
import javafx.stage.FileChooser;
|
||||
import javafx.stage.Stage;
|
||||
import org.jcnc.jnotepad.api.util.LogUtil;
|
||||
import org.jcnc.jnotepad.api.util.PopUpUtil;
|
||||
import org.jcnc.jnotepad.api.util.UiUtil;
|
||||
import org.jcnc.jnotepad.component.stage.dialog.factory.impl.BasicFileChooserFactory;
|
||||
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;
|
||||
import org.jcnc.jnotepad.util.UiUtil;
|
||||
import org.slf4j.Logger;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
package org.jcnc.jnotepad.plugin.manager;
|
||||
|
||||
import org.jcnc.jnotepad.api.util.LogUtil;
|
||||
import org.jcnc.jnotepad.api.util.PopUpUtil;
|
||||
import org.jcnc.jnotepad.app.manager.ApplicationManager;
|
||||
import org.jcnc.jnotepad.cache.entity.PluginDescriptor;
|
||||
import org.jcnc.jnotepad.common.manager.ThreadPoolManager;
|
||||
import org.jcnc.jnotepad.controller.config.PluginConfigController;
|
||||
import org.jcnc.jnotepad.model.entity.PluginDescriptor;
|
||||
import org.jcnc.jnotepad.util.LogUtil;
|
||||
import org.jcnc.jnotepad.util.PopUpUtil;
|
||||
import org.slf4j.Logger;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
@ -1,80 +0,0 @@
|
||||
package org.jcnc.jnotepad.ui.module;
|
||||
|
||||
import javafx.application.Platform;
|
||||
import javafx.scene.control.TextField;
|
||||
import javafx.scene.input.KeyCode;
|
||||
import javafx.scene.layout.BorderPane;
|
||||
import org.fxmisc.richtext.CodeArea;
|
||||
import org.fxmisc.richtext.LineNumberFactory;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
|
||||
/**
|
||||
* 终端仿真器组件,用于执行命令并显示输出。
|
||||
* <p>
|
||||
* 该组件包括一个用于输入命令的文本字段和一个显示命令输出的CodeArea。
|
||||
* 用户可以在文本字段中输入命令,按回车键执行,并在CodeArea中查看输出。
|
||||
*
|
||||
* @author luke
|
||||
*/
|
||||
public class TerminalEmulatorComponent extends BorderPane {
|
||||
|
||||
private CodeArea terminalOutput;
|
||||
|
||||
/**
|
||||
* 创建一个新的终端仿真器组件。
|
||||
*/
|
||||
public TerminalEmulatorComponent() {
|
||||
init();
|
||||
}
|
||||
|
||||
private void init() {
|
||||
terminalOutput = new CodeArea();
|
||||
TextField commandInput = new TextField();
|
||||
|
||||
// 设置行号
|
||||
terminalOutput.setParagraphGraphicFactory(LineNumberFactory.get(terminalOutput));
|
||||
|
||||
commandInput.setOnKeyPressed(event -> {
|
||||
if (event.getCode() == KeyCode.ENTER) {
|
||||
String command = commandInput.getText();
|
||||
executeCommand(command);
|
||||
commandInput.clear();
|
||||
}
|
||||
});
|
||||
|
||||
setCenter(terminalOutput);
|
||||
setBottom(commandInput);
|
||||
}
|
||||
|
||||
private void executeCommand(String command) {
|
||||
try {
|
||||
ProcessBuilder processBuilder = new ProcessBuilder(command.split(" "));
|
||||
processBuilder.redirectErrorStream(true);
|
||||
Process process = processBuilder.start();
|
||||
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream(), "GBK"));
|
||||
String line;
|
||||
while ((line = reader.readLine()) != null) {
|
||||
appendToTerminalOutput(line + "\n");
|
||||
}
|
||||
|
||||
int exitCode = process.waitFor();
|
||||
appendToTerminalOutput("Exit Code: " + exitCode + "\n");
|
||||
|
||||
} catch (IOException | InterruptedException e) {
|
||||
appendToTerminalOutput("Error: " + e.getMessage() + "\n");
|
||||
}
|
||||
}
|
||||
|
||||
private void appendToTerminalOutput(String text) {
|
||||
Platform.runLater(() -> {
|
||||
terminalOutput.appendText(text);
|
||||
// 将滚动条滚动到最后一行
|
||||
terminalOutput.moveTo(terminalOutput.getLength());
|
||||
terminalOutput.requestFollowCaret();
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -1,4 +1,4 @@
|
||||
package org.jcnc.jnotepad.api.util;
|
||||
package org.jcnc.jnotepad.util;
|
||||
|
||||
import com.ibm.icu.text.CharsetDetector;
|
||||
import com.ibm.icu.text.CharsetMatch;
|
||||
@ -1,8 +1,8 @@
|
||||
package org.jcnc.jnotepad.api.util;
|
||||
package org.jcnc.jnotepad.util;
|
||||
|
||||
import org.jcnc.jnotepad.cache.entity.DirFileModel;
|
||||
import org.jcnc.jnotepad.controller.event.handler.menuitem.OpenFile;
|
||||
import org.jcnc.jnotepad.exception.AppException;
|
||||
import org.jcnc.jnotepad.model.entity.DirFileModel;
|
||||
import org.jcnc.jnotepad.controller.exception.AppException;
|
||||
import org.kordamp.ikonli.javafx.FontIcon;
|
||||
|
||||
import java.io.*;
|
||||
@ -1,4 +1,4 @@
|
||||
package org.jcnc.jnotepad.api.util;
|
||||
package org.jcnc.jnotepad.util;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.core.type.TypeReference;
|
||||
@ -6,7 +6,7 @@ import com.fasterxml.jackson.core.util.DefaultIndenter;
|
||||
import com.fasterxml.jackson.core.util.DefaultPrettyPrinter;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.SerializationFeature;
|
||||
import org.jcnc.jnotepad.exception.AppException;
|
||||
import org.jcnc.jnotepad.controller.exception.AppException;
|
||||
|
||||
import static com.fasterxml.jackson.core.util.DefaultIndenter.SYS_LF;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package org.jcnc.jnotepad.api.util;
|
||||
package org.jcnc.jnotepad.util;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@ -1,8 +1,8 @@
|
||||
package org.jcnc.jnotepad.api.util;
|
||||
package org.jcnc.jnotepad.util;
|
||||
|
||||
import org.jcnc.jnotepad.model.enums.DialogType;
|
||||
import org.jcnc.jnotepad.ui.dialog.AppDialogBuilder;
|
||||
import org.jcnc.jnotepad.ui.dialog.interfaces.DialogButtonAction;
|
||||
import org.jcnc.jnotepad.cache.enums.DialogType;
|
||||
import org.jcnc.jnotepad.component.stage.dialog.AppDialogBuilder;
|
||||
import org.jcnc.jnotepad.component.stage.dialog.interfaces.DialogButtonAction;
|
||||
|
||||
/**
|
||||
* 弹窗工具类
|
||||
@ -1,4 +1,4 @@
|
||||
package org.jcnc.jnotepad.api.util;
|
||||
package org.jcnc.jnotepad.util;
|
||||
|
||||
import atlantafx.base.theme.Styles;
|
||||
import javafx.scene.image.Image;
|
||||
@ -7,7 +7,7 @@ import javafx.scene.control.Label;
|
||||
import javafx.scene.layout.HBox;
|
||||
import org.jcnc.jnotepad.app.i18n.UiResourceBundle;
|
||||
import org.jcnc.jnotepad.common.constants.TextConstants;
|
||||
import org.jcnc.jnotepad.ui.module.LineNumberTextArea;
|
||||
import org.jcnc.jnotepad.component.module.CodeArea;
|
||||
import org.jcnc.jnotepad.views.root.bottom.status.BottomStatusBox;
|
||||
import org.jcnc.jnotepad.views.root.center.main.center.tab.CenterTab;
|
||||
|
||||
@ -106,7 +106,7 @@ public class BottomStatusBoxManager {
|
||||
if (instance.getSelected() == null) {
|
||||
return;
|
||||
}
|
||||
LineNumberTextArea textArea = instance.getSelected().getLineNumberTextArea();
|
||||
CodeArea textArea = instance.getSelected().getLineNumberTextArea();
|
||||
int caretPosition = textArea.getCaretPosition();
|
||||
int row = getRow(caretPosition, textArea.getText());
|
||||
int column = getColumn(caretPosition, textArea.getText());
|
||||
@ -128,7 +128,7 @@ public class BottomStatusBoxManager {
|
||||
updateEncodingLabel(centerTab.getCharset().name());
|
||||
|
||||
// 添加光标位置变化监听器
|
||||
LineNumberTextArea textArea = centerTab.getLineNumberTextArea();
|
||||
CodeArea textArea = centerTab.getLineNumberTextArea();
|
||||
textArea.caretPositionProperty().addListener((ChangeListener<Number>) (observable, oldValue, newValue) -> updateRowColumnLabel(textArea.getCaretPosition(), textArea.getText()));
|
||||
}
|
||||
}
|
||||
|
||||
@ -3,12 +3,12 @@ package org.jcnc.jnotepad.views.manager;
|
||||
import javafx.collections.ObservableList;
|
||||
import javafx.scene.control.Tab;
|
||||
import javafx.stage.Stage;
|
||||
import org.jcnc.jnotepad.api.util.FileUtil;
|
||||
import org.jcnc.jnotepad.api.util.PopUpUtil;
|
||||
import org.jcnc.jnotepad.cache.enums.CacheExpirationTime;
|
||||
import org.jcnc.jnotepad.common.manager.ApplicationCacheManager;
|
||||
import org.jcnc.jnotepad.component.module.CodeArea;
|
||||
import org.jcnc.jnotepad.controller.config.UserConfigController;
|
||||
import org.jcnc.jnotepad.model.enums.CacheExpirationTime;
|
||||
import org.jcnc.jnotepad.ui.module.LineNumberTextArea;
|
||||
import org.jcnc.jnotepad.util.FileUtil;
|
||||
import org.jcnc.jnotepad.util.PopUpUtil;
|
||||
import org.jcnc.jnotepad.views.root.center.main.center.tab.CenterTab;
|
||||
import org.jcnc.jnotepad.views.root.center.main.center.tab.CenterTabPane;
|
||||
import org.jcnc.jnotepad.views.root.top.menubar.TopMenuBar;
|
||||
@ -79,7 +79,7 @@ public class CenterTabPaneManager {
|
||||
}
|
||||
if (tab.isRelevance()) {
|
||||
// 获取当前文本域对象
|
||||
LineNumberTextArea lineNumberTextArea = tab.getLineNumberTextArea();
|
||||
CodeArea codeArea = tab.getLineNumberTextArea();
|
||||
// 获取当前标签页对应文件上次修改时间
|
||||
Long lastModifiedTime = tab.getLastModifiedTimeOfAssociatedFile();
|
||||
// 获取对应文件上次修改时间
|
||||
@ -95,8 +95,8 @@ public class CenterTabPaneManager {
|
||||
PopUpUtil.questionAlert(
|
||||
"重新加载", file.getAbsolutePath(), "此文件已被外部修改,是否重新加载该文件?",
|
||||
appDialog -> {
|
||||
lineNumberTextArea.clear();
|
||||
lineNumberTextArea.appendText(fileText);
|
||||
codeArea.clear();
|
||||
codeArea.appendText(fileText);
|
||||
appDialog.close();
|
||||
}, Stage::close, "是", "否");
|
||||
}
|
||||
|
||||
@ -3,10 +3,10 @@ package org.jcnc.jnotepad.views.manager;
|
||||
import javafx.beans.value.ChangeListener;
|
||||
import javafx.scene.control.SplitPane;
|
||||
import javafx.scene.control.TreeItem;
|
||||
import org.jcnc.jnotepad.api.util.FileUtil;
|
||||
import org.jcnc.jnotepad.cache.entity.DirFileModel;
|
||||
import org.jcnc.jnotepad.common.manager.ApplicationCacheManager;
|
||||
import org.jcnc.jnotepad.controller.event.handler.menuitem.OpenDirectory;
|
||||
import org.jcnc.jnotepad.model.entity.DirFileModel;
|
||||
import org.jcnc.jnotepad.util.FileUtil;
|
||||
import org.jcnc.jnotepad.views.root.center.main.MainBorderPane;
|
||||
import org.jcnc.jnotepad.views.root.center.main.center.directory.DirectorySidebarPane;
|
||||
|
||||
|
||||
@ -10,7 +10,7 @@ import javafx.scene.layout.BorderPane;
|
||||
import javafx.scene.layout.Region;
|
||||
import javafx.scene.layout.StackPane;
|
||||
import javafx.util.Duration;
|
||||
import org.jcnc.jnotepad.exception.AppException;
|
||||
import org.jcnc.jnotepad.controller.exception.AppException;
|
||||
import org.jcnc.jnotepad.views.root.RootBorderPane;
|
||||
|
||||
/**
|
||||
|
||||
@ -6,9 +6,9 @@ import javafx.scene.control.Menu;
|
||||
import javafx.scene.control.MenuItem;
|
||||
import javafx.scene.input.KeyCombination;
|
||||
import org.jcnc.jnotepad.api.core.views.manager.AbstractManager;
|
||||
import org.jcnc.jnotepad.api.util.LogUtil;
|
||||
import org.jcnc.jnotepad.cache.entity.ShortcutKey;
|
||||
import org.jcnc.jnotepad.controller.config.UserConfigController;
|
||||
import org.jcnc.jnotepad.model.entity.ShortcutKey;
|
||||
import org.jcnc.jnotepad.util.LogUtil;
|
||||
import org.jcnc.jnotepad.views.root.top.menubar.TopMenuBar;
|
||||
import org.jcnc.jnotepad.views.root.top.menubar.menu.*;
|
||||
import org.slf4j.Logger;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package org.jcnc.jnotepad.views.root;
|
||||
|
||||
import org.jcnc.jnotepad.ui.module.AbstractBorderPane;
|
||||
import org.jcnc.jnotepad.component.module.base.AbstractBorderPane;
|
||||
|
||||
/**
|
||||
* RootBorderPane 表示 JNotepad 应用程序的根布局。
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package org.jcnc.jnotepad.views.root.bottom;
|
||||
|
||||
import javafx.scene.layout.VBox;
|
||||
import org.jcnc.jnotepad.ui.module.AbstractVerticalBox;
|
||||
import org.jcnc.jnotepad.component.module.base.AbstractVerticalBox;
|
||||
|
||||
/**
|
||||
* 底部根侧边栏垂直布局
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package org.jcnc.jnotepad.views.root.bottom.status;
|
||||
|
||||
import javafx.scene.control.Label;
|
||||
import org.jcnc.jnotepad.ui.module.AbstractHorizontalBox;
|
||||
import org.jcnc.jnotepad.component.module.base.AbstractHorizontalBox;
|
||||
|
||||
/**
|
||||
* 状态栏组件封装。
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package org.jcnc.jnotepad.views.root.center.main;
|
||||
|
||||
import org.jcnc.jnotepad.ui.module.AbstractBorderPane;
|
||||
import org.jcnc.jnotepad.component.module.base.AbstractBorderPane;
|
||||
|
||||
/**
|
||||
* 主界面边界布局
|
||||
|
||||
@ -2,8 +2,8 @@ package org.jcnc.jnotepad.views.root.center.main.center.directory;
|
||||
|
||||
import javafx.scene.control.TreeItem;
|
||||
import javafx.scene.control.TreeView;
|
||||
import org.jcnc.jnotepad.cache.entity.DirFileModel;
|
||||
import org.jcnc.jnotepad.controller.event.handler.menuitem.OpenFile;
|
||||
import org.jcnc.jnotepad.model.entity.DirFileModel;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Objects;
|
||||
|
||||
@ -2,9 +2,9 @@ package org.jcnc.jnotepad.views.root.center.main.center.tab;
|
||||
|
||||
import javafx.scene.control.Tab;
|
||||
import org.fxmisc.flowless.VirtualizedScrollPane;
|
||||
import org.jcnc.jnotepad.api.util.LogUtil;
|
||||
import org.jcnc.jnotepad.component.module.CodeArea;
|
||||
import org.jcnc.jnotepad.controller.config.UserConfigController;
|
||||
import org.jcnc.jnotepad.ui.module.LineNumberTextArea;
|
||||
import org.jcnc.jnotepad.util.LogUtil;
|
||||
import org.jcnc.jnotepad.views.manager.BottomStatusBoxManager;
|
||||
import org.jcnc.jnotepad.views.manager.CenterTabPaneManager;
|
||||
import org.slf4j.Logger;
|
||||
@ -23,7 +23,7 @@ import java.nio.charset.Charset;
|
||||
*/
|
||||
public class CenterTab extends Tab {
|
||||
Logger logger = LogUtil.getLogger(this.getClass());
|
||||
private final LineNumberTextArea lineNumberTextArea;
|
||||
private final CodeArea codeArea;
|
||||
/**
|
||||
* 默认关闭自动换行
|
||||
*/
|
||||
@ -39,18 +39,18 @@ public class CenterTab extends Tab {
|
||||
private Charset charset = Charset.defaultCharset();
|
||||
|
||||
public CenterTab(String tabTitle) {
|
||||
this(tabTitle, new LineNumberTextArea());
|
||||
this(tabTitle, new CodeArea());
|
||||
}
|
||||
|
||||
public CenterTab(String tabTitle, LineNumberTextArea textArea) {
|
||||
public CenterTab(String tabTitle, CodeArea textArea) {
|
||||
this(tabTitle, textArea, Charset.defaultCharset());
|
||||
}
|
||||
|
||||
public CenterTab(String tabTitle, LineNumberTextArea textArea, Charset charset) {
|
||||
public CenterTab(String tabTitle, CodeArea textArea, Charset charset) {
|
||||
super(tabTitle);
|
||||
lineNumberTextArea = textArea;
|
||||
codeArea = textArea;
|
||||
initTextAreaListeners();
|
||||
this.setContent(new VirtualizedScrollPane<>(lineNumberTextArea));
|
||||
this.setContent(new VirtualizedScrollPane<>(codeArea));
|
||||
setAutoLine(UserConfigController.getInstance().getAutoLineConfig());
|
||||
this.charset = charset;
|
||||
}
|
||||
@ -69,11 +69,11 @@ public class CenterTab extends Tab {
|
||||
|
||||
public void setAutoLine(boolean autoLine) {
|
||||
this.autoLine = autoLine;
|
||||
lineNumberTextArea.setWrapText(autoLine);
|
||||
codeArea.setWrapText(autoLine);
|
||||
}
|
||||
|
||||
public LineNumberTextArea getLineNumberTextArea() {
|
||||
return lineNumberTextArea;
|
||||
public CodeArea getLineNumberTextArea() {
|
||||
return codeArea;
|
||||
}
|
||||
|
||||
public Charset getCharset() {
|
||||
@ -126,7 +126,7 @@ public class CenterTab extends Tab {
|
||||
*/
|
||||
private void initTextAreaListeners() {
|
||||
// 监听主要文本区域的文本变化
|
||||
lineNumberTextArea.textProperty().addListener((observable, oldValue, newValue) -> {
|
||||
codeArea.textProperty().addListener((observable, oldValue, newValue) -> {
|
||||
BottomStatusBoxManager.getInstance().updateWordCountStatusLabel();
|
||||
saveSelectedFileTab();
|
||||
});
|
||||
|
||||
@ -2,7 +2,7 @@ package org.jcnc.jnotepad.views.root.left.sidebar.tools;
|
||||
|
||||
import javafx.scene.layout.HBox;
|
||||
import javafx.scene.layout.Priority;
|
||||
import org.jcnc.jnotepad.ui.module.AbstractHorizontalBox;
|
||||
import org.jcnc.jnotepad.component.module.base.AbstractHorizontalBox;
|
||||
|
||||
/**
|
||||
* ToolHBox 是 JNotepad 应用程序的工具栏水平布局类。
|
||||
|
||||
@ -2,7 +2,7 @@ package org.jcnc.jnotepad.views.root.left.sidebar.tools;
|
||||
|
||||
import javafx.scene.layout.Priority;
|
||||
import javafx.scene.layout.VBox;
|
||||
import org.jcnc.jnotepad.ui.module.AbstractVerticalBox;
|
||||
import org.jcnc.jnotepad.component.module.base.AbstractVerticalBox;
|
||||
|
||||
/**
|
||||
* 垂直布局类
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package org.jcnc.jnotepad.views.root.right;
|
||||
|
||||
import org.jcnc.jnotepad.ui.module.AbstractVerticalBox;
|
||||
import org.jcnc.jnotepad.component.module.base.AbstractVerticalBox;
|
||||
|
||||
/**
|
||||
* 右侧边栏的垂直布局容器类。
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package org.jcnc.jnotepad.views.root.top;
|
||||
|
||||
import org.jcnc.jnotepad.ui.module.AbstractBorderPane;
|
||||
import org.jcnc.jnotepad.component.module.base.AbstractBorderPane;
|
||||
|
||||
/**
|
||||
* RootTopBorderPane 类表示 JNotepad 应用程序的顶部边界面板。
|
||||
|
||||
@ -4,7 +4,7 @@ import javafx.scene.control.Menu;
|
||||
import javafx.scene.control.MenuItem;
|
||||
import javafx.stage.Stage;
|
||||
import org.jcnc.jnotepad.api.core.views.top.menu.AbstractTopMenu;
|
||||
import org.jcnc.jnotepad.ui.setstage.HelpPaneStage;
|
||||
import org.jcnc.jnotepad.component.stage.setting.HelpPaneStage;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@ -3,7 +3,7 @@ package org.jcnc.jnotepad.views.root.top.menubar.menu;
|
||||
import javafx.scene.control.Menu;
|
||||
import javafx.scene.control.MenuItem;
|
||||
import org.jcnc.jnotepad.api.core.views.top.menu.AbstractTopMenu;
|
||||
import org.jcnc.jnotepad.ui.setstage.pluginstage.PluginManagementPane;
|
||||
import org.jcnc.jnotepad.component.stage.setting.plugin.PluginManagementPane;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@ -4,9 +4,9 @@ import javafx.scene.control.Menu;
|
||||
import javafx.scene.control.MenuItem;
|
||||
import javafx.stage.Stage;
|
||||
import org.jcnc.jnotepad.api.core.views.top.menu.AbstractTopMenu;
|
||||
import org.jcnc.jnotepad.api.util.UiUtil;
|
||||
import org.jcnc.jnotepad.controller.config.UserConfigController;
|
||||
import org.jcnc.jnotepad.controller.event.handler.menuitem.OpenConfig;
|
||||
import org.jcnc.jnotepad.util.UiUtil;
|
||||
import org.jcnc.jnotepad.views.manager.CenterTabPaneManager;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user