diff options
| author | Jeff Carr <[email protected]> | 2024-02-22 19:27:49 -0600 |
|---|---|---|
| committer | Jeff Carr <[email protected]> | 2024-02-22 19:27:49 -0600 |
| commit | 42048ba99741827972a60a88b8ad03c6a0e4e801 (patch) | |
| tree | b9df811e910233e45c1e5af7c8b7303d46002b52 /mirror.go | |
| parent | 2de5864fff19e2f794e85385d075aa8e4049d709 (diff) | |
Diffstat (limited to 'mirror.go')
| -rw-r--r-- | mirror.go | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/mirror.go b/mirror.go new file mode 100644 index 0000000..a89b186 --- /dev/null +++ b/mirror.go @@ -0,0 +1,74 @@ +package gui + +// an experiemental idea + +import ( + "go.wit.com/log" + "go.wit.com/widget" +) + +// an experiemental idea +// basically, this is like a cell in a spreadsheet that is viable +// in one place but also exists sonewhere else +func (parent *Node) Mirror(m *Node) *Node { + switch m.WidgetType { + case widget.Label: + text := m.label + newNode := parent.newNode(text, widget.Label) + newNode.label = text + newNode.progname = text + newNode.isMirror = m + m.hasMirrors = append(m.hasMirrors, newNode) + + // inform the toolkits + sendAction(newNode, widget.Add) + return newNode + default: + return nil + } +} + +// make a mirror widget without a parent +func RawMirror(m *Node) *Node { + switch m.WidgetType { + case widget.Label: + newNode := rawNode("MIRROR", widget.Label) + newNode.isMirror = m + m.hasMirrors = append(m.hasMirrors, newNode) + return newNode + default: + return nil + } +} + +func (n *Node) IsMirror() bool { + if n.isMirror == nil { + return false + } + return true +} + +func (n *Node) hasMirror() bool { + if len(n.hasMirrors) == 0 { + return false + } + return true +} + +func (n *Node) updateMirrors() { + if n.IsMirror() { + // n is a mirror of something else + return + } + for _, m := range n.hasMirrors { + switch m.WidgetType { + case widget.Label: + m.label = n.label + m.changed = true + // inform the toolkits + sendAction(m, widget.SetText) + default: + log.Log(WARN, "can not mirror widget type", m.WidgetType) + } + } +} |
