You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
260 lines
13 KiB
260 lines
13 KiB
<controls:UserControlBase |
|
x:Class="StabilityMatrix.Avalonia.Views.Inference.InferenceImageToImageView" |
|
xmlns="https://github.com/avaloniaui" |
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
|
xmlns:controls="clr-namespace:StabilityMatrix.Avalonia.Controls" |
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" |
|
xmlns:dock="clr-namespace:StabilityMatrix.Avalonia.Controls.Dock" |
|
xmlns:icons="clr-namespace:Projektanker.Icons.Avalonia;assembly=Projektanker.Icons.Avalonia" |
|
xmlns:inference="clr-namespace:StabilityMatrix.Avalonia.ViewModels.Inference" |
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" |
|
xmlns:mocks="clr-namespace:StabilityMatrix.Avalonia.DesignData" |
|
xmlns:modelsInference="clr-namespace:StabilityMatrix.Avalonia.Models.Inference" |
|
xmlns:system="clr-namespace:System;assembly=System.Runtime" |
|
xmlns:ui="using:FluentAvalonia.UI.Controls" |
|
xmlns:vm="clr-namespace:StabilityMatrix.Avalonia.ViewModels" |
|
xmlns:vmInference="using:StabilityMatrix.Avalonia.ViewModels.Inference" |
|
d:DataContext="{x:Static mocks:DesignData.InferenceImageToImageViewModel}" |
|
d:DesignHeight="800" |
|
d:DesignWidth="1000" |
|
x:DataType="inference:InferenceImageToImageViewModel" |
|
Focusable="True" |
|
mc:Ignorable="d"> |
|
|
|
<Grid Margin="2,0,2,8"> |
|
<DockControl |
|
x:Name="Dock" |
|
InitializeFactory="True" |
|
InitializeLayout="True"> |
|
<DockControl.Factory> |
|
<Factory /> |
|
</DockControl.Factory> |
|
|
|
<RootDock |
|
x:Name="Root" |
|
DefaultDockable="{Binding #MainLayout}" |
|
Id="Root" |
|
IsCollapsable="False"> |
|
|
|
<ProportionalDock |
|
x:Name="MainLayout" |
|
Id="MainLayout" |
|
Orientation="Horizontal"> |
|
|
|
<!-- Left Pane --> |
|
<ToolDock |
|
x:Name="ConfigPane" |
|
Alignment="Left" |
|
Id="ConfigPane" |
|
Proportion="0.2"> |
|
<Tool |
|
x:Name="ConfigTool" |
|
Title="Config" |
|
x:DataType="Tool" |
|
CanClose="False" |
|
Id="ConfigTool"> |
|
<controls:StackCard DataContext="{ReflectionBinding ElementName=Dock, Path=DataContext.StackCardViewModel}" Opacity="1" /> |
|
</Tool> |
|
</ToolDock> |
|
|
|
<ProportionalDockSplitter x:Name="Splitter1" Id="Splitter1" /> |
|
|
|
<!-- Prompt Pane --> |
|
<ProportionalDock |
|
x:Name="CenterProportionalDock" |
|
Id="CenterProportionalDock" |
|
Orientation="Vertical"> |
|
|
|
<!-- Center Top (Image) --> |
|
|
|
<ToolDock |
|
x:Name="ImagePane" |
|
Alignment="Left" |
|
Id="ImagePane" |
|
Proportion="0.25"> |
|
<Tool |
|
x:Name="ImageTool" |
|
Title="Image" |
|
x:DataType="Tool" |
|
CanClose="False" |
|
Id="ImageTool"> |
|
|
|
<!-- Prompt and buttons --> |
|
<Grid |
|
x:CompileBindings="False" |
|
DataContext="{Binding ElementName=Dock, Path=DataContext}" |
|
Opacity="1" |
|
RowDefinitions="*"> |
|
<!-- Prompt card --> |
|
<controls:SelectImageCard |
|
x:CompileBindings="False" |
|
DataContext="{Binding SelectImageCardViewModel}" /> |
|
</Grid> |
|
|
|
</Tool> |
|
</ToolDock> |
|
|
|
<ProportionalDockSplitter /> |
|
|
|
<!-- Center Bottom (Prompt) --> |
|
<ToolDock |
|
x:Name="PromptPane" |
|
Alignment="Left" |
|
Id="PromptPane" |
|
Proportion="0.25"> |
|
<Tool |
|
x:Name="PromptTool" |
|
Title="Prompt" |
|
x:DataType="Tool" |
|
CanClose="False" |
|
Id="PromptTool"> |
|
|
|
<!-- Prompt and buttons --> |
|
<Grid |
|
x:CompileBindings="False" |
|
DataContext="{Binding ElementName=Dock, Path=DataContext}" |
|
Opacity="1" |
|
RowDefinitions="*,Auto,Auto"> |
|
<!-- Prompt card --> |
|
<controls:PromptCard DataContext="{Binding PromptCardViewModel}" /> |
|
|
|
<!-- Generate Buttons --> |
|
<StackPanel Grid.Row="2" Margin="0,6,0,0"> |
|
<controls:Card Padding="8"> |
|
<Grid |
|
HorizontalAlignment="Center" |
|
ColumnDefinitions="Auto,*,Auto" |
|
RowDefinitions="Auto,*"> |
|
<Grid.Styles> |
|
<Style Selector="Button"> |
|
<Setter Property="MinHeight" Value="32" /> |
|
</Style> |
|
</Grid.Styles> |
|
<Button |
|
Grid.Row="1" |
|
Margin="4,0" |
|
Padding="12,8" |
|
HorizontalAlignment="Left" |
|
icons:Attached.Icon="fa-solid fa-magnifying-glass-plus" |
|
Classes="transparent" |
|
Command="{Binding GenerateImageCommand}" |
|
CommandParameter="{x:Static modelsInference:GenerateFlags.HiresFixAndUseCurrentSeed}" |
|
ToolTip.Tip="Generate with Hires Scaling" /> |
|
|
|
<!-- Main Generate Button --> |
|
<Button |
|
x:Name="GenerateButton" |
|
Grid.Row="1" |
|
Grid.Column="1" |
|
Width="130" |
|
HorizontalAlignment="Stretch" |
|
Classes="accent" |
|
ToolTip.Tip="{Binding $self.HotKey}" |
|
HotKey="Ctrl+Enter" |
|
Command="{Binding GenerateImageCommand}" |
|
CommandParameter="{x:Static modelsInference:GenerateFlags.None}" |
|
IsVisible="{Binding !GenerateImageCommand.CanBeCanceled}"> |
|
<Panel> |
|
<TextBlock IsVisible="{Binding #GenerateButton.IsEnabled}" Text="Generate Image" /> |
|
<controls:ProgressRing IsIndeterminate="True" IsVisible="{Binding !#GenerateButton.IsEnabled}" /> |
|
</Panel> |
|
</Button> |
|
<!-- Cancel Button --> |
|
<Button |
|
x:Name="CancelButton" |
|
Grid.Row="1" |
|
Grid.Column="1" |
|
Width="130" |
|
HorizontalAlignment="Stretch" |
|
icons:Attached.Icon="fa-solid fa-stop" |
|
Command="{Binding GenerateImageCancelCommand}" |
|
IsVisible="{Binding GenerateImageCommand.CanBeCanceled}" /> |
|
|
|
<Button |
|
Grid.Row="1" |
|
Grid.Column="2" |
|
Margin="4,0" |
|
Padding="12,8" |
|
HorizontalAlignment="Left" |
|
icons:Attached.Icon="fa-solid fa-repeat" |
|
Classes="transparent" |
|
Command="{Binding GenerateImageCommand}" |
|
CommandParameter="{x:Static modelsInference:GenerateFlags.UseCurrentSeed}" |
|
ToolTip.Tip="Generate with current seed" /> |
|
</Grid> |
|
</controls:Card> |
|
</StackPanel> |
|
</Grid> |
|
|
|
</Tool> |
|
</ToolDock> |
|
|
|
</ProportionalDock> |
|
|
|
|
|
<ProportionalDockSplitter x:Name="Splitter2" Id="Splitter2" /> |
|
|
|
<!-- Middle Right Pane --> |
|
<ToolDock |
|
x:Name="ImageGalleryPane" |
|
Alignment="Right" |
|
Id="ImageGalleryPane" |
|
Proportion="0.35"> |
|
<Tool |
|
x:Name="ImageGalleryTool" |
|
Title="Image Output" |
|
x:DataType="Tool" |
|
CanClose="False" |
|
Id="ImageGalleryTool"> |
|
|
|
<Grid x:CompileBindings="False" DataContext="{Binding ElementName=Dock, Path=DataContext}"> |
|
<controls:ImageGalleryCard Grid.Row="0" DataContext="{Binding ImageGalleryCardViewModel}" /> |
|
|
|
<StackPanel |
|
Margin="2,1,2,4" |
|
VerticalAlignment="Top" |
|
DataContext="{Binding OutputProgress}" |
|
Spacing="4"> |
|
<ProgressBar |
|
IsIndeterminate="{Binding IsIndeterminate}" |
|
IsVisible="{Binding IsProgressVisible}" |
|
Maximum="{Binding Maximum}" |
|
Value="{Binding Value}" /> |
|
|
|
<TextBlock |
|
Margin="0,10,0,0" |
|
IsVisible="{Binding IsTextVisible}" |
|
Text="{Binding Text}" |
|
TextAlignment="Center" /> |
|
</StackPanel> |
|
</Grid> |
|
</Tool> |
|
</ToolDock> |
|
|
|
<ProportionalDockSplitter x:Name="Splitter3" Id="Splitter3" /> |
|
|
|
<!-- Right Pane --> |
|
<ToolDock |
|
x:Name="ImageFolderPane" |
|
Alignment="Right" |
|
Id="ImageFolderPane" |
|
Proportion="0.1"> |
|
<Tool |
|
x:Name="ImageFolderTool" |
|
Title="Gallery" |
|
x:DataType="Tool" |
|
CanClose="False" |
|
Id="ImageFolderTool"> |
|
|
|
<Grid x:CompileBindings="False" DataContext="{Binding ElementName=Dock, Path=DataContext}"> |
|
<controls:ImageFolderCard DataContext="{Binding ImageFolderCardViewModel}" /> |
|
</Grid> |
|
</Tool> |
|
</ToolDock> |
|
|
|
</ProportionalDock> |
|
</RootDock> |
|
|
|
</DockControl> |
|
</Grid> |
|
</controls:UserControlBase>
|
|
|