Ejemplo n.º 1
0
        protected override void OnExecute(UIMessageContext ctx)
        {
            var request = ctx.Get <DeleteWidgetRequest>();

            if (request == null)
            {
                return;
            }

            var pair = Surface[request.WidgetId];

            if (pair == null)
            {
                return;
            }

            if (!pair.UIWidget.CanDelete)
            {
                return;
            }

            Thread.Invoke(() =>
            {
                Surface.Remove(request.WidgetId);
            });

            ctx.SetResponse <OkResponse>(r =>
            {
                r.Suggest <GetVisualTreeRequest>();
            });
        }
        protected override void OnExecute(UIMessageContext ctx)
        {
            var request = ctx.Get <GetDisplayDimensionsRequest>();

            if (request == null)
            {
                return;
            }

            var dimensionService = InspectorContainer.Current.Resolve <IDisplayDimensions>();
            var dimensions       = new DisplayDimensions();

            Thread.Invoke(() =>
            {
                dimensions = dimensionService.GetDimensions();
            });

            ctx.SetResponse <GetDisplayDimensionsResponse>(r =>
            {
                r.Density             = dimensions.Density;
                r.Height              = dimensions.Height;
                r.Width               = dimensions.Width;
                r.NavigationBarHeight = dimensions.NavigationBarHeight;
                r.StatusBarHeight     = dimensions.StatusBarHeight;
            });
        }
Ejemplo n.º 3
0
        protected override void OnExecute(UIMessageContext ctx)
        {
            var request = ctx.Get <GetWidgetEventsRequest>();

            if (request == null)
            {
                return;
            }

            var pair = Surface[request.WidgetId];

            var events = pair?
                         .VisualElement?
                         .GetType()
                         .GetPublicEvents()
                         .Select(UIEvent.Create)
                         .ToArray();

            if (events == null)
            {
                return;
            }

            ctx.SetResponse <GetWidgetEventsResponse>(r =>
            {
                r.Events   = events;
                r.WidgetId = request.WidgetId;
            });
        }
        protected override void OnExecute(UIMessageContext ctx)
        {
            var request = ctx.Get <SetDeviceOrientationRequest>();

            if (request == null)
            {
                return;
            }

            DisplayDimensions dims = null;
            var orientationSvc     = InspectorContainer.Current.Resolve <IDeviceOrientation>();
            var dimSvc             = InspectorContainer.Current.Resolve <IDisplayDimensions>();

            Thread.Invoke(() =>
            {
                orientationSvc.SetOrientation(request.Orientation);
                dims = dimSvc.GetDimensions();
            });

            ctx.SetResponse <SetDeviceOrientationResponse>(r =>
            {
                r.Height = dims.Height;
                r.Width  = dims.Width;
            });
        }
        protected override void OnExecute(UIMessageContext ctx)
        {
            var req = ctx.Get <GetBindingContextRequest>();

            if (req == null)
            {
                return;
            }

            var pair = Surface[req.WidgetId];

            if (pair == null)
            {
                return;
            }
            if (pair.UIWidget.IsDatabound == false)
            {
                return;
            }

            var data = BindingContextSerializer.SerializeObject(pair.VisualElement.BindingContext, 2);

            ctx.SetResponse <GetBindingContextResponse>(res =>
            {
                res.WidgetId = req.WidgetId;
                res.Data     = data;
            });
        }
Ejemplo n.º 6
0
        protected override void OnExecute(UIMessageContext ctx)
        {
            var req = ctx.Get <CreateGridRequest>();

            if (req == null)
            {
                return;
            }

            var target = Surface[req.ParentId];

            if (target == null)
            {
                return;
            }

            var attached      = false;
            var rowCollection = new RowDefinitionCollection();
            var colCollection = new ColumnDefinitionCollection();

            for (var i = 0; i < req.Rows; i++)
            {
                var row = new RowDefinition();
                rowCollection.Add(row);
            }

            for (var j = 0; j < req.Columns; j++)
            {
                var col = new ColumnDefinition();
                colCollection.Add(col);
            }

            var view = new Grid
            {
                RowDefinitions    = rowCollection,
                ColumnDefinitions = colCollection,
                ColumnSpacing     = req.ColumnSpacing,
                RowSpacing        = req.RowSpacing
            };

            Thread.Invoke(() =>
            {
                attached = Surface.SetParent(view, target);
            });

            if (!attached)
            {
                return;
            }

            var pair = Surface[view.Id];

            ctx.SetResponse <CreateWidgetResponse>(res =>
            {
                res.Widget = pair.UIWidget;
                res.Parent = target.UIWidget;
                res.Suggest <GetVisualTreeRequest>();
            });
        }
Ejemplo n.º 7
0
        protected override void OnExecute(UIMessageContext ctx)
        {
            ctx.SetResponse <FakeQueueResponse>(r =>
            {
                r.Completed = true;
            });

            Context = ctx;
        }
Ejemplo n.º 8
0
        protected override void OnExecute(UIMessageContext ctx)
        {
            var request = ctx.Get <CreateStackLayoutRequest>();

            if (request == null)
            {
                return;
            }

            var orientation = StackOrientation.Vertical;

            if (string.IsNullOrWhiteSpace(request.Orientation) || request.Orientation.ToLower() == "vertical")
            {
                orientation = StackOrientation.Vertical;
            }
            else if (request.Orientation.ToLower() == "horizontal")
            {
                orientation = StackOrientation.Horizontal;
            }

            var view = new StackLayout
            {
                Orientation = orientation,
                Spacing     = request.Spacing
            };

            var target = Surface[request.ParentId];

            if (target == null)
            {
                return;
            }

            var attached = false;

            Thread.Invoke(() =>
            {
                attached = Surface.SetParent(view, target);
            });

            if (!attached)
            {
                return;
            }

            var pair = Surface[view.Id];

            ctx.SetResponse <CreateWidgetResponse>(r =>
            {
                r.Widget = pair.UIWidget;
                r.Parent = target.UIWidget;
                r.Suggest <GetVisualTreeRequest>();
            });
        }
Ejemplo n.º 9
0
        public void Suggest()
        {
            var ctx = new UIMessageContext();

            var res = ctx.SetResponse <OkResponse>(r =>
            {
                r.Suggest <GetVisualTreeRequest>();
            });

            Assert.AreEqual(res.NextSuggestedMessage, nameof(GetVisualTreeRequest));
        }
Ejemplo n.º 10
0
        protected override void OnExecute(UIMessageContext ctx)
        {
            var request = ctx.Get <CreateWidgetRequest>();

            if (request == null)
            {
                return;
            }

            var viewType = TypeFinder.Find(request.TypeName);

            if (viewType == null)
            {
                return;
            }

            var view = Activator.CreateInstance(viewType) as View;

            if (view == null)
            {
                return;
            }

            var target = Surface[request.ParentId];

            if (target == null)
            {
                return;
            }

            var attached = false;

            Thread.Invoke(() =>
            {
                attached = Surface.SetParent(view, target);
            });

            if (!attached)
            {
                return;
            }

            var pair = Surface[view.Id];

            ctx.SetResponse <CreateWidgetResponse>(r =>
            {
                r.Widget = pair.UIWidget;
                r.Parent = target.UIWidget;
                r.Suggest <GetVisualTreeRequest>();
            });
        }
Ejemplo n.º 11
0
        protected override void OnExecute(UIMessageContext ctx)
        {
            if (ctx.Request == null)
            {
                return;
            }

            var req = ctx.Get <GetConstructorsRequest>();

            if (req == null)
            {
                return;
            }

            var type = TypeFinder.Find(req.TypeName);

            if (type == null)
            {
                return;
            }

            var ctors = UIConstructorMethods.GetConstructors(type);

            foreach (var ctor in ctors)
            {
                foreach (var p in ctor.Parameters)
                {
                    var pType = TypeFinder.Find(p.TypeName);

                    p.UIType = new UIType
                    {
                        Descriptor = Descriptor.GetDescriptors(pType),
                        FullName   = pType.FullName,
                    };

                    Descriptor.SetPossibleValues(pType, p.UIType);
                }
            }

            ctx.SetResponse <GetConstructorsResponse>(res =>
            {
                var descs = Descriptor.GetDescriptors(type);

                res.Type = new UIType
                {
                    FullName     = req.TypeName,
                    Descriptor   = descs,
                    Constructors = ctors
                };
            });
        }
Ejemplo n.º 12
0
        protected override void OnExecute(UIMessageContext ctx)
        {
            var req = ctx.Get <DesktopReady>();

            if (req == null)
            {
                return;
            }

            ctx.SetResponse <MobileReady>(res =>
            {
                // ignored
            });
        }
Ejemplo n.º 13
0
        protected override void OnExecute(UIMessageContext ctx)
        {
            if (ctx.Request == null)
            {
                return;
            }

            var req = ctx.Get <GetObjectRequest>();

            if (req == null)
            {
                return;
            }

            var props = GetUIProperties(req.WidgetId, true, req.Path);

            if (!props.Any())
            {
                return;
            }

            var prop = props[0];

            if (prop.UIType.Descriptor.HasFlag(UIPropertyDescriptors.Enumerable))
            {
                if (prop.UIType.Descriptor.HasFlag(UIPropertyDescriptors.Enumerable))
                {
                    // grab index value; if null, return without creating an ObjectResponse.
                    var index = ReflectionMethods.GetIndexerValue(req.Path[0]);
                    if (index == null)
                    {
                        return;
                    }

                    var item = ReflectionMethods.GetItem(prop.Value, index.Value);
                    prop.Value = GetUIProperties(item);
                }
            }

            prop.Path = req.Path?.Union(prop.Path)?.ToArray();
            var cantCast = SetPath(prop.Value, req.Path);

            ctx.SetResponse <ObjectResponse>(res =>
            {
                res.UnknownCondition = cantCast;
                res.Property         = prop;
                res.WidgetId         = req.WidgetId;
                res.ObjectName       = UIProperty.GetLastPath(req.Path);
            });
        }
Ejemplo n.º 14
0
        protected override void OnExecute(UIMessageContext ctx)
        {
            if (ctx.Request == null)
            {
                return;
            }

            var req = ctx.Get <GetWidgetPropertiesRequest>();

            if (string.IsNullOrWhiteSpace(req?.WidgetId))
            {
                return;
            }

            var props = GetUIProperties(req.WidgetId, req.IncludeValues) ?? new UIProperty[] { };

            foreach (var prop in props)
            {
                var isource = prop.Value as UIImageSource;
                if (isource != null)
                {
                    prop.Value = isource.FileName;
                    continue;
                }

                var wvsource = prop.Value as UrlWebViewSource;
                if (wvsource != null)
                {
                    prop.Value = wvsource.Url;
                    continue;
                }

                var hvsource = prop.Value as HtmlWebViewSource;
                if (hvsource != null)
                {
                    prop.Value = hvsource.Html;
                    continue;
                }
            }

            var pair = Surface[req.WidgetId];

            ctx.SetResponse <GetWidgetPropertiesResponse>(res =>
            {
                res.Widget     = pair.UIWidget;
                res.Properties = props;
            });
        }
Ejemplo n.º 15
0
        protected override void OnExecute(UIMessageContext ctx)
        {
            var r = ctx.Get <OpenXamlRequest>();

            if (string.IsNullOrWhiteSpace(r?.Xaml))
            {
                return;
            }

            //App.ConnectionPage?.PushNewPage(r.Xaml);

            ctx.SetResponse <OpenXamlResponse>(res =>
            {
                res.FileName = r.FileName;
                res.Suggest <GetVisualTreeRequest>();
            });
        }
Ejemplo n.º 16
0
        protected override void OnExecute(UIMessageContext ctx)
        {
            var request = ctx.Get <GetVisualElementsRequest>();

            if (request == null)
            {
                return;
            }

            var derivedFrom = typeof(Xamarin.Forms.View);
            var assembly    = derivedFrom.Assembly;

            var allViewTypes = assembly
                               .GetTypes()
                               .Where(IsView)
                               .Where(t => !Ignore.Any(i => t.FullName.EndsWith(i)))
                               .ToArray();

            var views = allViewTypes
                        .Where(t => !typeof(Xamarin.Forms.Layout).IsAssignableFrom(t))
                        .Select(t => t.FullName)
                        .ToArray();

            var layouts = allViewTypes
                          .Where(t => typeof(Xamarin.Forms.Layout).IsAssignableFrom(t))
                          .Select(t => t.FullName)
                          .ToArray();

            var others = AppDomain
                         .CurrentDomain
                         .GetAssemblies()
                         .SelectMany(a => a.GetTypes())
                         .Where(IsView)
                         .Select(t => t.FullName)
                         .Except(views)
                         .Except(layouts)
                         .ToArray();

            ctx.SetResponse <GetVisualElementsResponse>(r =>
            {
                r.Views   = views;
                r.Layouts = layouts;
                r.Others  = others;
            });
        }
Ejemplo n.º 17
0
        protected override void OnExecute(UIMessageContext ctx)
        {
            var request = ctx.Get <SetParentRequest>();

            if (request == null)
            {
                return;
            }

            var success = true;

            Thread.Invoke(() =>
            {
                var child  = Surface[request.ChildId];
                var parent = Surface[request.ParentId];

                if (child == null || parent == null)
                {
                    success = false;
                }
                else
                {
                    var remove = Surface.Remove(child.UIWidget);

                    if (remove)
                    {
                        success = Surface.SetParent(child.VisualElement, parent.VisualElement, request.Index);
                    }
                    else
                    {
                        success = false;
                    }
                }
            });

            ctx.SetResponse <SetParentResponse>(r =>
            {
                r.Success  = success;
                r.ParentId = request.ParentId;
                r.ChildId  = request.ChildId;
                r.Index    = r.Index;
                r.Suggest <GetVisualTreeRequest>();
            });
        }
Ejemplo n.º 18
0
        private void ExecuteDesignAction(UIMessageContext ctx)
        {
            // Send request to designer.
            // A true response does not guarantee that a design action set the response object.
            // A false response means that an action hasn't been registerd to handle the request.

            bool   executed;
            var    unhandledException = false;
            string exceptionMessage   = null;

            try
            {
                executed        = Reaction.Execute(ctx);
                ctx.ShouldQueue = !executed;
            }
            catch (Exception ex)
            {
                executed           = true;
                ctx.ShouldQueue    = false;
                unhandledException = true;
                exceptionMessage   = ex.ToString();
            }

            if (executed)
            {
                // If a specific response hasn't been created for a request type, send an OkResponse to the client.
                if (ctx.Response == null || ctx.Response is UnknownMessage)
                {
                    ctx.SetResponse <OkResponse>(r =>
                    {
                        r.ReplyingTo = ctx.Request.MessageId;
                    });
                }

                var response = ctx.Response as Response;

                if (response != null)
                {
                    response.UnhandledExceptionOccurred = unhandledException;
                    response.ExceptionMessage           = exceptionMessage;
                }
            }
        }
Ejemplo n.º 19
0
        protected override void OnExecute(UIMessageContext ctx)
        {
            if (ctx.Request == null)
            {
                return;
            }

            var req = ctx.Get <CallConstructorRequest>();

            if (req == null)
            {
                return;
            }

            var error   = string.Empty;
            var success = false;
            var obj     = UIConstructorMethods.Construct(TypeFinder, req.Constructor);

            if (obj != null)
            {
                try
                {
                    SetPropertyValue(req.WidgetId, req.Property.Path, obj, false, false);
                }
                catch (Exception ex)
                {
                    error   = ex.ToString();
                    success = false;
                }

                success = true;
            }

            ctx.SetResponse <CallConstructorResponse>(res =>
            {
                res.ErrorMessage = error;
                res.Successful   = success;
            });
        }
Ejemplo n.º 20
0
        protected override void OnExecute(UIMessageContext ctx)
        {
            var request = ctx.Get <ScreenShotRequest>();

            if (request == null)
            {
                return;
            }

            var screenshot = InspectorContainer.Current.Resolve <IScreenShot>();

            byte[] capture = null;

            Thread.Invoke(() =>
            {
                capture = screenshot.Capture();
            });

            ctx.SetResponse <ScreenShotResponse>(r =>
            {
                r.Capture = capture;
                r.Suggest <GetVisualTreeRequest>();
            });
        }
Ejemplo n.º 21
0
        protected override void OnExecute(UIMessageContext ctx)
        {
            var r = ctx.Get <EditCollectionRequest>();

            if (r == null)
            {
                return;
            }

            var pair = Surface[r.WidgetId];
            var prop = pair?.VisualElement.GetRefProperties(r.Path).FirstOrDefault();

            var target = prop?.GetTargetObject();

            if (target == null)
            {
                return;
            }

            var successful = false;
            var message    = string.Empty;

            if (target.IsKindOf(typeof(IList <>)))
            {
                var colType = target.GetType();
                if (colType == null)
                {
                    return;
                }

                var itemType = ReflectionMethods.GetEnumerableItemType(colType);
                if (itemType == null)
                {
                    return;
                }

                if (r.Type == EditCollectionType.Delete)
                {
                    try
                    {
                        var index = ReflectionMethods.GetIndexerValue(r.Path.Last());
                        if (index == null || index < 0)
                        {
                            return;
                        }

                        colType.GetMethod("RemoveAt").Invoke(target, new[] { (object)index.Value });
                        successful = true;
                    }
                    catch (Exception e)
                    {
                        message    = e.Message;
                        successful = false;
                    }
                }

                if (r.Type == EditCollectionType.Add)
                {
                    try
                    {
                        object newItem;

                        if (colType.GetTypeInfo().IsGenericTypeDefinition)
                        {
                            newItem = Activator.CreateInstance(colType.MakeGenericType(itemType));
                        }
                        else
                        {
                            newItem = Activator.CreateInstance(itemType);
                        }

                        colType.GetMethod("Add").Invoke(target, new[] { newItem });
                        successful = true;
                    }
                    catch (Exception e)
                    {
                        message    = e.Message;
                        successful = false;
                    }
                }
            }

            ctx.SetResponse <EditCollectionResponse>(c =>
            {
                if (successful)
                {
                    c.Suggest <GetWidgetPropertiesRequest>();
                }

                c.WidgetId   = r.WidgetId;
                c.Type       = r.Type;
                c.Successful = successful;
                c.Message    = message;
            });
        }
Ejemplo n.º 22
0
        protected override void OnExecute(UIMessageContext ctx)
        {
            if (ctx.Request == null)
            {
                return;
            }

            var req = ctx.Get <GetAttachedPropertiesRequest>();

            if (req == null)
            {
                return;
            }

            var target = Surface[req.WidgetId];

            if (target == null)
            {
                return;
            }

            var all     = new List <UIProperty>();
            var parents = ElementHelper.GetParents(target.UIWidget);

            foreach (var parent in parents)
            {
                var view = Surface[parent.Id].VisualElement;

                var aps = ElementHelper.GetAttachedProperties(view).ToArray();
                if (aps == null || aps.Length == 0)
                {
                    continue;
                }

                foreach (var ap in aps)
                {
                    // skip dupe attached props
                    var processed = all.Any(a => a.XamlPropertyName == ap.XamlPropertyName);
                    if (processed)
                    {
                        continue;
                    }

                    var xt = Descriptor.CreateType(ap.GetMethod);
                    xt.Descriptor |= UIPropertyDescriptors.AttachedProperty;
                    var apval = ap.GetMethod.Invoke(null, new object[] { target.VisualElement });

                    var xp = new UIProperty
                    {
                        XamlPropertyName = ap.XamlPropertyName,
                        CanWrite         = true,
                        CanRead          = true,
                        UIType           = xt,
                        Value            = apval,
                        Path             = new[] { ap.Field.Name }
                    };

                    all.Add(xp);
                }
            }

            if (target.UIWidget == null)
            {
                return;
            }

            target.UIWidget.AttachedProperties = all.ToArray();

            ctx.SetResponse <GetAttachedPropertiesResponse>(r =>
            {
                r.Widget = target.UIWidget;
            });
        }