void SelectActiveRuntime(RuntimeModel preferedRuntimeModel) { ignoreRuntimeChangedCount++; try { if (ToolbarView.RuntimeModel.Any ()) { if (startupProjects.Length > 1) { var multiProjectTarget = new MultiProjectExecutionTarget (); var multipleRuntime = new RuntimeModel (this, multiProjectTarget, false, null); foreach (var startupProject in startupProjects) { var runtimeModel = SelectActiveRuntime (startupProject.Item1, preferedRuntimeModel); if (runtimeModel == null) { LoggingService.LogError ($"No runtimeModel for {startupProject.Item1.Name}"); continue; } multiProjectTarget.SetExecutionTarget (startupProject.Item1, runtimeModel.ExecutionTarget); multipleRuntime.AddChild (runtimeModel); } ToolbarView.ActiveRuntime = multipleRuntime; IdeApp.Workspace.ActiveExecutionTarget = multipleRuntime.ExecutionTarget; } else if (startupProjects.Length == 1) { var runtimeModel = SelectActiveRuntime (startupProjects.First ().Item1, preferedRuntimeModel); ToolbarView.ActiveRuntime = runtimeModel; IdeApp.Workspace.ActiveExecutionTarget = runtimeModel?.ExecutionTarget; UpdateBuildConfiguration (); } else { ToolbarView.ActiveRuntime = null; IdeApp.Workspace.ActiveExecutionTarget = null; } } } finally { ignoreRuntimeChangedCount--; } }
public RuntimeModel(MainToolbarController controller, ExecutionTarget target, RuntimeModel parent) : this(controller, target) { if (parent == null) { HasParent = false; } else { HasParent = true; parent.HasChildren = true; parent.AddChild(this); } }
void FillRuntimesForProject(List<RuntimeModel> list, SolutionItem project, ref int runtimes) { ExecutionTarget previous = null; foreach (var target in configurationMergers [project].GetTargetsForConfiguration (IdeApp.Workspace.ActiveConfigurationId, configurationMergers.Count < 2)) { if (target is ExecutionTargetGroup) { var devices = (ExecutionTargetGroup)target; if (previous != null) list.Add (new RuntimeModel (this, displayText: null));//Seperator list.Add (new RuntimeModel (this, target, true, project)); foreach (var device in devices) { if (device is ExecutionTargetGroup) { var versions = (ExecutionTargetGroup)device; if (versions.Count > 1) { var parent = new RuntimeModel (this, device, true, project) { IsIndented = true, }; list.Add (parent); foreach (var version in versions) { parent.AddChild (new RuntimeModel (this, version, false, project)); runtimes++; } } else { list.Add (new RuntimeModel (this, versions [0], true, project) { IsIndented = true, }); runtimes++; } } else { list.Add (new RuntimeModel (this, device, true, project) { IsIndented = true, }); runtimes++; } } } else { if (previous is ExecutionTargetGroup) { list.Add (new RuntimeModel (this, displayText: null));//Seperator } list.Add (new RuntimeModel (this, target, true, project)); runtimes++; } previous = target; } }
void FillRuntimes() { ignoreRuntimeChangedCount++; try { ToolbarView.RuntimeModel = Enumerable.Empty <IRuntimeModel> (); if (!IdeApp.Workspace.IsOpen || currentSolution == null) { return; } var list = new List <RuntimeModel> (); int runtimes = 0; if (currentSolution.StartupConfiguration is MultiItemSolutionRunConfiguration) { bool anyValid = false; foreach (var startConf in ((MultiItemSolutionRunConfiguration)currentSolution.StartupConfiguration).Items) { if (startConf?.SolutionItem == null) { continue; } // Check that the current startup project is enabled for the current configuration var solConf = currentSolution.GetConfiguration(IdeApp.Workspace.ActiveConfiguration); if (solConf == null || !solConf.BuildEnabledForItem(startConf.SolutionItem)) { continue; } anyValid = true; var projectList = new List <RuntimeModel> (); FillRuntimesForProject(projectList, startConf.SolutionItem, ref runtimes); var parent = new RuntimeModel(this, startConf.SolutionItem.Name); parent.HasChildren = true; list.Add(parent); foreach (var p in projectList) { parent.AddChild(p); } } if (!anyValid) { return; } } else { var startConf = currentSolution.StartupConfiguration as SingleItemSolutionRunConfiguration; if (startConf == null || startConf.Item == null) { return; } // Check that the current startup project is enabled for the current configuration var solConf = currentSolution.GetConfiguration(IdeApp.Workspace.ActiveConfiguration); if (solConf == null || !solConf.BuildEnabledForItem(startConf.Item)) { return; } FillRuntimesForProject(list, startConf.Item, ref runtimes); } var cmds = IdeApp.CommandService.CreateCommandEntrySet(TargetsMenuPath); if (cmds.Count > 0) { bool needsSeparator = runtimes > 0; foreach (CommandEntry ce in cmds) { if (ce.CommandId == Command.Separator) { needsSeparator = true; continue; } var cmd = ce.GetCommand(IdeApp.CommandService) as ActionCommand; if (cmd != null) { var ci = IdeApp.CommandService.GetCommandInfo(cmd.Id, new CommandTargetRoute(lastCommandTarget)); if (ci.Visible) { if (needsSeparator) { list.Add(new RuntimeModel(this, displayText: null)); needsSeparator = false; } list.Add(new RuntimeModel(this, cmd)); runtimes++; } } } } ToolbarView.PlatformSensitivity = runtimes > 1; ToolbarView.RuntimeModel = list; } finally { ignoreRuntimeChangedCount--; } }
public RuntimeModel (MainToolbarController controller, ExecutionTarget target, RuntimeModel parent) : this (controller, target) { if (parent == null) HasParent = false; else { HasParent = true; parent.HasChildren = true; parent.AddChild (this); } }
void SelectActiveRuntime (RuntimeModel preferedRuntimeModel) { ignoreRuntimeChangedCount++; try { if (ToolbarView.RuntimeModel.Any ()) { if (startupProjects.Length > 1) { var multiProjectTarget = new MultiProjectExecutionTarget (); var multipleRuntime = new RuntimeModel (this, multiProjectTarget, false, null); foreach (var startupProject in startupProjects) { var runtimeModel = SelectActiveRuntime (startupProject.Item1, preferedRuntimeModel); multiProjectTarget.SetExecutionTarget (startupProject.Item1, runtimeModel.ExecutionTarget); multipleRuntime.AddChild (runtimeModel); } ToolbarView.ActiveRuntime = multipleRuntime; IdeApp.Workspace.ActiveExecutionTarget = multipleRuntime.ExecutionTarget; } else if (startupProjects.Length == 1) { var runtimeModel = SelectActiveRuntime (startupProjects.First ().Item1, preferedRuntimeModel); ToolbarView.ActiveRuntime = runtimeModel; IdeApp.Workspace.ActiveExecutionTarget = runtimeModel?.ExecutionTarget; UpdateBuildConfiguration (); } else { ToolbarView.ActiveRuntime = null; IdeApp.Workspace.ActiveExecutionTarget = null; } } } finally { ignoreRuntimeChangedCount--; } }
void FillRuntimesForProject (List<RuntimeModel> list, SolutionItem project, ref int runtimes) { ExecutionTarget previous = null; foreach (var target in configurationMergers [project].GetTargetsForConfiguration (IdeApp.Workspace.ActiveConfigurationId, configurationMergers.Count < 2)) { if (target is ExecutionTargetGroup) { var devices = (ExecutionTargetGroup)target; if (previous != null) list.Add (new RuntimeModel (this, displayText: null));//Seperator foreach (var device in devices) { if (device is ExecutionTargetGroup) { var versions = (ExecutionTargetGroup)device; if (versions.Count > 1) { var parent = new RuntimeModel (this, device, true, project) { IsIndented = true, }; list.Add (parent); foreach (var version in versions) { parent.AddChild (new RuntimeModel (this, version, false, project)); runtimes++; } } else { list.Add (new RuntimeModel (this, versions [0], true, project) { IsIndented = true, }); runtimes++; } } else { list.Add (new RuntimeModel (this, device, true, project) { IsIndented = true, }); runtimes++; } } } else { if (previous is ExecutionTargetGroup) { list.Add (new RuntimeModel (this, displayText: null));//Seperator } list.Add (new RuntimeModel (this, target, true, project)); runtimes++; } previous = target; } }
void FillRuntimes () { ignoreRuntimeChangedCount++; try { ToolbarView.RuntimeModel = Enumerable.Empty<IRuntimeModel> (); if (!IdeApp.Workspace.IsOpen || currentSolution == null) return; var list = new List<RuntimeModel> (); int runtimes = 0; if (currentSolution.StartupConfiguration is MultiItemSolutionRunConfiguration) { bool anyValid = false; foreach (var startConf in ((MultiItemSolutionRunConfiguration)currentSolution.StartupConfiguration).Items) { if (startConf?.SolutionItem == null) continue; // Check that the current startup project is enabled for the current configuration var solConf = currentSolution.GetConfiguration (IdeApp.Workspace.ActiveConfiguration); if (solConf == null || !solConf.BuildEnabledForItem (startConf.SolutionItem)) continue; anyValid = true; var projectList = new List<RuntimeModel> (); FillRuntimesForProject (projectList, startConf.SolutionItem, ref runtimes); var parent = new RuntimeModel (this, startConf.SolutionItem.Name); parent.HasChildren = true; list.Add (parent); foreach (var p in projectList) { parent.AddChild (p); } } if (!anyValid) return; } else { var startConf = currentSolution.StartupConfiguration as SingleItemSolutionRunConfiguration; if (startConf == null || startConf.Item == null) return; // Check that the current startup project is enabled for the current configuration var solConf = currentSolution.GetConfiguration (IdeApp.Workspace.ActiveConfiguration); if (solConf == null || !solConf.BuildEnabledForItem (startConf.Item)) return; FillRuntimesForProject (list, startConf.Item, ref runtimes); } var cmds = IdeApp.CommandService.CreateCommandEntrySet (TargetsMenuPath); if (cmds.Count > 0) { bool needsSeparator = runtimes > 0; foreach (CommandEntry ce in cmds) { if (ce.CommandId == Command.Separator) { needsSeparator = true; continue; } var cmd = ce.GetCommand (IdeApp.CommandService) as ActionCommand; if (cmd != null) { var ci = IdeApp.CommandService.GetCommandInfo (cmd.Id, new CommandTargetRoute (lastCommandTarget)); if (ci.Visible) { if (needsSeparator) { list.Add (new RuntimeModel (this, displayText: null)); needsSeparator = false; } list.Add (new RuntimeModel (this, cmd)); runtimes++; } } } } ToolbarView.PlatformSensitivity = runtimes > 1; ToolbarView.RuntimeModel = list; } finally { ignoreRuntimeChangedCount--; } }