2022-11-13 08:53:03 -06:00
|
|
|
package main
|
|
|
|
|
2023-03-01 11:35:36 -06:00
|
|
|
// if you include more than just this import
|
|
|
|
// then your plugin might be doing something un-ideal (just a guess from 2023/02/27)
|
|
|
|
import "git.wit.org/wit/gui/toolkit"
|
|
|
|
|
|
|
|
// import "github.com/andlabs/ui"
|
|
|
|
// import _ "github.com/andlabs/ui/winmanifest"
|
|
|
|
|
|
|
|
//
|
|
|
|
// This should be called ?
|
|
|
|
// Pass() ?
|
|
|
|
// This handles all interaction between the wit/gui package (what golang knows about)
|
|
|
|
// and this plugin that talks to the OS and does scary and crazy things to make
|
|
|
|
// a GUI on whatever OS or whatever GUI toolkit you might have (GTK, QT, WASM, libcurses)
|
|
|
|
//
|
|
|
|
// Once you are here, you should be in a protected goroutine created by the golang wit/gui package
|
|
|
|
//
|
|
|
|
// TODO: make sure you can't escape this goroutine
|
|
|
|
//
|
|
|
|
func Send(p *toolkit.Widget, c *toolkit.Widget) {
|
|
|
|
if (p == nil) {
|
|
|
|
log(debugPlugin, "Send() parent = nil")
|
|
|
|
} else {
|
|
|
|
log(debugPlugin, "Send() parent =", p.Name, ",", p.Type)
|
2022-11-13 08:53:03 -06:00
|
|
|
}
|
2023-03-01 11:35:36 -06:00
|
|
|
log(debugPlugin, "Send() child =", c.Name, ",", c.Action, ",", c.Type)
|
|
|
|
|
|
|
|
switch c.Type {
|
|
|
|
case toolkit.Window:
|
|
|
|
newWindow(c)
|
|
|
|
case toolkit.Tab:
|
|
|
|
newTab(p, c)
|
|
|
|
case toolkit.Group:
|
|
|
|
newGroup(p, c)
|
|
|
|
case toolkit.Button:
|
|
|
|
doButton(p, c)
|
|
|
|
case toolkit.Checkbox:
|
|
|
|
doCheckbox(p, c)
|
|
|
|
case toolkit.Label:
|
|
|
|
newLabel(p, c)
|
|
|
|
case toolkit.Textbox:
|
|
|
|
doTextbox(p, c)
|
|
|
|
case toolkit.Slider:
|
|
|
|
newSlider(p, c)
|
|
|
|
case toolkit.Spinner:
|
|
|
|
newSpinner(p, c)
|
|
|
|
default:
|
|
|
|
log(true, "unknown parent =", p.Name, p.Type)
|
|
|
|
log(true, "unknown child =", c.Name, c.Type)
|
|
|
|
log(true, "Don't know how to do", c.Type, "yet")
|
2022-11-13 08:53:03 -06:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-03-01 11:35:36 -06:00
|
|
|
// delete the child widget from the parent
|
|
|
|
// p = parent, c = child
|
|
|
|
func destroy(p *toolkit.Widget, c *toolkit.Widget) {
|
|
|
|
log(true, "delete()", c.Name, c.Type)
|
|
|
|
|
|
|
|
pt := mapToolkits[p]
|
|
|
|
ct := mapToolkits[c]
|
|
|
|
if (ct == nil) {
|
|
|
|
log(true, "delete FAILED (ct = mapToolkit[c] == nil) for c", c.Name, c.Type)
|
|
|
|
// this pukes out a whole universe of shit
|
|
|
|
// listMap()
|
|
|
|
return
|
2022-11-13 08:53:03 -06:00
|
|
|
}
|
|
|
|
|
2023-03-01 11:35:36 -06:00
|
|
|
switch ct.Type {
|
|
|
|
case toolkit.Button:
|
|
|
|
log(true, "Should delete Button here:", c.Name)
|
|
|
|
log(true, "Parent:")
|
|
|
|
pt.Dump(true)
|
|
|
|
log(true, "Child:")
|
|
|
|
ct.Dump(true)
|
|
|
|
if (pt.uiBox == nil) {
|
|
|
|
log(true, "Don't know how to destroy this")
|
|
|
|
} else {
|
|
|
|
log(true, "Fuck it, destroy the whole box", pt.Name)
|
|
|
|
// pt.uiBox.Destroy() // You have a bug: You cannot destroy a uiControl while it still has a parent.
|
|
|
|
pt.uiBox.SetPadded(false)
|
|
|
|
pt.uiBox.Delete(4)
|
|
|
|
ct.uiButton.Disable()
|
|
|
|
// ct.uiButton.Hide()
|
|
|
|
ct.uiButton.Destroy()
|
|
|
|
}
|
|
|
|
|
|
|
|
case toolkit.Window:
|
|
|
|
log(true, "Should delete Window here:", c.Name)
|
|
|
|
default:
|
|
|
|
log(true, "Don't know how to delete c =", c.Type, c.Name)
|
|
|
|
log(true, "Don't know how to delete pt =", pt.Type, pt.Name, pt.uiButton)
|
|
|
|
log(true, "Don't know how to delete ct =", ct.Type, ct.Name, ct.uiButton)
|
|
|
|
log(true, "Parent:")
|
|
|
|
pt.Dump(true)
|
|
|
|
log(true, "Child:")
|
|
|
|
ct.Dump(true)
|
|
|
|
log(true, "Fuckit, let's destroy a button", c.Name, c.Type)
|
|
|
|
if (ct.uiButton != nil) {
|
|
|
|
pt.uiBox.Delete(4)
|
|
|
|
ct.uiButton.Destroy()
|
|
|
|
}
|
2022-11-13 08:53:03 -06:00
|
|
|
}
|
|
|
|
}
|