EnvDTE.Host/Callback/Impl/IDEImpl/ItemOperationsCallbackProvider.cs (54 lines of code) (raw):
using System;
using JetBrains.Annotations;
using JetBrains.Application.Components;
using JetBrains.Application.Parts;
using JetBrains.Collections.Viewable;
using JetBrains.IDE;
using JetBrains.IDE.Common;
using JetBrains.ProjectModel;
using JetBrains.Rd.Tasks;
using JetBrains.RdBackend.Common.Features.Documents;
using JetBrains.RdBackend.Common.Features.TextControls;
using JetBrains.ReSharper.Resources.Shell;
using JetBrains.Rider.Model;
using JetBrains.Util;
namespace JetBrains.EnvDTE.Host.Callback.Impl.IDEImpl;
[SolutionComponent(Instantiation.DemandAnyThreadSafe)]
public class ItemOperationsCallbackProvider(
ISolution solution,
ISimpleLazy<IEditorManager> editorManager)
: IEnvDteCallbackProvider
{
public void RegisterCallbacks(DteProtocolModel model, IScheduler scheduler)
{
model.ItemOperations_open_File.SetAsync(async (lifetime, args) =>
{
var options = new OpenFileOptions(FileView: ParseFileView(args.ViewKind));
await lifetime.StartMainReadAsync(async () => await editorManager.Value.OpenFileAsync(
VirtualFileSystemPath.Parse(args.FileName, InteractionContext.SolutionContext), options));
return new IdeWindow();
});
model.ItemOperations_isOpen_File.SetAsync(async (lifetime, args) =>
{
var file = VirtualFileSystemPath.Parse(args.FileName, InteractionContext.SolutionContext);
var options = new OpenFileOptions(FileView: ParseFileView(args.ViewKind));
var location = options.ToTextControlLocation();
return await lifetime.StartMainRead(() =>
{
var textControlId = TextControlModelIdUtil.CreateDefaultTextControlId(file, location, solution);
var projectFile = DocumentHostProjectFileUtil.GetOrCreateProjectFile(solution, file, textControlId.DocumentId);
return editorManager.Value.IsOpenedInTextControl(projectFile);
});
});
}
private static FileView ParseFileView([NotNull] string str) => str switch
{
"{00000000-0000-0000-0000-000000000000}" => FileView.Primary,
"{FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF}" => FileView.TextView, // TextView is default
"{7651A700-06E5-11D1-8EBD-00A0C90F26EA}" => FileView.Debugging,
"{7651A701-06E5-11D1-8EBD-00A0C90F26EA}" => FileView.Code,
"{7651A702-06E5-11D1-8EBD-00A0C90F26EA}" => FileView.Designer,
"{7651A703-06E5-11D1-8EBD-00A0C90F26EA}" => FileView.TextView,
_ => throw new ArgumentOutOfRangeException(nameof(str))
};
}