summaryrefslogtreecommitdiff
path: root/label.go
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2024-02-19 14:41:32 -0600
committerJeff Carr <[email protected]>2024-02-19 14:41:32 -0600
commit10eb3685d71a8b4f74a6b3430ef54d56d9aa625d (patch)
treea76b5908c74863be81d0178ae6efeb26dd90f0f6 /label.go
parent337a55eaac4ffc516c26286b04b039533adb157d (diff)
try out a "Mirror" concept for widgets
Diffstat (limited to 'label.go')
-rw-r--r--label.go67
1 files changed, 67 insertions, 0 deletions
diff --git a/label.go b/label.go
index 23e2de4..df33a5a 100644
--- a/label.go
+++ b/label.go
@@ -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)
+ }
+ }
+}