예제 #1
0
        public static void RefreshContextMenu(this IDataUi dataUi, ContextMenu contextMenu)
        {
            RoutedEventHandler makeDefaultHandler = (sender, e) =>
            {
                dataUi.InstanceMember.IsDefault = true;
                dataUi.Refresh();
                if (dataUi is ISetDefaultable)
                {
                    ((ISetDefaultable)dataUi).SetToDefault();
                }
            };



            contextMenu.Items.Clear();

            AddContextMenuItem("Make Default", makeDefaultHandler, contextMenu);
            if (dataUi.InstanceMember != null)
            {
                foreach (var kvp in dataUi.InstanceMember.ContextMenuEvents)
                {
                    AddContextMenuItem(kvp.Key, kvp.Value, contextMenu).Tag = dataUi.InstanceMember;
                }
            }
        }
예제 #2
0
        public static void RefreshContextMenu(this IDataUi dataUi, ContextMenu contextMenu)
        {
            RoutedEventHandler makeDefaultHandler = (sender, e) =>
            {
                dataUi.InstanceMember.IsDefault = true;
                dataUi.Refresh();

                // the instance member may have undone the IsDefault, so let's only do this if it's still set to default:
                if (dataUi is ISetDefaultable && dataUi.InstanceMember.IsDefault)
                {
                    ((ISetDefaultable)dataUi).SetToDefault();
                }
            };



            contextMenu.Items.Clear();

            AddContextMenuItem("Make Default", makeDefaultHandler, contextMenu);
            if (dataUi.InstanceMember != null)
            {
                foreach (var kvp in dataUi.InstanceMember.ContextMenuEvents)
                {
                    AddContextMenuItem(kvp.Key, kvp.Value, contextMenu).Tag = dataUi.InstanceMember;
                }
            }
        }
        private UserControl CreateControlByType(InstanceMember instanceMember, Type type)
        {
            UserControl controlToAdd = null;

            if (instanceMember.PreferredDisplayer != null)
            {
                controlToAdd = (UserControl)Activator.CreateInstance(instanceMember.PreferredDisplayer);
            }

            if (controlToAdd == null)
            {
                foreach (var kvp in mTypeDisplayerAssociation)
                {
                    if (kvp.Key(type))
                    {
                        controlToAdd = (UserControl)Activator.CreateInstance(kvp.Value);
                    }
                }
            }


            if (controlToAdd == null)
            {
                controlToAdd = new TextBoxDisplay();
            }


            IDataUi display = (IDataUi)controlToAdd;

            display.InstanceMember = instanceMember;

            return(controlToAdd);
        }
예제 #4
0
 public TextBoxDisplayLogic(IDataUi container, TextBox textBox)
 {
     mAssociatedTextBox                 = textBox;
     mContainer                         = container;
     mAssociatedTextBox.GotFocus       += HandleTextBoxGotFocus;
     mAssociatedTextBox.PreviewKeyDown += HandlePreviewKeydown;
     mAssociatedTextBox.TextChanged    += HandleTextChanged;
 }
예제 #5
0
 public TextBoxDisplayLogic(IDataUi container, TextBox textBox)
 {
     mAssociatedTextBox = textBox;
     mContainer = container;
     mAssociatedTextBox.GotFocus += HandleTextBoxGotFocus;
     mAssociatedTextBox.PreviewKeyDown += HandlePreviewKeydown;
     mAssociatedTextBox.TextChanged += HandleTextChanged;
 }
예제 #6
0
        UserControl CreateInternalControl()
        {
            if (InstanceMember == null)
            {
                throw new NullReferenceException(nameof(InstanceMember));
            }


            UserControl controlToAdd = null;

            if (InstanceMember.PreferredDisplayer != null)
            {
                controlToAdd = (UserControl)Activator.CreateInstance(InstanceMember.PreferredDisplayer);
            }

            if (controlToAdd == null)
            {
                var type = InstanceMember.PropertyType;

                foreach (var kvp in mTypeDisplayerAssociation)
                {
                    if (kvp.Key(type))
                    {
                        controlToAdd = (UserControl)Activator.CreateInstance(kvp.Value);
                    }
                }
            }

            if (controlToAdd == null && InstanceMember.CustomOptions != null && InstanceMember.CustomOptions.Count != 0)
            {
                controlToAdd = new ComboBoxDisplay();
            }

            if (controlToAdd == null)
            {
                controlToAdd = new TextBoxDisplay();
            }

            var displayerType = controlToAdd.GetType();

            foreach (var kvp in InstanceMember.PropertiesToSetOnDisplayer)
            {
                var propertyInfo = displayerType.GetProperty(kvp.Key);

                propertyInfo?.SetValue(controlToAdd, kvp.Value, null);
            }

            IDataUi display = (IDataUi)controlToAdd;

            display.InstanceMember = InstanceMember;

            InstanceMember.CallUiCreated(controlToAdd);

            // can we share them like this? Is it safe? OK?
            this.ContextMenu = controlToAdd.ContextMenu;

            return(controlToAdd);
        }
예제 #7
0
        public static bool TryGetValueOnInstance(this IDataUi dataUi, out object value)
        {
            //////////////////Early Out/////////////////////////////////
            if (dataUi.HasEnoughInformationToWork() == false || dataUi.InstanceMember.IsWriteOnly)
            {
                value = null;
                return(false);
            }
            ////////////////End Early Out///////////////////////////////

            value = dataUi.InstanceMember.Value;

            return(true);
        }
예제 #8
0
파일: InstanceMember.cs 프로젝트: Kr3m/Gum
        internal void CallBeforeSetByUi(IDataUi dataUi)
        {
            if (BeforeSetByUi != null)
            {
                BeforePropertyChangedArgs args = new BeforePropertyChangedArgs();
                object value;
                dataUi.TryGetValueOnUi(out value);

                args.NewValue = value;

                BeforeSetByUi(this, args);

                if (args.WasManuallySet)
                {
                    // The event changed it, so let's force it back on the UI
                    dataUi.TrySetValueOnUi(args.OverridingValue);
                }
            }
        }
예제 #9
0
        private static void GetIfValuesCanBeSetOnInstance(IDataUi dataUi, out ApplyValueResult result, out bool hasErrorOccurred)
        {
            result           = ApplyValueResult.UnknownError;
            hasErrorOccurred = false;

            if (dataUi.HasEnoughInformationToWork() == false)
            {
                result           = ApplyValueResult.NotEnoughInformation;
                hasErrorOccurred = true;
            }
            if (dataUi.InstanceMember.IsReadOnly)
            {
                result           = ApplyValueResult.NotSupported;
                hasErrorOccurred = true;
            }
            if (dataUi.SuppressSettingProperty)
            {
                result           = ApplyValueResult.NotEnabled;
                hasErrorOccurred = true;
            }
        }
        private static void GetIfValuesCanBeSetOnInstance(IDataUi dataUi, out ApplyValueResult result, out bool hasErrorOccurred)
        {
            result = ApplyValueResult.UnknownError;
            hasErrorOccurred = false;

            if (dataUi.HasEnoughInformationToWork() == false)
            {
                result = ApplyValueResult.NotEnoughInformation;
                hasErrorOccurred = true;
            }
            if (dataUi.InstanceMember.IsReadOnly)
            {
                result = ApplyValueResult.NotSupported;
                hasErrorOccurred = true;
            }
            if (dataUi.SuppressSettingProperty)
            {
                result = ApplyValueResult.NotEnabled;
                hasErrorOccurred = true;
            }
        }
예제 #11
0
        public static ApplyValueResult TrySetValueOnInstance(this IDataUi dataUi, object valueToSet)
        {
            ApplyValueResult result;
            bool             hasErrorOccurred;

            GetIfValuesCanBeSetOnInstance(dataUi, out result, out hasErrorOccurred);

            if (!hasErrorOccurred)
            {
                if (dataUi.InstanceMember.Value != valueToSet)
                {
                    dataUi.InstanceMember.Value = valueToSet;
                    result = ApplyValueResult.Success;
                    dataUi.InstanceMember.CallAfterSetByUi();
                }
                else
                {
                    result = ApplyValueResult.Skipped;
                }
            }

            return(result);
        }
예제 #12
0
        public static ApplyValueResult TrySetValueOnInstance(this IDataUi dataUi)
        {
            ApplyValueResult result;
            bool             hasErrorOccurred;

            GetIfValuesCanBeSetOnInstance(dataUi, out result, out hasErrorOccurred);

            if (!hasErrorOccurred)
            {
                object valueOnUi;

                result = dataUi.TryGetValueOnUi(out valueOnUi);

                if (result == ApplyValueResult.Success)
                {
                    dataUi.InstanceMember.Value = valueOnUi;
                    result = ApplyValueResult.Success;
                    dataUi.InstanceMember.CallAfterSetByUi();
                }
            }

            return(result);
        }
예제 #13
0
 public static bool HasEnoughInformationToWork(this IDataUi dataUi)
 {
     return(dataUi.InstanceMember.IsDefined);
 }
예제 #14
0
 public static Type GetPropertyType(this IDataUi dataUi)
 {
     return(dataUi.InstanceMember.PropertyType);
 }
예제 #15
0
        internal void CallBeforeSetByUi(IDataUi dataUi)
        {
            if (BeforeSetByUi != null)
            {
                BeforePropertyChangedArgs args = new BeforePropertyChangedArgs();
                object value;
                dataUi.TryGetValueOnUi(out value);

                args.NewValue = value;

                BeforeSetByUi(this, args);

                if (args.WasManuallySet)
                {
                    // The event changed it, so let's force it back on the UI
                    dataUi.TrySetValueOnUi(args.OverridingValue);
                }
            }
        }