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
14 KiB
259 lines
14 KiB
<controls:UserControlBase |
|
x:Class="StabilityMatrix.Avalonia.Views.InferencePage" |
|
xmlns="https://github.com/avaloniaui" |
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
|
xmlns:controls="clr-namespace:StabilityMatrix.Avalonia.Controls" |
|
xmlns:converters="clr-namespace:StabilityMatrix.Avalonia.Converters" |
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" |
|
xmlns:fluentIcons="using:FluentIcons.Avalonia.Fluent" |
|
xmlns:icons="clr-namespace:Projektanker.Icons.Avalonia;assembly=Projektanker.Icons.Avalonia" |
|
xmlns:lang="clr-namespace:StabilityMatrix.Avalonia.Languages" |
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" |
|
xmlns:mocks="clr-namespace:StabilityMatrix.Avalonia.DesignData" |
|
xmlns:ui="using:FluentAvalonia.UI.Controls" |
|
xmlns:vm="clr-namespace:StabilityMatrix.Avalonia.ViewModels" |
|
xmlns:vmInference="using:StabilityMatrix.Avalonia.ViewModels.Inference" |
|
xmlns:base="clr-namespace:StabilityMatrix.Avalonia.ViewModels.Base" |
|
xmlns:models="clr-namespace:StabilityMatrix.Avalonia.Models" |
|
d:DataContext="{x:Static mocks:DesignData.InferenceViewModel}" |
|
d:DesignHeight="650" |
|
d:DesignWidth="1000" |
|
x:DataType="vm:InferenceViewModel" |
|
mc:Ignorable="d"> |
|
|
|
<controls:UserControlBase.KeyBindings> |
|
<KeyBinding Gesture="Ctrl+O" Command="{Binding MenuOpenProjectCommand}"/> |
|
<KeyBinding Gesture="Ctrl+S" Command="{Binding MenuSaveCommand}"/> |
|
<KeyBinding Gesture="Ctrl+Shift+S" Command="{Binding MenuSaveAsCommand}"/> |
|
</controls:UserControlBase.KeyBindings> |
|
|
|
<controls:UserControlBase.Resources> |
|
<converters:UriStringConverter x:Key="UriStringConverter" /> |
|
<ui:CommandBarFlyout x:Key="AddTabFlyout" Placement="Right"> |
|
<!-- Note: unlike a regular CommandBar, primary items can be set as the xml content and don't need |
|
to be wrapped in a <ui:CommandBarFlyout.PrimaryCommands> tag |
|
--> |
|
<!--<ui:CommandBarButton Label="Text to Image" ToolTip.Tip="Text to Image"> |
|
<ui:CommandBarButton.IconSource> |
|
<controls:FASymbolIconSource Symbol="fa-solid fa-bolt"/> |
|
</ui:CommandBarButton.IconSource> |
|
</ui:CommandBarButton> |
|
<ui:CommandBarButton Label="Save" ToolTip.Tip="Save" /> |
|
<ui:CommandBarButton Label="Delete" ToolTip.Tip="Delete" />--> |
|
<ui:CommandBarFlyout.SecondaryCommands> |
|
<ui:CommandBarButton |
|
Click="AddTabMenu_OnClick" |
|
Tag="{x:Static models:InferenceProjectType.TextToImage}" |
|
IconSource="FullScreenMaximize" |
|
Label="Text to Image" |
|
ToolTip.Tip="Text to Image" /> |
|
<ui:CommandBarButton |
|
Click="AddTabMenu_OnClick" |
|
Tag="{x:Static models:InferenceProjectType.ImageToImage}" |
|
IconSource="ImageCopy" |
|
Label="Image to Image" |
|
ToolTip.Tip="Image to Image" /> |
|
<ui:CommandBarButton |
|
IconSource="ImageEdit" |
|
IsEnabled="False" |
|
IsVisible="False" |
|
Label="Inpaint" |
|
ToolTip.Tip="Not yet implemented, coming soon!" /> |
|
<ui:CommandBarButton |
|
Click="AddTabMenu_OnClick" |
|
Tag="{x:Static models:InferenceProjectType.Upscale}" |
|
Label="Upscale" |
|
ToolTip.Tip="Upscale"> |
|
<ui:CommandBarButton.IconSource> |
|
<fluentIcons:SymbolIconSource |
|
FontSize="10" |
|
Symbol="ResizeImage"/> |
|
</ui:CommandBarButton.IconSource> |
|
</ui:CommandBarButton> |
|
<ui:CommandBarButton |
|
Click="AddTabMenu_ImgToVideo_OnClick" |
|
Label="Image to Video" |
|
ToolTip.Tip="Image to Video"> |
|
<ui:CommandBarButton.IconSource> |
|
<fluentIcons:SymbolIconSource |
|
FontSize="10" |
|
Symbol="Video"/> |
|
</ui:CommandBarButton.IconSource> |
|
</ui:CommandBarButton> |
|
</ui:CommandBarFlyout.SecondaryCommands> |
|
</ui:CommandBarFlyout> |
|
</controls:UserControlBase.Resources> |
|
|
|
<Grid> |
|
<ui:TabView |
|
x:Name="TabView" |
|
HorizontalAlignment="Stretch" |
|
VerticalAlignment="Stretch" |
|
AddTabButtonClick="TabView_OnAddTabButtonClick" |
|
CanDragTabs="True" |
|
CanReorderTabs="True" |
|
CloseButtonOverlayMode="Auto" |
|
SelectedIndex="{Binding SelectedTabIndex}" |
|
SelectedItem="{Binding SelectedTab}" |
|
TabCloseRequested="TabView_OnTabCloseRequested" |
|
TabItems="{Binding Tabs}" |
|
TabWidthMode="SizeToContent"> |
|
<ui:TabView.TabItemTemplate> |
|
<DataTemplate DataType="{x:Type base:InferenceTabViewModelBase}"> |
|
<ui:TabViewItem |
|
Content="{Binding FallbackValue=''}" |
|
Header="{Binding TabTitle}" |
|
IconSource="Document" /> |
|
</DataTemplate> |
|
</ui:TabView.TabItemTemplate> |
|
<ui:TabView.TabStripFooter> |
|
<StackPanel |
|
HorizontalAlignment="Right" |
|
Orientation="Horizontal" |
|
Spacing="2"> |
|
|
|
<!-- Connecting Progress --> |
|
<controls:ProgressRing |
|
Margin="0,0,4,0" |
|
BorderThickness="4" |
|
IsIndeterminate="True"> |
|
<controls:ProgressRing.IsVisible> |
|
<MultiBinding Converter="{x:Static BoolConverters.Or}"> |
|
<Binding Path="ClientManager.IsConnecting" /> |
|
<Binding Path="IsWaitingForConnection" /> |
|
</MultiBinding> |
|
</controls:ProgressRing.IsVisible> |
|
</controls:ProgressRing> |
|
<!-- Connecting Progress Text --> |
|
<TextBlock |
|
VerticalAlignment="Center" |
|
IsVisible="{Binding ClientManager.IsConnecting}" |
|
Text="{x:Static lang:Resources.Label_ConnectingEllipsis}" /> |
|
<!-- Waiting to connect progress text --> |
|
<TextBlock VerticalAlignment="Center" Text="{x:Static lang:Resources.Label_WaitingToConnectEllipsis}"> |
|
<Button.IsVisible> |
|
<MultiBinding Converter="{x:Static BoolConverters.And}"> |
|
<Binding Path="!ClientManager.IsConnecting" /> |
|
<Binding Path="IsWaitingForConnection" /> |
|
</MultiBinding> |
|
</Button.IsVisible> |
|
</TextBlock> |
|
|
|
<!-- Active connect (when Comfy is running) --> |
|
<Button |
|
Padding="12,4" |
|
Classes="success" |
|
Command="{Binding ConnectCommand}"> |
|
<Button.IsVisible> |
|
<MultiBinding Converter="{x:Static BoolConverters.And}"> |
|
<Binding Path="ClientManager.CanUserConnect" /> |
|
<Binding Path="IsComfyRunning" /> |
|
<Binding Path="!IsWaitingForConnection" /> |
|
</MultiBinding> |
|
</Button.IsVisible> |
|
<StackPanel Orientation="Horizontal"> |
|
<TextBlock Text="{x:Static lang:Resources.Action_Connect}" /> |
|
</StackPanel> |
|
</Button> |
|
|
|
<!-- Connect help --> |
|
<Button Padding="12,4" Command="{Binding ShowConnectionHelpCommand}"> |
|
<Button.IsVisible> |
|
<MultiBinding Converter="{x:Static BoolConverters.And}"> |
|
<Binding Path="ClientManager.CanUserConnect" /> |
|
<Binding Path="!IsComfyRunning" /> |
|
<Binding Path="!IsWaitingForConnection" /> |
|
</MultiBinding> |
|
</Button.IsVisible> |
|
<StackPanel Orientation="Horizontal"> |
|
<icons:Icon |
|
Margin="0,0,8,0" |
|
FontSize="14" |
|
Value="fa-solid fa-circle-question" /> |
|
<TextBlock Text="{x:Static lang:Resources.Action_Launch}" /> |
|
</StackPanel> |
|
</Button> |
|
|
|
<!-- Successful connection icon --> |
|
<Button Classes="transparent-full"> |
|
|
|
<Button.IsVisible> |
|
<MultiBinding Converter="{x:Static BoolConverters.And}"> |
|
<Binding Path="ClientManager.IsConnected" /> |
|
<Binding Path="!ClientManager.IsConnecting" /> |
|
<Binding Path="!IsWaitingForConnection" /> |
|
</MultiBinding> |
|
</Button.IsVisible> |
|
|
|
<fluentIcons:SymbolIcon |
|
VerticalAlignment="Center" |
|
FontSize="18" |
|
Foreground="{DynamicResource ThemeGreyColor}" |
|
IsFilled="True" |
|
Symbol="PlugConnected" /> |
|
|
|
<Button.Flyout> |
|
<ui:FAMenuFlyout Placement="BottomEdgeAlignedRight"> |
|
<ui:MenuFlyoutItem |
|
Command="{Binding DisconnectCommand}" |
|
IsEnabled="False" |
|
Text="{Binding ClientManager.Client.BaseAddress, Converter={StaticResource UriStringConverter}, FallbackValue=''}" /> |
|
<ui:MenuFlyoutSeparator /> |
|
<ui:MenuFlyoutItem Command="{Binding DisconnectCommand}" Text="Disconnect"> |
|
<ui:MenuFlyoutItem.IconSource> |
|
<fluentIcons:SymbolIconSource Symbol="PlugDisconnected" /> |
|
</ui:MenuFlyoutItem.IconSource> |
|
</ui:MenuFlyoutItem> |
|
</ui:FAMenuFlyout> |
|
</Button.Flyout> |
|
</Button> |
|
|
|
<!-- Menu --> |
|
<Button Classes="transparent-full"> |
|
<ui:SymbolIcon FontSize="18" Symbol="MoreVertical" /> |
|
<Button.Flyout> |
|
<ui:FAMenuFlyout Placement="BottomEdgeAlignedRight"> |
|
<ui:MenuFlyoutItem |
|
Command="{Binding MenuOpenProjectCommand}" |
|
InputGesture="Ctrl+O" |
|
IconSource="OpenFolder" |
|
Text="{x:Static lang:Resources.Action_OpenProjectEllipsis}" /> |
|
<ui:MenuFlyoutSeparator /> |
|
<ui:MenuFlyoutItem |
|
Command="{Binding MenuSaveCommand}" |
|
InputGesture="Ctrl+S" |
|
IconSource="Save" |
|
Text="{x:Static lang:Resources.Action_Save}" /> |
|
<ui:MenuFlyoutItem |
|
Command="{Binding MenuSaveAsCommand}" |
|
InputGesture="Ctrl+Shift+S" |
|
Text="{x:Static lang:Resources.Action_SaveAsEllipsis}" /> |
|
|
|
<ui:MenuFlyoutSeparator /> |
|
|
|
<ui:MenuFlyoutItem |
|
Command="{Binding SelectedTab.RestoreDefaultViewStateCommand, FallbackValue={x:Null}}" |
|
IconSource="CalendarReply" |
|
Text="{x:Static lang:Resources.Action_RestoreDefaultLayout}" /> |
|
|
|
<!-- Debug mode menus --> |
|
<ui:MenuFlyoutSeparator IsVisible="{Binding SharedState.IsDebugMode}" /> |
|
|
|
<ui:MenuFlyoutItem |
|
IsVisible="{Binding SharedState.IsDebugMode}" |
|
Command="{Binding SelectedTab.DebugSaveViewStateCommand, FallbackValue={x:Null}}" |
|
Text="Show Dock State" /> |
|
|
|
<ui:MenuFlyoutItem |
|
IsVisible="{Binding SharedState.IsDebugMode}" |
|
Command="{Binding SelectedTab.DebugLoadViewStateCommand, FallbackValue={x:Null}}" |
|
Text="Load Dock State" /> |
|
|
|
</ui:FAMenuFlyout> |
|
</Button.Flyout> |
|
</Button> |
|
</StackPanel> |
|
</ui:TabView.TabStripFooter> |
|
</ui:TabView> |
|
</Grid> |
|
</controls:UserControlBase>
|
|
|