UI - Fixed various rename dialogs cancelling instead of submitting when pressing enter

Submission wizard - Allow window to scroll when setting up layer adaption hints
Local web API - Added status endpoint to determine whether webserver is running
This commit is contained in:
Robert committed 2023-09-17 11:35:19 +02:00
1 parent d96581f11c
commit 8d5640aba3
11 files changed
+79 -51

No files matched your search

@@ -7,9 +7,6 @@
x:Class="Artemis.UI.Screens.ProfileEditor.ProfileTree.ContentDialogs.ProfileElementRenameView"
x:DataType="contentDialogs:ProfileElementRenameViewModel">
<StackPanel>
<StackPanel.KeyBindings>
<KeyBinding Gesture="Enter" Command="{CompiledBinding Enter}" />
</StackPanel.KeyBindings>
<TextBox Name="NameTextBox" Text="{CompiledBinding ProfileElementName}" Watermark="Profile element name" />
</StackPanel>
</UserControl>
@@ -22,7 +22,6 @@ public class ProfileElementRenameViewModel : ContentDialogViewModelBase
_profileElementName = profileElement.Name;
Confirm = ReactiveCommand.Create(ExecuteConfirm, ValidationContext.Valid);
Enter = ReactiveCommand.Create(() => ContentDialog?.Hide(ContentDialogResult.Primary), Confirm.CanExecute);
this.ValidationRule(vm => vm.ProfileElementName, name => !string.IsNullOrWhiteSpace(name), "You must specify a valid name");
}
@@ -33,7 +32,6 @@ public class ProfileElementRenameViewModel : ContentDialogViewModelBase
}
public ReactiveCommand<Unit, Unit> Enter { get; }
public ReactiveCommand<Unit, Unit> Confirm { get; }
private void ExecuteConfirm()
@@ -7,9 +7,6 @@
x:Class="Artemis.UI.Screens.ProfileEditor.Properties.Tree.ContentDialogs.LayerEffectRenameView"
x:DataType="contentDialogs:LayerEffectRenameViewModel">
<StackPanel>
<StackPanel.KeyBindings>
<KeyBinding Gesture="Enter" Command="{CompiledBinding Enter}" />
</StackPanel.KeyBindings>
<TextBox Name="NameTextBox" Text="{CompiledBinding LayerEffectName}" Watermark="Layer effect name" />
</StackPanel>
</UserControl>
@@ -22,7 +22,6 @@ public class LayerEffectRenameViewModel : ContentDialogViewModelBase
_layerEffectName = layerEffect.Name;
Confirm = ReactiveCommand.Create(ExecuteConfirm, ValidationContext.Valid);
Enter = ReactiveCommand.Create(() => ContentDialog?.Hide(ContentDialogResult.Primary), Confirm.CanExecute);
this.ValidationRule(vm => vm.LayerEffectName, categoryName => !string.IsNullOrWhiteSpace(categoryName), "You must specify a valid name");
}
@@ -33,7 +32,6 @@ public class LayerEffectRenameViewModel : ContentDialogViewModelBase
}
public ReactiveCommand<Unit, Unit> Confirm { get; }
public ReactiveCommand<Unit, Unit> Enter { get; }
private void ExecuteConfirm()
{
@@ -7,9 +7,6 @@
x:Class="Artemis.UI.Screens.Sidebar.SidebarCategoryEditView"
x:DataType="sidebar:SidebarCategoryEditViewModel">
<StackPanel>
<StackPanel.KeyBindings>
<KeyBinding Gesture="Enter" Command="{CompiledBinding Enter}" />
</StackPanel.KeyBindings>
<TextBox Text="{CompiledBinding CategoryName}" Watermark="Category name"/>
<TextBox Name="NameTextBox" Text="{CompiledBinding CategoryName}" Watermark="Category name"/>
</StackPanel>
</UserControl>
@@ -1,6 +1,7 @@
using System.Threading.Tasks;
using Artemis.UI.Shared.Extensions;
using Avalonia.Markup.Xaml;
using Avalonia.ReactiveUI;
using Avalonia.Threading;
using ReactiveUI;
namespace Artemis.UI.Screens.Sidebar;
@@ -10,7 +11,18 @@ public partial class SidebarCategoryEditView : ReactiveUserControl<SidebarCatego
public SidebarCategoryEditView()
{
InitializeComponent();
this.WhenActivated(_ => this.ClearAllDataValidationErrors());
this.WhenActivated(_ =>
{
this.ClearAllDataValidationErrors();
Dispatcher.UIThread.Post(DelayedAutoFocus);
});
}
private async void DelayedAutoFocus()
{
// Don't ask
await Task.Delay(200);
NameTextBox.SelectAll();
NameTextBox.Focus();
}
}
@@ -24,7 +24,6 @@ public class SidebarCategoryEditViewModel : ContentDialogViewModelBase
_categoryName = _category.Name;
Confirm = ReactiveCommand.Create(ExecuteConfirm, ValidationContext.Valid);
Enter = ReactiveCommand.Create(() => ContentDialog?.Hide(ContentDialogResult.Primary), Confirm.CanExecute);
this.ValidationRule(vm => vm.CategoryName, categoryName => !string.IsNullOrWhiteSpace(categoryName?.Trim()), "You must specify a valid name");
this.ValidationRule(vm => vm.CategoryName, categoryName => profileService.ProfileCategories.All(c => c.Name != categoryName?.Trim()), "You must specify a unique name");
}
@@ -36,7 +35,6 @@ public class SidebarCategoryEditViewModel : ContentDialogViewModelBase
}
public ReactiveCommand<Unit, Unit> Confirm { get; }
public ReactiveCommand<Unit, Unit> Enter { get; }
private void ExecuteConfirm()
{
@@ -31,37 +31,46 @@
Learn more about adaption hints
</controls:HyperlinkButton>
<ItemsRepeater ItemsSource="{CompiledBinding Layers}" Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" Margin="0 10 0 0">
<ItemsRepeater.ItemTemplate>
<DataTemplate DataType="profile:ProfileAdaptionHintsLayerViewModel">
<StackPanel>
<Border Classes="card-separator" />
<Grid ColumnDefinitions="Auto,*,Auto" RowDefinitions="*,*">
<avalonia:MaterialIcon Grid.Column="0"
Grid.Row="0"
Grid.RowSpan="2"
Width="25"
Height="25"
Margin="5 0 10 0"
Kind="{CompiledBinding Layer.LayerBrush.Descriptor.Icon, FallbackValue=QuestionMark}" />
<TextBlock Grid.Column="1" Grid.Row="0" Text="{CompiledBinding Layer.Name}" />
<TextBlock Grid.Column="1"
Grid.Row="1"
VerticalAlignment="Top"
Classes="subtitle"
Classes.danger="{CompiledBinding !AdaptionHintCount}"
Text="{CompiledBinding AdaptionHintText}">
</TextBlock>
<Button Grid.Column="2"
Grid.Row="0"
Grid.RowSpan="2"
Command="{Binding EditAdaptionHints}">
Edit hints
</Button>
</Grid>
</StackPanel>
</DataTemplate>
</ItemsRepeater.ItemTemplate>
</ItemsRepeater>
<ScrollViewer Grid.Row="2"
Grid.Column="0"
Grid.ColumnSpan="2"
Margin="0 10 0 0"
Classes="with-padding"
HorizontalScrollBarVisibility="Disabled"
VerticalScrollBarVisibility="Auto"
VerticalAlignment="Top">
<ItemsRepeater ItemsSource="{CompiledBinding Layers}">
<ItemsRepeater.ItemTemplate>
<DataTemplate DataType="profile:ProfileAdaptionHintsLayerViewModel">
<StackPanel>
<Border Classes="card-separator" />
<Grid ColumnDefinitions="Auto,*,Auto" RowDefinitions="*,*">
<avalonia:MaterialIcon Grid.Column="0"
Grid.Row="0"
Grid.RowSpan="2"
Width="25"
Height="25"
Margin="5 0 10 0"
Kind="{CompiledBinding Layer.LayerBrush.Descriptor.Icon, FallbackValue=QuestionMark}" />
<TextBlock Grid.Column="1" Grid.Row="0" Text="{CompiledBinding Layer.Name}" />
<TextBlock Grid.Column="1"
Grid.Row="1"
VerticalAlignment="Top"
Classes="subtitle"
Classes.danger="{CompiledBinding !AdaptionHintCount}"
Text="{CompiledBinding AdaptionHintText}">
</TextBlock>
<Button Grid.Column="2"
Grid.Row="0"
Grid.RowSpan="2"
Command="{Binding EditAdaptionHints}">
Edit hints
</Button>
</Grid>
</StackPanel>
</DataTemplate>
</ItemsRepeater.ItemTemplate>
</ItemsRepeater>
</ScrollViewer>
</Grid>
</UserControl>