Пример #1
0
        protected override IView OnConvertToView(FigmaNode currentNode, ProcessedNode parentNode, FigmaRendererService rendererService)
        {
            var frame = (FigmaFrame)currentNode;

            frame.TryGetNativeControlVariant(out var controlVariant);
            frame.TryGetNativeControlType(out var controlType);

            var popUp = new NSPopUpButton();

            if (controlType == NativeControlType.PopUpButtonPullDown)
            {
                popUp.PullsDown = true;
            }

            popUp.ControlSize = CocoaHelpers.GetNSControlSize(controlVariant);
            popUp.Font        = CocoaHelpers.GetNSFont(controlVariant);

            FigmaText text = frame.children
                             .OfType <FigmaText>()
                             .FirstOrDefault(s => s.name == ComponentString.TITLE);

            if (text != null)
            {
                popUp.AddItem(text.characters);
            }

            return(new View(popUp));
        }
Пример #2
0
        protected override IView OnConvertToView(FigmaNode currentNode, ProcessedNode parentNode, FigmaRendererService rendererService)
        {
            var textField = new NSTextField();

            var frame = (FigmaFrame)currentNode;

            frame.TryGetNativeControlType(out var controlType);
            frame.TryGetNativeControlVariant(out var controlVariant);


            if (controlType == NativeControlType.SearchField)
            {
                textField = new NSSearchField();
            }


            FigmaNode optionsGroup = frame.Options();

            FigmaNode passwordNode = optionsGroup?.GetChildren()
                                     .OfType <FigmaNode>()
                                     .FirstOrDefault(s => s.name == ComponentString.PASSWORD && s.visible);

            if (passwordNode != null)
            {
                textField             = new NSSecureTextField();
                textField.StringValue = "Password";
            }


            FigmaText placeholderText = optionsGroup?.GetChildren()
                                        .OfType <FigmaText>()
                                        .FirstOrDefault(s => s.name == ComponentString.PLACEHOLDER && s.visible);

            if (placeholderText != null && !placeholderText.characters.Equals(ComponentString.PLACEHOLDER, StringComparison.InvariantCultureIgnoreCase))
            {
                textField.PlaceholderString = placeholderText.characters;
            }



            FigmaText text = frame.children
                             .OfType <FigmaText> ()
                             .FirstOrDefault(s => s.name == ComponentString.TITLE && s.visible);

            if (text != null)
            {
                textField.Alignment   = CocoaHelpers.GetNSTextAlignment(text);
                textField.StringValue = text.characters;
            }

            textField.ControlSize = CocoaHelpers.GetNSControlSize(controlVariant);
            textField.Font        = CocoaHelpers.GetNSFont(controlVariant);

            return(new View(textField));
        }
Пример #3
0
        protected override IView OnConvertToView(FigmaNode currentNode, ProcessedNode parentNode, FigmaRendererService rendererService)
        {
            var button = new NSButton();

            var frame = (FigmaFrame)currentNode;

            frame.TryGetNativeControlType(out var controlType);
            frame.TryGetNativeControlVariant(out var controlVariant);

            switch (controlType)
            {
            case NativeControlType.Button:
                button.BezelStyle = NSBezelStyle.Rounded;
                break;

            case NativeControlType.ButtonHelp:
                button.BezelStyle = NSBezelStyle.HelpButton;
                button.Title      = string.Empty;
                break;
            }

            button.ControlSize = CocoaHelpers.GetNSControlSize(controlVariant);
            button.Font        = CocoaHelpers.GetNSFont(controlVariant);

            FigmaGroup group = frame.children
                               .OfType <FigmaGroup>()
                               .FirstOrDefault(s => s.visible);

            if (group != null)
            {
                FigmaText text = group.children
                                 .OfType <FigmaText>()
                                 .FirstOrDefault(s => s.name == ComponentString.TITLE);

                if (text != null && controlType != NativeControlType.ButtonHelp)
                {
                    button.Title = text.characters;
                }

                if (group.name == ComponentString.STATE_DISABLED)
                {
                    button.Enabled = false;
                }

                if (group.name == ComponentString.STATE_DEFAULT)
                {
                    button.KeyEquivalent = "\r";
                }
            }

            return(new View(button));
        }
Пример #4
0
        protected override IView OnConvertToView(FigmaNode currentNode, ProcessedNode parentNode, FigmaRendererService rendererService)
        {
            var frame = (FigmaFrame)currentNode;

            var checkBox = new NSButton();

            checkBox.SetButtonType(NSButtonType.Switch);

            FigmaText text = frame.children
                             .OfType <FigmaText>()
                             .FirstOrDefault(s => s.name == ComponentString.TITLE);

            if (text != null)
            {
                checkBox.Title = text.characters;
            }

            frame.TryGetNativeControlVariant(out var controlVariant);

            checkBox.ControlSize = CocoaHelpers.GetNSControlSize(controlVariant);
            checkBox.Font        = CocoaHelpers.GetNSFont(controlVariant, text);

            FigmaGroup group = frame.children
                               .OfType <FigmaGroup>()
                               .FirstOrDefault(s => s.name.In(ComponentString.STATE_ON,
                                                              ComponentString.STATE_OFF,
                                                              ComponentString.STATE_MIXED) && s.visible);

            if (group != null)
            {
                if (group.name == ComponentString.STATE_ON)
                {
                    checkBox.State = NSCellStateValue.On;
                }

                if (group.name == ComponentString.STATE_OFF)
                {
                    checkBox.State = NSCellStateValue.Off;
                }

                if (group.name == ComponentString.STATE_MIXED)
                {
                    checkBox.AllowsMixedState = true;
                    checkBox.State            = NSCellStateValue.Mixed;
                }
            }

            return(new View(checkBox));
        }
Пример #5
0
        protected override IView OnConvertToView(FigmaNode currentNode, ProcessedNode parentNode, FigmaRendererService rendererService)
        {
            var segmentedControl = new NSSegmentedControl();

            var frame = (FigmaFrame)currentNode;

            frame.TryGetNativeControlType(out var controlType);
            frame.TryGetNativeControlVariant(out var controlVariant);

            segmentedControl.ControlSize = CocoaHelpers.GetNSControlSize(controlVariant);
            segmentedControl.Font        = CocoaHelpers.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(text.characters, i);

                    i++;
                }
            }

            segmentedControl.TrackingMode = NSSegmentSwitchTracking.SelectOne;

            return(new View(segmentedControl));
        }
Пример #6
0
        protected override IView OnConvertToView(FigmaNode currentNode, ProcessedNode parentNode, FigmaRendererService rendererService)
        {
            var label = new NSTextField();

            label.Editable                = false;
            label.DrawsBackground         = false;
            label.Bordered                = false;
            label.PreferredMaxLayoutWidth = 1;

            var frame = (FigmaFrame)currentNode;

            FigmaText text = frame.children
                             .OfType <FigmaText>()
                             .FirstOrDefault(s => s.name == ComponentString.TITLE);

            currentNode.TryGetNativeControlType(out NativeControlType controlType);
            currentNode.TryGetNativeControlVariant(out NativeControlVariant controlVariant);

            if (text != null)
            {
                label.StringValue = text.characters;
                label.Alignment   = CocoaHelpers.GetNSTextAlignment(text);
                label.Font        = CocoaHelpers.GetNSFont(controlVariant, text);
            }

            if (controlType == NativeControlType.LabelHeader)
            {
                label.Font = NSFont.SystemFontOfSize(headerFontSize, CocoaHelpers.GetNSFontWeight(text));
            }

            foreach (var styleMap in text?.styles)
            {
                if (rendererService.FileProvider.TryGetStyle(styleMap.Value, out FigmaStyle style))
                {
                    if (styleMap.Key == "fill")
                    {
                        label.TextColor = CocoaHelpers.GetNSColor(style.name);
                    }
                }
            }

            return(new View(label));
        }
Пример #7
0
        protected override IView OnConvertToView(FigmaNode currentNode, ProcessedNode parentNode, FigmaRendererService rendererService)
        {
            var frame = (FigmaFrame)currentNode;

            var radio = new NSButton();

            radio.SetButtonType(NSButtonType.Radio);

            FigmaText text = frame.children
                             .OfType <FigmaText>()
                             .FirstOrDefault(s => s.name == ComponentString.TITLE);

            if (text != null)
            {
                radio.Title = text.characters;
            }

            frame.TryGetNativeControlVariant(out var controlVariant);

            radio.ControlSize = CocoaHelpers.GetNSControlSize(controlVariant);
            radio.Font        = CocoaHelpers.GetNSFont(controlVariant, text);

            FigmaGroup group = frame.children
                               .OfType <FigmaGroup>()
                               .FirstOrDefault(s => (s.name == ComponentString.STATE_ON || s.name == ComponentString.STATE_OFF) && s.visible);

            if (group != null)
            {
                if (group.name == ComponentString.STATE_ON)
                {
                    radio.State = NSCellStateValue.On;
                }

                if (group.name == ComponentString.STATE_OFF)
                {
                    radio.State = NSCellStateValue.Off;
                }
            }

            return(new View(radio));
        }
Пример #8
0
        protected override IView OnConvertToView(FigmaNode currentNode, ProcessedNode parentNode, FigmaRendererService rendererService)
        {
            var combobox = new NSComboBox();

            var frame = (FigmaFrame)currentNode;

            frame.TryGetNativeControlVariant(out var controlVariant);

            combobox.ControlSize = CocoaHelpers.GetNSControlSize(controlVariant);
            combobox.Font        = CocoaHelpers.GetNSFont(controlVariant);

            FigmaText text = frame.children
                             .OfType <FigmaText> ()
                             .FirstOrDefault(s => s.name == ComponentString.TITLE);

            if (text != null && !string.IsNullOrEmpty(text.characters))
            {
                combobox.StringValue = text.characters;
            }

            return(new View(combobox));
        }