public PreviewOnDevice(IFuse fuse, IProject project, BuildArgs args) { var output = new Subject <string>(); LogMessages = output; var isMac = fuse.Platform == OS.Mac; var startedAndroidPreview = new Subject <Unit>(); MissingAndroidNotification.Create(fuse, startedAndroidPreview); PreviewAndroidApp = project.FilePath.CombineLatest(args.All, (path, allArgs) => Command.Enabled( action: () => { startedAndroidPreview.OnNext(Unit.Default); fuse.RunFuse( "preview", new[] { path.NativePath, "-t=android", "--quit-after-apk-launch" }.Concat(allArgs).ToArray(), Observer.Create <string>(output.OnNext)); })) .Switch(); PreviewIosApp = project.FilePath.CombineLatest(args.All, (path, allArgs) => Command.Create( isEnabled: isMac, action: () => fuse.RunFuse( "preview", new[] { path.NativePath, "-t=ios" }.Concat(allArgs).ToArray(), Observer.Create <string>(output.OnNext)))) .Switch(); Menu = Menu.Item("Preview on Android", PreviewAndroidApp) + Menu.Item("Preview on iOS" + (!isMac ? " (Mac only)" : ""), PreviewIosApp); }
public Export(IProject project, IFuse fuse, BuildArgs args) { var output = new Subject <string>(); LogMessages = output; var isMac = fuse.Platform == OS.Mac; ExportForAndroid = project.FilePath.CombineLatest(args.All, (path, allArgs) => Command.Enabled( action: () => fuse.RunFuse( "build", new[] { path.NativePath, "-t=android", "--run" }.Concat(allArgs).ToArray(), Observer.Create <string>(output.OnNext)))) .Switch(); ExportForIos = project.FilePath.CombineLatest(args.All, (path, allArgs) => Command.Create( isEnabled: isMac, action: () => fuse.RunFuse( "build", new[] { path.NativePath, "-t=ios", "--run" }.Concat(allArgs).ToArray(), Observer.Create <string>(output.OnNext)))) .Switch(); Menu = Menu.Item("Export for Android", ExportForAndroid) + Menu.Item("Export for iOS" + (!isMac ? " (Mac only)" : ""), ExportForIos); }
public SetupGuide(IFuse fuse, IObservable <Unit> doneLoadingMainWindow) { var output = new Subject <string>(); LogMessages = output; var report = fuse.Report; var softwares = new SoftwareCollectionStatus(fuse); var showSetupGuide = new BehaviorSubject <bool>(false); MissingPluginNotification.Create(fuse, doneLoadingMainWindow, showSetupGuide); Application.Desktop.CreateSingletonWindow( isVisible: showSetupGuide.CombineLatest(doneLoadingMainWindow, (s, _) => s), window: dialog => new Window { Title = Observable.Return("Setup guide"), Size = Optional.Some(Property.Constant(Optional.Some(new Size <Points>(500, 300)))), Content = Control.Lazy(() => Create(softwares, report, dialog).ShowWhen(showSetupGuide)) .WithBackground(Theme.PanelBackground), Background = Theme.PanelBackground, Foreground = Theme.DefaultText, Border = Separator.MediumStroke, Style = WindowStyle.Fat, }); Menu = Menu.Item("Install Android SDKs", () => fuse.RunFuse("install", new [] { "android" }, Observer.Create <string>(output.OnNext))) + Menu.Item("Setup guide", () => showSetupGuide.OnNext(true)); }