| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 | using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Threading;using System.Windows;using InABox.Configuration;using InABox.Core;using InABox.DynamicGrid;using InABox.Wpf;using InABox.WPF;namespace PRSDesktop;public class ModuleItem : BaseObject{    public string Description { get; set; }    public bool Checked { get; set; }}public class ModuleGrid : DynamicGrid<ModuleItem>{    private List<ModuleItem> Items;    public ModuleGrid()    {        Configuration = new Dictionary<string, bool>();    }    protected override void Init()    {        base.Init();        var tick = PRSDesktop.Resources.tick.AsBitmapImage();        var disabled = PRSDesktop.Resources.disabled.AsBitmapImage();        ActionColumns.Add(new DynamicTickColumn<ModuleItem, bool>(x => x.Checked, tick, tick, disabled, CheckClick) { AllowHeaderClick = true });        HiddenColumns.Add(x => x.Description);        HiddenColumns.Add(x => x.Checked);    }    protected override void DoReconfigure(DynamicGridOptions options)    {        base.DoReconfigure(options);        options.RecordCount = true;        options.FilterRows = true;    }    public Dictionary<string, bool> Configuration { get; set; }    public List<Type> Modules { get; private set; }    public override void DeleteItems(params CoreRow[] rows)    {    }    public override void SaveItem(ModuleItem item)    {    }    public override ModuleItem LoadItem(CoreRow row)    {        return Items[row.Index];    }    protected override void Reload(    	Filters<ModuleItem> criteria, Columns<ModuleItem> columns, ref SortOrder<ModuleItem>? sort,    	CancellationToken token, Action<CoreTable?, Exception?> action)    {        if (Items == null)        {            Items = new List<ModuleItem>();            var types = CoreUtils.Entities.Where(x => x.GetInterfaces().Contains(typeof(IPersistent))).OrderBy(x => x.EntityName());            foreach (var type in types)            {                var moduleitem = new ModuleItem { Description = type.EntityName() };                if (Configuration.ContainsKey(type.EntityName()))                    moduleitem.Checked = Configuration[type.EntityName()];                else                    moduleitem.Checked = true;                Items.Add(moduleitem);            }        }        var table = new CoreTable();        table.LoadColumns(columns);        table.LoadRows(Items);        action.Invoke(table, null);    }    private bool CheckClick(CoreRow row)    {        var result = false;        var rows = row == null ? Data.Rows.ToArray() : new[] { row };        foreach (var corrow in rows)        {            var desc = corrow.Get<ModuleItem, string>(x => x.Description);            var item = Items.FirstOrDefault(x => x.Description.Equals(desc));            item.Checked = !item.Checked;            Configuration[desc] = item.Checked;            result = true;        }        return result;    }    protected override DynamicGridColumns LoadColumns()    {        var columns = new DynamicGridColumns<ModuleItem>();        columns.Add(x => x.Description, width: 0, alignment: Alignment.MiddleLeft);        return columns;    }}/// <summary>///     Interaction logic for ModuleConfigurationWindow.xaml/// </summary>public partial class ModuleConfigurationWindow : ThemableWindow{    private readonly ModuleConfiguration _config;    private readonly string _database = "";    public ModuleConfigurationWindow(string database)    {        InitializeComponent();        _database = database.ToLower();        _config = new LocalConfiguration<ModuleConfiguration>(Path.GetDirectoryName(_database), Path.GetFileName(_database)).Load();        Modules.Configuration = _config;        Modules.Refresh(true, true);    }    private void OK_Click(object sender, RoutedEventArgs e)    {        new LocalConfiguration<ModuleConfiguration>(Path.GetDirectoryName(_database), Path.GetFileName(_database)).Save(_config);        DialogResult = true;        Close();    }    private void Cancel_Click(object sender, RoutedEventArgs e)    {        DialogResult = false;        Close();    }    private class ModuleConfiguration : Dictionary<string, bool>, ILocalConfigurationSettings    {    }}
 |