diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/BetterLyrics.WinUI3.csproj b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/BetterLyrics.WinUI3.csproj
index 9aed45b..9f5f563 100644
--- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/BetterLyrics.WinUI3.csproj
+++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/BetterLyrics.WinUI3.csproj
@@ -69,6 +69,7 @@
+
diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Controls/NowPlayingBar.xaml b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Controls/NowPlayingBar.xaml
index b3217d2..2b68519 100644
--- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Controls/NowPlayingBar.xaml
+++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Controls/NowPlayingBar.xaml
@@ -11,7 +11,6 @@
mc:Ignorable="d">
-
+ Spacing="12">
+
+
+
+
+
@@ -427,7 +484,58 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Controls/NowPlayingBar.xaml.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Controls/NowPlayingBar.xaml.cs
index 51223ee..3572c72 100644
--- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Controls/NowPlayingBar.xaml.cs
+++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Controls/NowPlayingBar.xaml.cs
@@ -1,5 +1,7 @@
+using BetterLyrics.WinUI3.Enums;
using BetterLyrics.WinUI3.Hooks;
using BetterLyrics.WinUI3.Models;
+using BetterLyrics.WinUI3.Models.Settings;
using BetterLyrics.WinUI3.Services.MediaSessionsService;
using BetterLyrics.WinUI3.ViewModels;
using BetterLyrics.WinUI3.Views;
@@ -12,6 +14,7 @@ using Microsoft.UI.Xaml.Input;
using Microsoft.UI.Xaml.Media.Imaging;
using System;
using System.Numerics;
+using BetterLyrics.WinUI3.Extensions;
// To learn more about WinUI, the WinUI project structure,
// and more about our project templates, see: http://aka.ms/winui-project-info.
@@ -46,6 +49,42 @@ public sealed partial class NowPlayingBar : UserControl,
public static readonly DependencyProperty ShowSongInfoProperty =
DependencyProperty.Register(nameof(ShowSongInfo), typeof(bool), typeof(NowPlayingBar), new PropertyMetadata(false));
+ public bool ShowPlayingQueueButton
+ {
+ get { return (bool)GetValue(ShowPlayingQueueButtonProperty); }
+ set { SetValue(ShowPlayingQueueButtonProperty, value); }
+ }
+
+ public static readonly DependencyProperty ShowPlayingQueueButtonProperty =
+ DependencyProperty.Register(nameof(ShowPlayingQueueButton), typeof(bool), typeof(NowPlayingBar), new PropertyMetadata(false));
+
+ public bool ShowPlaybackOrderButton
+ {
+ get { return (bool)GetValue(ShowPlaybackOrderButtonProperty); }
+ set { SetValue(ShowPlaybackOrderButtonProperty, value); }
+ }
+
+ public static readonly DependencyProperty ShowPlaybackOrderButtonProperty =
+ DependencyProperty.Register(nameof(ShowPlaybackOrderButton), typeof(bool), typeof(NowPlayingBar), new PropertyMetadata(false));
+
+ public PlaybackOrder PlaybackOrder
+ {
+ get { return (PlaybackOrder)GetValue(PlaybackOrderProperty); }
+ set { SetValue(PlaybackOrderProperty, value); }
+ }
+
+ public static readonly DependencyProperty PlaybackOrderProperty =
+ DependencyProperty.Register(nameof(PlaybackOrder), typeof(PlaybackOrder), typeof(NowPlayingBar), new PropertyMetadata(PlaybackOrder.RepeatAll));
+
+ public bool IsPlayingQueueOpened
+ {
+ get { return (bool)GetValue(IsPlayingQueueOpenedProperty); }
+ set { SetValue(IsPlayingQueueOpenedProperty, value); }
+ }
+
+ public static readonly DependencyProperty IsPlayingQueueOpenedProperty =
+ DependencyProperty.Register(nameof(IsPlayingQueueOpened), typeof(bool), typeof(NowPlayingBar), new PropertyMetadata(false));
+
public bool IsCompactMode
{
get { return (bool)GetValue(IsCompactModeProperty); }
@@ -210,12 +249,12 @@ public sealed partial class NowPlayingBar : UserControl,
private void SongInfoStackPanel_Tapped(object sender, TappedRoutedEventArgs e)
{
- SongInfoTapped?.Invoke(this, EventArgs.Empty);
+ SongInfoTapped?.Invoke(sender, EventArgs.Empty);
}
private void TimeStackPanel_Tapped(object sender, TappedRoutedEventArgs e)
{
- TimeTapped?.Invoke(this, EventArgs.Empty);
+ TimeTapped?.Invoke(sender, EventArgs.Empty);
}
private void BottomCommandGrid_PointerEntered(object sender, Microsoft.UI.Xaml.Input.PointerRoutedEventArgs e)
@@ -262,6 +301,16 @@ public sealed partial class NowPlayingBar : UserControl,
}
}
+ private void PlayingQueueButton_Click(object sender, RoutedEventArgs e)
+ {
+ IsPlayingQueueOpened = !IsPlayingQueueOpened;
+ }
+
+ private void PlaybackOrderButton_Click(object sender, RoutedEventArgs e)
+ {
+ PlaybackOrder = PlaybackOrder.GetNext();
+ }
+
public void Receive(PropertyChangedMessage message)
{
if (message.Sender is IMediaSessionsService)
diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/MusicGalleryPageViewModel.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/MusicGalleryPageViewModel.cs
index 311803f..c153393 100644
--- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/MusicGalleryPageViewModel.cs
+++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/MusicGalleryPageViewModel.cs
@@ -629,12 +629,6 @@ namespace BetterLyrics.WinUI3.ViewModels
}
}
- [RelayCommand]
- private void SwitchPlaybackOrder()
- {
- AppSettings.MusicGallerySettings.PlaybackOrder = AppSettings.MusicGallerySettings.PlaybackOrder.GetNext();
- }
-
[RelayCommand]
private async Task StopTrackAsync()
{
diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Views/MusicGalleryPage.xaml b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Views/MusicGalleryPage.xaml
index c0984df..a2465bf 100644
--- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Views/MusicGalleryPage.xaml
+++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Views/MusicGalleryPage.xaml
@@ -29,14 +29,14 @@
-
+
-
-
-
+
+
+
-
+
@@ -49,7 +49,7 @@
@@ -98,7 +98,7 @@
Click="RemoveFromPlaylistButton_Click"
Content="{ui:FontIcon FontFamily={StaticResource IconFontFamily},
FontSize=16,
- Glyph=}"
+ Glyph=}"
Style="{StaticResource GhostButtonStyle}"
Visibility="{x:Bind IsDefault, Converter={StaticResource BoolNegationToVisibilityConverter}}">
@@ -192,7 +192,9 @@
-
+
+
+
@@ -245,17 +247,17 @@
-
+
-
@@ -317,39 +319,15 @@
SelectionChanged="SongListView_SelectionChanged"
SelectionMode="Multiple">
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ IsEnabled="{x:Bind ViewModel.SelectedTracks.Count, Mode=OneWay, Converter={StaticResource IntToBoolConverter}}" />
@@ -470,246 +448,157 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Views/MusicGalleryPage.xaml.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Views/MusicGalleryPage.xaml.cs
index 0d40e1b..04dcd85 100644
--- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Views/MusicGalleryPage.xaml.cs
+++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Views/MusicGalleryPage.xaml.cs
@@ -27,6 +27,15 @@ namespace BetterLyrics.WinUI3.Views
{
public MusicGalleryPageViewModel ViewModel => (MusicGalleryPageViewModel)DataContext;
+ public bool IsPlayingQueueOpened
+ {
+ get { return (bool)GetValue(IsPlayingQueueOpenedProperty); }
+ set { SetValue(IsPlayingQueueOpenedProperty, value); }
+ }
+
+ public static readonly DependencyProperty IsPlayingQueueOpenedProperty =
+ DependencyProperty.Register(nameof(IsPlayingQueueOpened), typeof(bool), typeof(MusicGalleryPage), new PropertyMetadata(false, OnDependencyPropertyChanged));
+
public MusicGalleryPage()
{
InitializeComponent();
@@ -34,6 +43,18 @@ namespace BetterLyrics.WinUI3.Views
ViewModel.AppSettings.MusicGallerySettings.PropertyChanged += MusicGallerySettings_PropertyChanged;
}
+ private static void OnDependencyPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
+ {
+ if (d is MusicGalleryPage self)
+ {
+ if (e.Property == IsPlayingQueueOpenedProperty)
+ {
+ var newValue = (bool)e.NewValue;
+ self.PlayQueue.Translation = newValue ? new() : new(310, 0, 0);
+ }
+ }
+ }
+
private void ScrollToPlayingItem()
{
if (ViewModel.PlayingQueueItem == null) return;
@@ -216,40 +237,6 @@ namespace BetterLyrics.WinUI3.Views
SongListView.SelectedItems.Clear();
}
- private void AddToPlaylistMenuFlyoutItem_Click(object sender, RoutedEventArgs e)
- {
- //((MenuFlyoutItem)sender).ContextFlyout.ShowAt(PlaylistButton);
- }
-
- private void ToBeAddedPlaylistsListViewItemGrid_Tapped(object sender, TappedRoutedEventArgs e)
- {
- var songsTabInfo = ((SongsTabInfo)((FrameworkElement)sender).DataContext);
- if (songsTabInfo.FilterProperty == CommonSongProperty.M3UFilePath)
- {
- if (songsTabInfo.FilterValue is string path)
- {
- if (File.Exists(path))
- {
- var content = File.ReadAllText(path);
- foreach (var item in ViewModel.SelectedTracks.Select(x => x.DecodedAbsoluteUri).ToList())
- {
- if (!content.Contains(item))
- {
- content += Environment.NewLine;
- content += item;
- }
- }
- File.WriteAllText(path, content);
- ToastHelper.ShowToast("TracksAddToPlaylistSuccessfully", null, InfoBarSeverity.Success);
- }
- else
- {
- ToastHelper.ShowToast("TracksAddToPlaylistFailed", null, InfoBarSeverity.Error);
- }
- }
- }
- }
-
private async void SongListViewItem_DoubleTapped(object sender, DoubleTappedRoutedEventArgs e)
{
var displayedTracks = SongListView.Items.Cast();
@@ -282,5 +269,52 @@ namespace BetterLyrics.WinUI3.Views
ViewModel.SelectFolder(selectedFolder);
}
}
+
+ private void ToBeAddedPlaylistsMenuFlyoutItem_Click(object sender, RoutedEventArgs e)
+ {
+ var songsTabInfo = ((SongsTabInfo)((FrameworkElement)sender).DataContext);
+ if (songsTabInfo.FilterProperty == CommonSongProperty.M3UFilePath)
+ {
+ if (songsTabInfo.FilterValue is string path)
+ {
+ if (File.Exists(path))
+ {
+ var content = File.ReadAllText(path);
+ foreach (var item in ViewModel.SelectedTracks.Select(x => x.DecodedAbsoluteUri).ToList())
+ {
+ if (!content.Contains(item))
+ {
+ content += Environment.NewLine;
+ content += item;
+ }
+ }
+ File.WriteAllText(path, content);
+ ToastHelper.ShowToast("TracksAddToPlaylistSuccessfully", null, InfoBarSeverity.Success);
+ }
+ else
+ {
+ ToastHelper.ShowToast("TracksAddToPlaylistFailed", null, InfoBarSeverity.Error);
+ }
+ }
+ }
+ }
+
+ private void AddToMenuBarItemFlyout_Opened(object sender, object e)
+ {
+ AddToCustomListMenuFlyoutSubItem.Items.Clear();
+ foreach (var item in ViewModel.AppSettings.StarredPlaylists)
+ {
+ if (item.FilterProperty == CommonSongProperty.M3UFilePath)
+ {
+ var menuFlyoutItem = new MenuFlyoutItem
+ {
+ Text = item.Name,
+ DataContext = item,
+ };
+ menuFlyoutItem.Click += ToBeAddedPlaylistsMenuFlyoutItem_Click;
+ AddToCustomListMenuFlyoutSubItem.Items.Add(menuFlyoutItem);
+ }
+ }
+ }
}
}
diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Views/MusicGalleryWindow.xaml b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Views/MusicGalleryWindow.xaml
index 8608f2b..902c030 100644
--- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Views/MusicGalleryWindow.xaml
+++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Views/MusicGalleryWindow.xaml
@@ -16,7 +16,7 @@
Loaded="RootGrid_Loaded"
Unloaded="RootGrid_Unloaded">
-
+
diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Views/MusicGalleryWindow.xaml.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Views/MusicGalleryWindow.xaml.cs
index c864ff0..8789483 100644
--- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Views/MusicGalleryWindow.xaml.cs
+++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Views/MusicGalleryWindow.xaml.cs
@@ -1,3 +1,4 @@
+using BetterLyrics.WinUI3.Controls;
using BetterLyrics.WinUI3.Enums;
using BetterLyrics.WinUI3.Extensions;
using BetterLyrics.WinUI3.Hooks;
@@ -127,5 +128,10 @@ namespace BetterLyrics.WinUI3.Views
{
ViewModel.AppSettings.MusicGallerySettings.LyricsWindowStatus.IsOpened = false;
}
+
+ private void NowPlayingBar_PlayingQueueClick(object sender, System.EventArgs e)
+ {
+ MusicGalleryPage.IsPlayingQueueOpened = !MusicGalleryPage.IsPlayingQueueOpened;
+ }
}
}