Example #1
0
        /// <summary>
        /// Creates an instance of <see cref="MessageDetail"/> by parsing out the textual dsl.
        /// </summary>
        /// <param name="target">The target of the message.</param>
        /// <param name="messageText">The textual message dsl.</param>
        /// <param name="namedElements">All the <see cref="Control"/> instances with names in the scope.</param>
        /// <returns>The created message detail.</returns>
        public static MessageDetail CreateMessageDetail(Control target, string messageText,
                                                        IEnumerable <Control> namedElements)
        {
            var openingParenthesisIndex = messageText.IndexOf('(');

            if (openingParenthesisIndex < 0)
            {
                openingParenthesisIndex = messageText.Length;
            }

            var closingParenthesisIndex = messageText.LastIndexOf(')');

            if (closingParenthesisIndex < 0)
            {
                closingParenthesisIndex = messageText.Length;
            }

            var core    = messageText.Substring(0, openingParenthesisIndex).Trim();
            var message = InterpretMessageText(core);

            if (closingParenthesisIndex - openingParenthesisIndex > 1)
            {
                var paramString = messageText.Substring(openingParenthesisIndex + 1,
                                                        closingParenthesisIndex - openingParenthesisIndex - 1);
                var parameters = SplitParameters(paramString);

                foreach (var parameter in parameters)
                {
                    message.Parameters.Add(CreateParameter(target, parameter.Trim(), namedElements));
                }
            }

            return(message);
        }
Example #2
0
        /// <summary>
        /// Creates a binding on a <see cref="Parameter" />.
        /// </summary>
        /// <param name="target">The target to which the message is applied.</param>
        /// <param name="parameter">The parameter object.</param>
        /// <param name="control">The actual control to bind to.</param>
        /// <param name="propertyName">The name of the property to bind to.</param>
        /// <param name="bindingMode">The binding mode to use.</param>
        public static void BindParameter(Control target, Parameter parameter, Control control,
                                         string propertyName, BindingMode bindingMode)
        {
            if (string.IsNullOrEmpty(propertyName))
            {
                var convention = ConventionManager.GetElementConvention(control.GetType());
                if (convention != null)
                {
                    propertyName = convention.ParameterProperty;
                }
            }

            if (!string.IsNullOrEmpty(propertyName))
            {
                var binding = new Binding()
                {
                    SourceObject = control,
                    SourcePath   = propertyName,
                    TargetObject = parameter,
                    TargetPath   = "Value",
                    Mode         = bindingMode
                };

                parameter.BindingManager.Bindings.Add(binding);
            }
        }
Example #3
0
        /// <summary>
        /// Executes the handler the first time the elements's LayoutUpdated event fires.
        /// </summary>
        /// <param name="control">The control.</param>
        /// <param name="handler">The handler.</param>
        public static void ExecuteOnLayoutUpdated(Control control, LayoutEventHandler handler)
        {
            LayoutEventHandler onLayout = null;

            onLayout = (s, e) =>
            {
                handler(s, e);
                control.Layout -= onLayout;
            };
            control.Layout += onLayout;
        }
Example #4
0
        /// <summary>
        /// Creates a binding on a <see cref="Parameter" />.
        /// </summary>
        /// <param name="target">The target to which the message is applied.</param>
        /// <param name="parameter">The parameter object.</param>
        /// <param name="controlName">The name of the control to bind to.</param>
        /// <param name="propertyName">The name of the property to bind to.</param>
        /// <param name="bindingMode">The binding mode to use.</param>
        /// <param name="namedElements">All the <see cref="Control"/> instances with names in the scope.</param>
        public static void BindParameters(Control target, Parameter parameter, string controlName,
                                          string propertyName, BindingMode bindingMode, IEnumerable <Control> namedElements)
        {
            var control = namedElements.FindName(controlName);

            if (control == null)
            {
                return;
            }

            BindParameter(target, parameter, control, propertyName, bindingMode);
        }
Example #5
0
        /// <summary>
        /// Executes the handler immediately if the element is loaded, otherwise wires it to the Loaded event.
        /// </summary>
        /// <param name="control">The control.</param>
        /// <param name="handler">The handler.</param>
        /// <returns>true if the handler was executed immediately; false otherwise</returns>
        public static bool ExecuteOnLoad(Control control, EventHandler handler)
        {
            if (control.IsHandleCreated)
            {
                handler(control, new EventArgs());
                return(true);
            }

            EventHandler loaded = null;

            loaded = (s, e) =>
            {
                handler(s, e);
                control.HandleCreated -= loaded;
            };

            control.HandleCreated += loaded;
            return(false);
        }
Example #6
0
        ///<summary>
        /// Uses the action pipeline to invoke the method.
        ///</summary>
        ///<param name="target"> The object instance to invoke the method on. </param>
        ///<param name="methodName"> The name of the method to invoke. </param>
        ///<param name="view"> The view. </param>
        ///<param name="source"> The source of the invocation. </param>
        ///<param name="eventArgs"> The event args. </param>
        ///<param name="parameters"> The method parameters. </param>
        public static void Invoke(object target, string methodName, DependencyObject view = null,
                                  Control source = null, object eventArgs = null, object[] parameters = null)
        {
            var context = new ActionExecutionContext
            {
                Target    = target,
                Method    = target.GetType().GetMethod(methodName),
                Message   = new ActionMessage(source, null, methodName),
                View      = view,
                Source    = source,
                EventArgs = eventArgs
            };

            if (parameters != null)
            {
                parameters.Apply(x => context.Message.Parameters.Add(x as Parameter ?? new Parameter {
                    Value = x
                }));
            }

            ActionMessage.InvokeAction(context);
        }
Example #7
0
        /// <summary>
        /// Parses the specified message text.
        /// </summary>
        /// <param name="target">The event trigger control.</param>
        /// <param name="text">The message text.</param>
        /// <param name="namedElements">All the <see cref="Control"/> instances with names in the scope.</param>
        /// <returns>
        /// The message details parsed from the text.
        /// </returns>
        public static IEnumerable <MessageDetail> Parse(Control target, string text, IEnumerable <Control> namedElements)
        {
            var messageDetails = new List <MessageDetail>();
            var messageTexts   = Split(text, ';');

            foreach (var messageText in messageTexts)
            {
                var triggerPlusMessage = LongFormatRegularExpression.IsMatch(messageText)
                    ? Split(messageText, '=')
                    : new[] { null, messageText };

                var messageDetail = CreateMessageDetail(target, triggerPlusMessage.Last()
                                                        .Replace("[", string.Empty)
                                                        .Replace("]", string.Empty)
                                                        .Trim(), namedElements);

                messageDetail.EventName = GetTriggerEventName(target,
                                                              triggerPlusMessage.Length == 1 ? null : triggerPlusMessage[0]);

                messageDetails.Add(messageDetail);
            }

            return(messageDetails);
        }
Example #8
0
        /// <summary>
        /// Determines whether a view should have conventions applied to it.
        /// </summary>
        /// <param name="view">The view to check.</param>
        /// <returns>Whether or not conventions should be applied to the view.</returns>
        public static bool ShouldApplyConventions(Control view)
        {
            var overriden = View.GetApplyConventions(view.GetDependencyObject());

            return(overriden.GetValueOrDefault(ApplyConventionsByDefault));
        }
Example #9
0
        /// <summary>
        /// Determines whether the specified control has events with listeners.
        /// </summary>
        /// <param name="control">The control.</param>
        /// <returns>
        ///     <c>true</c> if the specified control has events with listeners; otherwise, <c>false</c>.
        /// </returns>
        public static bool HasEventsWithListeners(Control control)
        {
            //TODO make this work

            return(false);
        }