2021-02-26 13:21:58 +02: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.
2023-09-11 13:54:06 +03:00
using System.Collections.Generic ;
2021-02-26 13:21:58 +02:00
using System.ComponentModel ;
2023-10-11 14:54:49 +02:00
using System.Globalization ;
2021-02-26 13:21:58 +02:00
using System.Runtime.CompilerServices ;
2022-10-26 14:02:31 +01:00
using Microsoft.PowerToys.Settings.UI.Library ;
2021-02-26 13:21:58 +02:00
2022-10-26 14:02:31 +01:00
namespace Microsoft.PowerToys.Settings.UI.ViewModels
2021-02-26 13:21:58 +02:00
{
public class PluginAdditionalOptionViewModel : INotifyPropertyChanged
{
private PluginAdditionalOption _additionalOption ;
internal PluginAdditionalOptionViewModel ( PluginAdditionalOption additionalOption )
{
_additionalOption = additionalOption ;
}
2023-09-20 19:31:40 +02:00
// Labels of single and first setting of combined types
2023-09-11 13:54:06 +03:00
public string DisplayLabel = > _additionalOption . DisplayLabel ;
2021-02-26 13:21:58 +02:00
2023-09-11 13:54:06 +03:00
public string DisplayDescription = > _additionalOption . DisplayDescription ;
2022-03-21 13:47:09 +01:00
2023-09-20 19:31:40 +02:00
// Labels of second setting of combined types
public string SecondDisplayLabel = > _additionalOption . SecondDisplayLabel ;
public string SecondDisplayDescription = > _additionalOption . SecondDisplayDescription ;
// Bool checkbox setting
public bool ShowCheckBox = > _additionalOption . PluginOptionType = = PluginAdditionalOption . AdditionalOptionType . Checkbox ;
2021-02-26 13:21:58 +02:00
public bool Value
{
get = > _additionalOption . Value ;
set
{
if ( value ! = _additionalOption . Value )
{
_additionalOption . Value = value ;
NotifyPropertyChanged ( ) ;
2023-09-20 19:31:40 +02:00
NotifyPropertyChanged ( nameof ( SecondSettingIsEnabled ) ) ;
2021-02-26 13:21:58 +02:00
}
}
}
2023-09-20 19:31:40 +02:00
// ComboBox setting
public bool ShowComboBox = > _additionalOption . PluginOptionType = = PluginAdditionalOption . AdditionalOptionType . Combobox & &
2023-10-11 14:54:49 +02:00
_additionalOption . ComboBoxItems ! = null & & _additionalOption . ComboBoxItems . Count > 0 ;
2023-09-20 19:31:40 +02:00
2023-10-11 14:54:49 +02:00
public List < KeyValuePair < string , string > > ComboBoxItems = > _additionalOption . ComboBoxItems ;
2023-09-11 13:54:06 +03:00
2023-10-11 14:54:49 +02:00
public string ComboBoxValue
2023-09-20 19:31:40 +02:00
{
2023-10-11 14:54:49 +02:00
get = > _additionalOption . ComboBoxValue . ToString ( CultureInfo . InvariantCulture ) ;
2023-09-20 19:31:40 +02:00
set
{
2023-10-11 14:54:49 +02:00
if ( int . Parse ( value , CultureInfo . InvariantCulture ) ! = _additionalOption . ComboBoxValue )
2023-09-20 19:31:40 +02:00
{
2023-10-11 14:54:49 +02:00
_additionalOption . ComboBoxValue = int . Parse ( value , CultureInfo . InvariantCulture ) ;
2023-09-20 19:31:40 +02:00
NotifyPropertyChanged ( ) ;
}
}
}
// TextBox setting
public bool ShowTextBox = > _additionalOption . PluginOptionType = = PluginAdditionalOption . AdditionalOptionType . Textbox ;
2023-10-04 11:11:40 +01:00
public int TextBoxMaxLength = > ( _additionalOption . TextBoxMaxLength = = null ) ? 0 : _additionalOption . TextBoxMaxLength . Value ; // 0 is the default and means no limit.
2023-09-20 19:31:40 +02:00
public string TextValue
2023-09-11 13:54:06 +03:00
{
2023-09-20 19:31:40 +02:00
get = > _additionalOption . TextValue ;
2023-09-11 13:54:06 +03:00
set
{
2023-09-20 19:31:40 +02:00
if ( value ! = _additionalOption . TextValue )
2023-09-11 13:54:06 +03:00
{
2023-09-20 19:31:40 +02:00
_additionalOption . TextValue = value ;
2023-09-11 13:54:06 +03:00
NotifyPropertyChanged ( ) ;
}
}
}
2024-03-14 06:19:02 +08:00
// MultilineTextBox setting
public bool ShowMultilineTextBox = > _additionalOption . PluginOptionType = = PluginAdditionalOption . AdditionalOptionType . MultilineTextbox ;
public string PlaceholderText = > _additionalOption . PlaceholderText ;
2023-09-20 19:31:40 +02:00
// NumberBox setting
public bool ShowNumberBox = > _additionalOption . PluginOptionType = = PluginAdditionalOption . AdditionalOptionType . Numberbox ;
public double NumberBoxMin = > ( _additionalOption . NumberBoxMin = = null ) ? double . MinValue : _additionalOption . NumberBoxMin . Value ;
public double NumberBoxMax = > ( _additionalOption . NumberBoxMax = = null ) ? double . MaxValue : _additionalOption . NumberBoxMax . Value ;
public double NumberBoxSmallChange = > ( _additionalOption . NumberBoxSmallChange = = null ) ? 1 : _additionalOption . NumberBoxSmallChange . Value ;
public double NumberBoxLargeChange = > ( _additionalOption . NumberBoxLargeChange = = null ) ? 10 : _additionalOption . NumberBoxLargeChange . Value ;
public double NumberValue
{
get = > _additionalOption . NumberValue ;
set
{
if ( value ! = _additionalOption . NumberValue )
{
_additionalOption . NumberValue = value ;
NotifyPropertyChanged ( ) ;
}
}
}
// Show combined settings cards
public bool ShowCheckboxAndCombobox = > _additionalOption . PluginOptionType = = PluginAdditionalOption . AdditionalOptionType . CheckboxAndCombobox ;
public bool ShowCheckboxAndTextbox = > _additionalOption . PluginOptionType = = PluginAdditionalOption . AdditionalOptionType . CheckboxAndTextbox ;
public bool ShowCheckboxAndNumberbox = > _additionalOption . PluginOptionType = = PluginAdditionalOption . AdditionalOptionType . CheckboxAndNumberbox ;
2023-09-11 13:54:06 +03:00
2023-09-20 19:31:40 +02:00
// Enabled state of ComboBox, TextBox, NumberBox (If combined with checkbox then checkbox value decides it.)
public bool SecondSettingIsEnabled = > ( int ) _additionalOption . PluginOptionType > 10 ? _additionalOption . Value : true ;
2023-09-11 13:54:06 +03:00
2023-09-20 19:31:40 +02:00
// Handle property changes
2021-02-26 13:21:58 +02:00
public event PropertyChangedEventHandler PropertyChanged ;
private void NotifyPropertyChanged ( [ CallerMemberName ] string propertyName = "" )
{
PropertyChanged ? . Invoke ( this , new PropertyChangedEventArgs ( propertyName ) ) ;
}
}
}