プロジェクトファイル
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 では、以下の処理を記述します。
- ファイルを「開く」処理(OpenAsync)
- 独自プロジェクトファイルの提供は、通常そのファイルを編集するエディターの提供とセットで行います。ドッキングウィンドウを使うエディターは、先述のドッキングウィンドウの実装方法と同様です。典型的な実装は、上記のように、エディターコントロールを作成して、そのビューモデルにファイルから読み込んだ内容を渡し、エディターウィンドウを表示する というものです。
- ファイル作成時に初期内容を「書き込む」処理(WriteInitialContent)
- 本メソッドの呼び出し時、ファイルは空の状態で作成され、ファイルに紐づく FileStream が渡されます。初期内容が空でよい場合は、本メソッドで特段の処理は必要ありません。
UseDefaultProjectExplorerItem フラグを true にすると、プロジェクトエクスプローラーに、Extension のツリー項目を追加することができます。(本機能を使わない場合は、次節で述べる拡張ポイントを併用しなければなりません)
この場合のツリー項目は、以下で構成されます。
- Extension のファイル種類を示す親項目
- サブメニューとして「新しいファイル...」「既存のファイル...」の2項目からなる「新しいアイテムの追加」コンテキストメニューを持ちます。
- 追加されているファイルの、ファイル名を示す子項目
- 「開く」「プロジェクトから除外」「削除」の3項目からなるコンテキストメニューを持ちます。