private void VsHelper_SolutionClosed(object sender, EventArgs e) { Logger.Info("VS-Event: Solution closed."); ToolWindowViewModel.Reset(); toolWindowStateLoadedFromSolution = null; }
/// <summary> /// Initializes a new instance of the <see cref="BenchmarkTreeWindowControl"/> class. /// </summary> public BenchmarkTreeWindowControl() { this.InitializeComponent(); _viewModel = new ToolWindowViewModel(); DataContext = _viewModel; }
public static SolutionDataJson Serialize(ToolWindowViewModel vm) { if (vm == null) { throw new ArgumentNullException(nameof(vm)); } var data = new SolutionDataJson(); foreach (var kvPair in vm.TreeViewModel.Projects) { var list = new ProjectDataJson { Id = kvPair.Value.Id, ExclusiveMode = kvPair.Value.ExclusiveMode, Items = TransformCmdList(kvPair.Value.Items), // not in JSON Expanded = kvPair.Value.IsExpanded, Selected = kvPair.Value.IsSelected, }; data.ProjectArguments.Add(list); } return(data); }
public static SuoDataJson Serialize(ToolWindowViewModel vm) { if (vm == null) { throw new ArgumentNullException(nameof(vm)); } var data = new SuoDataJson(); data.ShowAllProjects = vm.TreeViewModel.ShowAllProjects; data.CheckedArguments = new HashSet <Guid>(vm.TreeViewModel.AllProjects.SelectMany(p => p.CheckedArguments).Select(arg => arg.Id)); data.ExpandedContainer = new HashSet <Guid>(vm.TreeViewModel.AllItems.OfType <CmdContainer>().Where(con => con.IsExpanded).Select(p => p.Id)); data.SelectedItems = new HashSet <Guid>(vm.TreeViewModel.Projects.Values.SelectMany(p => p.SelectedItems).Select(item => item.Id) .Concat(vm.TreeViewModel.Projects.Values.Where(p => p.IsSelected).Select(p => p.Id))); foreach (var kvPair in vm.TreeViewModel.Projects) { var list = new ProjectDataJsonVersioned { Id = kvPair.Value.Id, ExclusiveMode = kvPair.Value.ExclusiveMode, Delimiter = kvPair.Value.Delimiter, Items = TransformCmdList(kvPair.Value.Items), // not in JSON Expanded = kvPair.Value.IsExpanded, Selected = kvPair.Value.IsSelected, }; data.ProjectArguments.Add(kvPair.Key, list); } return(data); }
private void VsHelper_ProjectRenamed(object sender, VisualStudioHelper.ProjectAfterRenameEventArgs e) { Logger.Info($"VS-Event: Project '{e.OldProjectName}' renamed to '{e.Project.GetName()}'."); fileStorage.RenameProject(e.Project, e.OldProjectDir, e.OldProjectName); ToolWindowViewModel.RenameProject(e.Project); }
/// <summary> /// Initializes a new instance of the <see cref="ToolWindow"/> class. /// </summary> public CmdArgsPackage() { // Inside this method you can place any initialization code that does not require // any Visual Studio service because at this point the package object is created but // not sited yet inside Visual Studio environment. The place to do all the other // initialization is the Initialize method. Debug.Assert(Instance == null, "There can be only be one! (Package)"); Instance = this; ToolWindowViewModel = new ToolWindowViewModel(this); // add option keys to store custom data in suo file this.AddOptionKey(SolutionOptionKey); }
public void Initialize_Should_Set_All_Properties() { var mediator = Substitute.For <IMediator>(); var settingsStore = Substitute.For <ISettingsStore>(); settingsStore.Settings.Returns(new UserSettings()); var viewModel = new ToolWindowViewModel(mediator, settingsStore); var anyPropertyIsNull = viewModel.GetType().GetProperties() .Select(pi => pi.GetValue(viewModel)) .Any(value => value == null); Assert.IsFalse(anyPropertyIsNull); }
public static SuoDataJson Serialize(ToolWindowViewModel vm, Stream stream) { if (stream == null) { throw new ArgumentNullException(nameof(stream)); } var data = Serialize(vm); string jsonStr = JsonConvert.SerializeObject(data); StreamWriter sw = new StreamWriter(stream); sw.Write(jsonStr); sw.Flush(); return(data); }
public static SolutionDataJson Serialize(ToolWindowViewModel vm, Stream stream) { if (stream == null) { throw new ArgumentNullException(nameof(stream)); } var data = Serialize(vm); string jsonStr = JsonConvert.SerializeObject(data, Formatting.Indented); StreamWriter sw = new StreamWriter(stream, new UTF8Encoding(encoderShouldEmitUTF8Identifier: false)); sw.Write(jsonStr); sw.Flush(); return(data); }
public static ToolWindowStateSolutionData Serialize(ToolWindowViewModel vm, Stream stream) { if (vm == null) { throw new ArgumentNullException(nameof(vm)); } if (stream == null) { throw new ArgumentNullException(nameof(stream)); } var data = new ToolWindowStateSolutionData(); foreach (var kvp in vm.SolutionArguments) { var list = new ToolWindowStateProjectData(); data.Add(kvp.Key, list); foreach (var item in kvp.Value.DataCollection) { list.DataCollection.Add(new ToolWindowStateProjectData.ListEntryData() { Id = item.Id, Command = item.Command, //Project = item.Project, // deprecated Enabled = item.Enabled }); } } string jsonStr = JsonConvert.SerializeObject(data); StreamWriter sw = new StreamWriter(stream); sw.Write(jsonStr); sw.Flush(); return(data); }
public static ToolWindowStateSolutionData Serialize(ToolWindowViewModel vm, Stream stream) { if (vm == null) { throw new ArgumentNullException(nameof(vm)); } if (stream == null) { throw new ArgumentNullException(nameof(stream)); } var data = new ToolWindowStateSolutionData(); data.ShowAllProjects = vm.TreeViewModel.ShowAllProjects; data.CheckedArguments = new HashSet <Guid>(vm.TreeViewModel.Projects.Values.SelectMany(p => p.CheckedArguments).Select(arg => arg.Id)); data.ExpandedContainer = new HashSet <Guid>(vm.TreeViewModel.Projects.Values.SelectMany(p => p.ExpandedContainer).Select(con => con.Id) .Concat(vm.TreeViewModel.Projects.Values.Where(p => p.IsExpanded).Select(p => p.Id))); foreach (var kvPair in vm.TreeViewModel.Projects) { var list = new ToolWindowStateProjectData { Id = kvPair.Value.Id, Items = TransformCmdList(kvPair.Value.Items) }; data.ProjectArguments.Add(kvPair.Key, list); } string jsonStr = JsonConvert.SerializeObject(data); StreamWriter sw = new StreamWriter(stream); sw.Write(jsonStr); sw.Flush(); return(data); }
private void UpdateCommandsForProject(IVsHierarchy project) { if (project == null) { throw new ArgumentNullException(nameof(project)); } Logger.Info($"Update commands for project '{project?.GetName()}'. IsVcsSupportEnabled={IsVcsSupportEnabled}. SolutionData.Count={toolWindowStateLoadedFromSolution?.ProjectArguments?.Count}."); var projectGuid = project.GetGuid(); if (projectGuid == Guid.Empty) { Logger.Info("Skipping project because guid euqals empty."); return; } var solutionData = toolWindowStateLoadedFromSolution ?? new SuoDataJson(); // joins data from solution and project // => overrides solution commands for a project if a project json file exists // => keeps all data from the suo file for projects without a json // => if we have data in our ViewModel we use this instad of the suo file // get project json data ProjectDataJson projectData = null; if (IsVcsSupportEnabled) { projectData = fileStorage.ReadDataForProject(project); } // project json overrides if it exists if (projectData != null) { Logger.Info($"Setting {projectData?.Items?.Count} commands for project '{project.GetName()}' from json-file."); var projectListViewModel = ToolWindowViewModel.TreeViewModel.Projects.GetValueOrDefault(projectGuid); var projHasSuoData = solutionData.ProjectArguments.ContainsKey(projectGuid); // update enabled state of the project json data (source prio: ViewModel > suo file) if (projectData.Items != null) { var argumentDataFromProject = projectData.AllArguments; var argumentDataFromLVM = projectListViewModel?.AllArguments.ToDictionary(arg => arg.Id, arg => arg); foreach (var dataFromProject in argumentDataFromProject) { if (argumentDataFromLVM != null && argumentDataFromLVM.TryGetValue(dataFromProject.Id, out CmdArgument argFromVM)) { dataFromProject.Enabled = argFromVM.IsChecked; } else if (projHasSuoData) { dataFromProject.Enabled = solutionData.CheckedArguments.Contains(dataFromProject.Id); } else { dataFromProject.Enabled = dataFromProject.DefaultChecked; } } var containerDataFromProject = projectData.AllContainer; var containerDataFromLVM = projectListViewModel?.AllContainer.ToDictionary(con => con.Id, con => con); foreach (var dataFromProject in containerDataFromProject) { if (containerDataFromLVM != null && containerDataFromLVM.TryGetValue(dataFromProject.Id, out CmdContainer conFromVM)) { dataFromProject.Expanded = conFromVM.IsExpanded; } else { dataFromProject.Expanded = solutionData.ExpandedContainer.Contains(dataFromProject.Id); } } var itemDataFromProject = projectData.AllItems; var itemDataFromLVM = projectListViewModel?.ToDictionary(item => item.Id, item => item); foreach (var dataFromProject in itemDataFromProject) { if (itemDataFromLVM != null && itemDataFromLVM.TryGetValue(dataFromProject.Id, out CmdBase itemFromVM)) { dataFromProject.Selected = itemFromVM.IsSelected; } else { dataFromProject.Selected = solutionData.SelectedItems.Contains(dataFromProject.Id); } } if (projectListViewModel != null) { projectData.Expanded = projectListViewModel.IsExpanded; projectData.Selected = projectListViewModel.IsSelected; } else { projectData.Expanded = solutionData.ExpandedContainer.Contains(projectData.Id); projectData.Selected = solutionData.SelectedItems.Contains(projectData.Id); } } else { projectData = new ProjectDataJson(); Logger.Info($"DataCollection for project '{project.GetName()}' is null."); } } // if we have data in the ViewModel we keep it else if (ToolWindowViewModel.TreeViewModel.Projects.ContainsKey(projectGuid)) { return; } else if (IsVcsSupportEnabled) { projectData = new ProjectDataJson(); Logger.Info("Will clear all data because of missing json file and enabled VCS support."); } // we try to read the suo file data else if (solutionData.ProjectArguments.TryGetValue(projectGuid, out projectData)) { Logger.Info($"Will use commands from suo file for project '{project.GetName()}'."); var argumentDataFromProject = projectData.AllArguments; foreach (var arg in argumentDataFromProject) { arg.Enabled = solutionData.CheckedArguments.Contains(arg.Id); } var containerDataFromProject = projectData.AllContainer; foreach (var con in containerDataFromProject) { con.Expanded = solutionData.ExpandedContainer.Contains(con.Id); } var itemDataFromProject = projectData.AllItems; foreach (var item in itemDataFromProject) { item.Selected = solutionData.SelectedItems.Contains(item.Id); } projectData.Expanded = solutionData.ExpandedContainer.Contains(projectData.Id); projectData.Selected = solutionData.SelectedItems.Contains(projectData.Id); } else { Logger.Info($"Gathering commands from configurations for project '{project.GetName()}'."); // if we don't have suo file data we read cmd args from the project configs projectData = new ProjectDataJson(); projectData.Items.AddRange(ReadCommandlineArgumentsFromProject(project)); } // push projectData to the ViewModel ToolWindowViewModel.PopulateFromProjectData(project, projectData); Logger.Info($"Updated Commands for project '{project.GetName()}'."); }
public void SetViewModel(ToolWindowViewModel viewModel) { _rootViewModel = viewModel; _rootViewModel.SelectedBenchmarkChanged += RootViewModel_SelectedBenchmarkChanged; }