using System.ComponentModel;
using Windows.ApplicationModel.DataTransfer;
using XFEEDToolBox.Core.Presentation;
using XFEEDToolBox.ViewModels;
namespace XFEEDToolBox.Views;
public sealed partial class LogViewPage : Page
{
public ToolboxViewModel ViewModel=>App.ViewModel;
private bool wideDetails;
public LogViewPage()
{
InitializeComponent();
NavigationCacheMode=Microsoft.UI.Xaml.Navigation.NavigationCacheMode.Required;
}
protected override async void OnNavigatedTo(Microsoft.UI.Xaml.Navigation.NavigationEventArgs args)
{
base.OnNavigatedTo(args);
ViewModel.GameLogPageVisible=true;
ViewModel.PropertyChanged+=GameLogChanged;
await ViewModel.RefreshGameEventsAsync();
UpdateSelection();
}
protected override void OnNavigatedFrom(Microsoft.UI.Xaml.Navigation.NavigationEventArgs args)
{
ViewModel.GameLogPageVisible=false;
ViewModel.PropertyChanged-=GameLogChanged;
EventDetailsFlyout.Hide();
base.OnNavigatedFrom(args);
}
private void GameLogChanged(object? sender,PropertyChangedEventArgs args)
{
if(args.PropertyName==nameof(ViewModel.GameEventLogBusy)&&!ViewModel.GameEventLogBusy)UpdateSelection();
}
private void UpdateSelection()
{
if(GameLogList.SelectedItem is null)GameLogList.SelectedItem=ViewModel.GameEventRows.FirstOrDefault();
ViewModel.SelectGameEvent(GameLogList.SelectedItem as GameEventLiveRow);
EventDetailsEmptyText.Visibility=ViewModel.HasGameEventDetails?Visibility.Collapsed:Visibility.Visible;
GameLogEmptyText.Visibility=ViewModel.GameEventRows.Count==0&&!ViewModel.GameEventLogBusy?Visibility.Visible:Visibility.Collapsed;
}
private void GameLogSelectionChanged(object sender,SelectionChangedEventArgs args)
{
ViewModel.SelectGameEvent(GameLogList.SelectedItem as GameEventLiveRow);
EventDetailsEmptyText.Visibility=ViewModel.HasGameEventDetails?Visibility.Collapsed:Visibility.Visible;
}
private void OpenGameEvent(object sender,ItemClickEventArgs args)
{
if(args.ClickedItem is not GameEventLiveRow row)return;
GameLogList.SelectedItem=row;
if(!wideDetails)EventDetailsFlyout.ShowAt(GameDetailsButton);
}
private void LogPageSizeChanged(object sender,SizeChangedEventArgs args)
{
wideDetails=args.NewSize.Width>=1100;
EventDetailsColumn.Width=new(wideDetails?360:0);
EventWorkspace.ColumnSpacing=wideDetails?24:0;
EventDetailsPanel.Visibility=wideDetails?Visibility.Visible:Visibility.Collapsed;
GameDetailsButton.Visibility=wideDetails?Visibility.Collapsed:Visibility.Visible;
EventTypeColumn.Width=new(args.NewSize.Width<900?160:200);
EventSortColumn.Width=new(args.NewSize.Width<900?128:148);
CompactEventDetails.Width=Math.Clamp(args.NewSize.Width-96,240,420);
if(wideDetails)EventDetailsFlyout.Hide();
}
private void CopyEventJson(object sender,RoutedEventArgs args)
{
if(ViewModel.SelectedGameEventDetail is not {} details)return;
var package=new DataPackage();package.SetText(details.Json);Clipboard.SetContent(package);
}
}
using System.ComponentModel;
using Windows.ApplicationModel.DataTransfer;
using XFEEDToolBox.Core.Presentation;
using XFEEDToolBox.ViewModels;
namespace XFEEDToolBox.Views;
public sealed partial class LogViewPage : Page
{
public ToolboxViewModel ViewModel=>App.ViewModel;
private bool wideDetails;
public LogViewPage()
{
InitializeComponent();
NavigationCacheMode=Microsoft.UI.Xaml.Navigation.NavigationCacheMode.Required;
}
protected override async void OnNavigatedTo(Microsoft.UI.Xaml.Navigation.NavigationEventArgs args)
{
base.OnNavigatedTo(args);
ViewModel.GameLogPageVisible=true;
ViewModel.PropertyChanged+=GameLogChanged;
await ViewModel.RefreshGameEventsAsync();
UpdateSelection();
}
protected override void OnNavigatedFrom(Microsoft.UI.Xaml.Navigation.NavigationEventArgs args)
{
ViewModel.GameLogPageVisible=false;
ViewModel.PropertyChanged-=GameLogChanged;
EventDetailsFlyout.Hide();
base.OnNavigatedFrom(args);
}
private void GameLogChanged(object? sender,PropertyChangedEventArgs args)
{
if(args.PropertyName==nameof(ViewModel.GameEventLogBusy)&&!ViewModel.GameEventLogBusy)UpdateSelection();
}
private void UpdateSelection()
{
if(GameLogList.SelectedItem is null)GameLogList.SelectedItem=ViewModel.GameEventRows.FirstOrDefault();
ViewModel.SelectGameEvent(GameLogList.SelectedItem as GameEventLiveRow);
EventDetailsEmptyText.Visibility=ViewModel.HasGameEventDetails?Visibility.Collapsed:Visibility.Visible;
GameLogEmptyText.Visibility=ViewModel.GameEventRows.Count==0&&!ViewModel.GameEventLogBusy?Visibility.Visible:Visibility.Collapsed;
}
private void GameLogSelectionChanged(object sender,SelectionChangedEventArgs args)
{
ViewModel.SelectGameEvent(GameLogList.SelectedItem as GameEventLiveRow);
EventDetailsEmptyText.Visibility=ViewModel.HasGameEventDetails?Visibility.Collapsed:Visibility.Visible;
}
private void OpenGameEvent(object sender,ItemClickEventArgs args)
{
if(args.ClickedItem is not GameEventLiveRow row)return;
GameLogList.SelectedItem=row;
if(!wideDetails)EventDetailsFlyout.ShowAt(GameDetailsButton);
}
private void LogPageSizeChanged(object sender,SizeChangedEventArgs args)
{
wideDetails=args.NewSize.Width>=1100;
EventDetailsColumn.Width=new(wideDetails?360:0);
EventWorkspace.ColumnSpacing=wideDetails?24:0;
EventDetailsPanel.Visibility=wideDetails?Visibility.Visible:Visibility.Collapsed;
GameDetailsButton.Visibility=wideDetails?Visibility.Collapsed:Visibility.Visible;
EventTypeColumn.Width=new(args.NewSize.Width<900?160:200);
EventSortColumn.Width=new(args.NewSize.Width<900?128:148);
CompactEventDetails.Width=Math.Clamp(args.NewSize.Width-96,240,420);
if(wideDetails)EventDetailsFlyout.Hide();
}
private void CopyEventJson(object sender,RoutedEventArgs args)
{
if(ViewModel.SelectedGameEventDetail is not {} details)return;
var package=new DataPackage();package.SetText(details.Json);Clipboard.SetContent(package);
}
}