Files
MaaAssistantArknights/src/MaaWpfGui/Views/UI/CopilotView.xaml
2025-08-18 16:38:41 +08:00

494 lines
24 KiB
XML

<UserControl
x:Class="MaaWpfGui.Views.UI.CopilotView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:c="clr-namespace:CalcBinding;assembly=CalcBinding"
xmlns:constants="clr-namespace:MaaWpfGui.Constants"
xmlns:controls="clr-namespace:MaaWpfGui.Styles.Controls"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:dd="urn:gong-wpf-dragdrop"
xmlns:hc="https://handyorg.github.io/handycontrol"
xmlns:helper="clr-namespace:MaaWpfGui.Helper"
xmlns:local="clr-namespace:MaaWpfGui"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:properties="clr-namespace:MaaWpfGui.Styles.Properties"
xmlns:s="https://github.com/canton7/Stylet"
xmlns:ui="clr-namespace:MaaWpfGui.ViewModels.UI"
xmlns:viewModels="clr-namespace:MaaWpfGui.ViewModels"
xmlns:vm="clr-namespace:MaaWpfGui"
d:Background="White"
d:DataContext="{d:DesignInstance {x:Type ui:CopilotViewModel}}"
d:DesignHeight="550"
d:DesignWidth="800"
AllowDrop="True"
Drop="{s:Action DropFile}"
KeyDown="{s:Action KeyDown}"
MouseDown="{s:Action MouseDown}"
mc:Ignorable="d">
<Grid Margin="20">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<StackPanel
Grid.Row="0"
HorizontalAlignment="Center"
Orientation="Vertical">
<controls:TextBlock
Margin="10,0"
Block.TextAlignment="Center"
Text="{DynamicResource CopilotLocation}" />
<Grid Width="300" Margin="10">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<ComboBox
Grid.Column="0"
Height="30"
hc:BorderElement.CornerRadius="4,0,0,4"
DropDownOpened="{s:Action OnDropDownOpened}"
IsEditable="True"
IsReadOnly="{c:Binding Path=!Idle}"
Text="{Binding Filename}" />
<Button
Grid.Column="1"
Height="30"
MinWidth="30"
hc:BorderElement.CornerRadius="0"
hc:IconElement.Geometry="{StaticResource FolderOpen20Regular}"
BorderThickness="0,1,1,1"
Command="{s:Action SelectFile}"
IsEnabled="{c:Binding '(Idle) and (StartEnabled)'}" />
<Button
Grid.Column="2"
Height="30"
MinWidth="30"
hc:BorderElement.CornerRadius="0,4,4,0"
hc:IconElement.Geometry="{StaticResource ClipboardLink20Regular}"
BorderThickness="0,1,1,1"
Command="{s:Action PasteClipboard}"
IsEnabled="{c:Binding '(Idle) and (StartEnabled)'}"
MouseRightButtonUp="{s:Action PasteClipboardCopilotSet}" />
<controls:TooltipBlock
Grid.Column="1"
HorizontalAlignment="Right"
VerticalAlignment="Top"
MouseLeftButtonDown="{s:Action SelectFile}"
NormalOpacity="0.25"
TooltipText="{DynamicResource SelectTheFileTip}" />
<controls:TooltipBlock
Grid.Column="2"
HorizontalAlignment="Right"
VerticalAlignment="Top"
MouseLeftButtonDown="{s:Action PasteClipboard}"
NormalOpacity="0.25"
TooltipText="{DynamicResource PasteClipboardTip}" />
</Grid>
</StackPanel>
<StackPanel
x:Name="RootPanel"
Grid.Row="1"
HorizontalAlignment="Center"
IsEnabled="{Binding Idle}">
<StackPanel>
<StackPanel.Style>
<Style TargetType="StackPanel">
<Setter Property="Orientation" Value="Vertical" />
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Form}" Value="False" />
<Condition Binding="{Binding UseCopilotList}" Value="False" />
</MultiDataTrigger.Conditions>
<Setter Property="Orientation" Value="Horizontal" />
</MultiDataTrigger>
</Style.Triggers>
</Style>
</StackPanel.Style>
<StackPanel HorizontalAlignment="Center" Orientation="Horizontal">
<StackPanel
Margin="2.5,5"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Orientation="Horizontal">
<CheckBox Content="{DynamicResource AutoSquad}" IsChecked="{Binding Form}" />
<controls:TooltipBlock TooltipText="{DynamicResource AutoSquadTip}" />
</StackPanel>
<StackPanel
Margin="2.5,5"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Orientation="Horizontal"
Visibility="{c:Binding Form}">
<controls:TextBlock VerticalAlignment="Center" Text="{DynamicResource UseFormation}" />
<ComboBox
Margin="0,-10"
Padding="0,-1,8,0"
VerticalAlignment="Center"
BorderThickness="0"
DisplayMemberPath="Display"
ItemsSource="{Binding FormationSelectList}"
SelectedValue="{Binding SelectFormation}"
SelectedValuePath="Value" />
</StackPanel>
</StackPanel>
<StackPanel HorizontalAlignment="Center" Visibility="{c:Binding Form}">
<CheckBox
Margin="2.5,5"
HorizontalAlignment="Center"
Content="{DynamicResource Copilot.IgnoreRequirements}"
IsChecked="{Binding IgnoreRequirements}" />
<StackPanel HorizontalAlignment="Center">
<StackPanel.Style>
<Style TargetType="StackPanel">
<Setter Property="Orientation" Value="Vertical" />
<Style.Triggers>
<DataTrigger Binding="{Binding AddUserAdditional}" Value="False">
<Setter Property="Orientation" Value="Horizontal" />
</DataTrigger>
</Style.Triggers>
</Style>
</StackPanel.Style>
<CheckBox
Margin="2.5,5"
HorizontalAlignment="Center"
Content="{DynamicResource AddTrust}"
IsChecked="{Binding AddTrust}" />
<StackPanel
Margin="2.5,5"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Orientation="Horizontal">
<CheckBox
Margin="2.5,5"
Content="{DynamicResource AddUserAdditional}"
IsChecked="{Binding AddUserAdditional}" />
<TextBox
Height="20"
MinWidth="100"
MaxWidth="140"
Margin="2.5,-10"
VerticalContentAlignment="Center"
Text="{Binding UserAdditional, UpdateSourceTrigger=LostFocus}"
ToolTip="{DynamicResource AddUserAdditionalTip}"
ToolTipService.InitialShowDelay="0"
Visibility="{c:Binding AddUserAdditional}" />
</StackPanel>
</StackPanel>
</StackPanel>
<StackPanel HorizontalAlignment="Center" Orientation="Horizontal">
<StackPanel
Margin="2.5,5"
VerticalAlignment="Center"
Orientation="Horizontal">
<CheckBox Content="{DynamicResource UseCopilotList}" IsChecked="{Binding UseCopilotList}" />
<controls:TooltipBlock TooltipText="{DynamicResource UseCopilotListTip}" />
</StackPanel>
<CheckBox
Margin="2.5,5"
Content="{DynamicResource UseSanityPotion}"
IsChecked="{Binding UseSanityPotion}"
Visibility="{c:Binding UseCopilotList}" />
</StackPanel>
</StackPanel>
<StackPanel
Margin="2.5,5"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Orientation="Horizontal"
Visibility="{c:Binding !UseCopilotList}">
<CheckBox
VerticalContentAlignment="Center"
Content="{DynamicResource LoopTimes}"
IsChecked="{Binding Loop}" />
<hc:NumericUpDown
Margin="5,0,0,0"
HorizontalContentAlignment="Center"
VerticalContentAlignment="Center"
InputMethod.IsInputMethodEnabled="False"
Maximum="9999"
Minimum="0"
Value="{Binding LoopTimes}" />
</StackPanel>
</StackPanel>
<Grid
Grid.Row="2"
Width="200"
Margin="0,7,0,0"
Visibility="{c:Binding UseCopilotList}">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<ListBox
x:Name="CopilotList"
Grid.Row="0"
Grid.ColumnSpan="4"
HorizontalContentAlignment="Stretch"
dd:DragDrop.IsDragSource="{Binding Idle}"
dd:DragDrop.IsDropTarget="{Binding Idle}"
hc:BorderElement.CornerRadius="4,4,0,0"
properties:AutoScroll.AutoScroll="True"
BorderThickness="1,1,1,0"
DragDrop.Drop="{s:Action CopilotItemIndexChanged}"
IsEnabled="{c:Binding StartEnabled}"
ItemsSource="{Binding Path=CopilotItemViewModels}"
Style="{DynamicResource NoSelectedHighlightListBoxStyle}"
ToolTip="{DynamicResource LabelSequenceTip}">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<CheckBox
Grid.Column="0"
Content="{c:Binding Name}"
IsChecked="{Binding IsChecked}"
IsEnabled="{Binding ElementName=CopilotList, Path=DataContext.Idle}"
IsHitTestVisible="{Binding ElementName=CopilotList, Path=DataContext.Idle}"
ToolTip="{c:Binding CopilotId}" />
<controls:TextBlock
Grid.Column="1"
MinWidth="35"
VerticalAlignment="Center"
Text="{DynamicResource CopilotTaskRaidStage}"
Visibility="{c:Binding IsRaid}" />
<Button
Grid.Column="2"
Margin="0"
Padding="5,6,5,6"
hc:IconElement.Geometry="{StaticResource ConfigGeometry}"
hc:VisualElement.HighlightBackground="Transparent"
hc:VisualElement.HighlightForeground="{DynamicResource PrimaryBrush}"
Background="Transparent"
BorderThickness="0"
Command="{s:Action SelectCopilotTask}"
CommandParameter="{c:Binding Index}"
Foreground="{DynamicResource SecondaryTextBrush}"
IsEnabled="{Binding ElementName=CopilotList, Path=DataContext.Idle}" />
<Button
Grid.Column="3"
Margin="0"
Padding="5,0,10,0"
hc:IconElement.Geometry="{StaticResource CloseGeometry}"
hc:VisualElement.HighlightBackground="Transparent"
hc:VisualElement.HighlightForeground="{DynamicResource PrimaryBrush}"
Background="Transparent"
BorderThickness="0"
Command="{s:Action DeleteCopilotTask}"
CommandParameter="{c:Binding Index}"
IsEnabled="{Binding ElementName=CopilotList, Path=DataContext.Idle}" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<Grid Grid.Row="1" Grid.Column="1">
<hc:TextBox
Height="30"
HorizontalContentAlignment="Center"
VerticalContentAlignment="Center"
hc:BorderElement.CornerRadius="0"
hc:InfoElement.Placeholder="{DynamicResource CopilotTaskName}"
IsEnabled="{Binding Idle}"
MaxLines="1"
Text="{Binding CopilotTaskName, UpdateSourceTrigger=LostFocus}" />
<controls:TooltipBlock
HorizontalAlignment="Right"
VerticalAlignment="Top"
NormalOpacity="0.25"
TooltipText="{DynamicResource CopilotTaskNameTip}" />
</Grid>
<Grid Grid.Row="1" Grid.Column="0">
<Button
Height="30"
MinWidth="30"
hc:BorderElement.CornerRadius="0,0,0,4"
hc:IconElement.Geometry="{StaticResource FolderAdd20Regular}"
BorderThickness="1,1,0,1"
Command="{s:Action ImportFiles}"
IsEnabled="{c:Binding '(Idle) and (StartEnabled)'}" />
<controls:TooltipBlock
HorizontalAlignment="Right"
VerticalAlignment="Top"
MouseLeftButtonDown="{s:Action ImportFiles}"
NormalOpacity="0.25"
TooltipText="{DynamicResource ImportFilesTip}" />
</Grid>
<Grid Grid.Row="1" Grid.Column="2">
<Button
Height="30"
MinWidth="30"
hc:BorderElement.CornerRadius="0"
hc:IconElement.Geometry="{StaticResource Add20Regular}"
BorderThickness="0,1"
Command="{s:Action AddCopilotTask}"
IsEnabled="{c:Binding '(Idle) and (StartEnabled)'}"
MouseRightButtonUp="{s:Action AddCopilotTask_Adverse}" />
<controls:TooltipBlock
HorizontalAlignment="Right"
VerticalAlignment="Top"
MouseLeftButtonDown="{s:Action AddCopilotTask}"
MouseRightButtonUp="{s:Action AddCopilotTask_Adverse}"
NormalOpacity="0.25"
TooltipText="{DynamicResource CopilotAddTask}" />
</Grid>
<Grid Grid.Row="1" Grid.Column="3">
<Button
Height="30"
MinWidth="30"
hc:BorderElement.CornerRadius="0,0,4,0"
hc:IconElement.Geometry="{StaticResource DismissSquareMultiple20Regular}"
BorderThickness="1"
Command="{s:Action ClearCopilotTask}"
Foreground="{DynamicResource DangerBrush}"
IsEnabled="{c:Binding Idle}"
MouseRightButtonUp="{s:Action CleanUnableCopilotTask}" />
<controls:TooltipBlock
HorizontalAlignment="Right"
VerticalAlignment="Top"
MouseLeftButtonDown="{s:Action ClearCopilotTask}"
MouseRightButtonUp="{s:Action CleanUnableCopilotTask}"
NormalOpacity="0.25"
TooltipText="{DynamicResource CopilotClearTask}" />
</Grid>
</Grid>
<Grid
Grid.Row="{c:Binding 'UseCopilotList ? 3:2'}"
Margin="0,10"
HorizontalAlignment="Center"
VerticalAlignment="Top"
d:Grid.Row="3">
<Button
Width="120"
Height="50"
Command="{s:Action Start}"
Content="{DynamicResource Start}"
IsEnabled="{c:Binding StartEnabled}"
Visibility="{c:Binding Idle}" />
<Button
Width="120"
Height="50"
Command="{s:Action Stop}"
Content="{DynamicResource Stop}"
Visibility="{c:Binding !Idle}" />
</Grid>
<controls:TextBlock Grid.Row="4" Block.TextAlignment="Center">
<Hyperlink
Cursor="Hand"
NavigateUri="{Binding CopilotUrl}"
TextDecorations="None">
<TextBlock d:Text="PrtsPlus" Text="{Binding UrlText}" />
</Hyperlink>
</controls:TextBlock>
</Grid>
<Grid Grid.Column="1">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<hc:ScrollViewer
Width="360"
properties:AutoScroll.AutoScroll="True"
HorizontalScrollBarVisibility="Disabled"
IsInertiaEnabled="True"
PanningMode="VerticalOnly">
<ItemsControl ItemsSource="{Binding Path=LogItemViewModels}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<controls:TextBlock
Grid.Column="0"
Margin="0,5,12,0"
HorizontalAlignment="Left"
VerticalAlignment="Stretch"
Foreground="{DynamicResource TraceLogBrush}"
Text="{Binding Time}"
TextWrapping="Wrap"
Visibility="{c:Binding ShowTime}" />
<controls:TextBlock
Grid.Column="1"
Margin="0,5"
HorizontalAlignment="Left"
VerticalAlignment="Stretch"
FontWeight="{Binding Weight}"
ForegroundKey="{Binding Color}"
Text="{Binding Content}"
TextWrapping="Wrap" />
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</hc:ScrollViewer>
<StackPanel
Grid.Row="1"
HorizontalAlignment="Center"
VerticalAlignment="Bottom"
Orientation="Horizontal"
Visibility="{c:Binding CouldLikeWebJson}">
<controls:TextBlock
Margin="10"
VerticalAlignment="Center"
Block.TextAlignment="Center"
Text="{DynamicResource DoYouLikeThisWebJson}" />
<Button
Width="50"
Height="30"
Margin="10"
Command="{s:Action LikeWebJson}"
Content="👍" />
<Button
Width="50"
Height="30"
Margin="10"
Command="{s:Action DislikeWebJson}"
Content="👎" />
</StackPanel>
<controls:TextBlock
Grid.Row="2"
Margin="0,10,0,0"
Block.TextAlignment="Center">
<Hyperlink
Cursor="Hand"
NavigateUri="{Binding MapUrl}"
TextDecorations="None">
<TextBlock Text="{DynamicResource MapPrts}" />
</Hyperlink>
</controls:TextBlock>
</Grid>
</Grid>
</UserControl>