using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using XFEEDToolBox.Core.Engineering;
namespace XFEEDToolBox.ViewModels;
public partial class ToolboxViewModel
{
private bool resettingWarehouseFilters;
[ObservableProperty] public partial int MaterialOwnershipIndex { get; set; }
[ObservableProperty] public partial int MaterialStockLevelIndex { get; set; }
[ObservableProperty] public partial int MaterialChecklistIndex { get; set; }
[ObservableProperty] public partial int MaterialMinimumGradeIndex { get; set; }
[ObservableProperty] public partial int MaterialMaximumGradeIndex { get; set; }
[ObservableProperty] public partial double MaterialMinimumQuantity { get; set; } = double.NaN;
[ObservableProperty] public partial double MaterialMaximumQuantity { get; set; } = double.NaN;
[ObservableProperty] public partial int MaterialSortIndex { get; set; }
[ObservableProperty, NotifyPropertyChangedFor(nameof(MaterialSortDirectionText), nameof(MaterialSortDirectionGlyph))]
public partial bool MaterialSortDescending { get; set; }
public string MaterialSortDirectionText => MaterialSortDescending ? "降序" : "升序";
public string MaterialSortDirectionGlyph => MaterialSortDescending ? "\uE74B" : "\uE74A";
[ObservableProperty] public partial string WarehouseFilterSummary { get; set; } = "";
[ObservableProperty, NotifyPropertyChangedFor(nameof(WarehouseHasNoResults))]
public partial int WarehouseResultCount { get; set; }
public bool WarehouseHasNoResults => WarehouseResultCount == 0;
[ObservableProperty] public partial string WarehouseEmptyText { get; set; } = "没有符合条件的材料,试试重置或放宽筛选。";
private MaterialWarehouseFilter WarehouseFilter => new()
{
Search = MaterialSearch,
Category = MaterialCategoryIndex switch { 1 => "Raw", 2 => "Manufactured", 3 => "Encoded", _ => "" },
Ownership = (MaterialOwnership)MaterialOwnershipIndex,
StockLevel = (MaterialStockLevel)MaterialStockLevelIndex,
Checklist = (MaterialChecklistFilter)MaterialChecklistIndex,
MinimumGrade = MaterialMinimumGradeIndex > 0 ? MaterialMinimumGradeIndex : null,
MaximumGrade = MaterialMaximumGradeIndex > 0 ? MaterialMaximumGradeIndex : null,
MinimumQuantity = double.IsNaN(MaterialMinimumQuantity) ? null : MaterialMinimumQuantity,
MaximumQuantity = double.IsNaN(MaterialMaximumQuantity) ? null : MaterialMaximumQuantity,
Sort = (MaterialSort)MaterialSortIndex,
Descending = MaterialSortDescending
};
private void RefreshMaterialWarehouse()
{
if (!resettingWarehouseFilters) RefreshWarehouse(CurrentPlayer);
}
// Requirements can change without an inventory event (adding or clearing a plan).
private void RefreshWarehouseChecklist()
{
if (MaterialChecklistIndex != 0 || MaterialSortIndex == (int)MaterialSort.Shortage)
RefreshMaterialWarehouse();
}
[RelayCommand] private void ToggleMaterialSortDirection() => MaterialSortDescending = !MaterialSortDescending;
[RelayCommand] private void ResetWarehouseFilters()
{
resettingWarehouseFilters = true;
try
{
MaterialSearch = "";
MaterialCategoryIndex = MaterialOwnershipIndex = MaterialStockLevelIndex = MaterialChecklistIndex = 0;
MaterialMinimumGradeIndex = MaterialMaximumGradeIndex = MaterialSortIndex = 0;
MaterialMinimumQuantity = MaterialMaximumQuantity = double.NaN;
MaterialSortDescending = false;
}
finally { resettingWarehouseFilters = false; }
RefreshMaterialWarehouse();
}
partial void OnMaterialOwnershipIndexChanged(int value) => RefreshMaterialWarehouse();
partial void OnMaterialStockLevelIndexChanged(int value) => RefreshMaterialWarehouse();
partial void OnMaterialChecklistIndexChanged(int value) => RefreshMaterialWarehouse();
partial void OnMaterialMinimumGradeIndexChanged(int value) => RefreshMaterialWarehouse();
partial void OnMaterialMaximumGradeIndexChanged(int value) => RefreshMaterialWarehouse();
partial void OnMaterialMinimumQuantityChanged(double value) => RefreshMaterialWarehouse();
partial void OnMaterialMaximumQuantityChanged(double value) => RefreshMaterialWarehouse();
partial void OnMaterialSortIndexChanged(int value) => RefreshMaterialWarehouse();
partial void OnMaterialSortDescendingChanged(bool value) => RefreshMaterialWarehouse();
}
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using XFEEDToolBox.Core.Engineering;
namespace XFEEDToolBox.ViewModels;
public partial class ToolboxViewModel
{
private bool resettingWarehouseFilters;
[ObservableProperty] public partial int MaterialOwnershipIndex { get; set; }
[ObservableProperty] public partial int MaterialStockLevelIndex { get; set; }
[ObservableProperty] public partial int MaterialChecklistIndex { get; set; }
[ObservableProperty] public partial int MaterialMinimumGradeIndex { get; set; }
[ObservableProperty] public partial int MaterialMaximumGradeIndex { get; set; }
[ObservableProperty] public partial double MaterialMinimumQuantity { get; set; } = double.NaN;
[ObservableProperty] public partial double MaterialMaximumQuantity { get; set; } = double.NaN;
[ObservableProperty] public partial int MaterialSortIndex { get; set; }
[ObservableProperty, NotifyPropertyChangedFor(nameof(MaterialSortDirectionText), nameof(MaterialSortDirectionGlyph))]
public partial bool MaterialSortDescending { get; set; }
public string MaterialSortDirectionText => MaterialSortDescending ? "降序" : "升序";
public string MaterialSortDirectionGlyph => MaterialSortDescending ? "\uE74B" : "\uE74A";
[ObservableProperty] public partial string WarehouseFilterSummary { get; set; } = "";
[ObservableProperty, NotifyPropertyChangedFor(nameof(WarehouseHasNoResults))]
public partial int WarehouseResultCount { get; set; }
public bool WarehouseHasNoResults => WarehouseResultCount == 0;
[ObservableProperty] public partial string WarehouseEmptyText { get; set; } = "没有符合条件的材料,试试重置或放宽筛选。";
private MaterialWarehouseFilter WarehouseFilter => new()
{
Search = MaterialSearch,
Category = MaterialCategoryIndex switch { 1 => "Raw", 2 => "Manufactured", 3 => "Encoded", _ => "" },
Ownership = (MaterialOwnership)MaterialOwnershipIndex,
StockLevel = (MaterialStockLevel)MaterialStockLevelIndex,
Checklist = (MaterialChecklistFilter)MaterialChecklistIndex,
MinimumGrade = MaterialMinimumGradeIndex > 0 ? MaterialMinimumGradeIndex : null,
MaximumGrade = MaterialMaximumGradeIndex > 0 ? MaterialMaximumGradeIndex : null,
MinimumQuantity = double.IsNaN(MaterialMinimumQuantity) ? null : MaterialMinimumQuantity,
MaximumQuantity = double.IsNaN(MaterialMaximumQuantity) ? null : MaterialMaximumQuantity,
Sort = (MaterialSort)MaterialSortIndex,
Descending = MaterialSortDescending
};
private void RefreshMaterialWarehouse()
{
if (!resettingWarehouseFilters) RefreshWarehouse(CurrentPlayer);
}
// Requirements can change without an inventory event (adding or clearing a plan).
private void RefreshWarehouseChecklist()
{
if (MaterialChecklistIndex != 0 || MaterialSortIndex == (int)MaterialSort.Shortage)
RefreshMaterialWarehouse();
}
[RelayCommand] private void ToggleMaterialSortDirection() => MaterialSortDescending = !MaterialSortDescending;
[RelayCommand] private void ResetWarehouseFilters()
{
resettingWarehouseFilters = true;
try
{
MaterialSearch = "";
MaterialCategoryIndex = MaterialOwnershipIndex = MaterialStockLevelIndex = MaterialChecklistIndex = 0;
MaterialMinimumGradeIndex = MaterialMaximumGradeIndex = MaterialSortIndex = 0;
MaterialMinimumQuantity = MaterialMaximumQuantity = double.NaN;
MaterialSortDescending = false;
}
finally { resettingWarehouseFilters = false; }
RefreshMaterialWarehouse();
}
partial void OnMaterialOwnershipIndexChanged(int value) => RefreshMaterialWarehouse();
partial void OnMaterialStockLevelIndexChanged(int value) => RefreshMaterialWarehouse();
partial void OnMaterialChecklistIndexChanged(int value) => RefreshMaterialWarehouse();
partial void OnMaterialMinimumGradeIndexChanged(int value) => RefreshMaterialWarehouse();
partial void OnMaterialMaximumGradeIndexChanged(int value) => RefreshMaterialWarehouse();
partial void OnMaterialMinimumQuantityChanged(double value) => RefreshMaterialWarehouse();
partial void OnMaterialMaximumQuantityChanged(double value) => RefreshMaterialWarehouse();
partial void OnMaterialSortIndexChanged(int value) => RefreshMaterialWarehouse();
partial void OnMaterialSortDescendingChanged(bool value) => RefreshMaterialWarehouse();
}