2023-10-10 14:07:44 +08:00

223 lines
6.5 KiB
Java

package org.jcnc.jnotepad.util;
import atlantafx.base.theme.Styles;
import javafx.scene.Node;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.stage.Window;
import org.jcnc.jnotepad.app.manager.ApplicationManager;
import org.jcnc.jnotepad.common.constants.AppConstants;
import org.kordamp.ikonli.javafx.FontIcon;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import static org.kordamp.ikonli.antdesignicons.AntDesignIconsFilled.*;
/**
* UI工具
*
* <p>封装了项目中需要引入的UI组件</p>
*
* @author gewuyou
*/
public class UiUtil {
/**
* 应用程序图标
*/
private static final Image APP_ICON = new Image(Objects.requireNonNull(UiUtil.class.getResource(AppConstants.APP_ICON)).toString());
/**
* 错误图标
*/
private static final FontIcon ERROR_ICON = FontIcon.of(EXCLAMATION_CIRCLE);
/**
* 信息图标
*/
private static final FontIcon INFO_ICON = FontIcon.of(INFO_CIRCLE);
/**
* 警告图标
*/
private static final FontIcon WARNING_ICON = FontIcon.of(WARNING);
/**
* 问题图标
*/
private static final FontIcon QUESTION_ICON = FontIcon.of(QUESTION_CIRCLE);
private static final FontIcon SUCCESS_ICON = FontIcon.of(CHECK_CIRCLE);
/**
* 图标集合
*/
private static final Map<String, Node> ICON_MAP = new HashMap<>(32);
static {
// 暂时设置颜色
ERROR_ICON.getStyleClass().addAll(Styles.DANGER);
INFO_ICON.getStyleClass().addAll(Styles.ACCENT);
QUESTION_ICON.getStyleClass().addAll(Styles.ACCENT);
WARNING_ICON.getStyleClass().addAll(Styles.WARNING);
SUCCESS_ICON.getStyleClass().addAll(Styles.SUCCESS);
ICON_MAP.put("css", fileIconByPng("css"));
ICON_MAP.put("doc", fileIconByPng("doc"));
ICON_MAP.put("dll", fileIconByPng("dll"));
ICON_MAP.put("exe", fileIconByPng("exe"));
ICON_MAP.put("gif", fileIconByPng("gif"));
ICON_MAP.put("gitignore", fileIconByPng("git"));
ICON_MAP.put("html", fileIconByPng("html"));
ICON_MAP.put("json", fileIconByPng("json"));
ICON_MAP.put("md", fileIconByPng("markdown"));
ICON_MAP.put("pdf", FontIcon.of(FILE_PDF));
ICON_MAP.put("ppt", FontIcon.of(FILE_PPT));
ICON_MAP.put("png", fileIconByPng("png"));
ICON_MAP.put("sql", fileIconByPng("database"));
ICON_MAP.put("svg", fileIconByPng("svg"));
ICON_MAP.put("txt", FontIcon.of(FILE_TEXT));
ICON_MAP.put("xls", FontIcon.of(FILE_EXCEL));
ICON_MAP.put("xml", fileIconByPng("xml"));
// 编程语言
ICON_MAP.put("bat", fileIconByPng("bat"));
ICON_MAP.put("c", fileIconByPng("c"));
ICON_MAP.put("cs", fileIconByPng("csharp"));
ICON_MAP.put("cpp", fileIconByPng("cplusplus"));
ICON_MAP.put("go", fileIconByPng("golang"));
ICON_MAP.put("js", fileIconByPng("js"));
ICON_MAP.put("java", fileIconByPng("java"));
ICON_MAP.put("kt", fileIconByPng("kotlin"));
ICON_MAP.put("lua", fileIconByPng("lua"));
ICON_MAP.put("py", fileIconByPng("python"));
ICON_MAP.put("php", fileIconByPng("php"));
ICON_MAP.put("rb", fileIconByPng("ruby"));
ICON_MAP.put("sh", fileIconByPng("sh"));
}
private UiUtil() {
}
/**
* 获取应用程序图标。
*
* @return javafx.scene.image.Image 应用程序图标对象
*/
public static Image getAppIcon() {
return APP_ICON;
}
/**
* Retrieves the information icon.
*
* @return the information icon
*/
public static FontIcon getInfoIcon() {
return INFO_ICON;
}
/**
* Returns the error icon.
*
* @return the error icon
*/
public static FontIcon getErrorIcon() {
return ERROR_ICON;
}
/**
* Retrieves the warning icon.
*
* @return the warning icon
*/
public static FontIcon getWarningIcon() {
return WARNING_ICON;
}
/**
* Retrieves the question icon.
*
* @return the question icon
*/
public static FontIcon getQuestionIcon() {
return QUESTION_ICON;
}
/**
* Retrieves the success icon.
*
* @return the success icon as a FontIcon object
*/
public static FontIcon getSuccessIcon() {
return SUCCESS_ICON;
}
/**
* 获取应用窗口。
*
* @return javafx.stage.Window 应用窗口对象
* @apiNote JnotepadApp.getWindow()
*/
public static Window getAppWindow() {
return ApplicationManager.getInstance().getWindow();
}
/**
* Generates an ImageView with the specified module directory, name, and format.
*
* @param moduleDir the directory where the module is located
* @param name the name of the icon
* @param format the format of the icon
* @return the generated ImageView
*/
public static ImageView icon(String moduleDir, String name, String format) {
return icon(moduleDir + name + format);
}
/**
* Generates an ImageView object with the image specified by the given path.
*
* @param path the path to the image file
* @return the ImageView object with the specified image
*/
public static ImageView icon(String path) {
var img = new Image(ResourceUtil.getResourceAsStream(path));
return new ImageView(img);
}
/**
* Generates an ImageView based on a PNG file.
*
* @param moduleDir the directory of the module
* @param name the name of the PNG file
* @return the generated ImageView
*/
public static ImageView iconByPng(String moduleDir, String name) {
return icon(moduleDir + name + ".png");
}
/**
* Generates an ImageView object for a file icon based on the given PNG name.
*
* @param name the name of the PNG file for the file icon
* @return the ImageView object representing the file icon
*/
public static ImageView fileIconByPng(String name) {
return iconByPng("images/fileIcons/", name);
}
/**
* Generates an ImageView object for a file icon based on the given PNG name.
*
* @param name the name of the PNG file for the file icon
* @return the ImageView object representing the file icon
*/
public static ImageView sidebarIconByPng(String name) {
return iconByPng("images/sidebarIcons/", name);
}
public static Map<String, Node> getIconMap() {
return ICON_MAP;
}
}