GameGridView.axaml.cs 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. using Avalonia.Collections;
  2. using Avalonia.Controls;
  3. using Avalonia.Input;
  4. using Avalonia.Interactivity;
  5. using Avalonia.Markup.Xaml;
  6. using LibHac.Common;
  7. using Ryujinx.Ava.Ui.ViewModels;
  8. using Ryujinx.Ui.App.Common;
  9. using System;
  10. namespace Ryujinx.Ava.Ui.Controls
  11. {
  12. public partial class GameGridView : UserControl
  13. {
  14. private ApplicationData _selectedApplication;
  15. public static readonly RoutedEvent<ApplicationOpenedEventArgs> ApplicationOpenedEvent =
  16. RoutedEvent.Register<GameGridView, ApplicationOpenedEventArgs>(nameof(ApplicationOpened), RoutingStrategies.Bubble);
  17. public event EventHandler<ApplicationOpenedEventArgs> ApplicationOpened
  18. {
  19. add { AddHandler(ApplicationOpenedEvent, value); }
  20. remove { RemoveHandler(ApplicationOpenedEvent, value); }
  21. }
  22. public void GameList_DoubleTapped(object sender, RoutedEventArgs args)
  23. {
  24. if (sender is ListBox listBox)
  25. {
  26. if (listBox.SelectedItem is ApplicationData selected)
  27. {
  28. RaiseEvent(new ApplicationOpenedEventArgs(selected, ApplicationOpenedEvent));
  29. }
  30. }
  31. }
  32. public void GameList_SelectionChanged(object sender, SelectionChangedEventArgs args)
  33. {
  34. if (sender is ListBox listBox)
  35. {
  36. var selected = listBox.SelectedItem as ApplicationData;
  37. _selectedApplication = selected;
  38. }
  39. }
  40. public ApplicationData SelectedApplication => _selectedApplication;
  41. public GameGridView()
  42. {
  43. InitializeComponent();
  44. }
  45. private void InitializeComponent()
  46. {
  47. AvaloniaXamlLoader.Load(this);
  48. }
  49. private void SearchBox_OnKeyUp(object sender, KeyEventArgs e)
  50. {
  51. (DataContext as MainWindowViewModel).SearchText = (sender as TextBox).Text;
  52. }
  53. private void MenuBase_OnMenuOpened(object sender, EventArgs e)
  54. {
  55. var selection = SelectedApplication;
  56. if (selection != null)
  57. {
  58. if (sender is ContextMenu menu)
  59. {
  60. bool canHaveUserSave = !Utilities.IsZeros(selection.ControlHolder.ByteSpan) && selection.ControlHolder.Value.UserAccountSaveDataSize > 0;
  61. bool canHaveDeviceSave = !Utilities.IsZeros(selection.ControlHolder.ByteSpan) && selection.ControlHolder.Value.DeviceSaveDataSize > 0;
  62. bool canHaveBcatSave = !Utilities.IsZeros(selection.ControlHolder.ByteSpan) && selection.ControlHolder.Value.BcatDeliveryCacheStorageSize > 0;
  63. ((menu.Items as AvaloniaList<object>)[2] as MenuItem).IsEnabled = canHaveUserSave;
  64. ((menu.Items as AvaloniaList<object>)[3] as MenuItem).IsEnabled = canHaveDeviceSave;
  65. ((menu.Items as AvaloniaList<object>)[4] as MenuItem).IsEnabled = canHaveBcatSave;
  66. }
  67. }
  68. }
  69. }
  70. }