private ObjectFieldValue CreateObjectFieldValue(string name, Type type, PropertyInfo property, object o) { ObjectFieldValue field = new ObjectFieldValue { Name = name, IsNullable = !type.IsValueType, PropertyInfo = property, Type = type, Value = o }; field.ValueChanged += ValueChangedMethod; return(field); }
/// <summary> /// Gets called when a key was pressed while the tree view has the focus. /// </summary> /// <param name="sender">The sender of the event.</param> /// <param name="e">More information about the event.</param> private void trvTree_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { if (trvTree.SelectedNode != null && trvTree.SelectedNode.Tag is ObjectFieldValue) { ObjectFieldValue valueField = trvTree.SelectedNode.Tag as ObjectFieldValue; if (valueField.Type == typeof(bool)) { valueField.Value = !((bool)valueField.Value); return; } } objectValueNodeControl.BeginEdit(); } }
private CompareResult CompareRecur(ObjectField expected, ObjectField current) { CompareFieldsEventArgs eventArgs = new CompareFieldsEventArgs(expected, current); OnCompareFields(eventArgs); if (eventArgs.CompareResult != null) { AddResult(expected, current, eventArgs.CompareResult); return(eventArgs.CompareResult); } if (expected == null || current == null) { return(new CompareResult(ResultState.Unknown, 0)); } if (expected.GetType() != current.GetType()) { // Type is different. return(AddResult(expected, current, ResultState.NotEqual, 0)); } if (expected.Value != null && current.Value == null) { // The field is missing. return(AddResult(expected, current, ResultState.Missing, 0)); } if (expected.Value == null && current.Value != null) { // The field is new. return(AddResult(expected, current, ResultState.New, 0)); } ObjectFieldValue expectedValue = expected as ObjectFieldValue; ObjectFieldValue currentValue = current as ObjectFieldValue; if (expectedValue != null && currentValue != null) { if (expectedValue.Name != currentValue.Name) { // Fields are different return(AddResult(expected, current, ResultState.NotEqual, 0)); } if (expectedValue.Value != null && currentValue.Value != null && !expectedValue.Value.Equals(currentValue.Value)) { // Value is different return(AddResult(expected, current, ResultState.NotEqual, 0)); } return(AddResult(expected, current, ResultState.Equal, 1)); } IEnumerator <ObjectField> expectedEnumerator = expected.Childs.GetEnumerator(); IEnumerator <ObjectField> currentEnumerator = current.Childs.GetEnumerator(); ResultState resultState = ResultState.Equal; double resultPercent = 0; int count = 0; while (expectedEnumerator.MoveNext() & currentEnumerator.MoveNext()) { CompareResult currentResult = CompareRecur(expectedEnumerator.Current, currentEnumerator.Current); if (currentResult.State != ResultState.Equal && currentResult.State != ResultState.Ignored) { resultState = ResultState.NotEqual; } if (currentResult.State != ResultState.Ignored) { resultPercent += currentResult.Percent; count++; } } if (expectedEnumerator.Current != null) { do { AddResult(expectedEnumerator.Current, null, ResultState.Missing, 0); count++; } while (expectedEnumerator.MoveNext()); } if (currentEnumerator.Current != null) { do { AddResult(null, currentEnumerator.Current, ResultState.New, 0); count++; } while (currentEnumerator.MoveNext()); } resultPercent = count != 0 ? resultPercent / count : 1; return(AddResult(expected, current, resultState, resultPercent)); }