package naive import ( "github.com/progrium/darwinkit/macos/appkit" "github.com/progrium/darwinkit/macos/foundation" "github.com/progrium/darwinkit/objc" ) func startNativeApp(view View) { if nativeAppWindow != nil { return } app := appkit.Application_SharedApplication() delegate := &appkit.ApplicationDelegate{} delegate.SetApplicationDidFinishLaunching(func(notification foundation.Notification) { w := appkit.NewWindowWithSize(720, 440) nativeAppWindow = &w objc.Retain(nativeAppWindow) nativeAppWindow.SetTitle(appTitle) nativeAppWindow.SetContentView(view.toNative()) nativeAppWindow.Center() nativeAppWindow.MakeKeyAndOrderFront(nil) nativeAppWindow.SetFrameAutosaveName(appkit.WindowFrameAutosaveName(appTitle)) setSystemBar(app) app.SetActivationPolicy(appkit.ApplicationActivationPolicyRegular) app.ActivateIgnoringOtherApps(true) }) delegate.SetApplicationWillFinishLaunching(func(foundation.Notification) { setMainMenu(app) }) delegate.SetApplicationShouldTerminateAfterLastWindowClosed(func(appkit.Application) bool { return true }) app.SetDelegate(delegate) app.Run() } type ( View interface { toNative() appkit.IView } ) var ( nativeAppWindow *appkit.Window ) func nativeSetView(view View) { nativeAppWindow.SetContentView(view.toNative()) } func setNativeTitle(title string) { nativeAppWindow.SetTitle(title) } func setMainMenu(app appkit.Application) { menu := appkit.NewMenuWithTitle("main") app.SetMainMenu(menu) mainMenuItem := appkit.NewMenuItemWithSelector("", "", objc.Selector{}) mainMenuMenu := appkit.NewMenuWithTitle("App") mainMenuMenu.AddItem(appkit.NewMenuItemWithAction("Hide", "h", func(sender objc.Object) { app.Hide(nil) })) mainMenuMenu.AddItem(appkit.NewMenuItemWithAction("Quit", "q", func(sender objc.Object) { app.Terminate(nil) })) mainMenuItem.SetSubmenu(mainMenuMenu) menu.AddItem(mainMenuItem) testMenuItem := appkit.NewMenuItemWithSelector("", "", objc.Selector{}) editMenu := appkit.NewMenuWithTitle("Edit") editMenu.AddItem(appkit.NewMenuItemWithSelector("Select All", "a", objc.Sel("selectAll:"))) editMenu.AddItem(appkit.MenuItem_SeparatorItem()) editMenu.AddItem(appkit.NewMenuItemWithSelector("Copy", "c", objc.Sel("copy:"))) editMenu.AddItem(appkit.NewMenuItemWithSelector("Paste", "v", objc.Sel("paste:"))) editMenu.AddItem(appkit.NewMenuItemWithSelector("Cut", "x", objc.Sel("cut:"))) editMenu.AddItem(appkit.NewMenuItemWithSelector("Undo", "z", objc.Sel("undo:"))) editMenu.AddItem(appkit.NewMenuItemWithSelector("Redo", "Z", objc.Sel("redo:"))) testMenuItem.SetSubmenu(editMenu) menu.AddItem(testMenuItem) } func setSystemBar(app appkit.Application) { item := appkit.StatusBar_SystemStatusBar().StatusItemWithLength(appkit.VariableStatusItemLength) objc.Retain(&item) img := appkit.Image_ImageWithSystemSymbolNameAccessibilityDescription("multiply.circle.fill", "A multiply symbol inside a filled circle.") item.Button().SetImage(img) menu := appkit.NewMenuWithTitle("main") menu.AddItem(appkit.NewMenuItemWithAction("Hide", "h", func(sender objc.Object) { app.Hide(nil) })) menu.AddItem(appkit.NewMenuItemWithAction("Quit", "q", func(sender objc.Object) { app.Terminate(nil) })) item.SetMenu(menu) }