项目文件

可以向 RC+ 的项目中添加由 Extension 管理的专有文件。

要使用此扩展点,需要创建并导出实现接口 IRCXProjectFileProvider 的类。

[Export(typeof(IRCXProjectFileProvider))]
public partial class ProjectFileEditorProjectFile : IRCXProjectFileProvider
{
    /// <inheritdoc />
    public string Id => Main.CommonId;

    /// <inheritdoc />
    public string FileTypeName => "MyExtensionFiles";

    /// <inheritdoc />
    public string Extension => ".ext";

    /// <inheritdoc />
    public bool UseDefaultProjectExplorerItem => true;

    /// <inheritdoc />
    public RCXCaption ProjectExplorerRootItemCaption => new(Main.CommonId, Caption.FileCategory);

    /// <inheritdoc />
    public ImageSource? ProjectExplorerRootItemIconData => Main.CommonIcon;

    /// <inheritdoc />
    public ImageSource? FileIcon => Main.CommonIcon;

    /// <inheritdoc />
    public RCXCaption FileTypeNameCaption => new(Main.CommonId, Caption.FileTypeName);

    /// <inheritdoc />
    public async Task OpenAsync(
        string fileName
    )
    {
        // Open project file editor window
        ProjectFileEditor editorControl = new();

        if (editorControl.DataContext is ProjectFileEditorViewModel editorViewModel)
        {
            editorViewModel.FileName = fileName;
            editorViewModel.LoadContent();
            await Main.GetAPI<IRCXWindowAPI>().ShowDockingWindowAsync(editorViewModel, editorControl);
        }
    }

    /// <inheritdoc />
    public void WriteInitialContent(
        FileStream fileStream
    )
    {
        try
        {
            // Write initial content of the file (optional)
            using var writer = new StreamWriter(fileStream, Encoding.UTF8);
            writer.WriteLine("ProjectFile Initial Content");
        }
        catch (Exception)
        {
            // Handle Error
        }
    }
}

在 Extension 中,需要编写以下处理流程。

  1. 文件的“打开”处理 (OpenAsync)
    • 通常,提供专有项目文件时,会同时提供用于编辑该文件的编辑器。使用停靠窗口的编辑器,其实现方法与前述停靠窗口的实现方式相同。典型的实现方式如上所述,即创建编辑器控件,将从文件读取的内容传递给其视图模型,并显示编辑器窗口。
  2. 在文件创建时写入初始内容的处理 (WriteInitialContent)
    • 调用本方法时,文件会以空状态创建,并会传递与该文件关联的 FileStream。如果初始内容为空,则本方法无需执行特殊处理。

将 UseDefaultProjectExplorerItem 标志设置为 true 时,可以在项目资源管理器中添加 Extension 的树形项目。(如果不使用此功能,则必须结合下一节所述的扩展点使用)

此情况下的树形项目由以下部分构成。

  • 表示 Extension 文件类型的父项目
    • 作为子菜单,具有由“新建文件...”和“已有文件...”两个项目构成的“添加新项目”上下文菜单。
  • 已添加文件的文件名作为子项目显示。
    • 包含“打开”、“从项目中排除”、“删除”三个项目的上下文菜单。