跳转至

Project System

项目是编辑器正在编辑的数据文档。大多数真正的编辑器都需要项目系统。

ProjectType

ProjectType 描述一种项目:

public static final ProjectType TYPE = ProjectType.of(
        Icons.FILE,
        "project.shop",
        ".shop.nbt",
        ShopProject::new
);

它提供:

  • 图标;
  • 翻译 key / 名称;
  • 文件后缀;
  • 项目创建器;
  • 默认加载、保存、dirty 检查。

默认实现使用 NBT 保存项目数据。如果需要自定义格式,覆写 loadProjectFromFilesaveProjectToFileisProjectDirty

UIXmlProjectType 是文本持久化的参考示例。它把 XML 保存为普通文本文件,而不是 NBT。

IProject

IProject 是运行时项目数据。

常用方法:

  • initNewProject():创建新项目时调用。
  • onLoad(Editor):挂载项目 View、加载运行时状态、选择资源。
  • onClosed(Editor):移除项目 View,释放运行时状态。
  • serializeProject(provider):保存项目数据。
  • deserializeProject(provider, tag):加载项目数据。
  • getResources():向资源面板暴露资源类型。

在 Editor 中注册项目类型:

@Override
protected void initMenus() {
    super.initMenus();
    fileMenu.addProjectProvider(ShopProjectType.TYPE);
}

FileMenu 会自动处理 New、Open、Save 和 Save As。