|
@@ -100,27 +100,27 @@ namespace InABox.DynamicGrid
|
|
|
|
|
|
public event OnValidateData? OnValidateData;
|
|
|
|
|
|
- public event OnCustomiseColumns? OnCustomiseColumns;
|
|
|
- public event OnDefineFilter? OnDefineFilter;
|
|
|
+ public OnCustomiseColumns? OnCustomiseColumns { get; set; }
|
|
|
+ public OnDefineFilter? OnDefineFilter { get; set; }
|
|
|
|
|
|
- public event OnDefineLookup? OnDefineLookups;
|
|
|
+ public OnDefineLookup? OnDefineLookups { get; set; }
|
|
|
|
|
|
- public event DefineEditorEventHandler? OnDefineEditor;
|
|
|
- public event OnFormCustomiseEditor? OnFormCustomiseEditor;
|
|
|
- public event OnReconfigureEditors? OnReconfigureEditors;
|
|
|
+ public DefineEditorEventHandler? OnDefineEditor { get; set; }
|
|
|
+ public OnFormCustomiseEditor? OnFormCustomiseEditor { get; set; }
|
|
|
+ public OnReconfigureEditors? OnReconfigureEditors { get; set; }
|
|
|
|
|
|
public event EditorValueChangedHandler? OnEditorValueChanged;
|
|
|
public event OnAfterEditorValueChanged? OnAfterEditorValueChanged;
|
|
|
|
|
|
- public event IDynamicEditorForm.GetDocumentEvent? OnGetDocument;
|
|
|
- public event IDynamicEditorForm.FindDocumentEvent? OnFindDocument;
|
|
|
- public event IDynamicEditorForm.SaveDocumentEvent? OnSaveDocument;
|
|
|
+ public IDynamicEditorForm.GetDocumentEvent? OnGetDocument { get; set; }
|
|
|
+ public IDynamicEditorForm.FindDocumentEvent? OnFindDocument { get; set; }
|
|
|
+ public IDynamicEditorForm.SaveDocumentEvent? OnSaveDocument { get; set; }
|
|
|
|
|
|
public event OnSelectPage? OnSelectPage;
|
|
|
|
|
|
- public event DynamicGridSaveEvent? OnSaveItem;
|
|
|
+ public DynamicGridSaveEvent? OnSaveItem { get; set; }
|
|
|
|
|
|
- public event DynamicEditorGrid.EditorCreatedHandler? OnEditorCreated;
|
|
|
+ public DynamicEditorGrid.EditorCreatedHandler? OnEditorCreated;
|
|
|
|
|
|
public event OKEvent? OnOK;
|
|
|
public event CancelEvent? OnCancel;
|
|
@@ -145,201 +145,34 @@ namespace InABox.DynamicGrid
|
|
|
Setup(type, pages, buttons, PageDataHandler, PreloadPages);
|
|
|
}
|
|
|
|
|
|
+ private IFilter? Editor_OnDefineFilter(Type type)
|
|
|
+ {
|
|
|
+ return OnDefineFilter?.Invoke(type);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void ClearEvents()
|
|
|
+ {
|
|
|
+ OnEditorValueChanged = null;
|
|
|
+ OnAfterEditorValueChanged = null;
|
|
|
+ OnSelectPage = null;
|
|
|
+ OnValidateData = null;
|
|
|
+ }
|
|
|
+
|
|
|
public void Setup(Type type, DynamicEditorPages? pages = null, DynamicEditorButtons? buttons = null,
|
|
|
Func<Type, CoreTable>? PageDataHandler = null, bool PreloadPages = false)
|
|
|
{
|
|
|
- ReadOnly = false;
|
|
|
+ ClearEvents();
|
|
|
|
|
|
- //this.Loaded += new RoutedEventHandler(ConfigureSystemMenu);
|
|
|
+ ReadOnly = false;
|
|
|
|
|
|
Editor.UnderlyingType = type;
|
|
|
|
|
|
- Editor.OnCustomiseColumns += Editor_OnCustomiseColumns;
|
|
|
-
|
|
|
- Editor.OnDefineFilter += editor => OnDefineFilter?.Invoke(editor);
|
|
|
-
|
|
|
- Editor.OnEditorCreated += Editor_OnEditorCreated;
|
|
|
-
|
|
|
- Editor.OnLoadPage += page => { page.Load(Items.First(), PageDataHandler); };
|
|
|
-
|
|
|
- Editor.OnSelectPage += (tab, items) => { OnSelectPage?.Invoke(tab, items); };
|
|
|
+ Editor.OnLoadPage = page => { page.Load(Items.First(), PageDataHandler); };
|
|
|
|
|
|
Editor.PreloadPages = PreloadPages;
|
|
|
|
|
|
- Editor.OnUnloadPage += (page, saved) =>
|
|
|
- {
|
|
|
- if (!saved)
|
|
|
- page.BeforeSave(Items.First());
|
|
|
- else
|
|
|
- page.AfterSave(Items.First());
|
|
|
- };
|
|
|
-
|
|
|
- //Editor.OnGetPropertyInfo += (o, c) => { return CoreUtils.GetProperty(_item.GetType(), c); };
|
|
|
-
|
|
|
- Editor.OnAfterEditorValueChanged += (g, n) => { return OnAfterEditorValueChanged?.Invoke(g, n); };
|
|
|
-
|
|
|
- Editor.OnReconfigureEditors += g => { OnReconfigureEditors?.Invoke(g); };
|
|
|
-
|
|
|
- Editor.OnGetEditor += c =>
|
|
|
- {
|
|
|
- if (_items != null && _items.Any())
|
|
|
- {
|
|
|
- var property = DatabaseSchema.Property(type, c.ColumnName);
|
|
|
- if (property == null) return new NullEditor();
|
|
|
-
|
|
|
- if (property.Editor is NullEditor)
|
|
|
- return property.Editor;
|
|
|
-
|
|
|
- BaseEditor editor;
|
|
|
- if (property is CustomProperty)
|
|
|
- {
|
|
|
- editor = property.Editor.CloneEditor();
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- editor = OnDefineEditor?.Invoke(_items[0], c) ?? c.Editor.CloneEditor();
|
|
|
- var propEditor = property.Editor;
|
|
|
- editor.Page = propEditor.Page;
|
|
|
- editor.Caption = propEditor.Caption;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- //defaultEditor.EditorSequence
|
|
|
-
|
|
|
- //EditorUtils.GetPropertyEditor(type, property, defaultEditor);
|
|
|
-
|
|
|
- /*BaseEditor editor = new NullEditor();
|
|
|
- var caption = "";
|
|
|
- var page = "";
|
|
|
-
|
|
|
- try
|
|
|
- {
|
|
|
- var comps = c.ColumnName.Split('.');
|
|
|
- for (var i = 0; i < comps.Length; i++)
|
|
|
- {
|
|
|
- var column = string.Join(".", comps.Take(i + 1));
|
|
|
- var prop = CoreUtils.GetProperty(type, column);
|
|
|
-
|
|
|
- if (column.Equals(c.ColumnName))
|
|
|
- {
|
|
|
- if (OnDefineEditor != null)
|
|
|
- editor = OnDefineEditor(_items[0], c);
|
|
|
- else
|
|
|
- editor = c.Editor != null ? c.Editor : new NullEditor();
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- var pedit = prop.GetEditor();
|
|
|
- if (pedit is NullEditor)
|
|
|
- return pedit;
|
|
|
- }
|
|
|
-
|
|
|
- editor = editor == null ? new NullEditor() : editor.Clone() as BaseEditor;
|
|
|
-
|
|
|
- var capattr = prop.GetCustomAttribute<Caption>();
|
|
|
- var subcap = capattr != null ? capattr.Text : comps[i];
|
|
|
- var path = capattr != null ? capattr.IncludePath : true;
|
|
|
- if (!string.IsNullOrWhiteSpace(subcap))
|
|
|
- caption = string.IsNullOrWhiteSpace(caption) || path == false ? subcap : string.Format("{0} {1}", caption, subcap);
|
|
|
-
|
|
|
- if (string.IsNullOrWhiteSpace(page))
|
|
|
- {
|
|
|
- var pageattr = prop.GetCustomAttribute<EditorSequence>();
|
|
|
- if (pageattr != null)
|
|
|
- page = pageattr.Page;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- editor.Caption = caption;
|
|
|
- editor.Page = page;
|
|
|
- }
|
|
|
- catch (Exception e)
|
|
|
- {
|
|
|
- var dmprop = DatabaseSchema.Property(_items[0].GetType(), c.ColumnName);
|
|
|
- if (dmprop is CustomProperty)
|
|
|
- {
|
|
|
- editor = dmprop.Editor.Clone() as BaseEditor;
|
|
|
- editor.Caption = dmprop.Caption;
|
|
|
- editor.Page = string.IsNullOrWhiteSpace(dmprop.Page) ? "Custom Fields" : dmprop.Page;
|
|
|
- }
|
|
|
- }*/
|
|
|
-
|
|
|
- if (ReadOnly && editor.Editable.Equals(Editable.Enabled))
|
|
|
- editor.Editable = Editable.Disabled;
|
|
|
- return editor;
|
|
|
- }
|
|
|
-
|
|
|
- return new NullEditor();
|
|
|
- };
|
|
|
-
|
|
|
- Editor.OnGridCustomiseEditor += (sender, column, editor) => OnFormCustomiseEditor?.Invoke(this, Items, column, editor);
|
|
|
-
|
|
|
- Editor.OnGetSequence += c => CoreUtils.GetPropertySequence(_items.First().GetType(), c.ColumnName);
|
|
|
-
|
|
|
- Editor.OnGetPropertyValue += (o, c) =>
|
|
|
- {
|
|
|
- if (!_items.Any())
|
|
|
- return null;
|
|
|
-
|
|
|
- object? result;
|
|
|
- try
|
|
|
- {
|
|
|
- result = CoreUtils.GetPropertyValue(_items.First(), c);
|
|
|
- }
|
|
|
- catch
|
|
|
- {
|
|
|
- result = _items.First().UserProperties.ContainsKey(c) ? _items.First().UserProperties[c] : null;
|
|
|
- }
|
|
|
-
|
|
|
- if (result == null)
|
|
|
- return null;
|
|
|
-
|
|
|
- foreach (var _item in _items)
|
|
|
- {
|
|
|
- object? curvalue;
|
|
|
- try
|
|
|
- {
|
|
|
- curvalue = CoreUtils.GetPropertyValue(_item, c);
|
|
|
- }
|
|
|
- catch
|
|
|
- {
|
|
|
- curvalue = _item.UserProperties.ContainsKey(c) ? _item.UserProperties[c] : null;
|
|
|
- }
|
|
|
-
|
|
|
- if (curvalue == null)
|
|
|
- return null;
|
|
|
-
|
|
|
- if (!curvalue.Equals(result))
|
|
|
- return null;
|
|
|
- }
|
|
|
-
|
|
|
- return result;
|
|
|
- };
|
|
|
-
|
|
|
- Editor.OnSetPropertyValue += (o, c, v) =>
|
|
|
- {
|
|
|
- foreach (var _item in _items)
|
|
|
- if (_item.UserProperties.ContainsKey(c))
|
|
|
- _item.UserProperties[c] = v;
|
|
|
- else
|
|
|
- CoreUtils.SetPropertyValue(_item, c, v);
|
|
|
- };
|
|
|
-
|
|
|
- Editor.OnEditorValueChanged += EditorValueChanged;
|
|
|
-
|
|
|
- Editor.OnDefineLookups += sender => { OnDefineLookups?.Invoke(sender); };
|
|
|
-
|
|
|
- Editor.OnGetDocument += id => { return OnGetDocument?.Invoke(id); };
|
|
|
- Editor.OnSaveDocument += doc => { OnSaveDocument?.Invoke(doc); };
|
|
|
- Editor.OnFindDocument += file => { return OnFindDocument?.Invoke(file); };
|
|
|
-
|
|
|
- Editor.GetItems += () => _items;
|
|
|
-
|
|
|
Pages = pages ?? new DynamicEditorPages();
|
|
|
|
|
|
- if (Pages == null || Pages.Count == 0)
|
|
|
- Editor.Margin = new Thickness(5, 5, 5, 0);
|
|
|
-
|
|
|
Buttons.Children.Clear();
|
|
|
if (buttons != null)
|
|
|
foreach (var button in buttons)
|
|
@@ -466,6 +299,144 @@ namespace InABox.DynamicGrid
|
|
|
|
|
|
public void SetLayoutType<T>() where T : DynamicEditorGridLayout => Editor.SetLayoutType<T>();
|
|
|
|
|
|
+ private void Editor_OnSelectPage(DynamicEditorGrid sender, BaseObject[] items)
|
|
|
+ {
|
|
|
+ OnSelectPage?.Invoke(sender, items);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void Editor_OnUnloadPage(IDynamicEditorPage page, bool saved)
|
|
|
+ {
|
|
|
+ if (!saved)
|
|
|
+ page.BeforeSave(Items.First());
|
|
|
+ else
|
|
|
+ page.AfterSave(Items.First());
|
|
|
+ }
|
|
|
+
|
|
|
+ private Dictionary<string, object?>? Editor_OnAfterEditorValueChanged(DynamicEditorGrid sender, string columnname)
|
|
|
+ {
|
|
|
+ return OnAfterEditorValueChanged?.Invoke(sender, columnname);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void Editor_OnReconfigureEditors(DynamicEditorGrid sender)
|
|
|
+ {
|
|
|
+ OnReconfigureEditors?.Invoke(sender);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void Editor_OnGridCustomiseEditor(DynamicEditorGrid sender, DynamicGridColumn column, BaseEditor editor)
|
|
|
+ {
|
|
|
+ OnFormCustomiseEditor?.Invoke(this, Items, column, editor);
|
|
|
+ }
|
|
|
+
|
|
|
+ private decimal Editor_OnGetSequence(DynamicGridColumn column)
|
|
|
+ {
|
|
|
+ return CoreUtils.GetPropertySequence(_items.First().GetType(), column.ColumnName);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void Editor_OnDefineLookups(ILookupEditorControl editor)
|
|
|
+ {
|
|
|
+ OnDefineLookups?.Invoke(editor);
|
|
|
+ }
|
|
|
+
|
|
|
+ private Document? Editor_OnGetDocument(Guid id)
|
|
|
+ {
|
|
|
+ return OnGetDocument?.Invoke(id);
|
|
|
+ }
|
|
|
+
|
|
|
+ private Document? Editor_OnFindDocument(string file)
|
|
|
+ {
|
|
|
+ return OnFindDocument?.Invoke(file);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void Editor_OnSaveDocument(Document document)
|
|
|
+ {
|
|
|
+ OnSaveDocument?.Invoke(document);
|
|
|
+ }
|
|
|
+
|
|
|
+ private object?[] Editor_GetItems()
|
|
|
+ {
|
|
|
+ return _items;
|
|
|
+ }
|
|
|
+
|
|
|
+ private BaseEditor Editor_OnGetEditor(DynamicGridColumn column)
|
|
|
+ {
|
|
|
+ if (_items != null && _items.Any())
|
|
|
+ {
|
|
|
+ var property = DatabaseSchema.Property(Editor.UnderlyingType, column.ColumnName);
|
|
|
+ if (property == null) return new NullEditor();
|
|
|
+
|
|
|
+ if (property.Editor is NullEditor)
|
|
|
+ return property.Editor;
|
|
|
+
|
|
|
+ BaseEditor editor;
|
|
|
+ if (property is CustomProperty)
|
|
|
+ {
|
|
|
+ editor = property.Editor.CloneEditor();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ editor = OnDefineEditor?.Invoke(_items[0], column) ?? column.Editor.CloneEditor();
|
|
|
+ var propEditor = property.Editor;
|
|
|
+ editor.Page = propEditor.Page;
|
|
|
+ editor.Caption = propEditor.Caption;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (ReadOnly && editor.Editable.Equals(Editable.Enabled))
|
|
|
+ editor.Editable = Editable.Disabled;
|
|
|
+ return editor;
|
|
|
+ }
|
|
|
+
|
|
|
+ return new NullEditor();
|
|
|
+ }
|
|
|
+
|
|
|
+ private object? Editor_OnGetPropertyValue(object sender, string column)
|
|
|
+ {
|
|
|
+ if (!_items.Any())
|
|
|
+ return null;
|
|
|
+
|
|
|
+ object? result;
|
|
|
+ try
|
|
|
+ {
|
|
|
+ result = CoreUtils.GetPropertyValue(_items.First(), column);
|
|
|
+ }
|
|
|
+ catch
|
|
|
+ {
|
|
|
+ result = _items.First().UserProperties.ContainsKey(column) ? _items.First().UserProperties[column] : null;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (result == null)
|
|
|
+ return null;
|
|
|
+
|
|
|
+ foreach (var _item in _items)
|
|
|
+ {
|
|
|
+ object? curvalue;
|
|
|
+ try
|
|
|
+ {
|
|
|
+ curvalue = CoreUtils.GetPropertyValue(_item, column);
|
|
|
+ }
|
|
|
+ catch
|
|
|
+ {
|
|
|
+ curvalue = _item.UserProperties.ContainsKey(column) ? _item.UserProperties[column] : null;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (curvalue == null)
|
|
|
+ return null;
|
|
|
+
|
|
|
+ if (!curvalue.Equals(result))
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void Editor_OnSetPropertyValue(object sender, string column, object value)
|
|
|
+ {
|
|
|
+ foreach (var _item in _items)
|
|
|
+ if (_item.UserProperties.ContainsKey(column))
|
|
|
+ _item.UserProperties[column] = value;
|
|
|
+ else
|
|
|
+ CoreUtils.SetPropertyValue(_item, column, value);
|
|
|
+ }
|
|
|
+
|
|
|
//public void EditLayout() => Editor.EditLayout();
|
|
|
//public void ResetLayout() => Editor.ResetLayout();
|
|
|
|