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 = "";
- }
- }
- }
|