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 { private List Items; public ModuleGrid() { Configuration = new Dictionary(); } protected override void Init() { var tick = PRSDesktop.Resources.tick.AsBitmapImage(); var disabled = PRSDesktop.Resources.disabled.AsBitmapImage(); ActionColumns.Add(new DynamicTickColumn(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) { options.RecordCount = true; options.FilterRows = true; } public Dictionary Configuration { get; set; } public List 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 criteria, Columns columns, ref SortOrder? sort, CancellationToken token, Action action) { if (Items == null) { Items = new List(); 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(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(); columns.Add(new DynamicGridColumn { ColumnName = "Description", Caption = "Description", Width = 0, Alignment = Alignment.MiddleLeft }); return columns; } } /// /// Interaction logic for ModuleConfigurationWindow.xaml /// public partial class ModuleConfigurationWindow : ThemableWindow { private readonly ModuleConfiguration _config; private readonly string _database = ""; public ModuleConfigurationWindow(string database) { InitializeComponent(); _database = database.ToLower(); _config = new LocalConfiguration(Path.GetDirectoryName(_database), Path.GetFileName(_database)).Load(); Modules.Configuration = _config; Modules.Refresh(true, true); } private void OK_Click(object sender, RoutedEventArgs e) { new LocalConfiguration(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, ILocalConfigurationSettings { } } }