2020-04-07 10:19:14 -07: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-29 14:24:16 -07:00
using System ;
using System.Diagnostics.CodeAnalysis ;
using System.Globalization ;
2020-10-26 11:06:35 -07:00
using System.Linq ;
2020-10-22 09:45:48 -07:00
using Microsoft.PowerToys.Settings.UI.Library ;
using Microsoft.PowerToys.Settings.UI.Library.Utilities ;
using Microsoft.PowerToys.Settings.UI.Library.ViewModels ;
2021-07-26 19:00:53 +02:00
using Windows.ApplicationModel.Resources ;
using Windows.UI.Popups ;
2020-08-18 13:43:58 -07:00
using Windows.UI.Xaml ;
2020-03-31 14:32:22 +02:00
using Windows.UI.Xaml.Controls ;
namespace Microsoft.PowerToys.Settings.UI.Views
{
public sealed partial class ImageResizerPage : Page
{
2020-08-18 13:43:58 -07:00
public ImageResizerViewModel ViewModel { get ; set ; }
2020-03-31 14:32:22 +02:00
public ImageResizerPage ( )
{
2020-04-10 15:22:07 -07:00
InitializeComponent ( ) ;
2020-11-02 18:33:43 +01:00
var settingsUtils = new SettingsUtils ( ) ;
2021-01-14 14:14:29 +02: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-17 11:01:46 -07:00
DataContext = ViewModel ;
2020-03-31 14:32:22 +02:00
}
2020-08-18 13:43:58 -07:00
2021-07-26 19:00:53 +02:00
public async void DeleteCustomSize ( object sender , RoutedEventArgs e )
2020-08-18 13:43:58 -07:00
{
2020-10-29 14:24:16 -07:00
Button deleteRowButton = ( Button ) sender ;
2021-07-26 19:00:53 +02:00
if ( deleteRowButton ! = null )
2020-08-18 13:43:58 -07:00
{
2021-07-26 19:00:53 +02: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-18 13:43:58 -07:00
}
}
2020-10-29 14:24:16 -07:00
[SuppressMessage("Design", "CA1031:Do not catch general exception types", Justification = "JSON exceptions from saving new settings should be caught and logged.")]
2020-08-18 13:43:58 -07:00
private void AddSizeButton_Click ( object sender , RoutedEventArgs e )
{
try
{
2021-09-22 00:55:42 +02:00
ViewModel . AddRow ( ResourceLoader . GetForCurrentView ( ) . GetString ( "ImageResizer_DefaultSize_NewSizePrefix" ) ) ;
2020-08-18 13:43:58 -07:00
}
2020-10-29 14:24:16 -07:00
catch ( Exception ex )
2020-08-18 13:43:58 -07:00
{
2020-10-29 14:24:16 -07:00
Logger . LogError ( "Exception encountered when adding a new image size." , ex ) ;
2020-08-18 13:43:58 -07:00
}
}
2020-10-26 11:06:35 -07:00
2020-10-29 14:24:16 -07:00
[SuppressMessage("Usage", "CA1801:Review unused parameters", Justification = "Params are required for event handler signature requirements.")]
2020-10-26 11:06:35 -07: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 14:32:22 +02:00
}
}