Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Features/improve sep 2024 #101

Merged
merged 2 commits into from
Sep 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,10 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Controls.Documents;
using Avalonia.Input;
using Avalonia.Input.Platform;
using Avalonia.Media;
using Avalonia.Threading;
using CliWrap;
using DynamicData;
Expand Down Expand Up @@ -919,7 +921,25 @@ private static string[] SplitCommand(string command)
public record ExecutionLogAction(DateTime Timestamp, string Source, string Name, Dictionary<string, string> Parameters)
{
[JsonIgnore]
public string Description => $"{Timestamp:s} - [{string.Join(", ", Parameters.Select(x => $"{x.Key} = {x.Value}"))}]";
public InlineCollection ParametersDescription => new InlineCollection()
{
new Run("["),

Parameters.SelectMany((x,i) =>
{
var value = x.Value.StartsWith("!!vault:") ? "*****" : x.Value;
return new[]
{
new Run($"{x.Key} = "),
new Run(value)
{
Foreground = Brushes.LightGreen,
},
new Run( i< Parameters.Count -1?", ":"")
};
}),
new Run("]"),
};
};

public record RecentAction(ActionId ActionId, DateTime Timestamp);
Expand Down
192 changes: 123 additions & 69 deletions src/ScriptRunner/ScriptRunner.GUI/Views/ActionDetailsSection.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,77 +8,135 @@
xmlns:views="clr-namespace:ScriptRunner.GUI.Views"
xmlns:mdxaml="https://github.com/whistyun/Markdown.Avalonia.Tight"
xmlns:ctxt="clr-namespace:ColorTextBlock.Avalonia;assembly=ColorTextBlock.Avalonia"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
mc:Ignorable="d" d:DesignWidth="900" d:DesignHeight="450"
x:DataType="viewModels:MainWindowViewModel"
x:Class="ScriptRunner.GUI.Views.ActionDetailsSection">
<views:ContentWithSidebar IsSidebarOpen="True" SidebarPosition="Right" SidebarWidth="300" MainMinWidth="855">
<views:ContentWithSidebar.Main>
<ScrollViewer HorizontalAlignment="Stretch" >
<StackPanel Margin="20, 10" IsVisible="{Binding IsActionSelected, Mode=OneWay}">
<StackPanel Orientation="Vertical">
<ScrollViewer HorizontalAlignment="Stretch" >
<StackPanel Margin="20, 10" IsVisible="{Binding IsActionSelected, Mode=OneWay}">
<Expander HorizontalAlignment="Stretch">
<Expander.Styles>
<Style Selector="Expander /template/ ToggleButton">
<Setter Property="Background" Value="#1e1f22"/>
<Setter Property="Padding" Value="10,0,0,0" />
</Style>
</Expander.Styles>
<Expander.Header >
<StackPanel Orientation="Horizontal" >
<Button avalonia:Attached.Icon="fas fa-cog" Width="35" Height="35">

<StackPanel Orientation="Horizontal" Margin="7,0" >
<Label VerticalAlignment="Center">From: </Label>
<Button.Flyout>
<MenuFlyout Placement="BottomEdgeAlignedLeft" >
<MenuItem Header="Reinstall script" IsVisible="{Binding InstallAvailable}" Command="{Binding InstallScript}" />
<MenuItem Header="Reset default settings" Command="{Binding ResetDefaults}" />
<MenuItem Header="Open containing dir in VSCode" Command="{Binding OpenDirInVsCode}" />
<MenuItem Header="Open definition in VSCode" Command="{Binding OpenDefinitionInVsCode}" />
</MenuFlyout>
</Button.Flyout>
</Button>
<TextBlock Classes="h1" Margin="10" Text="{Binding SelectedAction.Name}" />
</StackPanel>
</Expander.Header>
<StackPanel>
<TextBlock IsVisible="{Binding SelectedAction.Description, Converter={x:Static StringConverters.IsNotNullOrEmpty}}" Margin="10, 0" Text="{Binding SelectedAction.Description}" TextWrapping="Wrap"/>
<StackPanel Orientation="Horizontal" Margin="7,0" >
<Label VerticalAlignment="Center">Loaded from: </Label>

<TextBlock Margin="10, 0" TextWrapping="Wrap" VerticalAlignment="Center">
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} [{1}]">
<Binding Path="SelectedAction.SourceName" />
<Binding Path="SelectedAction.Source" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
<TextBlock Margin="10, 0" TextWrapping="Wrap" VerticalAlignment="Center">
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} [{1}]">
<Binding Path="SelectedAction.SourceName" />
<Binding Path="SelectedAction.Source" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>

</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Classes="h1" Margin="10" Text="{Binding SelectedAction.Name}" />
<SplitButton avalonia:Attached.Icon="fas fa-cog" >
</StackPanel>
<SelectableTextBlock TextWrapping="Wrap" Classes="consoleOutput" Inlines="{Binding SelectedAction.CommandFormatted}" ></SelectableTextBlock>
</StackPanel>
</Expander>

<Button Margin="0,10,0,0" IsVisible="{Binding !SelectedActionInstalled}" Command="{Binding InstallScript}" HorizontalAlignment="Stretch" HorizontalContentAlignment="Center">Install</Button>

<StackPanel IsEnabled="{Binding SelectedActionInstalled}">
<StackPanel IsVisible="{Binding HasParams}">
<Border BorderThickness="1" BorderBrush="#4E4E4E" Background="#2B2B2B" Padding="25,5" Margin="0,10,0,0">
<Grid Margin="0,5,0,5" ColumnDefinitions="Auto,*,120" HorizontalAlignment="Stretch" VerticalAlignment="Top">

<TextBlock Classes="h2"
VerticalAlignment="Top"
Text="Predefined parameters: "
Margin="0,5,0,0"
Grid.Column="0"></TextBlock>
<ComboBox Margin="10,0,10,0"
Grid.Column="1"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"
ItemsSource="{Binding SelectedAction.PredefinedArgumentSets}"
SelectedItem="{Binding SelectedArgumentSet, Mode=TwoWay}"
>
<ComboBox.DataTemplates>
<DataTemplate x:DataType="scriptConfigs:ArgumentSet">
<TextBlock Text="{Binding Description}"></TextBlock>
</DataTemplate>
</ComboBox.DataTemplates>
</ComboBox>
<WrapPanel Grid.Column="2" ItemWidth="40" >
<Button
avalonia:Attached.Icon="fas fa-save"
Padding="0"
Margin="0"
Width="35"
Height="35"
ToolTip.Tip="Save current parameters as predefined set"
Click="SaveCurrentParametersAsPredefined"
VerticalAlignment="Center"
VerticalContentAlignment="Center"
HorizontalContentAlignment="Center" ></Button>
<Button
avalonia:Attached.Icon="fas fa-copy"
Padding="0"
Margin="0"
Width="35"
Height="35"
ToolTip.Tip="Copy current parameters to clipboard"
Command="{Binding CopyParametersSetup}"
VerticalAlignment="Center"
VerticalContentAlignment="Center"
HorizontalContentAlignment="Center" ></Button>
<Button
avalonia:Attached.Icon="fas fa-paste"
Padding="0"
Margin="0"
Width="35"
Height="35"
ToolTip.Tip="Paste parameters from clipboard"
Command="{Binding PasteParametersSetup}"
VerticalAlignment="Center"
VerticalContentAlignment="Center"
HorizontalContentAlignment="Center" ></Button>
</WrapPanel>

<SplitButton.Flyout>
<MenuFlyout Placement="Bottom">
<MenuItem Header="Save as defaults" Command="{Binding SaveAsDefault}" />
<MenuItem Header="Save as predefined" Click="SaveAsPredefined" />
<MenuItem Header="Copy current parameter setup" Command="{Binding CopyParametersSetup}" />
<MenuItem Header="Paste parameter setup" Command="{Binding PasteParametersSetup}" />
<MenuItem Header="Reinstall script" IsVisible="{Binding InstallAvailable}" Command="{Binding InstallScript}" />
<MenuItem Header="Reset default settings" Command="{Binding ResetDefaults}" />
<MenuItem Header="Open containing dir in VSCode" Command="{Binding OpenDirInVsCode}" />
<MenuItem Header="Open definition in VSCode" Command="{Binding OpenDefinitionInVsCode}" />
</MenuFlyout>
</SplitButton.Flyout>
</Grid>
</Border>
<Border BorderThickness="1" Background="#2B2B2B" BorderBrush="#4E4E4E" Padding="25,5" Margin="0,10,0,0">
<ItemsControl ItemsSource="{Binding ActionParametersPanel}">
<ItemsControl.Styles>
<Style Selector="ItemsPresenter">
<Setter Property="(KeyboardNavigation.TabNavigation)" Value="Continue" />
</Style>
</ItemsControl.Styles>
</ItemsControl>
</Border>
</StackPanel>
<DockPanel Margin="0, 20, 0 , 5" HorizontalAlignment="Stretch" >
<Button DockPanel.Dock="Right" HorizontalAlignment="Center" Width="200" HorizontalContentAlignment="Center" Command="{Binding RunScript}">Run</Button>
</DockPanel>
</StackPanel>
</StackPanel>

</SplitButton>
</StackPanel>
<TextBlock IsVisible="{Binding SelectedAction.Description, Converter={x:Static StringConverters.IsNotNullOrEmpty}}" Margin="10, 0" Text="{Binding SelectedAction.Description}" TextWrapping="Wrap"/>
<SelectableTextBlock TextWrapping="Wrap" Classes="consoleOutput" Text="{Binding CurrentRunOutputBuffered, Mode=OneWay}" Inlines="{Binding SelectedAction.CommandFormatted}" ></SelectableTextBlock>
<Button Margin="5,5,5,15" IsVisible="{Binding !SelectedActionInstalled}" Command="{Binding InstallScript}" HorizontalAlignment="Stretch" HorizontalContentAlignment="Center">Install</Button>
</StackPanel>
<StackPanel IsEnabled="{Binding SelectedActionInstalled}">
<StackPanel IsVisible="{Binding HasParams}">
<StackPanel Orientation="Horizontal" Margin="0,10,0,0">
<TextBlock Classes="h2" Text="Parameters: "></TextBlock>
<ComboBox Margin="20,0,0,5" ItemsSource="{Binding SelectedAction.PredefinedArgumentSets}" SelectedItem="{Binding SelectedArgumentSet, Mode=TwoWay}" MinWidth="200">
<ComboBox.DataTemplates>
<DataTemplate x:DataType="scriptConfigs:ArgumentSet">
<TextBlock Text="{Binding Description}"></TextBlock>
</DataTemplate>
</ComboBox.DataTemplates>
</ComboBox>
</StackPanel>
<ItemsControl ItemsSource="{Binding ActionParametersPanel}">
<ItemsControl.Styles>
<Style Selector="ItemsPresenter">
<Setter Property="(KeyboardNavigation.TabNavigation)" Value="Continue" />
</Style>
</ItemsControl.Styles>
</ItemsControl>
</StackPanel>
<DockPanel Margin="0, 20, 0 , 5" HorizontalAlignment="Stretch" >
<Button DockPanel.Dock="Right" HorizontalAlignment="Center" Width="100" HorizontalContentAlignment="Center" Command="{Binding RunScript}">Run</Button>
</DockPanel>
</StackPanel>
</StackPanel>
</ScrollViewer>
</ScrollViewer>
</views:ContentWithSidebar.Main>
<views:ContentWithSidebar.Sidebar>
<TabControl SelectedIndex="{}">
Expand Down Expand Up @@ -125,14 +183,10 @@


<DataTemplate x:DataType="viewModels:ExecutionLogAction">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>

<Grid ColumnDefinitions="Auto, *" RowDefinitions="Auto, *">
<avalonia:Icon Value="fas fa-clock" Margin="0,5,0,0" VerticalAlignment="Top"/>
<TextBlock Grid.Column="1" VerticalAlignment="Top" TextWrapping="Wrap" Margin="10,0" Text="{Binding Description}"></TextBlock>
<TextBlock Grid.Row="0" Grid.Column="1" VerticalAlignment="Top" TextWrapping="Wrap" Margin="10,0" Text="{Binding Timestamp, StringFormat={}{0:s}}"></TextBlock>
<SelectableTextBlock Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" Padding="0, 5" Inlines="{Binding ParametersDescription}" TextWrapping="Wrap"></SelectableTextBlock>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ private void InitializeComponent()
AvaloniaXamlLoader.Load(this);
}

public async void SaveAsPredefined(object? sender, RoutedEventArgs e)
public async void SaveCurrentParametersAsPredefined(object? sender, RoutedEventArgs e)
{
if (DataContext is MainWindowViewModel viewModel)
{
Expand Down Expand Up @@ -53,4 +53,16 @@ public async void SaveAsPredefined(object? sender, RoutedEventArgs e)
}
}
}

private void SplitButton_OnClick(object? sender, RoutedEventArgs e)
{
if(sender is Button {Flyout: {}} sp)
{
if(sp.Flyout.IsOpen)
{
sp.Flyout.Hide();
}
else sp.Flyout.ShowAt(sp);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="clr-namespace:ScriptRunner.GUI.Views"
mc:Ignorable="d" Width="500" Height="200"
mc:Ignorable="d" Width="500" Height="250"
x:Class="ScriptRunner.GUI.Views.PredefinedParameterSaveWindow"
Title="Save argument values as..."
WindowStartupLocation="CenterOwner"
Expand All @@ -17,12 +17,18 @@
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
</Grid.RowDefinitions>
<RadioButton IsChecked="{Binding UseNew}" Grid.Row="0" Grid.Column="0" GroupName="Source" VerticalAlignment="Center" Margin="20,10" >New:</RadioButton>
<RadioButton IsChecked="{Binding UseExisting}" Grid.Row="1" Grid.Column="0" GroupName="Source" VerticalAlignment="Center" Margin="20, 10">Existing set:</RadioButton>
<TextBox HorizontalAlignment="Stretch" IsEnabled="{Binding UseNew}" Text="{Binding NewName}" Margin="0,10" Grid.Row="0" Grid.Column="1" VerticalAlignment="Center"></TextBox>
<ComboBox HorizontalAlignment="Stretch" ItemsSource="{Binding ExistingSets}" SelectedItem="{Binding SelectedExisting}" IsEnabled="{Binding UseExisting}" Grid.Row="1" Grid.Column="1" VerticalAlignment="Center"></ComboBox>
<Button Click="Save" Margin="0,30" Grid.Row="2" Grid.ColumnSpan="2" HorizontalAlignment="Center" >Save</Button>

<RadioButton IsChecked="{Binding UseDefault}" Grid.Row="0" Grid.Column="0" GroupName="Source" VerticalAlignment="Center" Margin="20,10" >Default set</RadioButton>

<RadioButton IsChecked="{Binding UseNew}" Grid.Row="1" Grid.Column="0" GroupName="Source" VerticalAlignment="Center" Margin="20,10" >New set:</RadioButton>
<TextBox HorizontalAlignment="Stretch" IsEnabled="{Binding UseNew}" Text="{Binding NewName}" Margin="0,10" Grid.Row="1" Grid.Column="1" VerticalAlignment="Center"></TextBox>


<RadioButton IsChecked="{Binding UseExisting}" Grid.Row="2" Grid.Column="0" GroupName="Source" VerticalAlignment="Center" Margin="20, 10">Existing set:</RadioButton>
<ComboBox HorizontalAlignment="Stretch" ItemsSource="{Binding ExistingSets}" SelectedItem="{Binding SelectedExisting}" IsEnabled="{Binding UseExisting}" Grid.Row="2" Grid.Column="1" VerticalAlignment="Center"></ComboBox>
<Button Click="Save" Padding="30,10" Margin="0,30" Grid.Row="3" Grid.ColumnSpan="2" HorizontalAlignment="Center" >Save</Button>



Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using Avalonia.Controls;
using Avalonia.Interactivity;
using ReactiveUI;
using ScriptRunner.GUI.ViewModels;

namespace ScriptRunner.GUI.Views
{
Expand All @@ -16,12 +17,18 @@ public PredefinedParameterSaveWindow()

private void Save(object? sender, RoutedEventArgs e)
{
var name = ViewModel.UseNew ? ViewModel.NewName : ViewModel.SelectedExisting;
var name = ViewModel switch
{
{UseDefault: true} => MainWindowViewModel.DefaultParameterSetName,
{UseNew: true} => ViewModel.NewName,
{UseExisting: true} => ViewModel.SelectedExisting,
_ => null
};

if (string.IsNullOrWhiteSpace(name) == false)
{
Close(name);
}

}
}

Expand All @@ -30,6 +37,14 @@ public class SavePredefinedParameterVM:ReactiveObject
private bool _useNew;
private bool _useExisting;

private bool _useDefault;

public bool UseDefault
{
get => _useDefault;
set => this.RaiseAndSetIfChanged(ref _useDefault, value);
}

public bool UseNew
{
get => _useNew;
Expand Down
Loading