| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 | using System;using System.Collections;using System.Collections.Generic;using System.Linq;using System.Windows;using System.Windows.Controls;using System.Windows.Media;using InABox.Core;namespace InABox.DynamicGrid{    internal class DynamicJsonGrid<T> : DynamicGrid<T> where T : BaseObject, new()    {        private int rowindex = -1;        protected override void DeleteItems(params CoreRow[] rows)        {            var indexes = rows.Select(x => x.Index).OrderBy(x => x).ToArray();            foreach (var index in indexes)                Data.Rows.RemoveAt(index);        }        protected override T LoadItem(CoreRow row)        {            rowindex = row.Index;            return row.ToObject<T>();        }        protected override void Reload(Filters<T> criteria, Columns<T> columns, ref SortOrder<T>? sort, Action<CoreTable?, Exception?> action)        {        }        protected override void SaveItem(T item)        {            CoreRow row;            if (rowindex == -1)            {                row = Data.NewRow();                Data.Rows.Add(row);            }            else            {                row = Data.Rows[rowindex];            }            Data.LoadRow(row, item);        }    }    internal class JsonEditorControl : DynamicEditorControl<string>    {        private Button _button;        private string _value = "";        public JsonEditorControl()        {            Width = 150;        }        public override int DesiredHeight()        {            return 25;        }        public override int DesiredWidth()        {            return 150;        }        public override void SetColor(Color color)        {            _button.Background = new SolidColorBrush(color);        }        public override void SetFocus()        {            // Not Sure what to do here?        }        protected override FrameworkElement CreateEditor()        {            _button = new Button();            _button.Content = "Edit";            _button.Click += _button_Click;            return _button;        }        private void _button_Click(object sender, RoutedEventArgs e)        {            var type = (EditorDefinition as JsonEditor).Type;            var listtype = typeof(List<>).MakeGenericType(type);            var list = Activator.CreateInstance(listtype) as IList;            if (!string.IsNullOrWhiteSpace(_value))                Serialization.DeserializeInto(_value, list);            var array = new object[list.Count];            list.CopyTo(array, 0);            var data = new CoreTable();            data.LoadColumns(type);            data.LoadRows(array);            /*var gridtype = typeof(DynamicJsonGrid<>).MakeGenericType(type);            var grid = Activator.CreateInstance(gridtype) as IDynamicGrid;            grid.Data = data;            if (grid.DirectEdit(data))            {                var saved = data.Rows.Select(x => x.ToObject(type)).ToArray();                _value = Serialization.Serialize(saved, true);                CheckChanged();            }*/        }        protected override string RetrieveValue()        {            return _value;        }        protected override void UpdateValue(string value)        {            _value = "";        }    }}
 |