2020-04-08 01:19:14 +08:00
// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
2020-10-30 05:24:16 +08:00
using System ;
using System.Diagnostics.CodeAnalysis ;
using System.Globalization ;
2020-10-27 02:06:35 +08:00
using System.Linq ;
2020-10-23 00:45:48 +08:00
using Microsoft.PowerToys.Settings.UI.Library ;
using Microsoft.PowerToys.Settings.UI.Library.Utilities ;
using Microsoft.PowerToys.Settings.UI.Library.ViewModels ;
2021-07-27 01:00:53 +08:00
using Windows.ApplicationModel.Resources ;
using Windows.UI.Popups ;
2020-08-19 04:43:58 +08:00
using Windows.UI.Xaml ;
2020-03-31 20:32:22 +08:00
using Windows.UI.Xaml.Controls ;
namespace Microsoft.PowerToys.Settings.UI.Views
{
public sealed partial class ImageResizerPage : Page
{
2020-08-19 04:43:58 +08:00
public ImageResizerViewModel ViewModel { get ; set ; }
2020-03-31 20:32:22 +08:00
public ImageResizerPage ( )
{
2020-04-11 06:22:07 +08:00
InitializeComponent ( ) ;
2020-11-03 01:33:43 +08:00
var settingsUtils = new SettingsUtils ( ) ;
2021-01-14 20:14:29 +08:00
var resourceLoader = Windows . ApplicationModel . Resources . ResourceLoader . GetForCurrentView ( ) ;
Func < string , string > loader = ( string name ) = >
{
return resourceLoader . GetString ( name ) ;
} ;
ViewModel = new ImageResizerViewModel ( settingsUtils , SettingsRepository < GeneralSettings > . GetInstance ( settingsUtils ) , ShellPage . SendDefaultIPCMessage , loader ) ;
2020-07-18 02:01:46 +08:00
DataContext = ViewModel ;
2020-03-31 20:32:22 +08:00
}
2020-08-19 04:43:58 +08:00
2021-07-27 01:00:53 +08:00
public async void DeleteCustomSize ( object sender , RoutedEventArgs e )
2020-08-19 04:43:58 +08:00
{
2020-10-30 05:24:16 +08:00
Button deleteRowButton = ( Button ) sender ;
2021-07-27 01:00:53 +08:00
if ( deleteRowButton ! = null )
2020-08-19 04:43:58 +08:00
{
2021-07-27 01:00:53 +08:00
ImageSize x = ( ImageSize ) deleteRowButton . DataContext ;
ResourceLoader resourceLoader = ResourceLoader . GetForCurrentView ( ) ;
ContentDialog dialog = new ContentDialog ( ) ;
dialog . XamlRoot = RootPage . XamlRoot ;
dialog . Title = x . Name ;
dialog . PrimaryButtonText = resourceLoader . GetString ( "Yes" ) ;
dialog . CloseButtonText = resourceLoader . GetString ( "No" ) ;
dialog . DefaultButton = ContentDialogButton . Primary ;
dialog . Content = new TextBlock ( ) { Text = resourceLoader . GetString ( "Delete_Dialog_Description" ) } ;
dialog . PrimaryButtonClick + = ( s , args ) = >
{
// Using InvariantCulture since this is internal and expected to be numerical
bool success = int . TryParse ( deleteRowButton ? . CommandParameter ? . ToString ( ) , NumberStyles . Integer , CultureInfo . InvariantCulture , out int rowNum ) ;
if ( success )
{
ViewModel . DeleteImageSize ( rowNum ) ;
}
else
{
Logger . LogError ( "Failed to delete custom image size." ) ;
}
} ;
var result = await dialog . ShowAsync ( ) ;
2020-08-19 04:43:58 +08:00
}
}
2020-10-30 05:24:16 +08:00
[SuppressMessage("Design", "CA1031:Do not catch general exception types", Justification = "JSON exceptions from saving new settings should be caught and logged.")]
2020-08-19 04:43:58 +08:00
private void AddSizeButton_Click ( object sender , RoutedEventArgs e )
{
try
{
2021-09-22 06:55:42 +08:00
ViewModel . AddRow ( ResourceLoader . GetForCurrentView ( ) . GetString ( "ImageResizer_DefaultSize_NewSizePrefix" ) ) ;
2020-08-19 04:43:58 +08:00
}
2020-10-30 05:24:16 +08:00
catch ( Exception ex )
2020-08-19 04:43:58 +08:00
{
2020-10-30 05:24:16 +08:00
Logger . LogError ( "Exception encountered when adding a new image size." , ex ) ;
2020-08-19 04:43:58 +08:00
}
}
2020-10-27 02:06:35 +08:00
2020-10-30 05:24:16 +08:00
[SuppressMessage("Usage", "CA1801:Review unused parameters", Justification = "Params are required for event handler signature requirements.")]
2020-10-27 02:06:35 +08:00
private void ImagesSizesListView_ContainerContentChanging ( ListViewBase sender , ContainerContentChangingEventArgs args )
{
if ( ViewModel . IsListViewFocusRequested )
{
// Set focus to the last item in the ListView
int size = ImagesSizesListView . Items . Count ;
( ( ListViewItem ) ImagesSizesListView . ContainerFromIndex ( size - 1 ) ) . Focus ( FocusState . Programmatic ) ;
// Reset the focus requested flag
ViewModel . IsListViewFocusRequested = false ;
}
}
2020-03-31 20:32:22 +08:00
}
}