Multi-Platform Package Manager for Stable Diffusion
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.

259 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"
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>