mirror of
https://github.com/Tribufu/ServerManagers
synced 2026-08-07 19:56:22 +00:00
128 lines
4.7 KiB
C#
128 lines
4.7 KiB
C#
using ServerManagerTool.Common.Attibutes;
|
|
using ServerManagerTool.Common.Model;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Runtime.Serialization;
|
|
using System.Windows;
|
|
|
|
namespace ServerManagerTool.Lib
|
|
{
|
|
[DataContract]
|
|
public class EngramEntryList : AggregateIniValueList<EngramEntry>
|
|
{
|
|
public EngramEntryList(string aggregateValueName)
|
|
: base(aggregateValueName, null)
|
|
{
|
|
}
|
|
|
|
public override void FromIniValues(IEnumerable<string> iniValues)
|
|
{
|
|
var items = iniValues?.Select(AggregateIniValue.FromINIValue<EngramEntry>).ToArray();
|
|
|
|
Clear();
|
|
|
|
var itemsToAdd = items.Where(i => !this.Any(e => e.IsEquivalent(i))).ToArray();
|
|
AddRange(itemsToAdd);
|
|
|
|
var itemsToUpdate = items.Where(i => this.Any(e => e.IsEquivalent(i))).ToArray();
|
|
foreach (var item in itemsToUpdate)
|
|
{
|
|
var e = this.FirstOrDefault(r => r.IsEquivalent(item));
|
|
e.EngramLevelRequirement = item.EngramLevelRequirement;
|
|
e.EngramPointsCost = item.EngramPointsCost;
|
|
e.EngramHidden = item.EngramHidden;
|
|
e.RemoveEngramPreReq = item.RemoveEngramPreReq;
|
|
}
|
|
|
|
IsEnabled = (Count != 0);
|
|
|
|
Sort(AggregateIniValue.SortKeySelector);
|
|
}
|
|
|
|
public override IEnumerable<string> ToIniValues()
|
|
{
|
|
if (string.IsNullOrWhiteSpace(IniCollectionKey))
|
|
return this.Where(d => d.ShouldSave()).Select(d => d.ToINIValue());
|
|
|
|
return this.Where(d => d.ShouldSave()).Select(d => $"{this.IniCollectionKey}={d.ToINIValue()}");
|
|
}
|
|
}
|
|
|
|
[DataContract]
|
|
public class EngramEntry : AggregateIniValue
|
|
{
|
|
public static readonly DependencyProperty EngramClassNameProperty = DependencyProperty.Register(nameof(EngramClassName), typeof(string), typeof(EngramEntry), new PropertyMetadata(String.Empty));
|
|
public static readonly DependencyProperty EngramLevelRequirementProperty = DependencyProperty.Register(nameof(EngramLevelRequirement), typeof(int), typeof(EngramEntry), new PropertyMetadata(0));
|
|
public static readonly DependencyProperty EngramPointsCostProperty = DependencyProperty.Register(nameof(EngramPointsCost), typeof(int), typeof(EngramEntry), new PropertyMetadata(0));
|
|
public static readonly DependencyProperty EngramHiddenProperty = DependencyProperty.Register(nameof(EngramHidden), typeof(bool), typeof(EngramEntry), new PropertyMetadata(false));
|
|
public static readonly DependencyProperty RemoveEngramPreReqProperty = DependencyProperty.Register(nameof(RemoveEngramPreReq), typeof(bool), typeof(EngramEntry), new PropertyMetadata(false));
|
|
|
|
[DataMember]
|
|
[AggregateIniValueEntry]
|
|
public string EngramClassName
|
|
{
|
|
get { return (string)GetValue(EngramClassNameProperty); }
|
|
set { SetValue(EngramClassNameProperty, value); }
|
|
}
|
|
|
|
[DataMember]
|
|
[AggregateIniValueEntry]
|
|
public int EngramLevelRequirement
|
|
{
|
|
get { return (int)GetValue(EngramLevelRequirementProperty); }
|
|
set { SetValue(EngramLevelRequirementProperty, value); }
|
|
}
|
|
|
|
[DataMember]
|
|
[AggregateIniValueEntry]
|
|
public int EngramPointsCost
|
|
{
|
|
get { return (int)GetValue(EngramPointsCostProperty); }
|
|
set { SetValue(EngramPointsCostProperty, value); }
|
|
}
|
|
|
|
[DataMember]
|
|
[AggregateIniValueEntry]
|
|
public bool EngramHidden
|
|
{
|
|
get { return (bool)GetValue(EngramHiddenProperty); }
|
|
set { SetValue(EngramHiddenProperty, value); }
|
|
}
|
|
|
|
[DataMember]
|
|
[AggregateIniValueEntry]
|
|
public bool RemoveEngramPreReq
|
|
{
|
|
get { return (bool)GetValue(RemoveEngramPreReqProperty); }
|
|
set { SetValue(RemoveEngramPreReqProperty, value); }
|
|
}
|
|
|
|
public static EngramEntry FromINIValue(string iniValue)
|
|
{
|
|
var engramEntry = new EngramEntry();
|
|
engramEntry.InitializeFromINIValue(iniValue);
|
|
return engramEntry;
|
|
}
|
|
|
|
public override string GetSortKey()
|
|
{
|
|
return null;
|
|
}
|
|
|
|
public override void InitializeFromINIValue(string value)
|
|
{
|
|
base.InitializeFromINIValue(value);
|
|
}
|
|
|
|
public override bool IsEquivalent(AggregateIniValue other)
|
|
{
|
|
return String.Equals(this.EngramClassName, ((EngramEntry)other).EngramClassName, StringComparison.OrdinalIgnoreCase);
|
|
}
|
|
|
|
public override string ToINIValue()
|
|
{
|
|
return base.ToINIValue();
|
|
}
|
|
}
|
|
}
|