253 lines
6.1 KiB
Go
253 lines
6.1 KiB
Go
package main
|
|
|
|
// 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) {
|
|
log(debugPlugin, "Send() goodbye. not used anymore")
|
|
}
|
|
|
|
func Action(a *toolkit.Action) {
|
|
if (a == nil) {
|
|
log(debugPlugin, "Action = nil")
|
|
return
|
|
}
|
|
f := func() {
|
|
rawAction(a)
|
|
}
|
|
|
|
if (callback == nil) {
|
|
if (a.Callback != nil) {
|
|
log(debugNow, "setting Callback", a.Callback)
|
|
callback = a.Callback
|
|
}
|
|
}
|
|
|
|
// f()
|
|
Queue(f)
|
|
}
|
|
|
|
func rawAction(a *toolkit.Action) {
|
|
|
|
log(debugAction, "Action() START a.ActionType =", a.ActionType)
|
|
log(debugAction, "Action() START a.S =", a.S)
|
|
log(debugAction, "Action() START a.Widget =", a.Widget)
|
|
|
|
log(logInfo, "Action() START a.WidgetId =", a.WidgetId, "a.ParentId =", a.ParentId)
|
|
switch a.WidgetType {
|
|
case toolkit.Flag:
|
|
flag(a)
|
|
return
|
|
}
|
|
|
|
switch a.ActionType {
|
|
case toolkit.Add:
|
|
add(a)
|
|
case toolkit.Show:
|
|
a.Widget.B = true
|
|
show(a)
|
|
case toolkit.Hide:
|
|
a.Widget.B = false
|
|
show(a)
|
|
case toolkit.Enable:
|
|
a.Widget.B = true
|
|
enable(a)
|
|
case toolkit.Disable:
|
|
a.Widget.B = false
|
|
enable(a)
|
|
case toolkit.Get:
|
|
setText(a)
|
|
case toolkit.GetText:
|
|
switch a.Widget.Type {
|
|
case toolkit.Textbox:
|
|
t := andlabs[a.WidgetId]
|
|
a.S = t.s
|
|
}
|
|
case toolkit.Set:
|
|
setText(a)
|
|
case toolkit.SetText:
|
|
setText(a)
|
|
case toolkit.AddText:
|
|
setText(a)
|
|
case toolkit.Margin:
|
|
pad(a)
|
|
case toolkit.Unmargin:
|
|
pad(a)
|
|
case toolkit.Pad:
|
|
pad(a)
|
|
case toolkit.Unpad:
|
|
pad(a)
|
|
case toolkit.Delete:
|
|
uiDelete(a)
|
|
case toolkit.Move:
|
|
log(debugNow, "attempt to move() =", a.ActionType, a.Widget)
|
|
move(a)
|
|
default:
|
|
log(debugError, "Action() Unknown =", a.ActionType, a.Widget)
|
|
}
|
|
log(debugAction, "Action() END =", a.ActionType, a.Widget)
|
|
}
|
|
|
|
func flag(a *toolkit.Action) {
|
|
// log(debugFlags, "plugin Send() flag parent =", p.Name, p.Type)
|
|
// log(debugFlags, "plugin Send() flag child =", c.Name, c.Type)
|
|
// log(debugFlags, "plugin Send() flag child.Action =", c.Action)
|
|
// log(debugFlags, "plugin Send() flag child.S =", c.S)
|
|
// log(debugFlags, "plugin Send() flag child.B =", c.B)
|
|
// log(debugFlags, "plugin Send() what to flag?")
|
|
// should set the checkbox to this value
|
|
switch a.S {
|
|
case "Toolkit":
|
|
debugToolkit = a.B
|
|
case "Change":
|
|
debugChange = a.B
|
|
case "Plugin":
|
|
debugPlugin = a.B
|
|
case "Flags":
|
|
debugFlags = a.B
|
|
case "Error":
|
|
debugError = a.B
|
|
case "Now":
|
|
debugNow = a.B
|
|
case "Show":
|
|
ShowDebug()
|
|
default:
|
|
log(debugError, "Can't set unknown flag", a.S)
|
|
}
|
|
}
|
|
|
|
func setText(a *toolkit.Action) {
|
|
t := andlabs[a.WidgetId]
|
|
if (t == nil) {
|
|
log(debugError, "setText error. andlabs[id] == nil", a.WidgetId)
|
|
actionDump(debugError, a)
|
|
return
|
|
}
|
|
log(debugChange, "setText() Attempt on", t.WidgetType, "with", a.S)
|
|
|
|
switch t.WidgetType {
|
|
case toolkit.Window:
|
|
t.uiWindow.SetTitle(a.S)
|
|
case toolkit.Tab:
|
|
case toolkit.Group:
|
|
t.uiGroup.SetTitle(a.S)
|
|
case toolkit.Checkbox:
|
|
switch a.ActionType {
|
|
case toolkit.SetText:
|
|
t.uiCheckbox.SetText(a.S)
|
|
case toolkit.Get:
|
|
t.tw.B = t.uiCheckbox.Checked()
|
|
case toolkit.Set:
|
|
// TODO: commented out while working on chan
|
|
// t.uiCheckbox.SetChecked(a.B)
|
|
t.tw.B = a.B
|
|
default:
|
|
log(debugError, "setText() unknown", a.ActionType, "on checkbox", t.Name)
|
|
}
|
|
case toolkit.Textbox:
|
|
switch a.ActionType {
|
|
case toolkit.Set:
|
|
t.uiMultilineEntry.SetText(a.S)
|
|
case toolkit.SetText:
|
|
t.uiMultilineEntry.SetText(a.S)
|
|
case toolkit.Get:
|
|
t.tw.S = t.s
|
|
case toolkit.GetText:
|
|
t.tw.S = t.s
|
|
default:
|
|
log(debugError, "setText() unknown", a.ActionType, "on checkbox", t.Name)
|
|
}
|
|
case toolkit.Label:
|
|
t.uiLabel.SetText(a.S)
|
|
case toolkit.Button:
|
|
t.uiButton.SetText(a.S)
|
|
case toolkit.Slider:
|
|
switch a.ActionType {
|
|
case toolkit.Get:
|
|
t.tw.I = t.uiSlider.Value()
|
|
case toolkit.Set:
|
|
t.uiSlider.SetValue(a.I)
|
|
default:
|
|
log(debugError, "setText() unknown", a.ActionType, "on checkbox", t.Name)
|
|
}
|
|
case toolkit.Spinner:
|
|
switch a.ActionType {
|
|
case toolkit.Get:
|
|
t.tw.I = t.uiSpinbox.Value()
|
|
case toolkit.Set:
|
|
t.uiSpinbox.SetValue(a.I)
|
|
default:
|
|
log(debugError, "setText() unknown", a.ActionType, "on checkbox", t.Name)
|
|
}
|
|
case toolkit.Dropdown:
|
|
switch a.ActionType {
|
|
case toolkit.AddText:
|
|
AddDropdownName(a)
|
|
case toolkit.Set:
|
|
var orig int
|
|
var i int = -1
|
|
var s string
|
|
orig = t.uiCombobox.Selected()
|
|
log(debugChange, "try to set the Dropdown to", a.S, "from", orig)
|
|
// try to find the string
|
|
for i, s = range t.val {
|
|
log(debugChange, "i, s", i, s)
|
|
if (a.S == s) {
|
|
t.uiCombobox.SetSelected(i)
|
|
log(debugChange, "setText() Dropdown worked.", t.tw.S)
|
|
return
|
|
}
|
|
}
|
|
log(debugError, "setText() Dropdown did not find:", a.S)
|
|
// if i == -1, then there are not any things in the menu to select
|
|
if (i == -1) {
|
|
return
|
|
}
|
|
// if the string was never set, then set the dropdown to the last thing added to the menu
|
|
if (orig == -1) {
|
|
t.uiCombobox.SetSelected(i)
|
|
}
|
|
case toolkit.Get:
|
|
t.tw.S = t.s
|
|
case toolkit.GetText:
|
|
t.tw.S = t.s
|
|
default:
|
|
log(debugError, "setText() unknown", a.ActionType, "on checkbox", t.Name)
|
|
}
|
|
case toolkit.Combobox:
|
|
switch a.ActionType {
|
|
case toolkit.AddText:
|
|
t.AddComboboxName(a.S)
|
|
case toolkit.Set:
|
|
t.uiEditableCombobox.SetText(a.S)
|
|
t.s = a.S
|
|
case toolkit.SetText:
|
|
t.uiEditableCombobox.SetText(a.S)
|
|
t.s = a.S
|
|
case toolkit.Get:
|
|
t.tw.S = t.s
|
|
case toolkit.GetText:
|
|
t.tw.S = t.s
|
|
default:
|
|
log(debugError, "setText() unknown", a.ActionType, "on checkbox", t.Name)
|
|
}
|
|
default:
|
|
log(debugError, "plugin Send() Don't know how to setText on", t.WidgetType, "yet", a.ActionType)
|
|
}
|
|
}
|