summaryrefslogtreecommitdiff
path: root/durationSlider.go
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2024-01-01 16:19:40 -0600
committerJeff Carr <[email protected]>2024-01-01 16:19:40 -0600
commit7f6059a8e0f83bb4b450c1264195f08fe1280f05 (patch)
tree0c75d2bbbab93c8611bc7ab466a6389485c645b5 /durationSlider.go
initial commit
Diffstat (limited to 'durationSlider.go')
-rw-r--r--durationSlider.go79
1 files changed, 79 insertions, 0 deletions
diff --git a/durationSlider.go b/durationSlider.go
new file mode 100644
index 0000000..6ae1e00
--- /dev/null
+++ b/durationSlider.go
@@ -0,0 +1,79 @@
+/*
+ A slider that goes between a High and Low time
+*/
+
+package gadgets
+
+import (
+ "log"
+ "fmt"
+ "time"
+
+ "go.wit.com/gui/gui"
+)
+
+type Duration struct {
+ p *gui.Node // parent widget
+ l *gui.Node // label widget
+ s *gui.Node // slider widget
+
+ Label string
+ Low time.Duration
+ High time.Duration
+ Duration time.Duration
+
+ Custom func()
+}
+
+func (n *Duration) Set(d time.Duration) {
+ var timeRange, step, offset time.Duration
+
+ if (d > n.High) {
+ d = n.High
+ }
+ if (d < n.Low) {
+ d = n.Low
+ }
+
+ // set the duration
+ n.Duration = d
+
+ // figure out the integer offset for the Slider GUI Widget
+ timeRange = n.High - n.Low
+ step = timeRange / 1000
+ if (step == 0) {
+ log.Println("duration.Set() division by step == 0", n.Low, n.High, timeRange, step)
+ n.s.Set(0)
+ return
+ }
+ offset = d - n.Low
+ i := int(offset / step)
+ log.Println("duration.Set() =", n.Low, n.High, d, "i =", i)
+ n.s.I = i
+ n.s.Set(i)
+ n.s.Custom()
+}
+
+func NewDurationSlider(n *gui.Node, label string, low time.Duration, high time.Duration) *Duration {
+ d := Duration {
+ p: n,
+ Label: label,
+ High: high,
+ Low: low,
+ }
+
+ // various timeout settings
+ d.l = n.NewLabel(label)
+ d.s = n.NewSlider(label, 0, 1000)
+ d.s.Custom = func () {
+ d.Duration = low + (high - low) * time.Duration(d.s.I) / 1000
+ log.Println("d.Duration =", d.Duration)
+ s := fmt.Sprintf("%s (%v)", d.Label, d.Duration)
+ d.l.SetText(s)
+ if (d.Custom != nil) {
+ d.Custom()
+ }
+ }
+
+ return &d
+}