98 lines
3.2 KiB
Go
98 lines
3.2 KiB
Go
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)
|
|
}
|