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; }); }
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; }); }
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>(); }); }
protected override void OnExecute(UIMessageContext ctx) { ctx.SetResponse <FakeQueueResponse>(r => { r.Completed = true; }); Context = ctx; }
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>(); }); }
public void Suggest() { var ctx = new UIMessageContext(); var res = ctx.SetResponse <OkResponse>(r => { r.Suggest <GetVisualTreeRequest>(); }); Assert.AreEqual(res.NextSuggestedMessage, nameof(GetVisualTreeRequest)); }
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>(); }); }
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 }; }); }
protected override void OnExecute(UIMessageContext ctx) { var req = ctx.Get <DesktopReady>(); if (req == null) { return; } ctx.SetResponse <MobileReady>(res => { // ignored }); }
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); }); }
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; }); }
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>(); }); }
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; }); }
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>(); }); }
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; } } }
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; }); }
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>(); }); }
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; }); }
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; }); }