diff --git a/Controls/BottomBar.xaml b/Controls/BottomBar.xaml
index 9736d2a..6a233db 100644
--- a/Controls/BottomBar.xaml
+++ b/Controls/BottomBar.xaml
@@ -3,46 +3,8 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
\ No newline at end of file
+
diff --git a/Controls/LeftPanel.xaml b/Controls/LeftPanel.xaml
index fe43b72..f58805f 100644
--- a/Controls/LeftPanel.xaml
+++ b/Controls/LeftPanel.xaml
@@ -514,6 +514,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Controls/PreviewPane.xaml b/Controls/PreviewPane.xaml
index 4ff8560..f05e892 100644
--- a/Controls/PreviewPane.xaml
+++ b/Controls/PreviewPane.xaml
@@ -1,7 +1,8 @@
+ xmlns:Helpers="clr-namespace:ytLive.Helpers"
+ xmlns:local="clr-namespace:ytLive">
@@ -181,6 +182,50 @@
+
+
+
+
+
+
+
+
+
+
+
+
@@ -516,6 +561,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -750,47 +852,86 @@
-
-
+
+
+
+
+
+
-
-
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
@@ -803,20 +944,6 @@
VerticalAlignment="Center" Margin="0,4">
-
-
diff --git a/Controls/SceneThumbnailStrip.xaml b/Controls/SceneThumbnailStrip.xaml
index 82d1f3d..f0295c9 100644
--- a/Controls/SceneThumbnailStrip.xaml
+++ b/Controls/SceneThumbnailStrip.xaml
@@ -62,12 +62,10 @@
-
-
-
-
-
+
+
+
-
-
-
+
+
+
@@ -78,6 +80,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/SocialsDialog.xaml b/SocialsDialog.xaml
index 672bb5f..87a5161 100644
--- a/SocialsDialog.xaml
+++ b/SocialsDialog.xaml
@@ -1,18 +1,14 @@
-
+
-
+
-
+
-
+
@@ -125,4 +121,4 @@
-
+
diff --git a/SocialsDialog.xaml.cs b/SocialsDialog.xaml.cs
index e9f18f5..177cc23 100644
--- a/SocialsDialog.xaml.cs
+++ b/SocialsDialog.xaml.cs
@@ -1,24 +1,18 @@
using System.Windows;
+using System.Windows.Controls;
using System.Windows.Input;
using ytLive.Helpers;
using ytLive.ViewModels;
namespace ytLive;
-public partial class SocialsDialog : Window
+public partial class SocialsDialog : UserControl
{
- private readonly SocialsDialogViewModel _viewModel;
+ private SocialsDialogViewModel _viewModel => (SocialsDialogViewModel)DataContext;
- public SocialsDialog(SocialsDialogViewModel viewModel)
+ public SocialsDialog()
{
- AppLog.Write("SocialsDialog ctor: before InitializeComponent");
InitializeComponent();
- AppLog.Write("SocialsDialog ctor: after InitializeComponent");
- DataContext = viewModel;
- _viewModel = viewModel;
- viewModel.SaveRequested += () => DialogResult = true;
- viewModel.CancelRequested += () => DialogResult = false;
- Closing += (_, _) => _viewModel.AbortPending();
}
private void SignInButton_Click(object sender, RoutedEventArgs e)
diff --git a/ViewModels/MainViewModel.Socials.cs b/ViewModels/MainViewModel.Socials.cs
index 3e216a2..5cde2ac 100644
--- a/ViewModels/MainViewModel.Socials.cs
+++ b/ViewModels/MainViewModel.Socials.cs
@@ -119,20 +119,46 @@ public partial class MainViewModel
/// Opens the Social Media Site Promotion dialog (6 slots, sign-in gate,
/// validation). On save the working copy replaces .
///
+ /// The Socials pull-out (same drawer pattern as Stream Settings / YPP / TEST).
+ public bool SocialsDrawerOpen { get; private set; }
+
+ public SocialsDialogViewModel? SocialsDrawer { get; private set; }
+
private void OpenSocialDialog()
{
+ if (SocialsDrawerOpen)
+ {
+ CloseSocialsDrawer();
+ return;
+ }
var dialog = new SocialsDialogViewModel(
_socialValidator,
SignInAsync,
SignOutYouTubeAsync,
_youtubeAuth.CurrentChannel,
_socials);
- var window = new ytLive.SocialsDialog(dialog) { Owner = Application.Current.MainWindow };
- if (window.ShowDialog() == true)
+ dialog.SaveRequested += () =>
{
_socials = dialog.BuildSocialsConfig();
NotifySocialsChanged();
- }
+ CloseSocialsDrawer();
+ };
+ dialog.CancelRequested += CloseSocialsDrawer;
+ SocialsDrawer = dialog;
+ BroadcastForm.IsDrawerOpen = false;
+ Ypp.IsDrawerOpen = false;
+ TestSession.IsDrawerOpen = false;
+ SocialsDrawerOpen = true;
+ OnPropertyChanged(nameof(SocialsDrawer));
+ OnPropertyChanged(nameof(SocialsDrawerOpen));
+ }
+
+ internal void CloseSocialsDrawer()
+ {
+ if (!SocialsDrawerOpen) return;
+ SocialsDrawerOpen = false;
+ SocialsDrawer?.AbortPending();
+ OnPropertyChanged(nameof(SocialsDrawerOpen));
}
private void NotifySocialsChanged()
diff --git a/ViewModels/MainViewModel.Streaming.cs b/ViewModels/MainViewModel.Streaming.cs
index 66941b5..08a3f75 100644
--- a/ViewModels/MainViewModel.Streaming.cs
+++ b/ViewModels/MainViewModel.Streaming.cs
@@ -364,6 +364,7 @@ public partial class MainViewModel : ViewModelBase
new("1080p30", 30, 8.0, 1920, 1080),
new("720p60", 60, 6.0, 1280, 720),
new("720p30", 30, 6.0, 1280, 720),
+ new("Vertical 1080p30", 30, 8.0, 1080, 1920),
new("Vertical 1080p60", 60, 8.0, 1080, 1920),
};
diff --git a/ViewModels/MainViewModel.Ypp.cs b/ViewModels/MainViewModel.Ypp.cs
index 872d85a..71fe188 100644
--- a/ViewModels/MainViewModel.Ypp.cs
+++ b/ViewModels/MainViewModel.Ypp.cs
@@ -38,6 +38,7 @@ public partial class MainViewModel
{
Ypp.IsDrawerOpen = false;
TestSession.IsDrawerOpen = false;
+ CloseSocialsDrawer();
}
};
Ypp.PropertyChanged += (_, e) =>
@@ -46,6 +47,7 @@ public partial class MainViewModel
{
BroadcastForm.IsDrawerOpen = false;
TestSession.IsDrawerOpen = false;
+ CloseSocialsDrawer();
}
};
TestSession.PropertyChanged += (_, e) =>
@@ -54,6 +56,7 @@ public partial class MainViewModel
{
BroadcastForm.IsDrawerOpen = false;
Ypp.IsDrawerOpen = false;
+ CloseSocialsDrawer();
}
};
}