プロジェクトファイル

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 のファイル種類を示す親項目
    • サブメニューとして「新しいファイル...」「既存のファイル...」の2項目からなる「新しいアイテムの追加」コンテキストメニューを持ちます。
  • 追加されているファイルの、ファイル名を示す子項目
    • 「開く」「プロジェクトから除外」「削除」の3項目からなるコンテキストメニューを持ちます。