feat: 任务设置Demo

This commit is contained in:
枫雨
2023-04-23 23:25:41 +08:00
parent 81ac6abbd9
commit 3333241413
5 changed files with 146 additions and 3 deletions

View File

@@ -41,9 +41,21 @@
</hc:ThemeResources.ThemeDictionaries>
</hc:ThemeResources>
<hc:Theme />
</ResourceDictionary.MergedDictionaries>
<!-- A Style that affects all TextBlocks -->
<Style BasedOn="{StaticResource TextBlockDefault}" TargetType="controls:TextBlock" />
<Style
x:Key="CustomListBoxItemStyle"
BasedOn="{StaticResource ListBoxItemBaseStyle}"
TargetType="ListBoxItem">
<Setter Property="Padding" Value="10,0,0,0" />
<Style.Triggers>
<Trigger Property="IsSelected" Value="true">
<Setter Property="Background" Value="{DynamicResource RegionBrush}" />
</Trigger>
</Style.Triggers>
</Style>
<Style TargetType="Hyperlink">
<EventSetter Event="Click" Handler="Hyperlink_Click" />

View File

@@ -0,0 +1,77 @@
// <copyright file="TaskSettingVisibilityInfo.cs" company="MaaAssistantArknights">
// MaaWpfGui - A part of the MaaCoreArknights project
// Copyright (C) 2021 MistEO and Contributors
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY
// </copyright>
using Stylet;
namespace MaaWpfGui.Models
{
/// <summary>
/// The task setting visibility info.
/// </summary>
public class TaskSettingVisibilityInfo : PropertyChangedBase
{
public const string DefaultVisibleTaskSetting = "Combat";
private bool _wakeUp;
private bool _recruiting;
private bool _base;
private bool _combat;
private bool _mall;
private bool _mission;
private bool _autoRoguelike;
public bool WakeUp { get => _wakeUp; set => SetAndNotify(ref _wakeUp, value); }
public bool Recruiting { get => _recruiting; set => SetAndNotify(ref _recruiting, value); }
public bool Base { get => _base; set => SetAndNotify(ref _base, value); }
public bool Combat { get => _combat; set => SetAndNotify(ref _combat, value); }
public bool Mall { get => _mall; set => SetAndNotify(ref _mall, value); }
public bool Mission { get => _mission; set => SetAndNotify(ref _mission, value); }
public bool AutoRoguelike { get => _autoRoguelike; set => SetAndNotify(ref _autoRoguelike, value); }
public static TaskSettingVisibilityInfo Current { get; } = new TaskSettingVisibilityInfo();
public void Set(string taskName, bool enable)
{
switch (taskName)
{
case "WakeUp":
WakeUp = enable;
break;
case "Recruiting":
Recruiting = enable;
break;
case "Base":
Base = enable;
break;
case "Combat":
Combat = enable;
break;
case "Mall":
Mall = enable;
break;
case "Mission":
Mission = enable;
break;
case "AutoRoguelike":
AutoRoguelike = enable;
break;
}
}
}
}

View File

@@ -13,6 +13,7 @@
using System;
using MaaWpfGui.Helper;
using MaaWpfGui.Models;
using Stylet;
namespace MaaWpfGui.ViewModels
@@ -121,5 +122,20 @@ namespace MaaWpfGui.ViewModels
get => _runStatus;
set => SetAndNotify(ref _runStatus, value);
}
private bool _enableSetting;
/// <summary>
/// Gets or sets a value indicating whether gets or sets whether the setting enabled.
/// </summary>
public bool EnableSetting
{
get => _enableSetting;
set
{
SetAndNotify(ref _enableSetting, value);
TaskSettingVisibilityInfo.Current.Set(OriginalName, value);
}
}
}
}

View File

@@ -27,6 +27,7 @@ using MaaWpfGui.Constants;
using MaaWpfGui.Extensions;
using MaaWpfGui.Helper;
using MaaWpfGui.Main;
using MaaWpfGui.Models;
using MaaWpfGui.Services;
using MaaWpfGui.Utilities.ValueType;
using Newtonsoft.Json;
@@ -54,6 +55,11 @@ namespace MaaWpfGui.ViewModels.UI
/// </summary>
public ObservableCollection<DragItemViewModel> TaskItemViewModels { get; set; }
/// <summary>
/// Gets the visibility of task setting views.
/// </summary>
public TaskSettingVisibilityInfo TaskSettingVisibilities { get; } = TaskSettingVisibilityInfo.Current;
/// <summary>
/// 实时更新任务顺序
/// </summary>
@@ -261,6 +267,11 @@ namespace MaaWpfGui.ViewModels.UI
var vm = new DragItemViewModel(LocalizationHelper.GetString(task), task, "TaskQueue.");
if (task == TaskSettingVisibilityInfo.DefaultVisibleTaskSetting)
{
vm.EnableSetting = true;
}
if (!parsed || order < 0 || order >= temp_order_list.Count)
{
non_order_list.Add(vm);

View File

@@ -59,6 +59,7 @@
dd:DragDrop.IsDragSource="{Binding Idle}"
dd:DragDrop.IsDropTarget="{Binding Idle}"
BorderThickness="0"
ItemContainerStyle="{StaticResource CustomListBoxItemStyle}"
ItemsSource="{Binding Path=TaskItemViewModels}"
SelectionChanged="{s:Action TaskItemSelectionChanged}"
ToolTip="{DynamicResource LabelSequenceTip}">
@@ -68,9 +69,21 @@
<!--<maa:TextBlock Text="{Binding ID}" />
<maa:TextBlock Text=". " />-->
<CheckBox
Width="155"
Content="{Binding Name}"
IsChecked="{Binding IsChecked}"
IsHitTestVisible="{Binding ElementName=TaskList, Path=DataContext.Idle}" />
<RadioButton
Margin="0"
Padding="0"
hc:IconElement.Geometry="{StaticResource ConfigGeometry}"
hc:VisualElement.HighlightForeground="{DynamicResource PrimaryBrush}"
Background="Transparent"
BorderThickness="0"
Foreground="{DynamicResource SecondaryTextBrush}"
GroupName="TaskSetting"
IsChecked="{Binding EnableSetting}"
Style="{DynamicResource RadioGroupItemSingle}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
@@ -176,17 +189,31 @@
<RowDefinition Height="Auto" />
<RowDefinition />
</Grid.RowDefinitions>
<userControl:FightSettingsUserControl
<hc:ScrollViewer
Grid.Row="0"
Margin="10"
HorizontalAlignment="Center"
VerticalAlignment="Top" />
VerticalAlignment="Top"
HorizontalScrollBarVisibility="Auto"
IsInertiaEnabled="True"
VerticalScrollBarVisibility="Auto">
<hc:SimpleStackPanel>
<userControl:ConnectSettingsUserControl IsEnabled="{Binding Idle}" Visibility="{c:Binding TaskSettingVisibilities.WakeUp}" />
<userControl:AutoRecruitSettingsUserControl IsEnabled="{Binding Idle}" Visibility="{c:Binding TaskSettingVisibilities.Recruiting}" />
<userControl:InfrastSettingsUserControl IsEnabled="{Binding Idle}" Visibility="{c:Binding TaskSettingVisibilities.Base}" />
<userControl:MallSettingsUserControl IsEnabled="{Binding Idle}" Visibility="{c:Binding TaskSettingVisibilities.Mall}" />
<userControl:FightSettingsUserControl Visibility="{c:Binding TaskSettingVisibilities.Combat}" />
<userControl:RoguelikeSettingsUserControl IsEnabled="{Binding Idle}" Visibility="{c:Binding TaskSettingVisibilities.Mission}" />
<userControl:RoguelikeSettingsUserControl IsEnabled="{Binding Idle}" Visibility="{c:Binding TaskSettingVisibilities.AutoRoguelike}" />
</hc:SimpleStackPanel>
</hc:ScrollViewer>
<hc:ScrollViewer
Grid.Row="1"
Width="200"
Margin="10"
HorizontalAlignment="Center"
VerticalAlignment="Bottom">
VerticalAlignment="Bottom"
IsInertiaEnabled="True">
<controls:TextBlock Text="{Binding StagesOfToday}" />
</hc:ScrollViewer>
</Grid>