Merge branch 'release-v1.1.13' of https://gitee.com/jcnc-org/JNotepad into develop
# Conflicts: # src/main/java/org/jcnc/jnotepad/views/root/top/menu/TopMenuBar.java
This commit is contained in:
commit
13f2f6703d
@ -102,7 +102,7 @@ JNotepad使用Java语言编写,并基于JavaFX框架开发,具有良好的
|
|||||||
- `设置 > 语言`:切换语言。
|
- `设置 > 语言`:切换语言。
|
||||||
|
|
||||||
|
|
||||||
- `插件 > 增加插件`:(管理插件系统,待完善)。
|
- `插件 > 增加插件`:管理插件系统。
|
||||||
|
|
||||||
## 依赖项
|
## 依赖项
|
||||||
|
|
||||||
@ -128,7 +128,7 @@ POM文件中的全部依赖项:
|
|||||||
- MacOS 平台
|
- MacOS 平台
|
||||||

|

|
||||||
|
|
||||||
### 参与贡献
|
# 参与贡献
|
||||||
|
|
||||||
1. 加入JCNC社区
|
1. 加入JCNC社区
|
||||||
1. [阅读JCNC开发者文档][docs-url]
|
1. [阅读JCNC开发者文档][docs-url]
|
||||||
|
|||||||
@ -41,7 +41,7 @@ public class AppConfig {
|
|||||||
shortcutKeys.add(createShortcutKey("saveAsItem", CTRL_ALT_S));
|
shortcutKeys.add(createShortcutKey("saveAsItem", CTRL_ALT_S));
|
||||||
shortcutKeys.add(createShortcutKey("lineFeedItem", ""));
|
shortcutKeys.add(createShortcutKey("lineFeedItem", ""));
|
||||||
shortcutKeys.add(createShortcutKey("openConfigItem", ALT_S));
|
shortcutKeys.add(createShortcutKey("openConfigItem", ALT_S));
|
||||||
shortcutKeys.add(createShortcutKey("addItem", ""));
|
shortcutKeys.add(createShortcutKey("pluginManager", ""));
|
||||||
shortcutKeys.add(createShortcutKey("countItem", ""));
|
shortcutKeys.add(createShortcutKey("countItem", ""));
|
||||||
myData.setShortcutKey(shortcutKeys);
|
myData.setShortcutKey(shortcutKeys);
|
||||||
return myData;
|
return myData;
|
||||||
|
|||||||
@ -18,7 +18,7 @@ public class TextConstants {
|
|||||||
public static final String SET = "SET";
|
public static final String SET = "SET";
|
||||||
public static final String WORD_WRAP = "WORD_WRAP";
|
public static final String WORD_WRAP = "WORD_WRAP";
|
||||||
public static final String PLUGIN = "PLUGIN";
|
public static final String PLUGIN = "PLUGIN";
|
||||||
public static final String ADD_PLUGIN = "ADD_PLUGIN";
|
public static final String MANAGER_PLUGIN = "MANAGER_PLUGIN";
|
||||||
public static final String STATISTICS = "STATISTICS";
|
public static final String STATISTICS = "STATISTICS";
|
||||||
public static final String OPEN_CONFIGURATION_FILE = "OPEN_CONFIGURATION_FILE";
|
public static final String OPEN_CONFIGURATION_FILE = "OPEN_CONFIGURATION_FILE";
|
||||||
public static final String TOP = "TOP";
|
public static final String TOP = "TOP";
|
||||||
|
|||||||
@ -0,0 +1,63 @@
|
|||||||
|
package org.jcnc.jnotepad.ui.pluginstage;
|
||||||
|
|
||||||
|
import javafx.geometry.Orientation;
|
||||||
|
import javafx.scene.control.SplitPane;
|
||||||
|
import javafx.scene.layout.HBox;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 自定义分割面板,用于将两个组件以水平方向分割显示。
|
||||||
|
*
|
||||||
|
* <p>该分割面板包含左侧和右侧两个区域,可分别设置内容。</p>
|
||||||
|
*
|
||||||
|
* @author luke
|
||||||
|
*/
|
||||||
|
public class CustomSplitPane extends SplitPane {
|
||||||
|
|
||||||
|
private final HBox leftBox;
|
||||||
|
private final HBox rightBox;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建一个自定义分割面板,指定左侧和右侧的文本标签。
|
||||||
|
*
|
||||||
|
* @param leftText 左侧区域的文本标签
|
||||||
|
* @param rightText 右侧区域的文本标签
|
||||||
|
*/
|
||||||
|
public CustomSplitPane(String leftText, String rightText) {
|
||||||
|
// 创建左侧和右侧的框
|
||||||
|
leftBox = createBox(leftText);
|
||||||
|
rightBox = createBox(rightText);
|
||||||
|
|
||||||
|
// 设置水平分割面板的属性
|
||||||
|
this.setOrientation(Orientation.HORIZONTAL);
|
||||||
|
this.setDividerPositions(0.5);
|
||||||
|
|
||||||
|
// 添加左侧和右侧的框到分割面板
|
||||||
|
this.getItems().addAll(leftBox, rightBox);
|
||||||
|
}
|
||||||
|
|
||||||
|
private HBox createBox(String text) {
|
||||||
|
HBox box = new HBox();
|
||||||
|
box.getChildren().add(new javafx.scene.control.Label(text));
|
||||||
|
return box;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置左侧区域的内容。
|
||||||
|
*
|
||||||
|
* @param content 左侧区域的内容节点
|
||||||
|
*/
|
||||||
|
public void setLeftContent(javafx.scene.Node content) {
|
||||||
|
leftBox.getChildren().clear();
|
||||||
|
leftBox.getChildren().add(content);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置右侧区域的内容。
|
||||||
|
*
|
||||||
|
* @param content 右侧区域的内容节点
|
||||||
|
*/
|
||||||
|
public void setRightContent(javafx.scene.Node content) {
|
||||||
|
rightBox.getChildren().clear();
|
||||||
|
rightBox.getChildren().add(content);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,145 @@
|
|||||||
|
package org.jcnc.jnotepad.ui.pluginstage;
|
||||||
|
|
||||||
|
import atlantafx.base.controls.Tile;
|
||||||
|
import atlantafx.base.controls.ToggleSwitch;
|
||||||
|
import atlantafx.base.theme.PrimerLight;
|
||||||
|
import javafx.application.Application;
|
||||||
|
import javafx.scene.Node;
|
||||||
|
import javafx.scene.control.Button;
|
||||||
|
import javafx.scene.control.Label;
|
||||||
|
import javafx.scene.control.Tab;
|
||||||
|
import javafx.scene.control.TabPane;
|
||||||
|
import javafx.scene.layout.BorderPane;
|
||||||
|
import javafx.scene.layout.VBox;
|
||||||
|
import org.jcnc.jnotepad.util.LogUtil;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 插件管理面板,用于管理插件的市场、已安装和设置功能。
|
||||||
|
*
|
||||||
|
* <p>此面板包含一个自定义分割面板,用于显示不同的插件管理选项卡内容。</p>
|
||||||
|
*
|
||||||
|
* @author luke
|
||||||
|
*/
|
||||||
|
public class PluginManagementPane extends BorderPane {
|
||||||
|
|
||||||
|
Logger logger = LogUtil.getLogger(this.getClass());
|
||||||
|
|
||||||
|
|
||||||
|
private CustomSplitPane customSplitPane;
|
||||||
|
private final Map<Tile, Node> tileContentMap = new HashMap<>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建一个插件管理面板的实例。
|
||||||
|
*/
|
||||||
|
public PluginManagementPane() {
|
||||||
|
init();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 初始化插件管理面板。
|
||||||
|
*/
|
||||||
|
private void init() {
|
||||||
|
// 创建选项卡面板
|
||||||
|
TabPane tabPane = new TabPane();
|
||||||
|
|
||||||
|
// 创建市场、已安装和设置选项卡
|
||||||
|
Tab marketTab = new Tab("市场");
|
||||||
|
Tab installedTab = new Tab("已安装");
|
||||||
|
Tab myTab = new Tab("设置");
|
||||||
|
|
||||||
|
// 禁用选项卡关闭按钮
|
||||||
|
marketTab.setClosable(false);
|
||||||
|
installedTab.setClosable(false);
|
||||||
|
myTab.setClosable(false);
|
||||||
|
|
||||||
|
// 创建选项卡内容面板
|
||||||
|
BorderPane marketTabContent = new BorderPane();
|
||||||
|
BorderPane installedTabContent = new BorderPane();
|
||||||
|
BorderPane myTabContent = new BorderPane();
|
||||||
|
|
||||||
|
// 创建自定义分割面板
|
||||||
|
customSplitPane = new CustomSplitPane("", "");
|
||||||
|
marketTabContent.setCenter(customSplitPane);
|
||||||
|
|
||||||
|
// 获取插件列表
|
||||||
|
var box = getBox();
|
||||||
|
customSplitPane.setLeftContent(box);
|
||||||
|
|
||||||
|
// 创建示例按钮并添加到已安装和设置选项卡中
|
||||||
|
installedTabContent.setCenter(new Button("2"));
|
||||||
|
myTabContent.setCenter(new Button("3"));
|
||||||
|
|
||||||
|
// 将选项卡内容设置到选项卡中
|
||||||
|
marketTab.setContent(marketTabContent);
|
||||||
|
installedTab.setContent(installedTabContent);
|
||||||
|
myTab.setContent(myTabContent);
|
||||||
|
|
||||||
|
// 将选项卡添加到选项卡面板中
|
||||||
|
tabPane.getTabs().addAll(marketTab, installedTab, myTab);
|
||||||
|
|
||||||
|
// 将选项卡面板设置为插件管理面板的中心内容
|
||||||
|
this.setCenter(tabPane);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建包含插件列表的VBox。
|
||||||
|
*
|
||||||
|
* @return 包含插件列表的VBox
|
||||||
|
*/
|
||||||
|
private VBox getBox() {
|
||||||
|
// 创建示例插件列表项
|
||||||
|
var tile1 = createTile("运行插件", "这是一个运行插件\t\t\t\t\t\t\t ");
|
||||||
|
var tile2 = createTile("终端插件", "这是一个终端插件");
|
||||||
|
var tile3 = createTile("构建插件", "这是一个构建插件");
|
||||||
|
|
||||||
|
// 创建VBox并将插件列表项添加到其中
|
||||||
|
var box = new VBox(tile1, tile2, tile3);
|
||||||
|
|
||||||
|
return box;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建插件列表项Tile。
|
||||||
|
*
|
||||||
|
* @param title 插件标题
|
||||||
|
* @param description 插件描述
|
||||||
|
* @return 创建的插件列表项Tile
|
||||||
|
*/
|
||||||
|
private Tile createTile(String title, String description) {
|
||||||
|
var tile = new Tile(title, description);
|
||||||
|
var tgl = new ToggleSwitch();
|
||||||
|
|
||||||
|
// 设置Tile的操作和操作处理程序
|
||||||
|
tile.setAction(tgl);
|
||||||
|
tile.setActionHandler(() -> {
|
||||||
|
customSplitPane.setRightContent(tileContentMap.get(tile));
|
||||||
|
logger.info("点击了" + tile);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
// 创建专属的customSplitPane内容
|
||||||
|
var content = createCustomSplitPaneContent(title);
|
||||||
|
|
||||||
|
|
||||||
|
// 将内容与Tile关联起来
|
||||||
|
tileContentMap.put(tile, content);
|
||||||
|
|
||||||
|
return tile;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建专属于每个插件的CustomSplitPane内容。
|
||||||
|
*
|
||||||
|
* @param title 插件标题
|
||||||
|
* @return 创建的CustomSplitPane内容
|
||||||
|
*/
|
||||||
|
private Node createCustomSplitPaneContent(String title) {
|
||||||
|
// TODO: 2023/9/23 未完成
|
||||||
|
return new Label("详情" + title);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -65,6 +65,7 @@ public class TopMenuBar extends MenuBar {
|
|||||||
* 增加
|
* 增加
|
||||||
*/
|
*/
|
||||||
private final MenuItem addItem = new MenuItem();
|
private final MenuItem addItem = new MenuItem();
|
||||||
|
private MenuItem pluginManagerItem;
|
||||||
/**
|
/**
|
||||||
* 查看
|
* 查看
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -18,5 +18,5 @@ SAVE_AS=另存为
|
|||||||
SAVE=保存
|
SAVE=保存
|
||||||
ROW=行数
|
ROW=行数
|
||||||
FILE=文件
|
FILE=文件
|
||||||
ADD_PLUGIN=增加插件
|
MANAGER_PLUGIN=管理插件
|
||||||
ENCODE=编码
|
ENCODE=编码
|
||||||
|
|||||||
@ -18,5 +18,5 @@ SAVE_AS=Save As
|
|||||||
SAVE=Save
|
SAVE=Save
|
||||||
ROW=Row
|
ROW=Row
|
||||||
FILE=File
|
FILE=File
|
||||||
ADD_PLUGIN=Add Plugin
|
MANAGER_PLUGIN=Manager Plugin
|
||||||
ENCODE=Encoding
|
ENCODE=Encoding
|
||||||
@ -18,5 +18,5 @@ SAVE_AS=另存为
|
|||||||
SAVE=保存
|
SAVE=保存
|
||||||
ROW=行数
|
ROW=行数
|
||||||
FILE=文件
|
FILE=文件
|
||||||
ADD_PLUGIN=增加插件
|
MANAGER_PLUGIN=插件管理
|
||||||
ENCODE=编码
|
ENCODE=编码
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user