Add editor for player promotion levels. Resolves #280
This commit is contained in:
110
Torch.Server/Views/RoleEditor.xaml.cs
Normal file
110
Torch.Server/Views/RoleEditor.xaml.cs
Normal file
@@ -0,0 +1,110 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Data;
|
||||
using System.Windows.Documents;
|
||||
using System.Windows.Input;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Media.Imaging;
|
||||
using System.Windows.Shapes;
|
||||
using Torch.Server.Managers;
|
||||
using Torch.Views;
|
||||
using VRage.Game.ModAPI;
|
||||
|
||||
namespace Torch.Server.Views
|
||||
{
|
||||
/// <summary>
|
||||
/// Interaction logic for RoleEditor.xaml
|
||||
/// </summary>
|
||||
public partial class RoleEditor : Window
|
||||
{
|
||||
public RoleEditor()
|
||||
{
|
||||
InitializeComponent();
|
||||
DataContext = Items;
|
||||
}
|
||||
|
||||
public ObservableCollection<IDictionaryItem> Items { get; } = new ObservableCollection<IDictionaryItem>();
|
||||
private Type _itemType;
|
||||
|
||||
private Action _commitChanges;
|
||||
|
||||
public void Edit(IDictionary dict)
|
||||
{
|
||||
Items.Clear();
|
||||
var dictType = dict.GetType();
|
||||
_itemType = typeof(DictionaryItem<,>).MakeGenericType(dictType.GenericTypeArguments[0], dictType.GenericTypeArguments[1]);
|
||||
|
||||
foreach (var key in dict.Keys)
|
||||
{
|
||||
Items.Add((IDictionaryItem)Activator.CreateInstance(_itemType, key, dict[key]));
|
||||
}
|
||||
|
||||
ItemGrid.ItemsSource = Items;
|
||||
|
||||
_commitChanges = () =>
|
||||
{
|
||||
dict.Clear();
|
||||
foreach (var item in Items)
|
||||
{
|
||||
dict[item.Key] = item.Value;
|
||||
}
|
||||
};
|
||||
|
||||
Show();
|
||||
}
|
||||
|
||||
private void Cancel_OnClick(object sender, RoutedEventArgs e)
|
||||
{
|
||||
Close();
|
||||
}
|
||||
|
||||
private void Ok_OnClick(object sender, RoutedEventArgs e)
|
||||
{
|
||||
_commitChanges?.Invoke();
|
||||
Close();
|
||||
}
|
||||
|
||||
public interface IDictionaryItem
|
||||
{
|
||||
object Key { get; set; }
|
||||
object Value { get; set; }
|
||||
}
|
||||
|
||||
public class DictionaryItem<TKey, TValue> : ViewModel, IDictionaryItem
|
||||
{
|
||||
private TKey _key;
|
||||
private TValue _value;
|
||||
|
||||
object IDictionaryItem.Key { get => _key; set => SetValue(ref _key, (TKey)value); }
|
||||
object IDictionaryItem.Value { get => _value; set => SetValue(ref _value, (TValue)value); }
|
||||
|
||||
public TKey Key { get => _key; set => SetValue(ref _key, value); }
|
||||
public TValue Value { get => _value; set => SetValue(ref _value, value); }
|
||||
|
||||
public DictionaryItem()
|
||||
{
|
||||
_key = default(TKey);
|
||||
_value = default(TValue);
|
||||
}
|
||||
|
||||
public DictionaryItem(TKey key, TValue value)
|
||||
{
|
||||
_key = key;
|
||||
_value = value;
|
||||
}
|
||||
}
|
||||
|
||||
private void AddNew_OnClick(object sender, RoutedEventArgs e)
|
||||
{
|
||||
Items.Add((IDictionaryItem)Activator.CreateInstance(_itemType));
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user