async Task <ProjectFile> CreateBundleView(FigmaBundleViewBase figmaBundleView, Project currentProject, INodeProvider fileProvider, bool translateStrings) { var bundle = figmaBundleView.Bundle; await fileProvider.LoadAsync(bundle.DocumentFilePath); var converters = FigmaControlsContext.Current.GetConverters(); var codePropertyConverter = FigmaControlsContext.Current.GetCodePropertyConverter(); var codeRendererService = new NativeViewCodeService(fileProvider, converters, codePropertyConverter) { TranslationService = new Services.MonoDevelopTranslationService() }; figmaBundleView.Generate(outputDirectory, codeRendererService, namesSpace: bundle.Namespace, translateStrings: translateStrings); var partialDesignerClassFilePath = Path.Combine(outputDirectory, figmaBundleView.PartialDesignerClassName); var publicCsClassFilePath = Path.Combine(outputDirectory, figmaBundleView.PublicCsClassName); var designerProjectFile = currentProject.AddFile(partialDesignerClassFilePath); var csProjectFile = currentProject.AddFile(publicCsClassFilePath); designerProjectFile.DependsOn = csProjectFile.FilePath; designerProjectFile.Metadata.SetValue(FigmaFile.FigmaPackageId, bundle.FileId); if (!figmaBundleView.FigmaNode.TryGetNodeCustomName(out string customName)) { customName = figmaBundleView.FigmaNode.name; } designerProjectFile.Metadata.SetValue(FigmaFile.FigmaNodeCustomName, customName); return(csProjectFile); }
public override IView ConvertToView(FigmaNode currentNode, ViewNode parentNode, ViewRenderService rendererService) { string title = ""; var frame = (FigmaFrame)currentNode; var nativeView = new FakeWindowView(title); nativeView.LiveButtonAlwaysVisible = LiveButtonAlwaysVisible; nativeView.Configure(currentNode); var view = new View(nativeView); var windowComponent = currentNode.GetDialogInstanceFromParentContainer(); if (windowComponent != null) { var optionsNode = windowComponent.Options(); if (optionsNode is IFigmaNodeContainer figmaNodeContainer) { nativeView.CloseButtonHidden = (figmaNodeContainer.HasChildrenVisible("close") == false); nativeView.MinButtonHidden = (figmaNodeContainer.HasChildrenVisible("min") == false); nativeView.MaxButtonHidden = (figmaNodeContainer.HasChildrenVisible("max") == false); var titleText = (FigmaText)optionsNode.GetChildren().FirstOrDefault(s => s.name == "title" && s.visible); if (titleText != null) { nativeView.Title = titleText.characters; } } } nativeView.LiveButton.Activated += async(s, e) => { var window = new Window(view.Allocation); LivePreviewLoading?.Invoke(this, EventArgs.Empty); await newWindowProvider.LoadAsync(rendererService.NodeProvider.File); var secondaryRender = new ControlViewRenderingService(newWindowProvider); var options = new ViewRenderServiceOptions() { GenerateMainView = false }; secondaryRender.RenderInWindow(window, currentNode, options); var mainNodes = currentNode.GetChildren() .ToArray(); ViewNode[] processedNodes = secondaryRender.GetProcessedNodes(mainNodes); var layoutManager = new StoryboardLayoutManager() { UsesConstraints = true }; layoutManager.Run(processedNodes, window.Content, secondaryRender); var nativeWindow = (NSWindow)window.NativeObject; nativeWindow.Appearance = nativeView.EffectiveAppearance; nativeWindow.ContentMinSize = nativeWindow.ContentView.Frame.Size; nativeWindow.Center(); nativeWindow.MakeKeyAndOrderFront(null); LivePreviewLoaded?.Invoke(this, EventArgs.Empty); }; return(view); }