Files
PowerToys/src/settings-ui/Settings.UI/ViewModels/PluginAdditionalOptionViewModel.cs

134 lines
5.5 KiB
C#
Raw Normal View History

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.
using System.Collections.Generic;
2021-02-26 13:21:58 +02:00
using System.ComponentModel;
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;
}
// Labels of single and first setting of combined types
public string DisplayLabel => _additionalOption.DisplayLabel;
2021-02-26 13:21:58 +02:00
public string DisplayDescription => _additionalOption.DisplayDescription;
// 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();
NotifyPropertyChanged(nameof(SecondSettingIsEnabled));
2021-02-26 13:21:58 +02:00
}
}
}
// ComboBox setting
public bool ShowComboBox => _additionalOption.PluginOptionType == PluginAdditionalOption.AdditionalOptionType.Combobox &&
_additionalOption.ComboBoxItems != null && _additionalOption.ComboBoxItems.Count > 0;
public List<KeyValuePair<string, string>> ComboBoxItems => _additionalOption.ComboBoxItems;
public string ComboBoxValue
{
get => _additionalOption.ComboBoxValue.ToString(CultureInfo.InvariantCulture);
set
{
if (int.Parse(value, CultureInfo.InvariantCulture) != _additionalOption.ComboBoxValue)
{
_additionalOption.ComboBoxValue = int.Parse(value, CultureInfo.InvariantCulture);
NotifyPropertyChanged();
}
}
}
// TextBox setting
public bool ShowTextBox => _additionalOption.PluginOptionType == PluginAdditionalOption.AdditionalOptionType.Textbox;
public int TextBoxMaxLength => (_additionalOption.TextBoxMaxLength == null) ? 0 : _additionalOption.TextBoxMaxLength.Value; // 0 is the default and means no limit.
public string TextValue
{
get => _additionalOption.TextValue;
set
{
if (value != _additionalOption.TextValue)
{
_additionalOption.TextValue = value;
NotifyPropertyChanged();
}
}
}
// MultilineTextBox setting
public bool ShowMultilineTextBox => _additionalOption.PluginOptionType == PluginAdditionalOption.AdditionalOptionType.MultilineTextbox;
public string PlaceholderText => _additionalOption.PlaceholderText;
// 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;
// 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;
// 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));
}
}
}