Add default variable

This commit is contained in:
Stefan Markovic
2023-09-27 11:16:44 +02:00
parent c703b72162
commit 021d01769b
4 changed files with 155 additions and 7 deletions

View File

@@ -194,7 +194,20 @@
Header="{x:Bind ViewModel.UserDefaultSet.Name}"
HeaderIcon="{ui:FontIcon Glyph=}"
ItemTemplate="{StaticResource VariableTemplate}"
ItemsSource="{x:Bind ViewModel.UserDefaultSet.Variables, Mode=OneWay}" />
ItemsSource="{x:Bind ViewModel.UserDefaultSet.Variables, Mode=OneWay}">
<StackPanel Orientation="Horizontal">
<Button
x:Name="AddDefaultVariableUserBtn"
x:Uid="AddDefaultVariableUserBtn"
Width="40"
Height="36"
Click="AddDefaultVariableBtn_Click"
CommandParameter="{x:Bind ViewModel.UserDefaultSet}"
Content="&#xe710;"
FontFamily="{ThemeResource SymbolThemeFontFamily}"
Style="{StaticResource SubtleButtonStyle}" />
</StackPanel>
</controls:SettingsExpander>
<controls:SettingsExpander
Header="{x:Bind ViewModel.SystemDefaultSet.Name}"
@@ -211,6 +224,19 @@
<TextBlock x:Uid="EditSystemDefaultSetInfoBar" />
</StackPanel>
</controls:SettingsExpander.Description>
<StackPanel Orientation="Horizontal">
<Button
x:Name="AddDefaultVariableSystemBtn"
x:Uid="AddDefaultVariableSystemBtn"
Width="40"
Height="36"
Click="AddDefaultVariableBtn_Click"
CommandParameter="{x:Bind ViewModel.SystemDefaultSet}"
Content="&#xe710;"
FontFamily="{ThemeResource SymbolThemeFontFamily}"
IsEnabled="{x:Bind ViewModel.IsElevated}"
Style="{StaticResource SubtleButtonStyle}" />
</StackPanel>
</controls:SettingsExpander>
</StackPanel>
</ScrollViewer>
@@ -289,6 +315,39 @@
</Grid>
</Grid>
<ContentDialog
x:Name="AddDefaultVariableDialog"
x:Uid="AddDefaultVariableDialog"
IsPrimaryButtonEnabled="{Binding Valid, Mode=OneWay}"
IsSecondaryButtonEnabled="True"
PrimaryButtonStyle="{StaticResource AccentButtonStyle}">
<ContentDialog.DataContext>
<models:Variable />
</ContentDialog.DataContext>
<ScrollViewer>
<StackPanel
MinWidth="320"
HorizontalAlignment="Stretch"
Spacing="12">
<TextBox
x:Uid="AddDefaultVariableNameTxtBox"
IsSpellCheckEnabled="False"
Text="{Binding Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
<TextBox
x:Uid="AddDefaultVariableValueTxtBox"
AcceptsReturn="False"
IsSpellCheckEnabled="False"
ScrollViewer.IsVerticalRailEnabled="True"
ScrollViewer.VerticalScrollBarVisibility="Visible"
ScrollViewer.VerticalScrollMode="Enabled"
Text="{Binding Values, Mode=TwoWay}"
TextWrapping="Wrap" />
</StackPanel>
</ScrollViewer>
</ContentDialog>
<ContentDialog
x:Name="EditVariableDialog"
x:Uid="EditVariableDialog"
@@ -304,9 +363,11 @@
HorizontalAlignment="Stretch"
Spacing="12">
<TextBox
x:Name="EditVariableDialogNameTxtBox"
x:Uid="NameTxtBox"
IsSpellCheckEnabled="False"
Text="{Binding Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
Text="{Binding Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
TextChanged="EditVariableDialogNameTxtBox_TextChanged" />
<TextBox
x:Uid="ValueTxtBox"
AcceptsReturn="False"

View File

@@ -3,6 +3,7 @@
// See the LICENSE file in the project root for more information.
using System;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Input;
using CommunityToolkit.Mvvm.Input;
@@ -28,6 +29,8 @@ namespace EnvironmentVariables.Views
public ICommand AddVariableCommand => new RelayCommand(AddVariable);
public ICommand AddDefaultVariableCommand => new RelayCommand<DefaultVariablesSet>(AddDefaultVariable);
public MainPage()
{
this.InitializeComponent();
@@ -131,8 +134,11 @@ namespace EnvironmentVariables.Views
{
foreach (Variable variable in ExistingVariablesListView.SelectedItems)
{
var clone = variable.Clone(true);
profile.Variables.Add(clone);
if (!profile.Variables.Where(x => x.Name == variable.Name).Any())
{
var clone = variable.Clone(true);
profile.Variables.Add(clone);
}
}
}
}
@@ -143,6 +149,14 @@ namespace EnvironmentVariables.Views
AddVariableFlyout.Hide();
}
private void AddDefaultVariable(DefaultVariablesSet set)
{
var variable = AddDefaultVariableDialog.DataContext as Variable;
var type = set.Type;
ViewModel.AddDefaultVariable(variable, type);
}
private async void Delete_Variable_Click(object sender, Microsoft.UI.Xaml.RoutedEventArgs e)
{
MenuFlyoutItem menuItem = sender as MenuFlyoutItem;
@@ -170,15 +184,17 @@ namespace EnvironmentVariables.Views
private void AddNewVariableName_TextChanged(object sender, TextChangedEventArgs e)
{
TextBox nameTxtBox = sender as TextBox;
var profile = AddProfileDialog.DataContext as ProfileVariablesSet;
if (nameTxtBox != null)
{
if (nameTxtBox.Text.Length > 0)
if (nameTxtBox.Text.Length == 0 || profile.Variables.Where(x => x.Name == nameTxtBox.Text).Any())
{
ConfirmAddVariableBtn.IsEnabled = true;
ConfirmAddVariableBtn.IsEnabled = false;
}
else
{
ConfirmAddVariableBtn.IsEnabled = false;
ConfirmAddVariableBtn.IsEnabled = true;
}
}
}
@@ -260,5 +276,57 @@ namespace EnvironmentVariables.Views
}
}
}
private async Task ShowAddDefaultVariableDialogAsync(DefaultVariablesSet set)
{
var resourceLoader = Helpers.ResourceLoaderInstance.ResourceLoader;
AddDefaultVariableDialog.Title = resourceLoader.GetString("AddVariable_Title");
AddDefaultVariableDialog.PrimaryButtonText = resourceLoader.GetString("SaveBtn");
AddDefaultVariableDialog.SecondaryButtonText = resourceLoader.GetString("CancelBtn");
AddDefaultVariableDialog.PrimaryButtonCommand = AddDefaultVariableCommand;
AddDefaultVariableDialog.PrimaryButtonCommandParameter = set;
var variableType = set.Id == VariablesSet.SystemGuid ? VariablesSetType.System : VariablesSetType.User;
AddDefaultVariableDialog.DataContext = new Variable(string.Empty, string.Empty, variableType);
await AddDefaultVariableDialog.ShowAsync();
}
private async void AddDefaultVariableBtn_Click(object sender, Microsoft.UI.Xaml.RoutedEventArgs e)
{
var button = sender as Button;
var defaultVariableSet = button.CommandParameter as DefaultVariablesSet;
if (defaultVariableSet != null)
{
await ShowAddDefaultVariableDialogAsync(defaultVariableSet);
}
}
private void EditVariableDialogNameTxtBox_TextChanged(object sender, TextChangedEventArgs e)
{
var variable = EditVariableDialog.DataContext as Variable;
var settingsCard = EditVariableDialog.PrimaryButtonCommandParameter as SettingsCard;
var variableSet = settingsCard.DataContext as VariablesSet;
if (variableSet == null)
{
// default set
variableSet = variable.ParentType == VariablesSetType.User ? ViewModel.UserDefaultSet : ViewModel.SystemDefaultSet;
}
if (variableSet != null)
{
if (variableSet.Variables.Where(x => x.Name == EditVariableDialogNameTxtBox.Text).Any() || !variable.Valid)
{
EditVariableDialog.IsPrimaryButtonEnabled = false;
}
else
{
EditVariableDialog.IsPrimaryButtonEnabled = true;
}
}
}
}
}

View File

@@ -230,6 +230,9 @@
<data name="StateNotUpToDateEnvironmentMessageReceivedMsg" xml:space="preserve">
<value>Variables have been modified. Reload to get the latest changes.</value>
</data>
<data name="AddVariable_Title" xml:space="preserve">
<value>Add variable</value>
</data>
<data name="Delete_Variable_Description" xml:space="preserve">
<value>Are you sure you want to delete this variable?</value>
</data>

View File

@@ -136,6 +136,22 @@ namespace EnvironmentVariables.ViewModels
AppliedVariables = new ObservableCollection<Variable>(variables);
}
internal void AddDefaultVariable(Variable variable, VariablesSetType type)
{
if (type == VariablesSetType.User)
{
UserDefaultSet.Variables.Add(variable);
UserDefaultSet.Variables = new ObservableCollection<Variable>(UserDefaultSet.Variables.OrderBy(x => x.Name).ToList());
}
else if (type == VariablesSetType.System)
{
SystemDefaultSet.Variables.Add(variable);
SystemDefaultSet.Variables = new ObservableCollection<Variable>(SystemDefaultSet.Variables.OrderBy(x => x.Name).ToList());
}
EnvironmentVariablesHelper.SetVariable(variable);
}
internal void EditVariable(Variable original, Variable edited, ProfileVariablesSet variablesSet)
{
bool propagateChange = variablesSet == null /* not a profile */ || variablesSet.Id.Equals(AppliedProfile?.Id);