Source access enforcement (the catalog): 10-source catalog + per-scene access matrix enforced by SceneAccessPolicy; Add-Source menu is one ItemsSource rebuilt per scene (Screen = Live-only, BG/Image/Text every scene), webcam row always present + greys out; Chatbox/Alerts/Socials are inert SourceType rows ready for their features; Text queued as a ship step (countdown + credits modes); Monetization notes socialBar free = YouTube + 1, unlimited with the paid key (79 tests passing)

This commit is contained in:
2026-08-10 12:17:03 -07:00
parent cc3b1c9234
commit ac22b1658f
8 changed files with 236 additions and 25 deletions
+28
View File
@@ -0,0 +1,28 @@
using System.Windows.Input;
namespace ytLive.ViewModels;
/// <summary>
/// One Add-Source menu entry: a label, its action, and an optional command
/// parameter. The collection is rebuilt per scene from
/// <see cref="Services.SceneAccessPolicy"/> so only the sources the active
/// scene allows appear in the menu.
/// </summary>
public sealed class SourceMenuItem
{
public SourceMenuItem(string header, ICommand command, object? parameter = null,
bool isEnabled = true, string? toolTip = null)
{
Header = header;
Command = command;
Parameter = parameter;
IsEnabled = isEnabled;
ToolTip = toolTip;
}
public string Header { get; }
public ICommand Command { get; }
public object? Parameter { get; }
public bool IsEnabled { get; }
public string? ToolTip { get; }
}