private CollectionBoxViewModel createViewModel(StackPanel control, string parent, string name, Type type, object[] attributes, IList member, bool index1) { Type elementType = ReflectionExt.GetBaseTypeArg(typeof(IList <>), type, 0); CollectionBoxViewModel mv = new CollectionBoxViewModel(new StringConv(elementType, ReflectionExt.GetPassableAttributes(1, attributes))); mv.Index1 = index1; //add lambda expression for editing a single element mv.OnEditItem += (int index, object element, CollectionBoxViewModel.EditElementOp op) => { string elementName = name + "[" + index + "]"; DataEditForm frmData = new DataEditForm(); frmData.Title = DataEditor.GetWindowTitle(parent, elementName, element, elementType, ReflectionExt.GetPassableAttributes(1, attributes)); DataEditor.LoadClassControls(frmData.ControlPanel, parent, elementName, elementType, ReflectionExt.GetPassableAttributes(1, attributes), element, true); frmData.SelectedOKEvent += () => { element = DataEditor.SaveClassControls(frmData.ControlPanel, elementName, elementType, ReflectionExt.GetPassableAttributes(1, attributes), true); op(index, element); frmData.Close(); }; frmData.SelectedCancelEvent += () => { frmData.Close(); }; control.GetOwningForm().RegisterChild(frmData); frmData.Show(); }; mv.LoadFromList(member); return(mv); }
public override void LoadWindowControls(StackPanel control, string parent, string name, Type type, object[] attributes, IPriorityList member) { LoadLabelControl(control, name); Type elementType = ReflectionExt.GetBaseTypeArg(typeof(IPriorityList <>), type, 0); PriorityListBox lbxValue = new PriorityListBox(); PriorityListBoxViewModel mv = new PriorityListBoxViewModel(new StringConv(elementType, ReflectionExt.GetPassableAttributes(2, attributes))); lbxValue.DataContext = mv; //add lambda expression for editing a single element mv.OnEditItem = (Priority priority, int index, object element, PriorityListBoxViewModel.EditElementOp op) => { string elementName = name + "[" + priority.ToString() + "]"; DataEditForm frmData = new DataEditForm(); frmData.Title = DataEditor.GetWindowTitle(parent, elementName, element, elementType, ReflectionExt.GetPassableAttributes(2, attributes)); DataEditor.LoadClassControls(frmData.ControlPanel, parent, elementName, elementType, ReflectionExt.GetPassableAttributes(2, attributes), element, true); frmData.SelectedOKEvent += () => { element = DataEditor.SaveClassControls(frmData.ControlPanel, elementName, elementType, ReflectionExt.GetPassableAttributes(2, attributes), true); op(priority, index, element); frmData.Close(); }; frmData.SelectedCancelEvent += () => { frmData.Close(); }; control.GetOwningForm().RegisterChild(frmData); frmData.Show(); }; mv.OnEditPriority = (Priority priority, int index, PriorityListBoxViewModel.EditPriorityOp op) => { string elementName = name + "<Priority>"; DataEditForm frmData = new DataEditForm(); frmData.Title = DataEditor.GetWindowTitle(parent, elementName, priority, typeof(Priority), ReflectionExt.GetPassableAttributes(1, attributes)); DataEditor.LoadClassControls(frmData.ControlPanel, parent, elementName, typeof(Priority), ReflectionExt.GetPassableAttributes(1, attributes), priority, true); frmData.SelectedOKEvent += () => { object priorityObj = DataEditor.SaveClassControls(frmData.ControlPanel, elementName, typeof(Priority), ReflectionExt.GetPassableAttributes(1, attributes), true); op(priority, index, (Priority)priorityObj); frmData.Close(); }; frmData.SelectedCancelEvent += () => { frmData.Close(); }; control.GetOwningForm().RegisterChild(frmData); frmData.Show(); }; mv.LoadFromList(member); control.Children.Add(lbxValue); }
public override void LoadWindowControls(StackPanel control, string parent, string name, Type type, object[] attributes, ISpawnRangeList member) { LoadLabelControl(control, name); Type elementType = ReflectionExt.GetBaseTypeArg(typeof(ISpawnRangeList <>), type, 0); RangeBorderAttribute rangeAtt = ReflectionExt.FindAttribute <RangeBorderAttribute>(attributes); SpawnRangeListBox lbxValue = new SpawnRangeListBox(); lbxValue.MaxHeight = 260; SpawnRangeListBoxViewModel mv = new SpawnRangeListBoxViewModel(new StringConv(elementType, ReflectionExt.GetPassableAttributes(1, attributes))); if (rangeAtt != null) { mv.Index1 = rangeAtt.Index1; mv.Inclusive = rangeAtt.Inclusive; } lbxValue.DataContext = mv; //add lambda expression for editing a single element mv.OnEditItem += (int index, object element, SpawnRangeListBoxViewModel.EditElementOp op) => { string elementName = name + "[" + index + "]"; DataEditForm frmData = new DataEditForm(); frmData.Title = DataEditor.GetWindowTitle(parent, elementName, element, elementType, ReflectionExt.GetPassableAttributes(2, attributes)); DataEditor.LoadClassControls(frmData.ControlPanel, parent, elementName, elementType, ReflectionExt.GetPassableAttributes(2, attributes), element, true); frmData.SelectedOKEvent += () => { element = DataEditor.SaveClassControls(frmData.ControlPanel, elementName, elementType, ReflectionExt.GetPassableAttributes(2, attributes), true); op(index, element); frmData.Close(); }; frmData.SelectedCancelEvent += () => { frmData.Close(); }; control.GetOwningForm().RegisterChild(frmData); frmData.Show(); }; mv.LoadFromList(member); control.Children.Add(lbxValue); }
public override void LoadClassControls(ISpawnList obj, TableLayoutPanel control) { SpawnListBox lbxValue = new SpawnListBox(); lbxValue.Dock = DockStyle.Fill; lbxValue.Size = new Size(0, 200); Type elementType = ReflectionExt.GetBaseTypeArg(typeof(ISpawnList <>), obj.GetType(), 0); lbxValue.StringConv = DataEditor.GetStringRep(elementType, new object[0] { }); //add lambda expression for editing a single element lbxValue.OnEditItem = (int index, object element, SpawnListBox.EditElementOp op) => { ElementForm frmData = new ElementForm(); if (element == null) { frmData.Text = "New " + elementType.Name; } else { frmData.Text = element.ToString(); } DataEditor.StaticLoadMemberControl(frmData.ControlPanel, "(SpawnList) [" + index + "]", elementType, new object[0] { }, element, true); frmData.OnOK += (object okSender, EventArgs okE) => { DataEditor.StaticSaveMemberControl(frmData.ControlPanel, "SpawnList", elementType, new object[0] { }, ref element, true); op(index, element); frmData.Close(); }; frmData.OnCancel += (object okSender, EventArgs okE) => { frmData.Close(); }; frmData.Show(); }; lbxValue.LoadFromList(obj.GetType(), obj); control.Controls.Add(lbxValue); }
public override void LoadWindowControls(StackPanel control, string parent, string name, Type type, object[] attributes, IList member) { LoadLabelControl(control, name); Type elementType = ReflectionExt.GetBaseTypeArg(typeof(IList <>), member.GetType(), 0); CollectionBox lbxValue = new CollectionBox(); lbxValue.MaxHeight = 180; CollectionBoxViewModel mv = new CollectionBoxViewModel(new StringConv(elementType, ReflectionExt.GetPassableAttributes(1, attributes))); lbxValue.DataContext = mv; //add lambda expression for editing a single element mv.OnEditItem += (int index, object element, CollectionBoxViewModel.EditElementOp op) => { string elementName = name + "[" + index + "]"; DataEditForm frmData = new DataEditForm(); frmData.Title = DataEditor.GetWindowTitle(parent, elementName, element, elementType, ReflectionExt.GetPassableAttributes(1, attributes)); //TODO: make this a member and reference it that way DataEditor.LoadClassControls(frmData.ControlPanel, parent, elementName, elementType, ReflectionExt.GetPassableAttributes(1, attributes), element, true); frmData.SelectedOKEvent += async() => { object newElement = DataEditor.SaveClassControls(frmData.ControlPanel, elementName, elementType, ReflectionExt.GetPassableAttributes(1, attributes), true); bool itemExists = false; List <object> states = (List <object>)mv.GetList(typeof(List <object>)); for (int ii = 0; ii < states.Count; ii++) { //ignore the current index being edited //if the element is null, then we are editing a new object, so skip if (ii != index || element == null) { if (states[ii].Equals(newElement)) { itemExists = true; } } } if (itemExists) { await MessageBox.Show(control.GetOwningForm(), "Cannot add duplicate states.", "Entry already exists.", MessageBox.MessageBoxButtons.Ok); } else { op(index, newElement); frmData.Close(); } }; frmData.SelectedCancelEvent += () => { frmData.Close(); }; control.GetOwningForm().RegisterChild(frmData); frmData.Show(); }; List <object> states = new List <object>(); foreach (object state in member) { states.Add(state); } mv.LoadFromList(states); control.Children.Add(lbxValue); }
public override void LoadWindowControls(StackPanel control, string parent, string name, Type type, object[] attributes, IDictionary member) { LoadLabelControl(control, name); Type keyType = ReflectionExt.GetBaseTypeArg(typeof(IDictionary <,>), type, 0); Type elementType = ReflectionExt.GetBaseTypeArg(typeof(IDictionary <,>), type, 1); DictionaryBox lbxValue = new DictionaryBox(); lbxValue.MaxHeight = 180; DictionaryBoxViewModel mv = new DictionaryBoxViewModel(control.GetOwningForm(), new StringConv(elementType, ReflectionExt.GetPassableAttributes(2, attributes))); lbxValue.DataContext = mv; //add lambda expression for editing a single element mv.OnEditItem += (object key, object element, DictionaryBoxViewModel.EditElementOp op) => { string elementName = name + "[" + key.ToString() + "]"; DataEditForm frmData = new DataEditForm(); frmData.Title = DataEditor.GetWindowTitle(parent, elementName, element, elementType, ReflectionExt.GetPassableAttributes(2, attributes)); DataEditor.LoadClassControls(frmData.ControlPanel, parent, elementName, elementType, ReflectionExt.GetPassableAttributes(2, attributes), element, true); frmData.SelectedOKEvent += () => { element = DataEditor.SaveClassControls(frmData.ControlPanel, elementName, elementType, ReflectionExt.GetPassableAttributes(2, attributes), true); op(key, element); frmData.Close(); }; frmData.SelectedCancelEvent += () => { frmData.Close(); }; control.GetOwningForm().RegisterChild(frmData); frmData.Show(); }; mv.OnEditKey += (object key, object element, DictionaryBoxViewModel.EditElementOp op) => { string elementName = name + "<Key>"; DataEditForm frmData = new DataEditForm(); frmData.Title = DataEditor.GetWindowTitle(parent, elementName, key, keyType, ReflectionExt.GetPassableAttributes(1, attributes)); DataEditor.LoadClassControls(frmData.ControlPanel, parent, elementName, keyType, ReflectionExt.GetPassableAttributes(1, attributes), key, true); frmData.SelectedOKEvent += () => { key = DataEditor.SaveClassControls(frmData.ControlPanel, elementName, keyType, ReflectionExt.GetPassableAttributes(1, attributes), true); op(key, element); frmData.Close(); }; frmData.SelectedCancelEvent += () => { frmData.Close(); }; control.GetOwningForm().RegisterChild(frmData); frmData.Show(); }; mv.LoadFromDict(member); control.Children.Add(lbxValue); }
public override void LoadWindowControls(StackPanel control, string parent, string name, Type type, object[] attributes, IRangeDict member) { LoadLabelControl(control, name); Type keyType = typeof(IntRange); Type elementType = ReflectionExt.GetBaseTypeArg(typeof(IRangeDict <>), type, 0); RangeBorderAttribute rangeAtt = ReflectionExt.FindAttribute <RangeBorderAttribute>(attributes); RangeDictBox lbxValue = new RangeDictBox(); lbxValue.MaxHeight = 180; RangeDictBoxViewModel mv = new RangeDictBoxViewModel(control.GetOwningForm(), new StringConv(elementType, ReflectionExt.GetPassableAttributes(1, attributes))); if (rangeAtt != null) { mv.Index1 = rangeAtt.Index1; mv.Inclusive = rangeAtt.Inclusive; } lbxValue.DataContext = mv; //add lambda expression for editing a single element mv.OnEditItem += (IntRange key, object element, RangeDictBoxViewModel.EditElementOp op) => { string elementName = name + "[" + key.ToString() + "]"; DataEditForm frmData = new DataEditForm(); frmData.Title = DataEditor.GetWindowTitle(parent, elementName, element, elementType, ReflectionExt.GetPassableAttributes(1, attributes)); DataEditor.LoadClassControls(frmData.ControlPanel, parent, elementName, elementType, ReflectionExt.GetPassableAttributes(1, attributes), element, true); frmData.SelectedOKEvent += () => { element = DataEditor.SaveClassControls(frmData.ControlPanel, elementName, elementType, ReflectionExt.GetPassableAttributes(1, attributes), true); op(key, element); frmData.Close(); }; frmData.SelectedCancelEvent += () => { frmData.Close(); }; control.GetOwningForm().RegisterChild(frmData); frmData.Show(); }; mv.OnEditKey += (IntRange key, object element, RangeDictBoxViewModel.EditElementOp op) => { string elementName = name + "<Range>"; DataEditForm frmKey = new DataEditForm(); List <object> attrList = new List <object>(); if (rangeAtt != null) { attrList.Add(rangeAtt); } frmKey.Title = DataEditor.GetWindowTitle(parent, elementName, key, keyType, attrList.ToArray()); DataEditor.LoadClassControls(frmKey.ControlPanel, parent, elementName, keyType, attrList.ToArray(), key, true); frmKey.SelectedOKEvent += () => { key = (IntRange)DataEditor.SaveClassControls(frmKey.ControlPanel, elementName, keyType, attrList.ToArray(), true); op(key, element); frmKey.Close(); }; frmKey.SelectedCancelEvent += () => { frmKey.Close(); }; control.GetOwningForm().RegisterChild(frmKey); frmKey.Show(); }; mv.LoadFromDict(member); control.Children.Add(lbxValue); }
public override void LoadClassControls(ITypeDict obj, TableLayoutPanel control) { CollectionBox lbxValue = new CollectionBox(); lbxValue.Dock = DockStyle.Fill; lbxValue.Size = new Size(0, 150); Type elementType = ReflectionExt.GetBaseTypeArg(typeof(ITypeDict <>), obj.GetType(), 0); lbxValue.StringConv = DataEditor.GetStringRep(elementType, new object[0] { }); //add lambda expression for editing a single element lbxValue.OnEditItem = (int index, object element, CollectionBox.EditElementOp op) => { ElementForm frmData = new ElementForm(); if (element == null) { frmData.Text = "New " + elementType.Name; } else { frmData.Text = element.ToString(); } DataEditor.StaticLoadMemberControl(frmData.ControlPanel, "(StateCollection) [" + index + "]", elementType, new object[0] { }, element, true); frmData.OnOK += (object okSender, EventArgs okE) => { DataEditor.StaticSaveMemberControl(frmData.ControlPanel, "StateCollection", elementType, new object[0] { }, ref element, true); bool itemExists = false; for (int ii = 0; ii < lbxValue.Collection.Count; ii++) { if (ii != index) { if (lbxValue.Collection[ii].GetType() == element.GetType()) { itemExists = true; } } } if (itemExists) { MessageBox.Show("Cannot add duplicate states.", "Entry already exists.", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { op(index, element); frmData.Close(); } }; frmData.OnCancel += (object okSender, EventArgs okE) => { frmData.Close(); }; frmData.Show(); }; List <object> states = new List <object>(); foreach (object state in obj) { states.Add(state); } lbxValue.LoadFromList(typeof(List <object>), states); control.Controls.Add(lbxValue); }