public static FigmaNode Options(this FigmaNode figmaNode)
        {
            if (figmaNode == null)
            {
                return(null);
            }

            return(figmaNode.FirstChild(s => s.name == "!options"));
        }
예제 #2
0
        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);
        }
예제 #3
0
        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));
        }
예제 #4
0
        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));
        }