YouTube Chat layer: one-per-layout gate + legacy label heal (TASK 27)
This commit is contained in:
@@ -213,6 +213,7 @@ public class MainViewModel : ViewModelBase
|
||||
OnPropertyChanged(nameof(ShowSourcesEmptyHint));
|
||||
OnPropertyChanged(nameof(CanChangeBackground));
|
||||
OnPropertyChanged(nameof(CanAddWebcam));
|
||||
OnPropertyChanged(nameof(CanAddYouTubeChat));
|
||||
OnPropertyChanged(nameof(CanShowWebcamInStagedScene));
|
||||
OnPropertyChanged(nameof(IsCountdownAvailable));
|
||||
UpdateActiveBackground();
|
||||
@@ -307,6 +308,12 @@ public class MainViewModel : ViewModelBase
|
||||
/// one camera identity app-wide; re-adding always opens the picker.</summary>
|
||||
public bool CanAddWebcam => StagedScene != null && _webcam == null;
|
||||
|
||||
/// <summary>The Add → YouTube Chat menu item: enabled only while no chat layer exists
|
||||
/// anywhere — one chat overlay per layout.</summary>
|
||||
public bool CanAddYouTubeChat
|
||||
=> StagedScene != null
|
||||
&& !Scenes.Any(s => s.Elements.OfType<Source>().Any(e => e.Type == SourceType.ChatBox));
|
||||
|
||||
// ─── Transitions (TASK 19/23) ───
|
||||
|
||||
public TransitionType SelectedTransitionType
|
||||
@@ -1770,6 +1777,15 @@ public class MainViewModel : ViewModelBase
|
||||
ClampWebcamToBounds(config, scene.Name);
|
||||
HealLegacySquareRect(config);
|
||||
}
|
||||
|
||||
// One-time heal: ChatBox layers created before the "YouTube Chat"
|
||||
// default still carry the old "Chat" name — creator renames untouched.
|
||||
foreach (var scene in Scenes)
|
||||
foreach (var source in scene.Elements.OfType<Source>())
|
||||
if (source.Type == SourceType.ChatBox
|
||||
&& string.Equals(source.Name, "Chat", StringComparison.OrdinalIgnoreCase))
|
||||
source.Name = "YouTube Chat";
|
||||
|
||||
AppLog.Write($"LoadLayout: {Scenes.Count} scenes loaded");
|
||||
}
|
||||
finally
|
||||
@@ -2264,6 +2280,7 @@ public class MainViewModel : ViewModelBase
|
||||
foreach (SceneElement element in e.OldItems)
|
||||
element.PropertyChanged -= OnElementPropertyChanged;
|
||||
OnPropertyChanged(nameof(CanAddWebcam));
|
||||
OnPropertyChanged(nameof(CanAddYouTubeChat));
|
||||
ScheduleSave();
|
||||
}
|
||||
|
||||
@@ -2383,9 +2400,11 @@ public class MainViewModel : ViewModelBase
|
||||
|
||||
// The (+) menu only adds regular layers. The Background is a locked
|
||||
// per-screen layer managed by EnsureBackground/NormalizeBackgrounds —
|
||||
// never user-created, never deleted.
|
||||
// never user-created, never deleted. YouTube Chat is one-per-layout.
|
||||
if (sourceType is SourceType.DisplayCapture or SourceType.WindowCapture or SourceType.Background)
|
||||
return;
|
||||
if (sourceType == SourceType.ChatBox && !CanAddYouTubeChat)
|
||||
return;
|
||||
|
||||
var source = new Source
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user