public static FigmaNode Options(this FigmaNode figmaNode) { if (figmaNode == null) { return(null); } return(figmaNode.FirstChild(s => s.name == "!options")); }
protected override StringBuilder OnConvertToCode(CodeNode currentNode, CodeNode parentNode, CodeRenderService rendererService) { var code = new StringBuilder(); string name = FigmaSharp.Resources.Ids.Conversion.NameIdentifier; var frame = (FigmaFrame)currentNode.Node; frame.TryGetNativeControlType(out var controlType); frame.TryGetNativeControlVariant(out var controlVariant); if (rendererService.NeedsRenderConstructor(currentNode, parentNode)) { code.WriteConstructor(name, GetControlType(currentNode.Node), rendererService.NodeRendersVar(currentNode, parentNode)); } code.WritePropertyEquality(name, nameof(NSButton.ControlSize), ViewHelper.GetNSControlSize(controlVariant)); code.WritePropertyEquality(name, nameof(NSSegmentedControl.Font), CodeHelper.GetNSFontString(controlVariant)); FigmaNode items = frame.FirstChild(s => s.name == ComponentString.ITEMS); if (items != null) { code.WritePropertyEquality(name, nameof(NSSegmentedControl.SegmentCount), "" + items.GetChildren(t => t.visible).Count()); code.WritePropertyEquality(name, nameof(NSSegmentedControl.SegmentDistribution), NSSegmentDistribution.FillEqually); code.WritePropertyEquality(name, nameof(NSSegmentedControl.SegmentStyle), NSSegmentStyle.Rounded); code.WritePropertyEquality(name, nameof(NSSegmentedControl.SelectedSegment), "0"); code.WritePropertyEquality(name, nameof(NSSegmentedControl.TrackingMode), NSSegmentSwitchTracking.SelectOne); code.AppendLine(); int i = 0; foreach (FigmaNode button in items.GetChildren(t => t.visible)) { FigmaNode state = button.FirstChild(s => s.visible && s.name.In(ComponentString.STATE_REGULAR, ComponentString.STATE_SELECTED)); if (state == null) { continue; } var text = (FigmaText)state.FirstChild(s => s.name == ComponentString.TITLE); code.WriteMethod(name, nameof(NSSegmentedControl.SetLabel), $"\"{ text.characters }\", { i }"); i++; } code.AppendLine(); } return(code); }
protected override IView OnConvertToView(FigmaNode currentNode, ViewNode parentNode, ViewRenderService rendererService) { var segmentedControl = new NSSegmentedControl(); var frame = (FigmaFrame)currentNode; frame.TryGetNativeControlType(out var controlType); frame.TryGetNativeControlVariant(out var controlVariant); segmentedControl.ControlSize = ViewHelper.GetNSControlSize(controlVariant); segmentedControl.Font = ViewHelper.GetNSFont(controlVariant); FigmaNode items = frame.FirstChild(s => s.name == ComponentString.ITEMS); if (items != null) { segmentedControl.SegmentCount = items.GetChildren(t => t.visible).Count(); segmentedControl.SegmentDistribution = NSSegmentDistribution.FillEqually; segmentedControl.SegmentStyle = NSSegmentStyle.Rounded; segmentedControl.SelectedSegment = 0; int i = 0; foreach (FigmaNode button in items.GetChildren(t => t.visible)) { FigmaNode state = button.FirstChild(s => s.visible && s.name.In(ComponentString.STATE_REGULAR, ComponentString.STATE_SELECTED)); if (state == null) { continue; } var text = (FigmaText)state.FirstChild(s => s.name == ComponentString.TITLE); segmentedControl.SetLabel(rendererService.GetTranslatedText(text), i); i++; } } segmentedControl.TrackingMode = NSSegmentSwitchTracking.SelectOne; return(new View(segmentedControl)); }
protected override IView OnConvertToView(FigmaNode currentNode, ViewNode parentNode, ViewRenderService rendererService) { var segmentedControl = new NSSegmentedControl(); var frame = (FigmaFrame)currentNode; frame.TryGetNativeControlType(out var controlType); frame.TryGetNativeControlVariant(out var controlVariant); segmentedControl.ControlSize = ViewHelper.GetNSControlSize(controlVariant); segmentedControl.Font = ViewHelper.GetNSFont(controlVariant); FigmaNode items = frame.FirstChild(s => s.name == ComponentString.ITEMS); if (items != null) { segmentedControl.SegmentCount = items.GetChildren(t => t.visible).Count(); if (controlType == FigmaControlType.SegmentedControlRoundRect) { segmentedControl.SegmentStyle = NSSegmentStyle.RoundRect; } else { segmentedControl.SegmentStyle = NSSegmentStyle.Rounded; } int i = 0; foreach (FigmaNode button in items.GetChildren(t => t.visible)) { FigmaNode state = button.FirstChild(s => s.visible && s.name.In(ComponentString.STATE_REGULAR, ComponentString.STATE_SELECTED)); if (state == null) { continue; } var text = (FigmaText)state.FirstChild(s => s.name == ComponentString.TITLE); segmentedControl.SetLabel(rendererService.GetTranslatedText(text), i); segmentedControl.SetSelected(selected: state.name == ComponentString.STATE_SELECTED, i); i++; } bool hasSelection = (segmentedControl.SelectedSegment > -1); // Use tab-like behaviour if there is a selected item. Otherwise use the button-like behaviour if (hasSelection) { segmentedControl.TrackingMode = NSSegmentSwitchTracking.SelectOne; segmentedControl.SegmentDistribution = NSSegmentDistribution.Fill; } else { segmentedControl.TrackingMode = NSSegmentSwitchTracking.Momentary; segmentedControl.SegmentDistribution = NSSegmentDistribution.FillEqually; } } return(new View(segmentedControl)); }