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);
        }
Exemple #2
0
 /// <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));
        }