!137 ♻️ 重构代码 重构顶部菜单栏管理类,减少耦合方便扩展 修复 BUG 修复重复点击设置按钮导致重复创建设置页面
Merge pull request !137 from 格物方能致知/refactor-I85G9E-fix-I85G9B
This commit is contained in:
commit
c69fc58fb4
2
.gitignore
vendored
2
.gitignore
vendored
@ -15,7 +15,7 @@ test/
|
|||||||
### 此处排除证书目录
|
### 此处排除证书目录
|
||||||
certificate/
|
certificate/
|
||||||
|
|
||||||
### 此处排除了项目文件
|
### 此处排除项目文件
|
||||||
.jnotepad/
|
.jnotepad/
|
||||||
|
|
||||||
### Eclipse ###
|
### Eclipse ###
|
||||||
|
|||||||
@ -29,8 +29,8 @@ module org.jcnc.jnotepad {
|
|||||||
exports org.jcnc.jnotepad.controller.manager;
|
exports org.jcnc.jnotepad.controller.manager;
|
||||||
exports org.jcnc.jnotepad.controller.i18n;
|
exports org.jcnc.jnotepad.controller.i18n;
|
||||||
exports org.jcnc.jnotepad.controller.event.handler.setting;
|
exports org.jcnc.jnotepad.controller.event.handler.setting;
|
||||||
exports org.jcnc.jnotepad.controller.event.handler.menubar;
|
exports org.jcnc.jnotepad.controller.event.handler.menuitem;
|
||||||
exports org.jcnc.jnotepad.common.util;
|
exports org.jcnc.jnotepad.api.util;
|
||||||
exports org.jcnc.jnotepad.common.interfaces;
|
exports org.jcnc.jnotepad.common.interfaces;
|
||||||
opens org.jcnc.jnotepad.app.config;
|
opens org.jcnc.jnotepad.app.config;
|
||||||
exports org.jcnc.jnotepad.plugin.interfaces;
|
exports org.jcnc.jnotepad.plugin.interfaces;
|
||||||
@ -41,7 +41,7 @@ module org.jcnc.jnotepad {
|
|||||||
exports org.jcnc.jnotepad.model.entity;
|
exports org.jcnc.jnotepad.model.entity;
|
||||||
exports org.jcnc.jnotepad.views.root.bottom;
|
exports org.jcnc.jnotepad.views.root.bottom;
|
||||||
exports org.jcnc.jnotepad.views.root.bottom.status;
|
exports org.jcnc.jnotepad.views.root.bottom.status;
|
||||||
exports org.jcnc.jnotepad.plugin.api.core.views.sidebar.bottom;
|
exports org.jcnc.jnotepad.api.core.views.sidebar.bottom;
|
||||||
exports org.jcnc.jnotepad.plugin.api.core.controller.config;
|
exports org.jcnc.jnotepad.api.core.controller.config;
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -2,8 +2,8 @@ package org.jcnc.jnotepad;
|
|||||||
|
|
||||||
import javafx.application.Application;
|
import javafx.application.Application;
|
||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
|
import org.jcnc.jnotepad.api.util.LogUtil;
|
||||||
import org.jcnc.jnotepad.app.manager.ApplicationManager;
|
import org.jcnc.jnotepad.app.manager.ApplicationManager;
|
||||||
import org.jcnc.jnotepad.common.util.LogUtil;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -1,10 +1,10 @@
|
|||||||
package org.jcnc.jnotepad.plugin.api.core.controller.config;
|
package org.jcnc.jnotepad.api.core.controller.config;
|
||||||
|
|
||||||
import org.jcnc.jnotepad.common.util.JsonUtil;
|
import org.jcnc.jnotepad.api.core.controller.interfaces.ConfigController;
|
||||||
import org.jcnc.jnotepad.common.util.LogUtil;
|
import org.jcnc.jnotepad.api.util.JsonUtil;
|
||||||
import org.jcnc.jnotepad.common.util.PopUpUtil;
|
import org.jcnc.jnotepad.api.util.LogUtil;
|
||||||
|
import org.jcnc.jnotepad.api.util.PopUpUtil;
|
||||||
import org.jcnc.jnotepad.exception.AppException;
|
import org.jcnc.jnotepad.exception.AppException;
|
||||||
import org.jcnc.jnotepad.plugin.api.core.controller.interfaces.ConfigController;
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
|
||||||
import java.io.BufferedWriter;
|
import java.io.BufferedWriter;
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package org.jcnc.jnotepad.plugin.api.core.controller.interfaces;
|
package org.jcnc.jnotepad.api.core.controller.interfaces;
|
||||||
|
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
|
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package org.jcnc.jnotepad.plugin.api.core.manager;
|
package org.jcnc.jnotepad.api.core.manager;
|
||||||
|
|
||||||
import org.jcnc.jnotepad.model.entity.Cache;
|
import org.jcnc.jnotepad.model.entity.Cache;
|
||||||
|
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package org.jcnc.jnotepad.plugin.api.core.ui.stage;
|
package org.jcnc.jnotepad.api.core.ui.stage;
|
||||||
|
|
||||||
import javafx.scene.Scene;
|
import javafx.scene.Scene;
|
||||||
import javafx.scene.image.Image;
|
import javafx.scene.image.Image;
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package org.jcnc.jnotepad.plugin.api.core.views.manager;
|
package org.jcnc.jnotepad.api.core.views.manager;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package org.jcnc.jnotepad.plugin.api.core.views.manager.builder;
|
package org.jcnc.jnotepad.api.core.views.manager.builder;
|
||||||
|
|
||||||
import javafx.event.ActionEvent;
|
import javafx.event.ActionEvent;
|
||||||
import javafx.event.EventHandler;
|
import javafx.event.EventHandler;
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package org.jcnc.jnotepad.plugin.api.core.views.sidebar.bottom;
|
package org.jcnc.jnotepad.api.core.views.sidebar.bottom;
|
||||||
|
|
||||||
import javafx.scene.control.Label;
|
import javafx.scene.control.Label;
|
||||||
import javafx.scene.control.Menu;
|
import javafx.scene.control.Menu;
|
||||||
@ -0,0 +1,126 @@
|
|||||||
|
package org.jcnc.jnotepad.api.core.views.top.menu;
|
||||||
|
|
||||||
|
import javafx.beans.value.ChangeListener;
|
||||||
|
import javafx.event.ActionEvent;
|
||||||
|
import javafx.event.EventHandler;
|
||||||
|
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.views.root.top.menubar.TopMenuBar;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 抽象顶部菜单
|
||||||
|
*
|
||||||
|
* @author gewuyou
|
||||||
|
*/
|
||||||
|
public abstract class AbstractTopMenu {
|
||||||
|
protected final TopMenuBar topMenuBar = TopMenuBar.getInstance();
|
||||||
|
|
||||||
|
protected Logger logger = LogUtil.getLogger(this.getClass());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取菜单名称
|
||||||
|
*
|
||||||
|
* @return 菜单名称
|
||||||
|
*/
|
||||||
|
public abstract String getMenuName();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取菜单
|
||||||
|
*
|
||||||
|
* @return 菜单
|
||||||
|
*/
|
||||||
|
public abstract Menu getMenu();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取菜单项集合
|
||||||
|
*
|
||||||
|
* @return 菜单项集合
|
||||||
|
*/
|
||||||
|
public abstract Map<String, MenuItem> getMenuItems();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 注册顶部菜单
|
||||||
|
*/
|
||||||
|
protected abstract void registerTopMenu();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 注册菜单项
|
||||||
|
*
|
||||||
|
* @param menuItem 菜单项
|
||||||
|
* @param menuItemName 菜单项名称
|
||||||
|
* @param userData 用户数据,用来存放必要的数据,比如按钮菜单项名称
|
||||||
|
* @param eventHandler 事件
|
||||||
|
*/
|
||||||
|
public void registerMenuItem(MenuItem menuItem, String menuItemName, Object userData, EventHandler<ActionEvent> eventHandler) {
|
||||||
|
getMenuItems().put(menuItemName, menuItem);
|
||||||
|
menuItem.setUserData(userData);
|
||||||
|
menuItem.setOnAction(eventHandler);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 注册检查菜单项
|
||||||
|
*
|
||||||
|
* @param checkMenuItem 检查菜单项
|
||||||
|
* @param menuItemName 菜单项名称
|
||||||
|
* @param userData 用户数据,用来存放必要的数据,比如按钮菜单项名称
|
||||||
|
* @param listener 监听事件
|
||||||
|
*/
|
||||||
|
|
||||||
|
public void registerMenuItem(CheckMenuItem checkMenuItem, String menuItemName, Object userData, ChangeListener<Boolean> listener) {
|
||||||
|
getMenuItems().put(menuItemName, checkMenuItem);
|
||||||
|
checkMenuItem.setUserData(userData);
|
||||||
|
checkMenuItem.selectedProperty().addListener(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 注册单选菜单项
|
||||||
|
*
|
||||||
|
* @param radioMenuItem 单选菜单项
|
||||||
|
* @param menuItemName 菜单项名称
|
||||||
|
* @param userData 用户数据,用来存放必要的数据
|
||||||
|
* @param eventHandler 操作事件
|
||||||
|
*/
|
||||||
|
|
||||||
|
public void registerRadioMenuItem(Map<String, RadioMenuItem> radioMenuItems, RadioMenuItem radioMenuItem, String menuItemName, Object userData, EventHandler<ActionEvent> eventHandler) {
|
||||||
|
radioMenuItems.put(menuItemName, radioMenuItem);
|
||||||
|
radioMenuItem.setUserData(userData);
|
||||||
|
radioMenuItem.setOnAction(eventHandler);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 初始化菜单栏
|
||||||
|
*/
|
||||||
|
public void initMenu() {
|
||||||
|
registerTopMenu();
|
||||||
|
logger.info("初始化菜单!");
|
||||||
|
Menu menu = getMenu();
|
||||||
|
// 文件菜单
|
||||||
|
UiResourceBundle.bindStringProperty(menu.textProperty(), getMenuName());
|
||||||
|
// 初始化菜单项
|
||||||
|
initMenuItems(getMenuItems(), menu);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 初始化菜单项
|
||||||
|
*
|
||||||
|
* @param menuItems 菜单项集合
|
||||||
|
* @param menu 菜单
|
||||||
|
*/
|
||||||
|
|
||||||
|
private void initMenuItems(Map<String, MenuItem> menuItems, Menu menu) {
|
||||||
|
logger.info("初始化菜单项!");
|
||||||
|
var itemMap = topMenuBar.getAllItemMap();
|
||||||
|
menuItems.forEach((key, value) -> {
|
||||||
|
UiResourceBundle.bindStringProperty(value.textProperty(), key);
|
||||||
|
itemMap.put((String) value.getUserData(), value);
|
||||||
|
menu.getItems().add(value);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package org.jcnc.jnotepad.common.util;
|
package org.jcnc.jnotepad.api.util;
|
||||||
|
|
||||||
import com.ibm.icu.text.CharsetDetector;
|
import com.ibm.icu.text.CharsetDetector;
|
||||||
import com.ibm.icu.text.CharsetMatch;
|
import com.ibm.icu.text.CharsetMatch;
|
||||||
@ -1,6 +1,6 @@
|
|||||||
package org.jcnc.jnotepad.common.util;
|
package org.jcnc.jnotepad.api.util;
|
||||||
|
|
||||||
import org.jcnc.jnotepad.controller.event.handler.menubar.OpenFile;
|
import org.jcnc.jnotepad.controller.event.handler.menuitem.OpenFile;
|
||||||
import org.jcnc.jnotepad.exception.AppException;
|
import org.jcnc.jnotepad.exception.AppException;
|
||||||
import org.jcnc.jnotepad.model.entity.DirFileModel;
|
import org.jcnc.jnotepad.model.entity.DirFileModel;
|
||||||
import org.kordamp.ikonli.javafx.FontIcon;
|
import org.kordamp.ikonli.javafx.FontIcon;
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package org.jcnc.jnotepad.common.util;
|
package org.jcnc.jnotepad.api.util;
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
import com.fasterxml.jackson.core.type.TypeReference;
|
import com.fasterxml.jackson.core.type.TypeReference;
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package org.jcnc.jnotepad.common.util;
|
package org.jcnc.jnotepad.api.util;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package org.jcnc.jnotepad.common.util;
|
package org.jcnc.jnotepad.api.util;
|
||||||
|
|
||||||
import org.jcnc.jnotepad.model.enums.DialogType;
|
import org.jcnc.jnotepad.model.enums.DialogType;
|
||||||
import org.jcnc.jnotepad.ui.dialog.AppDialogBuilder;
|
import org.jcnc.jnotepad.ui.dialog.AppDialogBuilder;
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package org.jcnc.jnotepad.common.util;
|
package org.jcnc.jnotepad.api.util;
|
||||||
|
|
||||||
import atlantafx.base.theme.Styles;
|
import atlantafx.base.theme.Styles;
|
||||||
import javafx.scene.image.Image;
|
import javafx.scene.image.Image;
|
||||||
@ -8,12 +8,12 @@ import javafx.scene.layout.Pane;
|
|||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
import javafx.stage.Window;
|
import javafx.stage.Window;
|
||||||
import org.jcnc.jnotepad.LunchApp;
|
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.app.i18n.UiResourceBundle;
|
||||||
import org.jcnc.jnotepad.common.constants.AppConstants;
|
import org.jcnc.jnotepad.common.constants.AppConstants;
|
||||||
import org.jcnc.jnotepad.common.constants.TextConstants;
|
import org.jcnc.jnotepad.common.constants.TextConstants;
|
||||||
import org.jcnc.jnotepad.common.manager.ThreadPoolManager;
|
import org.jcnc.jnotepad.common.manager.ThreadPoolManager;
|
||||||
import org.jcnc.jnotepad.common.util.LogUtil;
|
|
||||||
import org.jcnc.jnotepad.common.util.UiUtil;
|
|
||||||
import org.jcnc.jnotepad.controller.ResourceController;
|
import org.jcnc.jnotepad.controller.ResourceController;
|
||||||
import org.jcnc.jnotepad.controller.cache.CacheController;
|
import org.jcnc.jnotepad.controller.cache.CacheController;
|
||||||
import org.jcnc.jnotepad.controller.config.PluginConfigController;
|
import org.jcnc.jnotepad.controller.config.PluginConfigController;
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
package org.jcnc.jnotepad.common.manager;
|
package org.jcnc.jnotepad.common.manager;
|
||||||
|
|
||||||
import org.jcnc.jnotepad.plugin.api.core.manager.AbstractCacheManager;
|
import org.jcnc.jnotepad.api.core.manager.AbstractCacheManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 应用程序缓存管理类
|
* 应用程序缓存管理类
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
package org.jcnc.jnotepad.common.manager;
|
package org.jcnc.jnotepad.common.manager;
|
||||||
|
|
||||||
import org.jcnc.jnotepad.common.util.LogUtil;
|
import org.jcnc.jnotepad.api.util.LogUtil;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
|
||||||
import java.util.concurrent.*;
|
import java.util.concurrent.*;
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
package org.jcnc.jnotepad.controller;
|
package org.jcnc.jnotepad.controller;
|
||||||
|
|
||||||
import org.jcnc.jnotepad.common.util.LogUtil;
|
import org.jcnc.jnotepad.api.util.LogUtil;
|
||||||
import org.jcnc.jnotepad.controller.config.PluginConfigController;
|
import org.jcnc.jnotepad.controller.config.PluginConfigController;
|
||||||
import org.jcnc.jnotepad.controller.i18n.LocalizationController;
|
import org.jcnc.jnotepad.controller.i18n.LocalizationController;
|
||||||
import org.jcnc.jnotepad.exception.AppException;
|
import org.jcnc.jnotepad.exception.AppException;
|
||||||
|
|||||||
@ -1,11 +1,10 @@
|
|||||||
package org.jcnc.jnotepad.controller.cache;
|
package org.jcnc.jnotepad.controller.cache;
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.type.TypeReference;
|
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.common.manager.ApplicationCacheManager;
|
import org.jcnc.jnotepad.common.manager.ApplicationCacheManager;
|
||||||
import org.jcnc.jnotepad.common.util.JsonUtil;
|
|
||||||
import org.jcnc.jnotepad.common.util.LogUtil;
|
|
||||||
import org.jcnc.jnotepad.controller.config.AppConfigController;
|
import org.jcnc.jnotepad.controller.config.AppConfigController;
|
||||||
import org.jcnc.jnotepad.exception.AppException;
|
|
||||||
import org.jcnc.jnotepad.model.entity.Cache;
|
import org.jcnc.jnotepad.model.entity.Cache;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
|
||||||
@ -130,7 +129,7 @@ public class CacheController {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new AppException(e);
|
logger.error("清理缓存文件或文件夹出错!", e);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -164,10 +163,10 @@ public class CacheController {
|
|||||||
try {
|
try {
|
||||||
boolean flag = groupFile.createNewFile();
|
boolean flag = groupFile.createNewFile();
|
||||||
if (!flag) {
|
if (!flag) {
|
||||||
throw new AppException("创建文件失败");
|
logger.error("创建缓存文件失败:{}", groupFile);
|
||||||
}
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new AppException(e);
|
logger.error("创建缓存文件失败!", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fileMap.computeIfAbsent(groupFile, k -> new HashMap<>(16));
|
fileMap.computeIfAbsent(groupFile, k -> new HashMap<>(16));
|
||||||
@ -180,7 +179,7 @@ public class CacheController {
|
|||||||
try (FileOutputStream fileOutputStream = new FileOutputStream(file)) {
|
try (FileOutputStream fileOutputStream = new FileOutputStream(file)) {
|
||||||
fileOutputStream.write(new byte[0]);
|
fileOutputStream.write(new byte[0]);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new AppException(e);
|
logger.error("清空缓存文件失败!", e);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
// 写入缓存
|
// 写入缓存
|
||||||
@ -188,7 +187,7 @@ public class CacheController {
|
|||||||
try (FileWriter writer = new FileWriter(entry.getKey(), true)) {
|
try (FileWriter writer = new FileWriter(entry.getKey(), true)) {
|
||||||
writer.write(JsonUtil.toJsonString(entry.getValue()));
|
writer.write(JsonUtil.toJsonString(entry.getValue()));
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new AppException(e);
|
logger.error("写入缓存文件失败!", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
package org.jcnc.jnotepad.controller.config;
|
package org.jcnc.jnotepad.controller.config;
|
||||||
|
|
||||||
|
import org.jcnc.jnotepad.api.core.controller.config.BaseConfigController;
|
||||||
import org.jcnc.jnotepad.app.config.AppConfig;
|
import org.jcnc.jnotepad.app.config.AppConfig;
|
||||||
import org.jcnc.jnotepad.plugin.api.core.controller.config.BaseConfigController;
|
|
||||||
|
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
package org.jcnc.jnotepad.controller.config;
|
package org.jcnc.jnotepad.controller.config;
|
||||||
|
|
||||||
|
import org.jcnc.jnotepad.api.core.controller.config.BaseConfigController;
|
||||||
import org.jcnc.jnotepad.app.config.PluginConfig;
|
import org.jcnc.jnotepad.app.config.PluginConfig;
|
||||||
import org.jcnc.jnotepad.plugin.api.core.controller.config.BaseConfigController;
|
|
||||||
|
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
package org.jcnc.jnotepad.controller.config;
|
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.app.config.UserConfig;
|
||||||
import org.jcnc.jnotepad.model.entity.ShortcutKey;
|
import org.jcnc.jnotepad.model.entity.ShortcutKey;
|
||||||
import org.jcnc.jnotepad.plugin.api.core.controller.config.BaseConfigController;
|
|
||||||
|
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
package org.jcnc.jnotepad.controller.event.handler.menubar;
|
package org.jcnc.jnotepad.controller.event.handler.menuitem;
|
||||||
|
|
||||||
import javafx.event.ActionEvent;
|
import javafx.event.ActionEvent;
|
||||||
import javafx.event.EventHandler;
|
import javafx.event.EventHandler;
|
||||||
@ -1,7 +1,7 @@
|
|||||||
package org.jcnc.jnotepad.controller.event.handler.menubar;
|
package org.jcnc.jnotepad.controller.event.handler.menuitem;
|
||||||
|
|
||||||
import javafx.event.ActionEvent;
|
import javafx.event.ActionEvent;
|
||||||
import org.jcnc.jnotepad.common.util.LogUtil;
|
import org.jcnc.jnotepad.api.util.LogUtil;
|
||||||
import org.jcnc.jnotepad.controller.config.UserConfigController;
|
import org.jcnc.jnotepad.controller.config.UserConfigController;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
@ -1,13 +1,13 @@
|
|||||||
package org.jcnc.jnotepad.controller.event.handler.menubar;
|
package org.jcnc.jnotepad.controller.event.handler.menuitem;
|
||||||
|
|
||||||
|
|
||||||
import javafx.event.ActionEvent;
|
import javafx.event.ActionEvent;
|
||||||
import javafx.event.EventHandler;
|
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.app.i18n.UiResourceBundle;
|
||||||
import org.jcnc.jnotepad.common.constants.TextConstants;
|
import org.jcnc.jnotepad.common.constants.TextConstants;
|
||||||
import org.jcnc.jnotepad.common.manager.ApplicationCacheManager;
|
import org.jcnc.jnotepad.common.manager.ApplicationCacheManager;
|
||||||
import org.jcnc.jnotepad.common.util.FileUtil;
|
|
||||||
import org.jcnc.jnotepad.common.util.UiUtil;
|
|
||||||
import org.jcnc.jnotepad.model.entity.Cache;
|
import org.jcnc.jnotepad.model.entity.Cache;
|
||||||
import org.jcnc.jnotepad.model.entity.DirFileModel;
|
import org.jcnc.jnotepad.model.entity.DirFileModel;
|
||||||
import org.jcnc.jnotepad.model.enums.CacheExpirationTime;
|
import org.jcnc.jnotepad.model.enums.CacheExpirationTime;
|
||||||
@ -1,15 +1,15 @@
|
|||||||
package org.jcnc.jnotepad.controller.event.handler.menubar;
|
package org.jcnc.jnotepad.controller.event.handler.menuitem;
|
||||||
|
|
||||||
import javafx.event.ActionEvent;
|
import javafx.event.ActionEvent;
|
||||||
import javafx.event.EventHandler;
|
import javafx.event.EventHandler;
|
||||||
import javafx.scene.control.Tab;
|
import javafx.scene.control.Tab;
|
||||||
import javafx.stage.FileChooser;
|
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.app.i18n.UiResourceBundle;
|
||||||
import org.jcnc.jnotepad.common.constants.TextConstants;
|
import org.jcnc.jnotepad.common.constants.TextConstants;
|
||||||
import org.jcnc.jnotepad.common.manager.ApplicationCacheManager;
|
import org.jcnc.jnotepad.common.manager.ApplicationCacheManager;
|
||||||
import org.jcnc.jnotepad.common.util.EncodingDetector;
|
|
||||||
import org.jcnc.jnotepad.common.util.LogUtil;
|
|
||||||
import org.jcnc.jnotepad.common.util.UiUtil;
|
|
||||||
import org.jcnc.jnotepad.model.entity.Cache;
|
import org.jcnc.jnotepad.model.entity.Cache;
|
||||||
import org.jcnc.jnotepad.model.enums.CacheExpirationTime;
|
import org.jcnc.jnotepad.model.enums.CacheExpirationTime;
|
||||||
import org.jcnc.jnotepad.ui.dialog.factory.impl.BasicFileChooserFactory;
|
import org.jcnc.jnotepad.ui.dialog.factory.impl.BasicFileChooserFactory;
|
||||||
@ -21,7 +21,7 @@ import org.jcnc.jnotepad.views.root.center.main.center.tab.CenterTabPane;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
|
|
||||||
import static org.jcnc.jnotepad.common.util.FileUtil.getFileText;
|
import static org.jcnc.jnotepad.api.util.FileUtil.getFileText;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 打开文件的事件处理程序。
|
* 打开文件的事件处理程序。
|
||||||
@ -1,15 +1,15 @@
|
|||||||
package org.jcnc.jnotepad.controller.event.handler.menubar;
|
package org.jcnc.jnotepad.controller.event.handler.menuitem;
|
||||||
|
|
||||||
import javafx.event.ActionEvent;
|
import javafx.event.ActionEvent;
|
||||||
import javafx.event.EventHandler;
|
import javafx.event.EventHandler;
|
||||||
import javafx.scene.control.TextField;
|
import javafx.scene.control.TextField;
|
||||||
import javafx.scene.input.KeyCode;
|
import javafx.scene.input.KeyCode;
|
||||||
import javafx.stage.FileChooser;
|
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.app.i18n.UiResourceBundle;
|
||||||
import org.jcnc.jnotepad.common.constants.TextConstants;
|
import org.jcnc.jnotepad.common.constants.TextConstants;
|
||||||
import org.jcnc.jnotepad.common.util.LogUtil;
|
|
||||||
import org.jcnc.jnotepad.common.util.PopUpUtil;
|
|
||||||
import org.jcnc.jnotepad.common.util.UiUtil;
|
|
||||||
import org.jcnc.jnotepad.ui.dialog.factory.impl.BasicFileChooserFactory;
|
import org.jcnc.jnotepad.ui.dialog.factory.impl.BasicFileChooserFactory;
|
||||||
import org.jcnc.jnotepad.views.manager.CenterTabPaneManager;
|
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.CenterTab;
|
||||||
@ -1,7 +1,7 @@
|
|||||||
package org.jcnc.jnotepad.controller.event.handler.menubar;
|
package org.jcnc.jnotepad.controller.event.handler.menuitem;
|
||||||
|
|
||||||
import javafx.event.ActionEvent;
|
import javafx.event.ActionEvent;
|
||||||
import org.jcnc.jnotepad.common.util.LogUtil;
|
import org.jcnc.jnotepad.api.util.LogUtil;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1,13 +1,13 @@
|
|||||||
package org.jcnc.jnotepad.controller.event.handler.menubar;
|
package org.jcnc.jnotepad.controller.event.handler.menuitem;
|
||||||
|
|
||||||
import javafx.event.ActionEvent;
|
import javafx.event.ActionEvent;
|
||||||
import javafx.event.EventHandler;
|
import javafx.event.EventHandler;
|
||||||
import javafx.stage.FileChooser;
|
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.app.i18n.UiResourceBundle;
|
||||||
import org.jcnc.jnotepad.common.constants.TextConstants;
|
import org.jcnc.jnotepad.common.constants.TextConstants;
|
||||||
import org.jcnc.jnotepad.common.manager.ApplicationCacheManager;
|
import org.jcnc.jnotepad.common.manager.ApplicationCacheManager;
|
||||||
import org.jcnc.jnotepad.common.util.LogUtil;
|
|
||||||
import org.jcnc.jnotepad.common.util.UiUtil;
|
|
||||||
import org.jcnc.jnotepad.controller.config.UserConfigController;
|
import org.jcnc.jnotepad.controller.config.UserConfigController;
|
||||||
import org.jcnc.jnotepad.controller.i18n.LocalizationController;
|
import org.jcnc.jnotepad.controller.i18n.LocalizationController;
|
||||||
import org.jcnc.jnotepad.model.entity.Cache;
|
import org.jcnc.jnotepad.model.entity.Cache;
|
||||||
@ -2,8 +2,8 @@ package org.jcnc.jnotepad.controller.manager;
|
|||||||
|
|
||||||
import org.jcnc.jnotepad.common.interfaces.ControllerAble;
|
import org.jcnc.jnotepad.common.interfaces.ControllerAble;
|
||||||
import org.jcnc.jnotepad.common.manager.ApplicationCacheManager;
|
import org.jcnc.jnotepad.common.manager.ApplicationCacheManager;
|
||||||
import org.jcnc.jnotepad.controller.event.handler.menubar.NewFile;
|
import org.jcnc.jnotepad.controller.event.handler.menuitem.NewFile;
|
||||||
import org.jcnc.jnotepad.controller.event.handler.menubar.OpenFile;
|
import org.jcnc.jnotepad.controller.event.handler.menuitem.OpenFile;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
package org.jcnc.jnotepad.plugin;
|
package org.jcnc.jnotepad.plugin;
|
||||||
|
|
||||||
|
import org.jcnc.jnotepad.api.util.JsonUtil;
|
||||||
|
import org.jcnc.jnotepad.api.util.LogUtil;
|
||||||
import org.jcnc.jnotepad.common.manager.ThreadPoolManager;
|
import org.jcnc.jnotepad.common.manager.ThreadPoolManager;
|
||||||
import org.jcnc.jnotepad.common.util.JsonUtil;
|
|
||||||
import org.jcnc.jnotepad.common.util.LogUtil;
|
|
||||||
import org.jcnc.jnotepad.controller.config.PluginConfigController;
|
import org.jcnc.jnotepad.controller.config.PluginConfigController;
|
||||||
import org.jcnc.jnotepad.exception.AppException;
|
import org.jcnc.jnotepad.exception.AppException;
|
||||||
import org.jcnc.jnotepad.model.entity.PluginDescriptor;
|
import org.jcnc.jnotepad.model.entity.PluginDescriptor;
|
||||||
|
|||||||
@ -6,9 +6,9 @@ import javafx.scene.control.Label;
|
|||||||
import javafx.scene.layout.VBox;
|
import javafx.scene.layout.VBox;
|
||||||
import javafx.stage.FileChooser;
|
import javafx.stage.FileChooser;
|
||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
import org.jcnc.jnotepad.common.util.LogUtil;
|
import org.jcnc.jnotepad.api.util.LogUtil;
|
||||||
import org.jcnc.jnotepad.common.util.PopUpUtil;
|
import org.jcnc.jnotepad.api.util.PopUpUtil;
|
||||||
import org.jcnc.jnotepad.common.util.UiUtil;
|
import org.jcnc.jnotepad.api.util.UiUtil;
|
||||||
import org.jcnc.jnotepad.plugin.manager.PluginManager;
|
import org.jcnc.jnotepad.plugin.manager.PluginManager;
|
||||||
import org.jcnc.jnotepad.ui.dialog.factory.impl.BasicFileChooserFactory;
|
import org.jcnc.jnotepad.ui.dialog.factory.impl.BasicFileChooserFactory;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
|||||||
@ -1,9 +1,9 @@
|
|||||||
package org.jcnc.jnotepad.plugin.manager;
|
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.app.manager.ApplicationManager;
|
||||||
import org.jcnc.jnotepad.common.manager.ThreadPoolManager;
|
import org.jcnc.jnotepad.common.manager.ThreadPoolManager;
|
||||||
import org.jcnc.jnotepad.common.util.LogUtil;
|
|
||||||
import org.jcnc.jnotepad.common.util.PopUpUtil;
|
|
||||||
import org.jcnc.jnotepad.controller.config.PluginConfigController;
|
import org.jcnc.jnotepad.controller.config.PluginConfigController;
|
||||||
import org.jcnc.jnotepad.model.entity.PluginDescriptor;
|
import org.jcnc.jnotepad.model.entity.PluginDescriptor;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
|||||||
@ -5,7 +5,7 @@ import javafx.geometry.Pos;
|
|||||||
import javafx.scene.image.Image;
|
import javafx.scene.image.Image;
|
||||||
import javafx.stage.Modality;
|
import javafx.stage.Modality;
|
||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
import org.jcnc.jnotepad.common.util.UiUtil;
|
import org.jcnc.jnotepad.api.util.UiUtil;
|
||||||
import org.jcnc.jnotepad.model.enums.DialogType;
|
import org.jcnc.jnotepad.model.enums.DialogType;
|
||||||
import org.jcnc.jnotepad.ui.dialog.interfaces.DialogButtonAction;
|
import org.jcnc.jnotepad.ui.dialog.interfaces.DialogButtonAction;
|
||||||
import org.kordamp.ikonli.javafx.FontIcon;
|
import org.kordamp.ikonli.javafx.FontIcon;
|
||||||
|
|||||||
@ -7,10 +7,10 @@ import javafx.scene.control.Label;
|
|||||||
import javafx.scene.layout.HBox;
|
import javafx.scene.layout.HBox;
|
||||||
import javafx.scene.layout.VBox;
|
import javafx.scene.layout.VBox;
|
||||||
import javafx.stage.Stage;
|
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.app.manager.ApplicationManager;
|
||||||
import org.jcnc.jnotepad.common.util.LogUtil;
|
|
||||||
import org.jcnc.jnotepad.common.util.PopUpUtil;
|
|
||||||
import org.jcnc.jnotepad.common.util.UiUtil;
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -17,9 +17,9 @@ import javafx.scene.input.ClipboardContent;
|
|||||||
import javafx.scene.layout.HBox;
|
import javafx.scene.layout.HBox;
|
||||||
import javafx.scene.layout.VBox;
|
import javafx.scene.layout.VBox;
|
||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
import org.jcnc.jnotepad.common.util.LogUtil;
|
import org.jcnc.jnotepad.api.core.ui.stage.AbstractPaneStage;
|
||||||
import org.jcnc.jnotepad.common.util.UiUtil;
|
import org.jcnc.jnotepad.api.util.LogUtil;
|
||||||
import org.jcnc.jnotepad.plugin.api.core.ui.stage.AbstractPaneStage;
|
import org.jcnc.jnotepad.api.util.UiUtil;
|
||||||
import org.jcnc.jnotepad.views.manager.RootManager;
|
import org.jcnc.jnotepad.views.manager.RootManager;
|
||||||
|
|
||||||
import static org.jcnc.jnotepad.common.constants.AppConstants.*;
|
import static org.jcnc.jnotepad.common.constants.AppConstants.*;
|
||||||
|
|||||||
@ -1,10 +1,7 @@
|
|||||||
package org.jcnc.jnotepad.ui.setstage;
|
package org.jcnc.jnotepad.ui.setstage;
|
||||||
|
|
||||||
import atlantafx.base.controls.CustomTextField;
|
import atlantafx.base.controls.CustomTextField;
|
||||||
import atlantafx.base.theme.Dracula;
|
|
||||||
import atlantafx.base.theme.PrimerDark;
|
|
||||||
import atlantafx.base.theme.Styles;
|
import atlantafx.base.theme.Styles;
|
||||||
import javafx.application.Application;
|
|
||||||
import javafx.geometry.Insets;
|
import javafx.geometry.Insets;
|
||||||
import javafx.geometry.Pos;
|
import javafx.geometry.Pos;
|
||||||
import javafx.scene.Node;
|
import javafx.scene.Node;
|
||||||
@ -17,8 +14,9 @@ import javafx.scene.layout.VBox;
|
|||||||
import javafx.scene.paint.Color;
|
import javafx.scene.paint.Color;
|
||||||
import javafx.scene.text.Font;
|
import javafx.scene.text.Font;
|
||||||
import javafx.scene.text.Text;
|
import javafx.scene.text.Text;
|
||||||
|
import javafx.stage.Modality;
|
||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
import org.jcnc.jnotepad.common.util.UiUtil;
|
import org.jcnc.jnotepad.api.util.UiUtil;
|
||||||
import org.jcnc.jnotepad.plugin.PluginManagerInterface;
|
import org.jcnc.jnotepad.plugin.PluginManagerInterface;
|
||||||
import org.jcnc.jnotepad.ui.module.CustomSetButton;
|
import org.jcnc.jnotepad.ui.module.CustomSetButton;
|
||||||
import org.jcnc.jnotepad.ui.module.SettingsComponent;
|
import org.jcnc.jnotepad.ui.module.SettingsComponent;
|
||||||
@ -71,7 +69,8 @@ public class SetStage extends Stage {
|
|||||||
Stage primaryStage = new Stage();
|
Stage primaryStage = new Stage();
|
||||||
primaryStage.getIcons().add(UiUtil.getAppIcon());
|
primaryStage.getIcons().add(UiUtil.getAppIcon());
|
||||||
primaryStage.setTitle("设置窗口");
|
primaryStage.setTitle("设置窗口");
|
||||||
|
// 将窗口设置为模态
|
||||||
|
primaryStage.initModality(Modality.APPLICATION_MODAL);
|
||||||
|
|
||||||
contentDisplay = new StackPane();
|
contentDisplay = new StackPane();
|
||||||
|
|
||||||
@ -93,7 +92,6 @@ public class SetStage extends Stage {
|
|||||||
cancelButton.setOnAction(event -> {
|
cancelButton.setOnAction(event -> {
|
||||||
Stage stage = (Stage) cancelButton.getScene().getWindow();
|
Stage stage = (Stage) cancelButton.getScene().getWindow();
|
||||||
stage.close();
|
stage.close();
|
||||||
|
|
||||||
});
|
});
|
||||||
cancelButton.getStyleClass().addAll(Styles.SMALL);
|
cancelButton.getStyleClass().addAll(Styles.SMALL);
|
||||||
Button applicationButton = new Button(" 应用 ");
|
Button applicationButton = new Button(" 应用 ");
|
||||||
|
|||||||
@ -25,11 +25,11 @@ import javafx.scene.web.WebView;
|
|||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
import org.commonmark.parser.Parser;
|
import org.commonmark.parser.Parser;
|
||||||
import org.commonmark.renderer.html.HtmlRenderer;
|
import org.commonmark.renderer.html.HtmlRenderer;
|
||||||
import org.jcnc.jnotepad.common.util.LogUtil;
|
import org.jcnc.jnotepad.api.core.ui.stage.AbstractPaneStage;
|
||||||
import org.jcnc.jnotepad.common.util.PopUpUtil;
|
import org.jcnc.jnotepad.api.util.LogUtil;
|
||||||
import org.jcnc.jnotepad.common.util.UiUtil;
|
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.model.entity.PluginDescriptor;
|
||||||
import org.jcnc.jnotepad.plugin.api.core.ui.stage.AbstractPaneStage;
|
|
||||||
import org.jcnc.jnotepad.plugin.manager.PluginManager;
|
import org.jcnc.jnotepad.plugin.manager.PluginManager;
|
||||||
import org.jcnc.jnotepad.ui.module.CustomSetButton;
|
import org.jcnc.jnotepad.ui.module.CustomSetButton;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
|||||||
@ -3,15 +3,15 @@ package org.jcnc.jnotepad.views.manager;
|
|||||||
import javafx.collections.ObservableList;
|
import javafx.collections.ObservableList;
|
||||||
import javafx.scene.control.Tab;
|
import javafx.scene.control.Tab;
|
||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
|
import org.jcnc.jnotepad.api.util.FileUtil;
|
||||||
|
import org.jcnc.jnotepad.api.util.PopUpUtil;
|
||||||
import org.jcnc.jnotepad.common.manager.ApplicationCacheManager;
|
import org.jcnc.jnotepad.common.manager.ApplicationCacheManager;
|
||||||
import org.jcnc.jnotepad.common.util.FileUtil;
|
|
||||||
import org.jcnc.jnotepad.common.util.PopUpUtil;
|
|
||||||
import org.jcnc.jnotepad.controller.config.UserConfigController;
|
import org.jcnc.jnotepad.controller.config.UserConfigController;
|
||||||
import org.jcnc.jnotepad.model.enums.CacheExpirationTime;
|
import org.jcnc.jnotepad.model.enums.CacheExpirationTime;
|
||||||
import org.jcnc.jnotepad.ui.module.LineNumberTextArea;
|
import org.jcnc.jnotepad.ui.module.LineNumberTextArea;
|
||||||
import org.jcnc.jnotepad.views.root.center.main.center.tab.CenterTab;
|
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.center.main.center.tab.CenterTabPane;
|
||||||
import org.jcnc.jnotepad.views.root.top.menu.TopMenuBar;
|
import org.jcnc.jnotepad.views.root.top.menubar.TopMenuBar;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|||||||
@ -3,9 +3,9 @@ package org.jcnc.jnotepad.views.manager;
|
|||||||
import javafx.beans.value.ChangeListener;
|
import javafx.beans.value.ChangeListener;
|
||||||
import javafx.scene.control.SplitPane;
|
import javafx.scene.control.SplitPane;
|
||||||
import javafx.scene.control.TreeItem;
|
import javafx.scene.control.TreeItem;
|
||||||
|
import org.jcnc.jnotepad.api.util.FileUtil;
|
||||||
import org.jcnc.jnotepad.common.manager.ApplicationCacheManager;
|
import org.jcnc.jnotepad.common.manager.ApplicationCacheManager;
|
||||||
import org.jcnc.jnotepad.common.util.FileUtil;
|
import org.jcnc.jnotepad.controller.event.handler.menuitem.OpenDirectory;
|
||||||
import org.jcnc.jnotepad.controller.event.handler.menubar.OpenDirectory;
|
|
||||||
import org.jcnc.jnotepad.model.entity.DirFileModel;
|
import org.jcnc.jnotepad.model.entity.DirFileModel;
|
||||||
import org.jcnc.jnotepad.views.root.center.main.MainBorderPane;
|
import org.jcnc.jnotepad.views.root.center.main.MainBorderPane;
|
||||||
import org.jcnc.jnotepad.views.root.center.main.center.directory.DirectorySidebarPane;
|
import org.jcnc.jnotepad.views.root.center.main.center.directory.DirectorySidebarPane;
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
package org.jcnc.jnotepad.views.manager;
|
package org.jcnc.jnotepad.views.manager;
|
||||||
|
|
||||||
import org.jcnc.jnotepad.views.root.top.RootTopBorderPane;
|
import org.jcnc.jnotepad.views.root.top.RootTopBorderPane;
|
||||||
import org.jcnc.jnotepad.views.root.top.menu.TopMenuBar;
|
import org.jcnc.jnotepad.views.root.top.menubar.TopMenuBar;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 顶部边界面板管理类
|
* 顶部边界面板管理类
|
||||||
|
|||||||
@ -3,10 +3,10 @@ package org.jcnc.jnotepad.views.manager;
|
|||||||
import javafx.scene.Node;
|
import javafx.scene.Node;
|
||||||
import javafx.scene.image.Image;
|
import javafx.scene.image.Image;
|
||||||
import javafx.scene.image.ImageView;
|
import javafx.scene.image.ImageView;
|
||||||
|
import org.jcnc.jnotepad.api.core.views.manager.AbstractManager;
|
||||||
|
import org.jcnc.jnotepad.api.core.views.manager.builder.SideBarButtonBuilder;
|
||||||
import org.jcnc.jnotepad.controller.event.handler.setting.DirTreeBtn;
|
import org.jcnc.jnotepad.controller.event.handler.setting.DirTreeBtn;
|
||||||
import org.jcnc.jnotepad.controller.event.handler.setting.SetBtn;
|
import org.jcnc.jnotepad.controller.event.handler.setting.SetBtn;
|
||||||
import org.jcnc.jnotepad.plugin.api.core.views.manager.AbstractManager;
|
|
||||||
import org.jcnc.jnotepad.plugin.api.core.views.manager.builder.SideBarButtonBuilder;
|
|
||||||
import org.jcnc.jnotepad.views.root.left.sidebar.tools.SidebarToolBar;
|
import org.jcnc.jnotepad.views.root.left.sidebar.tools.SidebarToolBar;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -57,8 +57,6 @@ public class SidebarToolBarManager extends AbstractManager<Node> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取节点列表
|
* 获取节点列表
|
||||||
*
|
*
|
||||||
|
|||||||
@ -1,29 +1,20 @@
|
|||||||
package org.jcnc.jnotepad.views.manager;
|
package org.jcnc.jnotepad.views.manager;
|
||||||
|
|
||||||
import javafx.beans.value.ChangeListener;
|
|
||||||
import javafx.collections.ObservableList;
|
import javafx.collections.ObservableList;
|
||||||
import javafx.event.ActionEvent;
|
|
||||||
import javafx.event.EventHandler;
|
|
||||||
import javafx.geometry.Insets;
|
import javafx.geometry.Insets;
|
||||||
import javafx.scene.control.*;
|
import javafx.scene.control.Menu;
|
||||||
|
import javafx.scene.control.MenuItem;
|
||||||
import javafx.scene.input.KeyCombination;
|
import javafx.scene.input.KeyCombination;
|
||||||
import javafx.stage.Stage;
|
import org.jcnc.jnotepad.api.core.views.manager.AbstractManager;
|
||||||
import org.jcnc.jnotepad.app.i18n.UiResourceBundle;
|
import org.jcnc.jnotepad.api.util.LogUtil;
|
||||||
import org.jcnc.jnotepad.common.util.LogUtil;
|
|
||||||
import org.jcnc.jnotepad.common.util.UiUtil;
|
|
||||||
import org.jcnc.jnotepad.controller.config.UserConfigController;
|
import org.jcnc.jnotepad.controller.config.UserConfigController;
|
||||||
import org.jcnc.jnotepad.controller.event.handler.menubar.*;
|
|
||||||
import org.jcnc.jnotepad.controller.i18n.LocalizationController;
|
|
||||||
import org.jcnc.jnotepad.model.entity.ShortcutKey;
|
import org.jcnc.jnotepad.model.entity.ShortcutKey;
|
||||||
import org.jcnc.jnotepad.plugin.api.core.views.manager.AbstractManager;
|
import org.jcnc.jnotepad.views.root.top.menubar.TopMenuBar;
|
||||||
import org.jcnc.jnotepad.ui.setstage.HelpPaneStage;
|
import org.jcnc.jnotepad.views.root.top.menubar.menu.*;
|
||||||
import org.jcnc.jnotepad.ui.setstage.pluginstage.PluginManagementPane;
|
|
||||||
import org.jcnc.jnotepad.views.root.top.menu.TopMenuBar;
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
import static org.jcnc.jnotepad.common.constants.TextConstants.*;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 顶部菜单栏管理类
|
* 顶部菜单栏管理类
|
||||||
@ -34,18 +25,16 @@ public class TopMenuBarManager extends AbstractManager<Menu> {
|
|||||||
private static final TopMenuBarManager INSTANCE = new TopMenuBarManager();
|
private static final TopMenuBarManager INSTANCE = new TopMenuBarManager();
|
||||||
private final TopMenuBar topMenuBar = TopMenuBar.getInstance();
|
private final TopMenuBar topMenuBar = TopMenuBar.getInstance();
|
||||||
private final List<Menu> nodeList = new ArrayList<>();
|
private final List<Menu> nodeList = new ArrayList<>();
|
||||||
private final Map<String, MenuItem> fileMenuItems = new HashMap<>();
|
|
||||||
|
|
||||||
private final Map<String, MenuItem> setMenuItems = new HashMap<>();
|
|
||||||
|
|
||||||
private final Map<String, MenuItem> pluginMenuItems = new HashMap<>();
|
|
||||||
|
|
||||||
private final Map<String, MenuItem> helpMenuItems = new HashMap<>();
|
|
||||||
|
|
||||||
private final Map<String, RadioMenuItem> languageMenuItems = new HashMap<>();
|
|
||||||
Logger logger = LogUtil.getLogger(this.getClass());
|
Logger logger = LogUtil.getLogger(this.getClass());
|
||||||
UserConfigController userConfigController = UserConfigController.getInstance();
|
UserConfigController userConfigController = UserConfigController.getInstance();
|
||||||
|
|
||||||
|
FileTopMenu fileTopMenu = FileTopMenu.getInstance();
|
||||||
|
LanguageTopMenu languageTopMenu = LanguageTopMenu.getInstance();
|
||||||
|
|
||||||
|
SettingTopMenu settingTopMenu = SettingTopMenu.getInstance();
|
||||||
|
HelpTopMenu helpTopMenu = HelpTopMenu.getInstance();
|
||||||
|
|
||||||
|
PluginTopMenu pluginTopMenu = PluginTopMenu.getInstance();
|
||||||
private TopMenuBarManager() {
|
private TopMenuBarManager() {
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -62,17 +51,15 @@ public class TopMenuBarManager extends AbstractManager<Menu> {
|
|||||||
topMenuBar.setPadding(new Insets(-3, 0, -3, 0));
|
topMenuBar.setPadding(new Insets(-3, 0, -3, 0));
|
||||||
registerTopMenuBar();
|
registerTopMenuBar();
|
||||||
// 初始化文件菜单
|
// 初始化文件菜单
|
||||||
initFileMenu();
|
fileTopMenu.initMenu();
|
||||||
// 初始化语言菜单
|
// 初始化语言菜单
|
||||||
initLanguageMenu();
|
languageTopMenu.initMenu();
|
||||||
// 设置当前语言选中状态
|
|
||||||
toggleLanguageCheck(userConfigController.getLanguage());
|
|
||||||
// 初始化设置菜单
|
// 初始化设置菜单
|
||||||
initSettingMenu();
|
settingTopMenu.initMenu();
|
||||||
// 初始化设置菜单
|
// 初始化帮助菜单
|
||||||
initHelpMenu();
|
helpTopMenu.initMenu();
|
||||||
// 初始化插件菜单
|
// 初始化插件菜单
|
||||||
initPluginMenu();
|
pluginTopMenu.initMenu();
|
||||||
|
|
||||||
// 刷新顶部菜单栏
|
// 刷新顶部菜单栏
|
||||||
refreshTopMenuBar();
|
refreshTopMenuBar();
|
||||||
@ -85,189 +72,16 @@ public class TopMenuBarManager extends AbstractManager<Menu> {
|
|||||||
*/
|
*/
|
||||||
public void registerTopMenuBar() {
|
public void registerTopMenuBar() {
|
||||||
// 文件菜单
|
// 文件菜单
|
||||||
registerFileMenuItem(topMenuBar.getNewItem(), NEW, "newItem", new NewFile());
|
registerNode(fileTopMenu.getMenu());
|
||||||
registerFileMenuItem(topMenuBar.getOpenItem(), OPEN, "openItem", new OpenFile());
|
|
||||||
registerFileMenuItem(topMenuBar.getSaveItem(), SAVE, "saveItem", new SaveFile());
|
|
||||||
registerFileMenuItem(topMenuBar.getSaveAsItem(), SAVE_AS, "saveAsItem", new SaveAsFile());
|
|
||||||
registerFileMenuItem(topMenuBar.getRenameItem(), RENAME, "renameItem", new RenameFile());
|
|
||||||
// 打开文件夹按钮
|
|
||||||
registerFileMenuItem(topMenuBar.getOpenDirItem(), OPEN_DIRECTORY, "openDirItem", new OpenDirectory());
|
|
||||||
|
|
||||||
// 语言菜单
|
|
||||||
registerLanguageMenuItem(topMenuBar.getChineseItem(), UPPER_CHINESE, Locale.CHINESE, this::toggleLanguage);
|
|
||||||
registerLanguageMenuItem(topMenuBar.getEnglishItem(), UPPER_ENGLISH, Locale.ENGLISH, this::toggleLanguage);
|
|
||||||
|
|
||||||
|
|
||||||
// 设置菜单
|
// 设置菜单
|
||||||
registerSetMenuItem(topMenuBar.getLineFeedItem(), WORD_WRAP, "lineFeedItem", (observableValue, before, after) -> {
|
registerNode(topMenuBar.getSetMenu());
|
||||||
// 1. 更新全局配置
|
// 帮助菜单
|
||||||
UserConfigController.getInstance().setAutoLineConfig(after);
|
registerNode(helpTopMenu.getMenu());
|
||||||
// 2. 对当前tab生效配置
|
// 插件菜单
|
||||||
CenterTabPaneManager.getInstance().fireTabSelected();
|
registerNode(topMenuBar.getPluginMenu());
|
||||||
});
|
|
||||||
topMenuBar.getLineFeedItem().selectedProperty().set(true);
|
|
||||||
|
|
||||||
registerSetMenuItem(topMenuBar.getTopItem(), TOP, "topItem", (observableValue, before, after) -> {
|
|
||||||
// 获取窗口容器
|
|
||||||
Stage primaryStage = (Stage) UiUtil.getAppWindow();
|
|
||||||
// 设置窗口为置顶
|
|
||||||
primaryStage.setAlwaysOnTop(after);
|
|
||||||
});
|
|
||||||
|
|
||||||
registerSetMenuItem(topMenuBar.getOpenConfigItem(), OPEN_CONFIGURATION_FILE, "openConfigItem", new OpenConfig());
|
|
||||||
registerSetMenuItem(topMenuBar.getLanguageMenu(), LANGUAGE, "languageMenu", actionEvent -> {
|
|
||||||
});
|
|
||||||
|
|
||||||
//插件菜单
|
|
||||||
registerPluginMenuItem(topMenuBar.getPluginManagerItem(), MANAGER_PLUGIN, "pluginManagerItem", event -> new PluginManagementPane().run());
|
|
||||||
registerPluginMenuItem(topMenuBar.getCountItem(), STATISTICS, "countItem", event -> {
|
|
||||||
});
|
|
||||||
//帮助菜单
|
|
||||||
registerHelpMenuItem(topMenuBar.getAboutItem(), ABOUT, "aboutItem", event -> new HelpPaneStage().run(new Stage()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 切换语言
|
|
||||||
*
|
|
||||||
* @param actionEvent 点击事件
|
|
||||||
*/
|
|
||||||
private void toggleLanguage(ActionEvent actionEvent) {
|
|
||||||
if (actionEvent == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
RadioMenuItem languageItem = (RadioMenuItem) actionEvent.getSource();
|
|
||||||
if (languageItem == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
LocalizationController.setCurrentLocal((Locale) languageItem.getUserData());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 设置当前语言选中状态
|
|
||||||
*
|
|
||||||
* @param language 语言
|
|
||||||
*/
|
|
||||||
public void toggleLanguageCheck(String language) {
|
|
||||||
languageMenuItems.forEach((k, v) -> v.setSelected(language.toUpperCase().equals(k)));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 注册文件菜单项
|
|
||||||
*
|
|
||||||
* @param menuItem 菜单项
|
|
||||||
* @param menuItemName 菜单项名称
|
|
||||||
* @param buttonName 按钮名称
|
|
||||||
* @param eventHandler 操作事件
|
|
||||||
*/
|
|
||||||
public void registerFileMenuItem(MenuItem menuItem, String menuItemName, String buttonName, EventHandler<ActionEvent> eventHandler) {
|
|
||||||
fileMenuItems.put(menuItemName, menuItem);
|
|
||||||
setMenuItem(menuItem, buttonName, eventHandler);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 注册帮助菜单项
|
|
||||||
*
|
|
||||||
* @param menuItem 菜单项
|
|
||||||
* @param menuItemName 菜单项名称
|
|
||||||
* @param buttonName 按钮名称
|
|
||||||
* @param eventHandler 操作事件
|
|
||||||
*/
|
|
||||||
public void registerHelpMenuItem(MenuItem menuItem, String menuItemName, String buttonName, EventHandler<ActionEvent> eventHandler) {
|
|
||||||
helpMenuItems.put(menuItemName, menuItem);
|
|
||||||
setMenuItem(menuItem, buttonName, eventHandler);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 注册设置菜单项
|
|
||||||
*
|
|
||||||
* @param menuItem 菜单项
|
|
||||||
* @param menuItemName 菜单项名称
|
|
||||||
* @param buttonName 按钮名称
|
|
||||||
* @param eventHandler 操作事件
|
|
||||||
*/
|
|
||||||
public void registerSetMenuItem(MenuItem menuItem, String menuItemName, String buttonName, EventHandler<ActionEvent> eventHandler) {
|
|
||||||
setMenuItems.put(menuItemName, menuItem);
|
|
||||||
setMenuItem(menuItem, buttonName, eventHandler);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 注册设置菜单项
|
|
||||||
*
|
|
||||||
* @param checkMenuItem 检查菜单项
|
|
||||||
* @param menuItemName 菜单项名称
|
|
||||||
* @param buttonName 按钮名称
|
|
||||||
* @param listener 监听事件
|
|
||||||
*/
|
|
||||||
|
|
||||||
public void registerSetMenuItem(CheckMenuItem checkMenuItem, String menuItemName, String buttonName, ChangeListener<Boolean> listener) {
|
|
||||||
setMenuItems.put(menuItemName, checkMenuItem);
|
|
||||||
setCheckMenuItem(checkMenuItem, buttonName, listener);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 注册语言菜单
|
|
||||||
*
|
|
||||||
* @param radioMenuItem 单选菜单项
|
|
||||||
* @param menuItemName 菜单项名称
|
|
||||||
* @param locale 语言
|
|
||||||
* @param eventHandler 操作事件
|
|
||||||
*/
|
|
||||||
|
|
||||||
public void registerLanguageMenuItem(RadioMenuItem radioMenuItem, String menuItemName, Locale locale, EventHandler<ActionEvent> eventHandler) {
|
|
||||||
languageMenuItems.put(menuItemName, radioMenuItem);
|
|
||||||
setRadioMenuItem(radioMenuItem, locale, eventHandler);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 注册插件菜单
|
|
||||||
*
|
|
||||||
* @param menuItem 菜单项
|
|
||||||
* @param menuItemName 菜单项名称
|
|
||||||
* @param buttonName 按钮名称
|
|
||||||
* @param eventHandler 操作事件
|
|
||||||
*/
|
|
||||||
public void registerPluginMenuItem(MenuItem menuItem, String menuItemName, String buttonName, EventHandler<ActionEvent> eventHandler) {
|
|
||||||
pluginMenuItems.put(menuItemName, menuItem);
|
|
||||||
setMenuItem(menuItem, buttonName, eventHandler);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 注册菜单项
|
|
||||||
*
|
|
||||||
* @param menuItem 菜单项
|
|
||||||
* @param buttonName 按钮名称
|
|
||||||
* @param eventHandler 操作事件
|
|
||||||
*/
|
|
||||||
private void setMenuItem(MenuItem menuItem, String buttonName, EventHandler<ActionEvent> eventHandler) {
|
|
||||||
menuItem.setUserData(buttonName);
|
|
||||||
menuItem.setOnAction(eventHandler);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 注册单选菜单项
|
|
||||||
*
|
|
||||||
* @param radioMenuItem 单选菜单项
|
|
||||||
* @param locale 语言
|
|
||||||
* @param eventHandler 操作事件
|
|
||||||
*/
|
|
||||||
private void setRadioMenuItem(RadioMenuItem radioMenuItem, Locale locale, EventHandler<ActionEvent> eventHandler) {
|
|
||||||
radioMenuItem.setUserData(locale);
|
|
||||||
radioMenuItem.setOnAction(eventHandler);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 注册检查菜单项
|
|
||||||
*
|
|
||||||
* @param checkMenuItem 检查菜单项
|
|
||||||
* @param buttonName 按钮名称
|
|
||||||
* @param listener 监听事件
|
|
||||||
*/
|
|
||||||
private void setCheckMenuItem(CheckMenuItem checkMenuItem, String buttonName, ChangeListener<Boolean> listener) {
|
|
||||||
checkMenuItem.setUserData(buttonName);
|
|
||||||
checkMenuItem.selectedProperty().addListener(listener);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 初始化快捷键
|
* 初始化快捷键
|
||||||
*/
|
*/
|
||||||
@ -276,7 +90,7 @@ public class TopMenuBarManager extends AbstractManager<Menu> {
|
|||||||
List<ShortcutKey> shortcutKeyConfigs = userConfigController.getShortcutKey();
|
List<ShortcutKey> shortcutKeyConfigs = userConfigController.getShortcutKey();
|
||||||
for (ShortcutKey shortcutKey : shortcutKeyConfigs) {
|
for (ShortcutKey shortcutKey : shortcutKeyConfigs) {
|
||||||
// 保证json的key必须和变量名一致
|
// 保证json的key必须和变量名一致
|
||||||
MenuItem menuItem = topMenuBar.getItemMap().get(shortcutKey.getButtonName());
|
MenuItem menuItem = topMenuBar.getAllItemMap().get(shortcutKey.getButtonName());
|
||||||
String shortKeyValue = shortcutKey.getShortcutKeyValue();
|
String shortKeyValue = shortcutKey.getShortcutKeyValue();
|
||||||
if ("".equals(shortKeyValue) && menuItem != null) {
|
if ("".equals(shortKeyValue) && menuItem != null) {
|
||||||
itemsToUnbind.add(menuItem);
|
itemsToUnbind.add(menuItem);
|
||||||
@ -293,7 +107,7 @@ public class TopMenuBarManager extends AbstractManager<Menu> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 初始化顶部菜单
|
* 刷新顶部菜单
|
||||||
*/
|
*/
|
||||||
private void refreshTopMenuBar() {
|
private void refreshTopMenuBar() {
|
||||||
ObservableList<Menu> menus = topMenuBar.getMenus();
|
ObservableList<Menu> menus = topMenuBar.getMenus();
|
||||||
@ -301,86 +115,6 @@ public class TopMenuBarManager extends AbstractManager<Menu> {
|
|||||||
menus.addAll(nodeList);
|
menus.addAll(nodeList);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 初始化插件菜单
|
|
||||||
*/
|
|
||||||
private void initPluginMenu() {
|
|
||||||
logger.info("初始化插件菜单!");
|
|
||||||
var pluginMenu = topMenuBar.getPluginMenu();
|
|
||||||
// 插件菜单
|
|
||||||
UiResourceBundle.bindStringProperty(pluginMenu.textProperty(), PLUGIN);
|
|
||||||
initMenuItems(pluginMenuItems, pluginMenu);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 初始化插件菜单
|
|
||||||
*/
|
|
||||||
private void initHelpMenu() {
|
|
||||||
logger.info("初始化帮助菜单!");
|
|
||||||
var helpMenu = topMenuBar.getHelpMenu();
|
|
||||||
// 插件菜单
|
|
||||||
UiResourceBundle.bindStringProperty(helpMenu.textProperty(), HELP);
|
|
||||||
|
|
||||||
initMenuItems(helpMenuItems, helpMenu);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 初始化设置菜单
|
|
||||||
*/
|
|
||||||
private void initSettingMenu() {
|
|
||||||
logger.info("初始化设置菜单!");
|
|
||||||
var setMenu = topMenuBar.getSetMenu();
|
|
||||||
// 设置菜单
|
|
||||||
UiResourceBundle.bindStringProperty(setMenu.textProperty(), SET);
|
|
||||||
// 初始化菜单项
|
|
||||||
initMenuItems(setMenuItems, setMenu);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 初始化语言菜单
|
|
||||||
*/
|
|
||||||
private void initLanguageMenu() {
|
|
||||||
logger.info("初始化语言菜单!");
|
|
||||||
// 语言菜单
|
|
||||||
ToggleGroup languageToggleGroup = new ToggleGroup();
|
|
||||||
var itemMap = topMenuBar.getItemMap();
|
|
||||||
languageMenuItems.forEach((key, value) -> {
|
|
||||||
UiResourceBundle.bindStringProperty(value.textProperty(), key);
|
|
||||||
itemMap.put(key, value);
|
|
||||||
languageToggleGroup.getToggles().add(value);
|
|
||||||
topMenuBar.getLanguageMenu().getItems().add(value);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 初始化文件菜单
|
|
||||||
*/
|
|
||||||
private void initFileMenu() {
|
|
||||||
logger.info("初始化文件菜单!");
|
|
||||||
Menu fileMenu = topMenuBar.getFileMenu();
|
|
||||||
// 文件菜单
|
|
||||||
UiResourceBundle.bindStringProperty(fileMenu.textProperty(), FILE);
|
|
||||||
// 初始化菜单项
|
|
||||||
initMenuItems(fileMenuItems, fileMenu);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 初始化菜单项
|
|
||||||
*
|
|
||||||
* @param menuItems 菜单项集合
|
|
||||||
* @param menu 菜单
|
|
||||||
*/
|
|
||||||
|
|
||||||
private void initMenuItems(Map<String, MenuItem> menuItems, Menu menu) {
|
|
||||||
var itemMap = topMenuBar.getItemMap();
|
|
||||||
menuItems.forEach((key, value) -> {
|
|
||||||
UiResourceBundle.bindStringProperty(value.textProperty(), key);
|
|
||||||
itemMap.put((String) value.getUserData(), value);
|
|
||||||
menu.getItems().add(value);
|
|
||||||
});
|
|
||||||
registerNode(menu);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取节点列表
|
* 获取节点列表
|
||||||
*
|
*
|
||||||
|
|||||||
@ -2,7 +2,7 @@ package org.jcnc.jnotepad.views.root.center.main.center.directory;
|
|||||||
|
|
||||||
import javafx.scene.control.TreeItem;
|
import javafx.scene.control.TreeItem;
|
||||||
import javafx.scene.control.TreeView;
|
import javafx.scene.control.TreeView;
|
||||||
import org.jcnc.jnotepad.controller.event.handler.menubar.OpenFile;
|
import org.jcnc.jnotepad.controller.event.handler.menuitem.OpenFile;
|
||||||
import org.jcnc.jnotepad.model.entity.DirFileModel;
|
import org.jcnc.jnotepad.model.entity.DirFileModel;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|||||||
@ -2,7 +2,7 @@ package org.jcnc.jnotepad.views.root.center.main.center.tab;
|
|||||||
|
|
||||||
import javafx.scene.control.Tab;
|
import javafx.scene.control.Tab;
|
||||||
import org.fxmisc.flowless.VirtualizedScrollPane;
|
import org.fxmisc.flowless.VirtualizedScrollPane;
|
||||||
import org.jcnc.jnotepad.common.util.LogUtil;
|
import org.jcnc.jnotepad.api.util.LogUtil;
|
||||||
import org.jcnc.jnotepad.controller.config.UserConfigController;
|
import org.jcnc.jnotepad.controller.config.UserConfigController;
|
||||||
import org.jcnc.jnotepad.ui.module.LineNumberTextArea;
|
import org.jcnc.jnotepad.ui.module.LineNumberTextArea;
|
||||||
import org.jcnc.jnotepad.views.manager.BottomStatusBoxManager;
|
import org.jcnc.jnotepad.views.manager.BottomStatusBoxManager;
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
package org.jcnc.jnotepad.views.root.top.menu;
|
package org.jcnc.jnotepad.views.root.top.menubar;
|
||||||
|
|
||||||
import javafx.scene.control.*;
|
import javafx.scene.control.*;
|
||||||
import org.jcnc.jnotepad.views.manager.CenterTabPaneManager;
|
import org.jcnc.jnotepad.views.manager.CenterTabPaneManager;
|
||||||
@ -18,7 +18,7 @@ public class TopMenuBar extends MenuBar {
|
|||||||
/**
|
/**
|
||||||
* 按钮集合
|
* 按钮集合
|
||||||
*/
|
*/
|
||||||
private final Map<String, MenuItem> itemMap = new HashMap<>();
|
private final Map<String, MenuItem> allItemMap = new HashMap<>();
|
||||||
/**
|
/**
|
||||||
* 标签页布局组件封装。
|
* 标签页布局组件封装。
|
||||||
*/
|
*/
|
||||||
@ -145,8 +145,8 @@ public class TopMenuBar extends MenuBar {
|
|||||||
return languageMenu;
|
return languageMenu;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map<String, MenuItem> getItemMap() {
|
public Map<String, MenuItem> getAllItemMap() {
|
||||||
return itemMap;
|
return allItemMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
public MenuItem getNewItem() {
|
public MenuItem getNewItem() {
|
||||||
@ -0,0 +1,71 @@
|
|||||||
|
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.controller.event.handler.menuitem.*;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import static org.jcnc.jnotepad.common.constants.TextConstants.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件菜单
|
||||||
|
*
|
||||||
|
* @author gewuyou
|
||||||
|
*/
|
||||||
|
public class FileTopMenu extends AbstractTopMenu {
|
||||||
|
private static final FileTopMenu INSTANCE = new FileTopMenu();
|
||||||
|
private final Map<String, MenuItem> fileMenuItems = new HashMap<>();
|
||||||
|
|
||||||
|
public static FileTopMenu getInstance() {
|
||||||
|
return INSTANCE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取菜单名称
|
||||||
|
*
|
||||||
|
* @return 菜单名称
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String getMenuName() {
|
||||||
|
return FILE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取菜单
|
||||||
|
*
|
||||||
|
* @return 菜单
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Menu getMenu() {
|
||||||
|
return topMenuBar.getFileMenu();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取菜单项集合
|
||||||
|
*
|
||||||
|
* @return 菜单项集合
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Map<String, MenuItem> getMenuItems() {
|
||||||
|
return fileMenuItems;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 注册顶部菜单
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected void registerTopMenu() {
|
||||||
|
// 文件菜单
|
||||||
|
registerMenuItem(topMenuBar.getNewItem(), NEW, "newItem", new NewFile());
|
||||||
|
registerMenuItem(topMenuBar.getOpenItem(), OPEN, "openItem", new OpenFile());
|
||||||
|
registerMenuItem(topMenuBar.getSaveItem(), SAVE, "saveItem", new SaveFile());
|
||||||
|
registerMenuItem(topMenuBar.getSaveAsItem(), SAVE_AS, "saveAsItem", new SaveAsFile());
|
||||||
|
registerMenuItem(topMenuBar.getRenameItem(), RENAME, "renameItem", new RenameFile());
|
||||||
|
// 打开文件夹按钮
|
||||||
|
registerMenuItem(topMenuBar.getOpenDirItem(), OPEN_DIRECTORY, "openDirItem", new OpenDirectory());
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,68 @@
|
|||||||
|
package org.jcnc.jnotepad.views.root.top.menubar.menu;
|
||||||
|
|
||||||
|
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 java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import static org.jcnc.jnotepad.common.constants.TextConstants.ABOUT;
|
||||||
|
import static org.jcnc.jnotepad.common.constants.TextConstants.HELP;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 帮助菜单
|
||||||
|
*
|
||||||
|
* @author gewuyou
|
||||||
|
*/
|
||||||
|
public class HelpTopMenu extends AbstractTopMenu {
|
||||||
|
|
||||||
|
private static final HelpTopMenu INSTANCE = new HelpTopMenu();
|
||||||
|
|
||||||
|
private final Map<String, MenuItem> helpMenuItems = new HashMap<>();
|
||||||
|
|
||||||
|
public static HelpTopMenu getInstance() {
|
||||||
|
return INSTANCE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取菜单名称
|
||||||
|
*
|
||||||
|
* @return 菜单名称
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String getMenuName() {
|
||||||
|
return HELP;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取菜单
|
||||||
|
*
|
||||||
|
* @return 菜单
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Menu getMenu() {
|
||||||
|
return topMenuBar.getHelpMenu();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取菜单项集合
|
||||||
|
*
|
||||||
|
* @return 菜单项集合
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Map<String, MenuItem> getMenuItems() {
|
||||||
|
return helpMenuItems;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 注册顶部菜单
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected void registerTopMenu() {
|
||||||
|
registerMenuItem(topMenuBar.getAboutItem(), ABOUT, "aboutItem", event -> new HelpPaneStage().run(new Stage()));
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,123 @@
|
|||||||
|
package org.jcnc.jnotepad.views.root.top.menubar.menu;
|
||||||
|
|
||||||
|
import javafx.event.ActionEvent;
|
||||||
|
import javafx.scene.control.Menu;
|
||||||
|
import javafx.scene.control.MenuItem;
|
||||||
|
import javafx.scene.control.RadioMenuItem;
|
||||||
|
import javafx.scene.control.ToggleGroup;
|
||||||
|
import org.jcnc.jnotepad.api.core.views.top.menu.AbstractTopMenu;
|
||||||
|
import org.jcnc.jnotepad.app.i18n.UiResourceBundle;
|
||||||
|
import org.jcnc.jnotepad.controller.config.UserConfigController;
|
||||||
|
import org.jcnc.jnotepad.controller.i18n.LocalizationController;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Locale;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import static org.jcnc.jnotepad.common.constants.TextConstants.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 语言顶部菜单
|
||||||
|
*
|
||||||
|
* @author gewuyou
|
||||||
|
*/
|
||||||
|
public class LanguageTopMenu extends AbstractTopMenu {
|
||||||
|
|
||||||
|
private static final LanguageTopMenu INSTANCE = new LanguageTopMenu();
|
||||||
|
|
||||||
|
private final Map<String, RadioMenuItem> languageMenuItems = new HashMap<>();
|
||||||
|
|
||||||
|
UserConfigController userConfigController = UserConfigController.getInstance();
|
||||||
|
|
||||||
|
public static LanguageTopMenu getInstance() {
|
||||||
|
return INSTANCE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取菜单名称
|
||||||
|
*
|
||||||
|
* @return 菜单名称
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String getMenuName() {
|
||||||
|
return LANGUAGE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取菜单
|
||||||
|
*
|
||||||
|
* @return 菜单
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Menu getMenu() {
|
||||||
|
return topMenuBar.getLanguageMenu();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取菜单项集合
|
||||||
|
*
|
||||||
|
* @return 菜单项集合
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Map<String, MenuItem> getMenuItems() {
|
||||||
|
return Collections.emptyMap();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 初始化菜单栏
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void initMenu() {
|
||||||
|
registerTopMenu();
|
||||||
|
logger.info("初始化语言菜单!");
|
||||||
|
// 语言菜单
|
||||||
|
ToggleGroup languageToggleGroup = new ToggleGroup();
|
||||||
|
var itemMap = topMenuBar.getAllItemMap();
|
||||||
|
languageMenuItems.forEach((key, value) -> {
|
||||||
|
UiResourceBundle.bindStringProperty(value.textProperty(), key);
|
||||||
|
itemMap.put(key, value);
|
||||||
|
languageToggleGroup.getToggles().add(value);
|
||||||
|
topMenuBar.getLanguageMenu().getItems().add(value);
|
||||||
|
});
|
||||||
|
// 设置当前语言选中状态
|
||||||
|
toggleLanguageCheck(userConfigController.getLanguage());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 注册顶部菜单
|
||||||
|
*
|
||||||
|
* @apiNote 此方法
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected void registerTopMenu() {
|
||||||
|
registerRadioMenuItem(languageMenuItems, topMenuBar.getChineseItem(), UPPER_CHINESE, Locale.CHINESE, this::toggleLanguage);
|
||||||
|
registerRadioMenuItem(languageMenuItems, topMenuBar.getEnglishItem(), UPPER_ENGLISH, Locale.ENGLISH, this::toggleLanguage);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置当前语言选中状态
|
||||||
|
*
|
||||||
|
* @param language 语言
|
||||||
|
*/
|
||||||
|
private void toggleLanguageCheck(String language) {
|
||||||
|
languageMenuItems.forEach((k, v) -> v.setSelected(language.toUpperCase().equals(k)));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 切换语言
|
||||||
|
*
|
||||||
|
* @param actionEvent 点击事件
|
||||||
|
*/
|
||||||
|
private void toggleLanguage(ActionEvent actionEvent) {
|
||||||
|
if (actionEvent == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
RadioMenuItem languageItem = (RadioMenuItem) actionEvent.getSource();
|
||||||
|
if (languageItem == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
LocalizationController.setCurrentLocal((Locale) languageItem.getUserData());
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,68 @@
|
|||||||
|
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 java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import static org.jcnc.jnotepad.common.constants.TextConstants.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 插件菜单
|
||||||
|
*
|
||||||
|
* @author gewuyou
|
||||||
|
*/
|
||||||
|
public class PluginTopMenu extends AbstractTopMenu {
|
||||||
|
|
||||||
|
private static final PluginTopMenu INSTANCE = new PluginTopMenu();
|
||||||
|
|
||||||
|
private final Map<String, MenuItem> pluginMenuItems = new HashMap<>();
|
||||||
|
|
||||||
|
public static PluginTopMenu getInstance() {
|
||||||
|
return INSTANCE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取菜单名称
|
||||||
|
*
|
||||||
|
* @return 菜单名称
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String getMenuName() {
|
||||||
|
return PLUGIN;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取菜单
|
||||||
|
*
|
||||||
|
* @return 菜单
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Menu getMenu() {
|
||||||
|
return topMenuBar.getPluginMenu();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取菜单项集合
|
||||||
|
*
|
||||||
|
* @return 菜单项集合
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Map<String, MenuItem> getMenuItems() {
|
||||||
|
return pluginMenuItems;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 注册顶部菜单
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected void registerTopMenu() {
|
||||||
|
registerMenuItem(topMenuBar.getPluginManagerItem(), MANAGER_PLUGIN, "pluginManagerItem", event -> new PluginManagementPane().run());
|
||||||
|
registerMenuItem(topMenuBar.getCountItem(), STATISTICS, "countItem", event -> {
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,87 @@
|
|||||||
|
package org.jcnc.jnotepad.views.root.top.menubar.menu;
|
||||||
|
|
||||||
|
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.views.manager.CenterTabPaneManager;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import static org.jcnc.jnotepad.common.constants.TextConstants.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置菜单
|
||||||
|
*
|
||||||
|
* @author gewuyou
|
||||||
|
*/
|
||||||
|
public class SettingTopMenu extends AbstractTopMenu {
|
||||||
|
|
||||||
|
private static final SettingTopMenu INSTANCE = new SettingTopMenu();
|
||||||
|
private final Map<String, MenuItem> setMenuItems = new HashMap<>();
|
||||||
|
|
||||||
|
public static SettingTopMenu getInstance() {
|
||||||
|
return INSTANCE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取菜单名称
|
||||||
|
*
|
||||||
|
* @return 菜单名称
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String getMenuName() {
|
||||||
|
return SET;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取菜单
|
||||||
|
*
|
||||||
|
* @return 菜单
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Menu getMenu() {
|
||||||
|
return topMenuBar.getSetMenu();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取菜单项集合
|
||||||
|
*
|
||||||
|
* @return 菜单项集合
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Map<String, MenuItem> getMenuItems() {
|
||||||
|
return setMenuItems;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 注册顶部菜单
|
||||||
|
*
|
||||||
|
* @apiNote 此方法
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected void registerTopMenu() {
|
||||||
|
registerMenuItem(topMenuBar.getLineFeedItem(), WORD_WRAP, "lineFeedItem", (observableValue, before, after) -> {
|
||||||
|
// 1. 更新全局配置
|
||||||
|
UserConfigController.getInstance().setAutoLineConfig(after);
|
||||||
|
// 2. 对当前tab生效配置
|
||||||
|
CenterTabPaneManager.getInstance().fireTabSelected();
|
||||||
|
});
|
||||||
|
topMenuBar.getLineFeedItem().selectedProperty().set(true);
|
||||||
|
|
||||||
|
registerMenuItem(topMenuBar.getTopItem(), TOP, "topItem", (observableValue, before, after) -> {
|
||||||
|
// 获取窗口容器
|
||||||
|
Stage primaryStage = (Stage) UiUtil.getAppWindow();
|
||||||
|
// 设置窗口为置顶
|
||||||
|
primaryStage.setAlwaysOnTop(after);
|
||||||
|
});
|
||||||
|
|
||||||
|
registerMenuItem(topMenuBar.getOpenConfigItem(), OPEN_CONFIGURATION_FILE, "openConfigItem", new OpenConfig());
|
||||||
|
registerMenuItem(topMenuBar.getLanguageMenu(), LANGUAGE, "languageMenu", actionEvent -> {
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user