ソースを参照

UI: Copy Title ID by clicking on it.

Evan Husted 1 年間 前
コミット
4d7350fc6e

+ 3 - 0
src/Ryujinx/App.axaml.cs

@@ -32,6 +32,9 @@ namespace Ryujinx.Ava
             .ApplicationLifetime.Cast<IClassicDesktopStyleApplicationLifetime>()
             .MainWindow.Cast<MainWindow>();
 
+        public static IClassicDesktopStyleApplicationLifetime DesktopLifetime => Current!
+            .ApplicationLifetime.Cast<IClassicDesktopStyleApplicationLifetime>();
+
         public static void SetTaskbarProgress(TaskBarProgressBarState state) => MainWindow.PlatformFeatures.SetTaskBarProgressBarState(state);
         public static void SetTaskbarProgressValue(ulong current, ulong total) => MainWindow.PlatformFeatures.SetTaskBarProgressBarValue(current, total);
         public static void SetTaskbarProgressValue(long current, long total) => SetTaskbarProgressValue(Convert.ToUInt64(current), Convert.ToUInt64(total));

+ 15 - 5
src/Ryujinx/UI/Controls/ApplicationListView.axaml

@@ -101,11 +101,21 @@
                                     VerticalAlignment="Top"
                                     Orientation="Vertical"
                                     Spacing="5">
-                                    <TextBlock
-                                        HorizontalAlignment="Stretch"
-                                        Text="{Binding IdString}"
-                                        TextAlignment="Start"
-                                        TextWrapping="Wrap" />
+                                    <Button 
+                                        Click="IdString_OnClick" 
+                                        HorizontalContentAlignment="Left" 
+                                        VerticalAlignment="Center"
+                                        Background="{DynamicResource AppListBackgroundColor}"
+                                        Margin="-1, 0, 0, 0"
+                                        Padding="0" >
+                                        <TextBlock
+                                            Margin="1.5"
+                                            HorizontalAlignment="Stretch"
+                                            Text="{Binding IdString}"
+                                            Tag="{Binding Id}"
+                                            TextAlignment="Start"
+                                            TextWrapping="Wrap" />
+                                    </Button>
                                     <TextBlock
                                         HorizontalAlignment="Stretch"
                                         Text="{Binding FileExtension}"

+ 23 - 0
src/Ryujinx/UI/Controls/ApplicationListView.axaml.cs

@@ -1,10 +1,13 @@
 using Avalonia.Controls;
+using Avalonia.Controls.Notifications;
 using Avalonia.Input;
 using Avalonia.Interactivity;
+using FluentAvalonia.UI.Controls;
 using Ryujinx.Ava.UI.Helpers;
 using Ryujinx.Ava.UI.ViewModels;
 using Ryujinx.UI.App.Common;
 using System;
+using System.Linq;
 
 namespace Ryujinx.Ava.UI.Controls
 {
@@ -32,5 +35,25 @@ namespace Ryujinx.Ava.UI.Controls
             if (DataContext is MainWindowViewModel viewModel && sender is ListBox { SelectedItem: ApplicationData selected })
                 viewModel.ListSelectedApplication = selected;
         }
+
+        private async void IdString_OnClick(object sender, RoutedEventArgs e)
+        {
+            if (DataContext is not MainWindowViewModel mwvm)
+                return;
+            
+            if (sender is not Button { Content: TextBlock idText })
+                return;
+            
+            if (App.MainWindow.Clipboard is { } clipboard)
+            {
+                var appData = mwvm.Applications.FirstOrDefault(it => it.IdString == idText.Text);
+                if (appData is null)
+                    return;
+                
+                await clipboard.SetTextAsync(appData.IdString);
+                
+                NotificationHelper.Show("Copied Title ID", $"{appData.Name} ({appData.IdString})", NotificationType.Information);
+            }
+        }
     }
 }

+ 3 - 0
src/Ryujinx/UI/Windows/MainWindow.axaml.cs

@@ -98,6 +98,9 @@ namespace Ryujinx.Ava.UI.Windows
             StatusBarHeight = StatusBarView.StatusBar.MinHeight;
             MenuBarHeight = MenuBar.MinHeight;
 
+            ApplicationList.DataContext = DataContext;
+            ApplicationGrid.DataContext = DataContext;
+
             SetWindowSizePosition();
 
             if (Program.PreviewerDetached)