255 references to PanelTargetKind
Aspire.Tray.Tests (255)
src\Aspire.Tray\Common\TrayPanel.cs (99)
210_focus = new(PanelTargetKind.Back, PanelSection.None, null); 406_focus = new(PanelTargetKind.OpenInMenu, open.Section, open.Host); 443private static bool IsPrimary(PanelTargetKind kind) 444=> kind is PanelTargetKind.Row or PanelTargetKind.ToggleRecent or PanelTargetKind.Documentation 445or PanelTargetKind.Settings or PanelTargetKind.Quit or PanelTargetKind.ConfirmCancel or PanelTargetKind.Back 446or PanelTargetKind.LaunchAtSignIn || IsActionItem(kind); 448private static bool IsConfirmTarget(PanelTargetKind kind) 449=> kind is PanelTargetKind.ConfirmCancel or PanelTargetKind.ConfirmAccept; 452private static bool IsActionItem(PanelTargetKind kind) 453=> kind is PanelTargetKind.OpenInMenu or PanelTargetKind.OpenIn or PanelTargetKind.ShowInFolder or PanelTargetKind.CopyPath 454or PanelTargetKind.TogglePin or PanelTargetKind.RemoveRecent; 486var top = Scene.Targets.FirstOrDefault(target => target.Key == row with { Kind = PanelTargetKind.Row, Item = 0 })?.Bounds.Y ?? bottom; 506_focus = new(PanelTargetKind.More, actions.Section, actions.Host); 516_focus = new(PanelTargetKind.ConfirmCancel, confirm.Section, confirm.Host?.Id); 548PanelConfirmKind.ClearRecent => new(PanelTargetKind.ClearRecent, confirm.Section, null), 549_ => new(PanelTargetKind.Start, confirm.Section, confirm.Host?.Id) 558_focus = new(PanelTargetKind.Settings, PanelSection.None, null); 583index = order.FindIndex(target => target.Kind == PanelTargetKind.Row && target.Key.Host == current.Host 639if (_actions is not null && target.Kind is not (PanelTargetKind.More or PanelTargetKind.Row) && !IsActionItem(target.Kind)) 649case PanelTargetKind.Row: 651case PanelTargetKind.Dashboard: 653case PanelTargetKind.More: 656case PanelTargetKind.Stop: 658case PanelTargetKind.Start: 660case PanelTargetKind.OpenInMenu: 666case PanelTargetKind.OpenIn: 673case PanelTargetKind.ShowInFolder: 676case PanelTargetKind.CopyPath: 679case PanelTargetKind.TogglePin: 682case PanelTargetKind.RemoveRecent: 685case PanelTargetKind.ToggleRecent: 689case PanelTargetKind.ClearRecent: 692case PanelTargetKind.ConfirmCancel: 695case PanelTargetKind.ConfirmAccept when _confirm is { } confirmed: 703case PanelTargetKind.Back: 704case PanelTargetKind.Settings when _settings is not null: 707case PanelTargetKind.LaunchAtSignIn: 709case PanelTargetKind.Documentation: 711case PanelTargetKind.Settings: 713case PanelTargetKind.Quit: 754void Add(ListItemKind kind, double height, PanelSection section, AppHostMenuItem? host, PanelTargetKind target = default) 795Add(ListItemKind.SectionHeader, SectionHeaderHeight, PanelSection.None, null, PanelTargetKind.LaunchAtSignIn); 796Add(ListItemKind.SettingsToggle, SettingsRowHeight, PanelSection.None, null, PanelTargetKind.LaunchAtSignIn); 797Add(ListItemKind.SectionHeader, SectionHeaderHeight, PanelSection.None, null, PanelTargetKind.Documentation); 858var general = item.Target == PanelTargetKind.LaunchAtSignIn; 1004var toggleKey = new PanelTargetKey(PanelTargetKind.ToggleRecent, section, null); 1015var clearKey = new PanelTargetKey(PanelTargetKind.ClearRecent, section, null); 1025var rowKey = new PanelTargetKey(PanelTargetKind.Row, section, host.Id); 1040? new[] { PanelTargetKind.Dashboard, PanelTargetKind.Stop, PanelTargetKind.More } 1041: [PanelTargetKind.Start, PanelTargetKind.More]; 1050foreach (var kind in buttons) 1057PanelTargetKind.Dashboard => (PanelIcon.ExternalLink, $"Open dashboard for {host.DisplayName}", "Open dashboard", host.CanOpenDashboard), 1058PanelTargetKind.Stop => (PanelIcon.Stop, $"Stop {host.DisplayName}", "Stop", host.CanStop), 1059PanelTargetKind.Start => (PanelIcon.Play, $"Start {host.DisplayName}", "Start", host.CanStart), 1070if (kind == PanelTargetKind.More && expanded && _hover != key && _pressed != key) 1109private List<(PanelTargetKind Kind, int Item, PanelIcon Icon, string Label, string Name)> GetRowActions(AppHostMenuItem host, PanelSection section) 1112var actions = new List<(PanelTargetKind, int, PanelIcon, string, string)>(); 1115actions.Add((PanelTargetKind.OpenInMenu, 0, PanelIcon.AppWindow, "Open in", 1120actions.Add((PanelTargetKind.OpenIn, i, PanelIcon.AppWindow, application, $"Open {name} in {application}")); 1123actions.Add((PanelTargetKind.ShowInFolder, 0, PanelIcon.Folder, $"Show in {_fileManagerName}", $"Show {name} in {_fileManagerName}")); 1124actions.Add((PanelTargetKind.CopyPath, 0, PanelIcon.Copy, "Copy path", $"Copy the folder path of {name}")); 1126? (PanelTargetKind.TogglePin, 0, PanelIcon.Unpin, "Unpin", $"Unpin {name}") 1127: (PanelTargetKind.TogglePin, 0, PanelIcon.Pin, "Pin", $"Pin {name}")); 1130actions.Add((PanelTargetKind.RemoveRecent, 0, PanelIcon.Remove, "Remove from recent", $"Remove {name} from recent AppHosts")); 1153if (kind == PanelTargetKind.OpenIn) 1168if (kind == PanelTargetKind.OpenInMenu) 1240var cancelKey = new PanelTargetKey(PanelTargetKind.ConfirmCancel, section, id); 1241var acceptKey = new PanelTargetKey(PanelTargetKind.ConfirmAccept, section, id); 1269var backKey = new PanelTargetKey(PanelTargetKind.Back, PanelSection.None, null); 1278private void AddSettingsToggle(List<PanelCommand> commands, List<PanelHitTarget> targets, PanelTargetKind kind, PanelSettings settings, 1333(PanelTargetKind.Settings, PanelIcon.Gear, _settings is null ? "Settings" : "Close settings", 1335(PanelTargetKind.Documentation, PanelIcon.Globe, "Open Aspire documentation", "Documentation", null, right - 2 * ButtonSize - ButtonGap), 1336(PanelTargetKind.Quit, PanelIcon.Power, _quitVerb, quitDescription, quitDescription, right - ButtonSize) 1341if (kind == PanelTargetKind.Settings && _settings is not null && _hover != key && _pressed != key) 1386private static bool IsChrome(PanelTargetKind kind) 1387=> kind is PanelTargetKind.Documentation or PanelTargetKind.Settings or PanelTargetKind.Quit or PanelTargetKind.Back; 1391&& value.Kind is PanelTargetKind.Row or PanelTargetKind.Dashboard or PanelTargetKind.Stop 1392or PanelTargetKind.Start or PanelTargetKind.More; 1481PanelTargetKind Target);
src\Aspire.Tray\Common\TrayPanelScene.cs (2)
149internal readonly record struct PanelTargetKey(PanelTargetKind Kind, PanelSection Section, AppHostId? Host, int Item = 0); 182public PanelTargetKind Kind => Key.Kind;
TrayPanelTests.cs (154)
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); 884Assert.All(scene.Targets.Where(target => target.Kind == PanelTargetKind.Back), 1024Click(panel, panel.Scene.Targets.Single(target => target.Kind == PanelTargetKind.ClearRecent).HitBounds); 1025var accept = panel.Scene.Targets.Single(target => target.Kind == PanelTargetKind.ConfirmAccept); 1171var row = panel.Scene.Targets.Where(target => target.Kind == PanelTargetKind.Row).ElementAt(1); 1196Assert.Equal([PanelTargetKind.Settings, PanelTargetKind.Documentation, PanelTargetKind.Quit], 1212Assert.Equal(PanelTargetKind.Row, firstRow.Target?.Kind); 1215var recent = scene.Accessibility.Single(element => element.Target?.Kind == PanelTargetKind.ToggleRecent); 1223panel.Invoke(panel.Scene.Targets.Single(target => target.Kind == PanelTargetKind.ClearRecent).Key); 1242Assert.Null(panel.Invoke(panel.Scene.Targets.Single(target => target.Kind == PanelTargetKind.ClearRecent).Key).Action); 1244Assert.Equal(PanelTargetKind.ConfirmCancel, panel.FocusedTarget?.Kind); 1246var accept = panel.Scene.Targets.Single(target => target.Kind == PanelTargetKind.ConfirmAccept).Key; 1257var disabled = Target(panel, PanelTargetKind.Dashboard, state.AppHosts[2]); 1261Assert.Equal(PanelResponse.None, panel.Invoke(new(PanelTargetKind.Back, PanelSection.None, null))); 1269var last = panel.Scene.Accessibility.Last(element => element.Target?.Kind == PanelTargetKind.Row); 1290var launch = panel.Scene.Accessibility.Single(element => element.Target?.Kind == PanelTargetKind.LaunchAtSignIn); 1308Assert.Equal("Open dashboard", Target(panel, PanelTargetKind.Dashboard, running).Tooltip); 1309Assert.Equal("Stop", Target(panel, PanelTargetKind.Stop, running).Tooltip); 1310Assert.Equal("Start", Target(panel, PanelTargetKind.Start, stopped).Tooltip); 1311Assert.Equal("More actions", Target(panel, PanelTargetKind.More, running).Tooltip); 1314Assert.All(panel.Scene.Targets.Where(target => target.Kind is PanelTargetKind.Row or PanelTargetKind.ToggleRecent or PanelTargetKind.ClearRecent), 1317Click(panel, Target(panel, PanelTargetKind.More, running).HitBounds); 1318Assert.Equal("Hide actions", Target(panel, PanelTargetKind.More, running).Tooltip); 1320Assert.Equal("Back", panel.Scene.Targets.Single(target => target.Kind == PanelTargetKind.Back).Tooltip); 1321Assert.Equal("Close settings", panel.Scene.Targets.Single(target => target.Kind == PanelTargetKind.Settings).Tooltip); 1330var quit = panel.Scene.Accessibility.Single(element => element.Target?.Kind == PanelTargetKind.Quit); 1344Assert.Equal([PanelTargetKind.Settings, PanelTargetKind.Documentation, PanelTargetKind.Quit], footer.Select(target => target.Kind)); 1350private static PanelHitTarget Target(TrayPanel panel, PanelTargetKind kind, AppHostMenuItem host)