diff options
| author | Jeff Carr <[email protected]> | 2024-01-01 16:11:54 -0600 |
|---|---|---|
| committer | Jeff Carr <[email protected]> | 2024-01-01 16:11:54 -0600 |
| commit | 36218f4535dd65d2c8d4ecbea761b3b0289e6f3c (patch) | |
| tree | 24cf9c64dd518528f30a6282e879e8e5c6136bd4 /andlabs/add.go | |
move into seperate repo
Diffstat (limited to 'andlabs/add.go')
| -rw-r--r-- | andlabs/add.go | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/andlabs/add.go b/andlabs/add.go new file mode 100644 index 0000000..d78101f --- /dev/null +++ b/andlabs/add.go @@ -0,0 +1,157 @@ +package main + +import ( + "github.com/andlabs/ui" + _ "github.com/andlabs/ui/winmanifest" + + "go.wit.com/gui/gui/toolkit" +) + +func actionDump(b bool, a *toolkit.Action) { + log(b, "actionDump() Widget.Type =", a.ActionType) + log(b, "actionDump() Widget.S =", a.S) + log(b, "actionDump() Widget.I =", a.I) + log(b, "actionDump() WidgetId =", a.WidgetId) + log(b, "actionDump() ParentId =", a.ParentId) +} + +func add(a *toolkit.Action) { + if (a.WidgetType == toolkit.Root) { + me.rootNode = addNode(a) + return + } + n := addNode(a) + + p := n.parent + switch n.WidgetType { + case toolkit.Window: + newWindow(n) + return + case toolkit.Tab: + p.newTab(n) + return + case toolkit.Label: + p.newLabel(n) + return + case toolkit.Button: + p.newButton(n) + return + case toolkit.Grid: + p.newGrid(n) + return + case toolkit.Checkbox: + p.newCheckbox(n) + return + case toolkit.Spinner: + p.newSpinner(n) + return + case toolkit.Slider: + p.newSlider(n) + return + case toolkit.Dropdown: + p.newDropdown(n) + return + case toolkit.Combobox: + p.newCombobox(n) + return + case toolkit.Textbox: + p.newTextbox(n) + return + case toolkit.Group: + p.newGroup(n) + return + case toolkit.Box: + p.newBox(n) + return + case toolkit.Image: + p.newImage(n) + return + default: + log(debugError, "add() error TODO: ", n.WidgetType, n.Name) + } +} + +// This routine is very specific to this toolkit +// It's annoying and has to be copied to each widget when there are changes +// it could be 'simplfied' maybe or made to be more generic, but this is as far as I've gotten +// it's probably not worth working much more on this toolkit, the andlabs/ui has been great and got me here! +// but it's time to write direct GTK, QT, macos and windows toolkit plugins +// -- jcarr 2023/03/09 + +// Grid numbering examples by (X,Y) +// --------- +// -- (1) -- +// -- (2) -- +// --------- +// +// ----------------------------- +// -- (1,1) -- (1,2) -- (1,3) -- +// -- (2,1) -- (2,2) -- (2,3) -- +// ----------------------------- + +// internally for andlabs/ui +// (x&y flipped and start at zero) +// ----------------------------- +// -- (0,0) -- (1,0) -- (1,0) -- +// -- (0,1) -- (1,1) -- (1,1) -- +// ----------------------------- +func (p *node) place(n *node) bool { + log(logInfo, "place() START", n.WidgetType, n.Name) + + if (p.tk == nil) { + log(logError, "p.tk == nil", p.Name, p.ParentId, p.WidgetType, p.tk) + log(logError, "n = ", n.Name, n.ParentId, n.WidgetType, n.tk) + panic("p.tk == nil") + } + + log(logInfo, "place() switch", p.WidgetType) + switch p.WidgetType { + case toolkit.Grid: + log(logInfo, "place() Grid try at Parent X,Y =", n.X, n.Y) + n.tk.gridX = n.AtW - 1 + n.tk.gridY = n.AtH - 1 + log(logInfo, "place() Grid try at gridX,gridY", n.tk.gridX, n.tk.gridY) + // at the very end, subtract 1 from X & Y since andlabs/ui starts counting at zero + p.tk.uiGrid.Append(n.tk.uiControl, + n.tk.gridX, n.tk.gridY, 1, 1, + false, ui.AlignFill, false, ui.AlignFill) + return true + case toolkit.Group: + if (p.tk.uiBox == nil) { + p.tk.uiGroup.SetChild(n.tk.uiControl) + log(logInfo, "place() hack Group to use this as the box?", n.Name, n.WidgetType) + p.tk.uiBox = n.tk.uiBox + } else { + p.tk.uiBox.Append(n.tk.uiControl, stretchy) + } + return true + case toolkit.Tab: + if (p.tk.uiTab == nil) { + log(logError, "p.tk.uiTab == nil for n.WidgetId =", n.WidgetId, "p.tk =", p.tk) + panic("p.tk.uiTab == nil") + } + if (n.tk.uiControl == nil) { + log(logError, "n.tk.uiControl == nil for n.WidgetId =", n.WidgetId, "n.tk =", n.tk) + panic("n.tk.uiControl == nil") + } + log(logError, "CHECK LOGIC ON THIS. APPENDING directly into a window without a tab") + // log(logError, "THIS SHOULD NEVER HAPPEN ??????? trying to place() node=", n.WidgetId, n.Name, n.Text, n.WidgetType) + // log(logError, "THIS SHOULD NEVER HAPPEN ??????? trying to place() on parent=", p.WidgetId, p.Name, p.Text, p.WidgetType) + // panic("n.tk.uiControl == nil") + p.tk.uiTab.Append(n.Text, n.tk.uiControl) + p.tk.boxC += 1 + return true + case toolkit.Box: + log(logInfo, "place() uiBox =", p.tk.uiBox) + log(logInfo, "place() uiControl =", n.tk.uiControl) + p.tk.uiBox.Append(n.tk.uiControl, stretchy) + p.tk.boxC += 1 + return true + case toolkit.Window: + p.tk.uiWindow.SetChild(n.tk.uiControl) + return true + default: + log(debugError, "place() how? Parent =", p.WidgetId, p.WidgetType) + } + return false +} |
