static void LoadLoginDialog(FigmaViewRendererService rendererService, FigmaViewRendererServiceOptions options) { mainWindow.Size = new Size(720, 467); var customConverters = new FigmaViewConverter[] { new DoThisLaterButtonConverter(), new SignInMicrosoftButtonConverter(), //new CreateAccountLinkConverter (), //new WhySignInLinkConverter (), }; rendererService.CustomConverters.AddRange(customConverters); var signInDialog = rendererService.RenderByName <IView>(LoginDialog, options); signInDialog.CornerRadius = 5; signInDialog.BackgroundColor = new Color(0.27f, 0.15f, 0.41f); SetContentDialog(signInDialog); foreach (var viewConverter in customConverters) { rendererService.CustomConverters.Remove(viewConverter); } //logic var signInButton = rendererService.FindViewByName <IButton>(SignInMicrosoftButtonConverter.SignInMicrosoftButtonName); signInButton.Focus(); signInButton.Clicked += (s, e) => { if (signInButton is IViewTransitable figmaTransition) { ProcessTransitionNodeID(figmaTransition.TransitionNodeID, rendererService, options); } }; var doThisLaterButton = rendererService.FindViewByName <IButton>(DoThisLaterButtonConverter.DoThisLaterButtonName); doThisLaterButton.Clicked += (s, e) => { if (doThisLaterButton is IViewTransitable figmaTransition) { ProcessTransitionNodeID(figmaTransition.TransitionNodeID, rendererService, options); } }; }
static void LoadRecentItemsDialog(FigmaViewRendererService rendererService, FigmaViewRendererServiceOptions options) { mainWindow.Size = new Size(720, 467); var customConverters = new FigmaViewConverter[] { new SearchFilterConverter(), }; rendererService.CustomConverters.AddRange(customConverters); //new SearchFilterConverter () var dialog = rendererService.RenderByName <IView>("RecentItemsDialog", options); dialog.CornerRadius = 5; dialog.BackgroundColor = Color.White; SetContentDialog(dialog); foreach (var viewConverter in customConverters) { rendererService.CustomConverters.Remove(viewConverter); } var searchBox = dialog.Children .OfType <ISearchBox>() .FirstOrDefault(); searchBox.Focus(); var closeButton = dialog.Children .OfType <IImageButton>() .FirstOrDefault(); closeButton.Clicked += (s, e) => { NSRunningApplication.CurrentApplication.Terminate(); }; }
public PlatformCustomViewConverter(string platform, FigmaViewConverter converter) { Platform = platform; Converter = converter; }
public void GetCode(StringBuilder builder, FigmaCodeNode node, FigmaCodeNode parent = null, FigmaCodeRendererServiceOptions currentRendererOptions = null) { //in first level we clear all identifiers if (parent == null) { if (MainNode == null) { //clear all nodes Nodes.Clear(); identifiers.Clear(); OnStartGetCode(); //we initialize CurrentRendererOptions = currentRendererOptions ?? new FigmaCodeRendererServiceOptions(); //we store our main node MainNode = node; ParentMainNode = parent; } } if (node != null) { Nodes.Add(node); } FigmaCodeNode calculatedParentNode = null; FigmaViewConverter converter = null; var isNodeSkipped = IsNodeSkipped(node); //on node skipped we don't render if (!isNodeSkipped) { //if (figmaProvider.RendersProperties (node)) { converter = GetConverter(node, customConverters); //bool navigateChild = true; if (converter == null) { converter = GetConverter(node, figmaConverters); } if (converter != null) { if (!node.HasName) { if (!TryGetCodeViewName(node, parent, converter, out string identifier)) { identifier = DefaultViewName; } //we store our name to don't generate dupplicates var lastIndex = GetLastInsertedIndex(identifier); if (lastIndex >= 0) { identifiers.Remove(identifier); } lastIndex++; node.Name = identifier; if (lastIndex > 0) { node.Name += lastIndex; } identifiers.Add(identifier, lastIndex); } builder.AppendLine(); builder.AppendLine($"// View: {node.Name}"); builder.AppendLine($"// NodeName: {node.Node.name}"); builder.AppendLine($"// NodeType: {node.Node.type}"); builder.AppendLine($"// NodeId: {node.Node.id}"); OnPreConvertToCode(builder, node, parent, converter, codePropertyConverter); //we generate our code and replace node name var code = converter.ConvertToCode(node, parent, this); builder.AppendLineIfValue(code.Replace(Resources.Ids.Conversion.NameIdentifier, node.Name)); OnPostConvertToCode(builder, node, parent, converter, codePropertyConverter); if (RendersAddChild(node, parent, this)) { builder.AppendLineIfValue(codePropertyConverter.ConvertToCode(CodeProperties.AddChild, node, parent, this)); OnChildAdded(builder, node, parent, converter, codePropertyConverter); } if (RendersSize(node, parent, this)) { builder.AppendLineIfValue(codePropertyConverter.ConvertToCode(CodeProperties.Frame, node, parent, this)); OnFrameSet(builder, node, parent, converter, codePropertyConverter); } if (RendersConstraints(node, parent, this)) { builder.AppendLineIfValue(codePropertyConverter.ConvertToCode(CodeProperties.Constraints, node, parent, this)); } calculatedParentNode = node; } else { //without a converter we don't have any view created, we need to attach to the parent view calculatedParentNode = parent; } } //without converter we scan the children automatically var navigateChild = converter?.ScanChildren(node.Node) ?? true; if (navigateChild && HasChildrenToRender(node)) { foreach (var item in GetChildrenToRender(node)) { var figmaNode = new FigmaCodeNode(item, parent: node); GetCode(builder, figmaNode, calculatedParentNode); } } if (MainNode == node) { //first loop Clear(); } }
protected virtual bool TryGetCodeViewName(FigmaCodeNode node, FigmaCodeNode parent, FigmaViewConverter converter, out string identifier) { try { identifier = converter.GetType().Name; if (identifier.StartsWith(init)) { identifier = identifier.Substring(init.Length); } if (identifier.EndsWith(end)) { identifier = identifier.Substring(0, identifier.Length - end.Length); } identifier = char.ToLower(identifier[0]) + identifier.Substring(1) + ViewIdentifier; return(true); } catch (Exception) { identifier = null; return(false); } }
protected virtual void OnFrameSet(StringBuilder builder, FigmaCodeNode node, FigmaCodeNode parent, FigmaViewConverter converter, FigmaCodePropertyConverterBase codePropertyConverter) { }