diff options
| author | Jeff Carr <[email protected]> | 2024-02-19 14:41:32 -0600 |
|---|---|---|
| committer | Jeff Carr <[email protected]> | 2024-02-19 14:41:32 -0600 |
| commit | 10eb3685d71a8b4f74a6b3430ef54d56d9aa625d (patch) | |
| tree | a76b5908c74863be81d0178ae6efeb26dd90f0f6 /label.go | |
| parent | 337a55eaac4ffc516c26286b04b039533adb157d (diff) | |
try out a "Mirror" concept for widgets
Diffstat (limited to 'label.go')
| -rw-r--r-- | label.go | 67 |
1 files changed, 67 insertions, 0 deletions
@@ -1,6 +1,7 @@ package gui import ( + "go.wit.com/log" "go.wit.com/widget" ) @@ -13,3 +14,69 @@ func (parent *Node) NewLabel(text string) *Node { sendAction(newNode, widget.Add) return newNode } + +// 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) + } + } +} |
