diff options
author | Christian Pointner <equinox@helsinki.at> | 2016-01-28 04:39:22 (GMT) |
---|---|---|
committer | Christian Pointner <equinox@helsinki.at> | 2016-01-28 04:39:22 (GMT) |
commit | b432447e8c4f93ec7c0a69bafb4b42f40327113e (patch) | |
tree | 8933ece8cf44478ef41206c725fa2439fc37f892 /src/rhlibrary/player_widget.go | |
parent | 894a02cafb61e9fe504663d6a7321644b7cf0345 (diff) |
further improved player - which is now on top of window
Diffstat (limited to 'src/rhlibrary/player_widget.go')
-rw-r--r-- | src/rhlibrary/player_widget.go | 66 |
1 files changed, 55 insertions, 11 deletions
diff --git a/src/rhlibrary/player_widget.go b/src/rhlibrary/player_widget.go index 5440582..032d1b2 100644 --- a/src/rhlibrary/player_widget.go +++ b/src/rhlibrary/player_widget.go @@ -25,7 +25,10 @@ package main import ( + "time" + "code.helsinki.at/rhrd-go/player" + "github.com/gotk3/gotk3/glib" "github.com/gotk3/gotk3/gtk" ) @@ -39,7 +42,7 @@ func addPlayButton(grid *gtk.Grid, p *player.PlayerChan) (err error) { rhdl.Println(err) // TODO: feedback at GUI? } }) - grid.Add(btn) + grid.Attach(btn, 1, 1, 1, 2) return } @@ -53,7 +56,7 @@ func addPauseButton(grid *gtk.Grid, p *player.PlayerChan) (err error) { rhdl.Println(err) // TODO: feedback at GUI? } }) - grid.Add(btn) + grid.Attach(btn, 2, 1, 1, 2) return } @@ -67,16 +70,55 @@ func addStopButton(grid *gtk.Grid, p *player.PlayerChan) (err error) { rhdl.Println(err) // TODO: feedback at GUI? } }) - grid.Add(btn) + grid.Attach(btn, 3, 1, 1, 2) return } func addMeter(grid *gtk.Grid, p *player.PlayerChan) error { widget, err := getVUMeterWidget(p) - if err == nil { - grid.Add(widget) + if err != nil { + return err + } + grid.Attach(widget, 4, 1, 1, 1) + return nil +} + +func addScrubber(grid *gtk.Grid, p *player.PlayerChan) (err error) { + var scale *gtk.Scale + if scale, err = gtk.ScaleNew(gtk.ORIENTATION_HORIZONTAL, nil); err != nil { + return } - return err + if err = scale.SetProperty("draw-value", false); err != nil { + return + } + scale.SetRange(0, 1) + scale.SetValue(0) + + p.AddUpdateHandler(func(length time.Duration, pos time.Duration, meter player.Meter, userdata interface{}) bool { + glib.IdleAdd(func() { scale.SetValue(float64(pos) / float64(length)) }) + return true + }, nil) + + grid.Attach(scale, 4, 2, 2, 1) + return +} + +func addPlayTime(grid *gtk.Grid, p *player.PlayerChan) (err error) { + var label *gtk.Label + if label, err = gtk.LabelNew("00:00:00.0"); err != nil { + return err + } + + p.AddUpdateHandler(func(length time.Duration, pos time.Duration, meter player.Meter, userdata interface{}) bool { + glib.IdleAdd(func() { + t := time.Unix(0, 0).UTC().Add(pos) + label.SetText(t.Format("15:04:05.0")) + }) + return true + }, nil) + + grid.Attach(label, 5, 1, 1, 1) + return nil } func getPlayerWidget(p *player.PlayerChan) (gtk.IWidget, error) { @@ -100,11 +142,13 @@ func getPlayerWidget(p *player.PlayerChan) (gtk.IWidget, error) { if err = addMeter(grid, p); err != nil { return nil, err } - - var frame *gtk.Frame - if frame, err = gtk.FrameNew("player"); err != nil { + if err = addScrubber(grid, p); err != nil { + return nil, err + } + if err = addPlayTime(grid, p); err != nil { return nil, err } - frame.Add(grid) - return frame, nil + + grid.SetHAlign(gtk.ALIGN_CENTER) + return grid, nil } |