268 references to PanelTargetKind
Aspire.Tray.Tests (268)
src\Aspire.Tray\Common\TrayPanel.cs (101)
232_focus = new(PanelTargetKind.Back, PanelSection.None, null); 428_focus = new(PanelTargetKind.OpenInMenu, open.Section, open.Host); 465private static bool IsPrimary(PanelTargetKind kind) 466=> kind is PanelTargetKind.Row or PanelTargetKind.ToggleRecent or PanelTargetKind.Documentation 467or PanelTargetKind.Settings or PanelTargetKind.Quit or PanelTargetKind.ConfirmCancel or PanelTargetKind.Back 468or PanelTargetKind.LaunchAtSignIn || IsActionItem(kind); 470private static bool IsConfirmTarget(PanelTargetKind kind) 471=> kind is PanelTargetKind.ConfirmCancel or PanelTargetKind.ConfirmAccept; 474private static bool IsActionItem(PanelTargetKind kind) 475=> kind is PanelTargetKind.OpenInMenu or PanelTargetKind.OpenIn or PanelTargetKind.ShowInFolder or PanelTargetKind.CopyPath 476or PanelTargetKind.TogglePin or PanelTargetKind.RemoveRecent; 508var top = Scene.Targets.FirstOrDefault(target => target.Key == row with { Kind = PanelTargetKind.Row, Item = 0 })?.Bounds.Y ?? bottom; 528_focus = new(PanelTargetKind.More, actions.Section, actions.Host); 538_focus = new(PanelTargetKind.ConfirmCancel, confirm.Section, confirm.Host?.Id); 570PanelConfirmKind.ClearRecent => new(PanelTargetKind.ClearRecent, confirm.Section, null), 571_ => new(PanelTargetKind.Start, confirm.Section, confirm.Host?.Id) 580_focus = new(PanelTargetKind.Settings, PanelSection.None, null); 605index = order.FindIndex(target => target.Kind == PanelTargetKind.Row && target.Key.Host == current.Host 661if (_actions is not null && target.Kind is not (PanelTargetKind.More or PanelTargetKind.Row) && !IsActionItem(target.Kind)) 671case PanelTargetKind.Row: 673case PanelTargetKind.Dashboard: 675case PanelTargetKind.More: 678case PanelTargetKind.Stop: 680case PanelTargetKind.Start: 682case PanelTargetKind.OpenInMenu: 688case PanelTargetKind.OpenIn: 695case PanelTargetKind.ShowInFolder: 698case PanelTargetKind.CopyPath: 701case PanelTargetKind.TogglePin: 704case PanelTargetKind.RemoveRecent: 707case PanelTargetKind.ToggleRecent: 711case PanelTargetKind.ClearRecent: 714case PanelTargetKind.ConfirmCancel: 717case PanelTargetKind.ConfirmAccept when _confirm is { } confirmed: 725case PanelTargetKind.Back: 726case PanelTargetKind.Settings when _settings is not null: 729case PanelTargetKind.LaunchAtSignIn: 731case PanelTargetKind.Documentation: 733case PanelTargetKind.Settings: 735case PanelTargetKind.Quit: 777void Add(ListItemKind kind, double height, PanelSection section, AppHostMenuItem? host, PanelTargetKind target = default) 818Add(ListItemKind.SectionHeader, SectionHeaderHeight, PanelSection.None, null, PanelTargetKind.LaunchAtSignIn); 819Add(ListItemKind.SettingsToggle, SettingsRowHeight, PanelSection.None, null, PanelTargetKind.LaunchAtSignIn); 820Add(ListItemKind.SectionHeader, SectionHeaderHeight, PanelSection.None, null, PanelTargetKind.Documentation); 881var general = item.Target == PanelTargetKind.LaunchAtSignIn; 1024Box(actions[i].Kind == PanelTargetKind.OpenIn 1027actions[i].Kind == PanelTargetKind.OpenIn ? "open-in app icon" : "action icon"); 1152var toggleKey = new PanelTargetKey(PanelTargetKind.ToggleRecent, section, null); 1163var clearKey = new PanelTargetKey(PanelTargetKind.ClearRecent, section, null); 1173var rowKey = new PanelTargetKey(PanelTargetKind.Row, section, host.Id); 1188? new[] { PanelTargetKind.Dashboard, PanelTargetKind.Stop, PanelTargetKind.More } 1189: [PanelTargetKind.Start, PanelTargetKind.More]; 1198foreach (var kind in buttons) 1205PanelTargetKind.Dashboard => (PanelIcon.ExternalLink, $"Open dashboard for {host.DisplayName}", "Open dashboard", host.CanOpenDashboard), 1206PanelTargetKind.Stop => (PanelIcon.Stop, $"Stop {host.DisplayName}", "Stop", host.CanStop), 1207PanelTargetKind.Start => (PanelIcon.Play, $"Start {host.DisplayName}", "Start", host.CanStart), 1218if (kind == PanelTargetKind.More && expanded && _hover != key && _pressed != key) 1257private List<(PanelTargetKind Kind, int Item, PanelIcon Icon, string Label, string Name)> GetRowActions(AppHostMenuItem host, PanelSection section) 1260var actions = new List<(PanelTargetKind, int, PanelIcon, string, string)>(); 1263actions.Add((PanelTargetKind.OpenInMenu, 0, PanelIcon.AppWindow, "Open in", 1268actions.Add((PanelTargetKind.OpenIn, i, PanelIcon.AppWindow, application, $"Open {name} in {application}")); 1271actions.Add((PanelTargetKind.ShowInFolder, 0, PanelIcon.Folder, $"Show in {_fileManagerName}", $"Show {name} in {_fileManagerName}")); 1272actions.Add((PanelTargetKind.CopyPath, 0, PanelIcon.Copy, "Copy path", $"Copy the folder path of {name}")); 1274? (PanelTargetKind.TogglePin, 0, PanelIcon.Unpin, "Unpin", $"Unpin {name}") 1275: (PanelTargetKind.TogglePin, 0, PanelIcon.Pin, "Pin", $"Pin {name}")); 1278actions.Add((PanelTargetKind.RemoveRecent, 0, PanelIcon.Remove, "Remove from recent", $"Remove {name} from recent AppHosts")); 1301if (kind == PanelTargetKind.OpenIn) 1316if (kind == PanelTargetKind.OpenInMenu) 1388var cancelKey = new PanelTargetKey(PanelTargetKind.ConfirmCancel, section, id); 1389var acceptKey = new PanelTargetKey(PanelTargetKind.ConfirmAccept, section, id); 1418var backKey = new PanelTargetKey(PanelTargetKind.Back, PanelSection.None, null); 1427private void AddSettingsToggle(List<PanelCommand> commands, List<PanelHitTarget> targets, PanelTargetKind kind, PanelSettings settings, 1482(PanelTargetKind.Settings, PanelIcon.Gear, _settings is null ? "Settings" : "Close settings", 1484(PanelTargetKind.Documentation, PanelIcon.Globe, "Open Aspire documentation", "Documentation", null, right - 2 * ButtonSize - ButtonGap), 1485(PanelTargetKind.Quit, PanelIcon.Power, _quitVerb, quitDescription, quitDescription, right - ButtonSize) 1490if (kind == PanelTargetKind.Settings && _settings is not null && _hover != key && _pressed != key) 1535private static bool IsChrome(PanelTargetKind kind) 1536=> kind is PanelTargetKind.Documentation or PanelTargetKind.Settings or PanelTargetKind.Quit or PanelTargetKind.Back; 1540&& value.Kind is PanelTargetKind.Row or PanelTargetKind.Dashboard or PanelTargetKind.Stop 1541or PanelTargetKind.Start or PanelTargetKind.More; 1631PanelTargetKind Target);
src\Aspire.Tray\Common\TrayPanelScene.cs (2)
165internal readonly record struct PanelTargetKey(PanelTargetKind Kind, PanelSection Section, AppHostId? Host, int Item = 0); 198public PanelTargetKind Kind => Key.Kind;
TrayPanelTests.cs (165)
40Click(panel, Target(panel, PanelTargetKind.More, state.AppHosts[3]).HitBounds); 43Click(panel, Target(panel, PanelTargetKind.More, state.AppHosts[0]).HitBounds); 44Click(panel, Target(panel, PanelTargetKind.OpenInMenu, state.AppHosts[0]).HitBounds); 47Click(panel, panel.Scene.Targets.Single(target => target.Kind == PanelTargetKind.ToggleRecent).HitBounds); 48Click(panel, Target(panel, PanelTargetKind.More, state.RecentAppHosts[0]).HitBounds); 51Click(panel, panel.Scene.Targets.Single(target => target.Kind == PanelTargetKind.ClearRecent).HitBounds); 81var footer = scene.Targets.Where(target => target.Kind is PanelTargetKind.Documentation or PanelTargetKind.Settings or PanelTargetKind.Quit).ToList(); 84Assert.All(scene.Targets.Where(target => target.Kind is not (PanelTargetKind.Documentation or PanelTargetKind.Settings 85or PanelTargetKind.Quit or PanelTargetKind.Back)), 94var rows = scene.Targets.Where(target => target.Kind is PanelTargetKind.Row).ToList(); 95var buttons = scene.Targets.Where(target => target.Kind is PanelTargetKind.Dashboard or PanelTargetKind.Stop 96or PanelTargetKind.Start or PanelTargetKind.More).ToList(); 112var buttons = scene.Targets.Where(target => target.Kind is PanelTargetKind.Dashboard or PanelTargetKind.Stop 113or PanelTargetKind.Start or PanelTargetKind.More).Select(target => target.Bounds).ToList(); 132var rows = scene.Targets.Where(target => target.Kind == PanelTargetKind.Row).ToList(); 137Assert.Contains(scene.Targets, target => target.Kind == PanelTargetKind.ClearRecent); 145var toggle = Assert.Single(panel.Scene.Targets, target => target.Kind == PanelTargetKind.ToggleRecent); 151Assert.Equal(2, panel.Scene.Targets.Count(target => target.Kind == PanelTargetKind.Row && target.Key.Section == PanelSection.Recent)); 161Assert.Equal(2, panel.Scene.Targets.Count(target => target.Kind == PanelTargetKind.Row)); 172var response = Click(panel, Target(panel, PanelTargetKind.Row, host).HitBounds, offsetX: 10); 177var focused = Target(panel, PanelTargetKind.Row, state.AppHosts[0]).Key; 188var row = Target(panel, PanelTargetKind.Row, host); 190var response = Click(panel, Target(panel, PanelTargetKind.More, host).HitBounds); 202var next = Target(panel, PanelTargetKind.Row, state.AppHosts[3]); 217PanelAction? Pick(PanelTargetKind kind, int item = 0) 219Click(panel, Target(panel, PanelTargetKind.More, host).HitBounds); 220if (kind == PanelTargetKind.OpenIn) 222Click(panel, Target(panel, PanelTargetKind.OpenInMenu, host).HitBounds); 231Pick(PanelTargetKind.OpenIn, 1)! with { Anchor = default }); 232Assert.Equal(PanelActionKind.ShowInFolder, Pick(PanelTargetKind.ShowInFolder)?.Kind); 233Assert.Equal(PanelActionKind.CopyPath, Pick(PanelTargetKind.CopyPath)?.Kind); 234var pin = Pick(PanelTargetKind.TogglePin); 237Click(panel, Target(panel, PanelTargetKind.More, host).HitBounds); 246Click(panel, Target(panel, PanelTargetKind.More, state.AppHosts[3]).HitBounds); 248Assert.Equal("Unpin Weather", panel.Scene.Targets.Single(target => target.Kind == PanelTargetKind.TogglePin).AccessibleName); 249Assert.DoesNotContain(panel.Scene.Targets, target => target.Kind == PanelTargetKind.RemoveRecent); 251Click(panel, panel.Scene.Targets.Single(target => target.Kind == PanelTargetKind.ToggleRecent).HitBounds); 253Click(panel, Target(panel, PanelTargetKind.More, recent).HitBounds); 254var remove = panel.Scene.Targets.Single(target => target.Kind == PanelTargetKind.RemoveRecent); 267Click(panel, Target(panel, PanelTargetKind.More, state.AppHosts[0]).HitBounds); 268Assert.Equal("Hide actions for eShop", Target(panel, PanelTargetKind.More, state.AppHosts[0]).AccessibleName); 269Click(panel, Target(panel, PanelTargetKind.More, state.AppHosts[0]).HitBounds); 272Click(panel, Target(panel, PanelTargetKind.More, state.AppHosts[0]).HitBounds); 273Click(panel, Target(panel, PanelTargetKind.More, state.AppHosts[1]).HitBounds); 276var stop = Click(panel, Target(panel, PanelTargetKind.Stop, state.AppHosts[0]).HitBounds); 287var more = Target(panel, PanelTargetKind.More, state.AppHosts[0]).Key; 293Assert.Equal(new PanelTargetKey(PanelTargetKind.OpenInMenu, PanelSection.Running, host), panel.FocusedTarget); 297Assert.Equal(new PanelTargetKey(PanelTargetKind.OpenIn, PanelSection.Running, host, 1), panel.FocusedTarget); 301Assert.Equal(new PanelTargetKey(PanelTargetKind.OpenInMenu, PanelSection.Running, host), panel.FocusedTarget); 302Assert.DoesNotContain(panel.Scene.Targets, target => target.Kind == PanelTargetKind.OpenIn); 304Assert.Equal(new PanelTargetKey(PanelTargetKind.ShowInFolder, PanelSection.Running, host), panel.FocusedTarget); 317Click(panel, Target(panel, PanelTargetKind.More, host).HitBounds); 320var openIn = Target(panel, PanelTargetKind.OpenInMenu, host); 324Assert.Equal($"Hide applications to open {host.DisplayName} in", Target(panel, PanelTargetKind.OpenInMenu, host).AccessibleName); 325var applications = panel.Scene.Targets.Where(target => target.Kind == PanelTargetKind.OpenIn).ToList(); 334Click(panel, Target(panel, PanelTargetKind.OpenInMenu, host).HitBounds); 335Assert.DoesNotContain(panel.Scene.Targets, target => target.Kind == PanelTargetKind.OpenIn); 343Click(panel, Target(panel, PanelTargetKind.More, state.AppHosts[0]).HitBounds); 345Assert.DoesNotContain(panel.Scene.Targets, target => target.Kind is PanelTargetKind.OpenInMenu or PanelTargetKind.OpenIn); 353Click(panel, Target(panel, PanelTargetKind.More, state.AppHosts[0]).HitBounds); 357Assert.DoesNotContain(panel.Scene.Targets, target => target.Kind == PanelTargetKind.CopyPath); 367panel.Focus(Target(panel, PanelTargetKind.Row, last).Key); 369panel.Invoke(Target(panel, PanelTargetKind.More, last).Key); 371Assert.All(panel.Scene.Targets.Where(target => target.Kind is PanelTargetKind.CopyPath or PanelTargetKind.TogglePin), 383Assert.Equal(Target(panel, PanelTargetKind.Row, state.AppHosts[0]).Key, panel.FocusedTarget); 393Assert.Equal(PanelActionKind.Stop, Click(panel, Target(panel, PanelTargetKind.Stop, state.AppHosts[0]).HitBounds).Action?.Kind); 394Assert.Equal(PanelActionKind.OpenDashboard, Click(panel, Target(panel, PanelTargetKind.Dashboard, state.AppHosts[0]).HitBounds).Action?.Kind); 395var start = Click(panel, Target(panel, PanelTargetKind.Start, state.AppHosts[3]).HitBounds).Action; 398Assert.Equal(PanelActionKind.Settings, Click(panel, panel.Scene.Targets.Single(t => t.Kind == PanelTargetKind.Settings).HitBounds).Action?.Kind); 399Assert.Equal(PanelActionKind.Quit, Click(panel, panel.Scene.Targets.Single(t => t.Kind == PanelTargetKind.Quit).HitBounds).Action?.Kind); 400Assert.Equal(PanelActionKind.Documentation, Click(panel, panel.Scene.Targets.Single(t => t.Kind == PanelTargetKind.Documentation).HitBounds).Action?.Kind); 408var dashboard = Target(panel, PanelTargetKind.Dashboard, state.AppHosts[2]); 419var stop = Target(panel, PanelTargetKind.Stop, state.AppHosts[0]); 420var more = Target(panel, PanelTargetKind.More, state.AppHosts[0]); 433var stop = Target(panel, PanelTargetKind.Stop, state.AppHosts[0]); 451var row = Target(panel, PanelTargetKind.Row, state.AppHosts[0]); 468var footer = scene.Targets.Single(target => target.Kind == PanelTargetKind.Quit).Bounds; 474Assert.Equal(footer, panel.Scene.Targets.Single(target => target.Kind == PanelTargetKind.Quit).Bounds); 479var last = panel.Scene.Targets.Last(target => target.Kind == PanelTargetKind.ToggleRecent); 491var first = panel.Scene.Targets.FirstOrDefault(target => target.Kind == PanelTargetKind.Row && target.Host == state.AppHosts[0]); 505Assert.Equal(new PanelTargetKey(PanelTargetKind.Row, PanelSection.Running, state.AppHosts[0].Id), panel.FocusedTarget); 511Assert.Equal(new PanelTargetKey(PanelTargetKind.Row, PanelSection.Running, state.AppHosts[^1].Id), panel.FocusedTarget); 533Assert.DoesNotContain(new PanelTargetKey(PanelTargetKind.Dashboard, PanelSection.Running, state.AppHosts[2].Id), visited); 555var action = Click(panel, Target(panel, PanelTargetKind.Stop, state.AppHosts[1]).HitBounds).Action; 557Assert.Equal(new PanelAction(PanelActionKind.Stop, state.AppHosts[1], Target(panel, PanelTargetKind.Stop, state.AppHosts[1]).Bounds), action); 559Assert.Contains(panel.Scene.Targets, target => target.Kind == PanelTargetKind.Row && target.Host == state.AppHosts[1]); 570Assert.False(Target(panel, PanelTargetKind.Dashboard, stopping).Enabled); 571Assert.Null(Click(panel, Target(panel, PanelTargetKind.Row, stopping).HitBounds, offsetX: 10).Action); 572Assert.Null(Click(panel, Target(panel, PanelTargetKind.Row, starting).HitBounds, offsetX: 10).Action); 579Click(panel, panel.Scene.Targets.Single(target => target.Kind == PanelTargetKind.ClearRecent).HitBounds); 593Click(panel, panel.Scene.Targets.Single(target => target.Kind == PanelTargetKind.ClearRecent).HitBounds); 595var response = Click(panel, panel.Scene.Targets.Single(target => target.Kind == PanelTargetKind.ConfirmCancel).HitBounds); 599Assert.Contains(panel.Scene.Targets, target => target.Kind == PanelTargetKind.ToggleRecent); 606Click(panel, panel.Scene.Targets.Single(target => target.Kind == PanelTargetKind.ClearRecent).HitBounds); 608var action = Click(panel, panel.Scene.Targets.Single(target => target.Kind == PanelTargetKind.Documentation).HitBounds).Action; 632var response = Click(panel, panel.Scene.Targets.Single(target => target.Kind == PanelTargetKind.ClearRecent).HitBounds); 639Assert.DoesNotContain(panel.Scene.Targets, target => target.Kind is PanelTargetKind.ToggleRecent); 640Assert.Equal(new PanelTargetKey(PanelTargetKind.ConfirmCancel, PanelSection.Recent, null), panel.FocusedTarget); 641var accept = panel.Scene.Targets.Single(target => target.Kind == PanelTargetKind.ConfirmAccept); 658var action = Click(panel, Target(panel, PanelTargetKind.ConfirmAccept, missing).HitBounds).Action; 668Assert.Equal(PanelActionKind.Settings, Click(panel, panel.Scene.Targets.Single(t => t.Kind == PanelTargetKind.Settings).HitBounds).Action?.Kind); 674Assert.DoesNotContain(panel.Scene.Targets, target => target.Kind == PanelTargetKind.Row); 675Assert.Equal(new PanelTargetKey(PanelTargetKind.Back, PanelSection.None, null), panel.FocusedTarget); 676var launch = panel.Scene.Targets.Single(target => target.Kind == PanelTargetKind.LaunchAtSignIn); 688Assert.True(panel.Scene.Targets.Single(target => target.Kind == PanelTargetKind.LaunchAtSignIn).Checked); 697var launch = panel.Scene.Targets.Single(target => target.Kind == PanelTargetKind.LaunchAtSignIn); 710var launch = panel.Scene.Targets.Single(target => target.Kind == PanelTargetKind.LaunchAtSignIn); 731Assert.Equal(new PanelTargetKey(PanelTargetKind.Settings, PanelSection.None, null), panel.FocusedTarget); 734Assert.Null(Click(panel, panel.Scene.Targets.Single(target => target.Kind == PanelTargetKind.Back).HitBounds).Action); 743Click(panel, Target(panel, PanelTargetKind.Stop, state.AppHosts[0]).HitBounds); 751Click(panel, Target(panel, PanelTargetKind.More, state.AppHosts[0]).HitBounds); 889foreach (var button in scene.Targets.Where(target => target.Kind is PanelTargetKind.Dashboard or PanelTargetKind.Stop 890or PanelTargetKind.Start or PanelTargetKind.More or PanelTargetKind.Settings or PanelTargetKind.Documentation 891or PanelTargetKind.Quit or PanelTargetKind.Back).Where(target => !target.HitBounds.IsEmpty)) 894if (button.Kind == PanelTargetKind.Back) 923Assert.All(scene.Targets.Where(target => target.Kind is PanelTargetKind.Row or PanelTargetKind.LaunchAtSignIn), 989Assert.All(scene.Targets.Where(target => target.Kind == PanelTargetKind.Back), 1129Click(panel, panel.Scene.Targets.Single(target => target.Kind == PanelTargetKind.ClearRecent).HitBounds); 1130var accept = panel.Scene.Targets.Single(target => target.Kind == PanelTargetKind.ConfirmAccept); 1276var row = panel.Scene.Targets.Where(target => target.Kind == PanelTargetKind.Row).ElementAt(1); 1305Assert.Equal([PanelTargetKind.Settings, PanelTargetKind.Documentation, PanelTargetKind.Quit], 1321Assert.Equal(PanelTargetKind.Row, firstRow.Target?.Kind); 1324var recent = scene.Accessibility.Single(element => element.Target?.Kind == PanelTargetKind.ToggleRecent); 1332panel.Invoke(panel.Scene.Targets.Single(target => target.Kind == PanelTargetKind.ClearRecent).Key); 1351Assert.Null(panel.Invoke(panel.Scene.Targets.Single(target => target.Kind == PanelTargetKind.ClearRecent).Key).Action); 1353Assert.Equal(PanelTargetKind.ConfirmCancel, panel.FocusedTarget?.Kind); 1355var accept = panel.Scene.Targets.Single(target => target.Kind == PanelTargetKind.ConfirmAccept).Key; 1366var disabled = Target(panel, PanelTargetKind.Dashboard, state.AppHosts[2]); 1370Assert.Equal(PanelResponse.None, panel.Invoke(new(PanelTargetKind.Back, PanelSection.None, null))); 1378var last = panel.Scene.Accessibility.Last(element => element.Target?.Kind == PanelTargetKind.Row); 1399var launch = panel.Scene.Accessibility.Single(element => element.Target?.Kind == PanelTargetKind.LaunchAtSignIn); 1417Assert.Equal("Open dashboard", Target(panel, PanelTargetKind.Dashboard, running).Tooltip); 1418Assert.Equal("Stop", Target(panel, PanelTargetKind.Stop, running).Tooltip); 1419Assert.Equal("Start", Target(panel, PanelTargetKind.Start, stopped).Tooltip); 1420Assert.Equal("More actions", Target(panel, PanelTargetKind.More, running).Tooltip); 1423Assert.All(panel.Scene.Targets.Where(target => target.Kind is PanelTargetKind.Row or PanelTargetKind.ToggleRecent or PanelTargetKind.ClearRecent), 1426Click(panel, Target(panel, PanelTargetKind.More, running).HitBounds); 1427Assert.Equal("Hide actions", Target(panel, PanelTargetKind.More, running).Tooltip); 1429Assert.Equal("Back", panel.Scene.Targets.Single(target => target.Kind == PanelTargetKind.Back).Tooltip); 1430Assert.Equal("Close settings", panel.Scene.Targets.Single(target => target.Kind == PanelTargetKind.Settings).Tooltip); 1439var quit = panel.Scene.Accessibility.Single(element => element.Target?.Kind == PanelTargetKind.Quit); 1453Assert.Equal([PanelTargetKind.Settings, PanelTargetKind.Documentation, PanelTargetKind.Quit], footer.Select(target => target.Kind)); 1459private static PanelHitTarget Target(TrayPanel panel, PanelTargetKind kind, AppHostMenuItem host)