From c4d3b49c12dc64f4f9893767b7c5efeec00ead81 Mon Sep 17 00:00:00 2001 From: Lesterpig Date: Mon, 11 Apr 2016 14:16:43 +0200 Subject: [PATCH] [d] Update quantum and speed feature --- dfssd/gui/events.go | 9 ++++----- dfssd/gui/structures.go | 2 ++ dfssd/gui/widget.ui | 21 ++++++++++++++++++--- dfssd/gui/window.go | 15 +++++++++++++++ 4 files changed, 39 insertions(+), 8 deletions(-) diff --git a/dfssd/gui/events.go b/dfssd/gui/events.go index e03d81d..39d7555 100644 --- a/dfssd/gui/events.go +++ b/dfssd/gui/events.go @@ -11,10 +11,6 @@ import ( "github.com/visualfc/goqt/ui" ) -// TEMPORARY -const quantum = 100 // discretization argument for events (ns) -const speed = 1000 // duration of a quantum (ms) - // AddEvent interprets an incoming event into a graphic one. // Expected format: // @@ -72,9 +68,11 @@ func (w *Window) PrintQuantumInformation() { return } + quantum := float64(w.quantumField.Value()) + beginning := w.scene.Events[0].Date.UnixNano() totalDuration := w.scene.Events[len(w.scene.Events)-1].Date.UnixNano() - beginning - nbQuantum := math.Max(1, math.Ceil(float64(totalDuration)/quantum)) + nbQuantum := math.Floor(float64(totalDuration)/quantum) + 1 durationFromBeginning := w.scene.currentTime.UnixNano() - beginning currentQuantum := math.Ceil(float64(durationFromBeginning)/quantum) + 1 @@ -115,6 +113,7 @@ func (w *Window) initTimer() { w.scene.currentTime = w.scene.Events[0].Date } + quantum := time.Duration(w.quantumField.Value()) endOfQuantum := w.scene.currentTime.Add(quantum * time.Nanosecond) for i := w.scene.currentEvent; i < nbEvents; i++ { diff --git a/dfssd/gui/structures.go b/dfssd/gui/structures.go index 209fd85..c7191a9 100644 --- a/dfssd/gui/structures.go +++ b/dfssd/gui/structures.go @@ -20,6 +20,8 @@ type Window struct { playButton *ui.QPushButton stopButton *ui.QPushButton replayButton *ui.QPushButton + quantumField *ui.QSpinBox + speedSlider *ui.QSlider scene *Scene circleSize float64 pixmaps map[string]*ui.QPixmap diff --git a/dfssd/gui/widget.ui b/dfssd/gui/widget.ui index 7e1c263..3f34780 100644 --- a/dfssd/gui/widget.ui +++ b/dfssd/gui/widget.ui @@ -140,10 +140,13 @@ - Qt::TabFocus + Qt::ClickFocus + + + QAbstractSpinBox::CorrectToNearestValue - us + ns 1 @@ -183,6 +186,18 @@ Qt::TabFocus + + 1 + + + 20 + + + 2 + + + 4 + Qt::Horizontal @@ -190,7 +205,7 @@ QSlider::TicksBothSides - 5 + 1 diff --git a/dfssd/gui/window.go b/dfssd/gui/window.go index 8ea71a9..2e22a41 100644 --- a/dfssd/gui/window.go +++ b/dfssd/gui/window.go @@ -38,6 +38,9 @@ func NewWindow() *Window { w.stopButton = ui.NewPushButtonFromDriver(widget.FindChild("stopButton")) w.replayButton = ui.NewPushButtonFromDriver(widget.FindChild("replayButton")) + w.quantumField = ui.NewSpinBoxFromDriver(widget.FindChild("quantumField")) + w.speedSlider = ui.NewSliderFromDriver(widget.FindChild("speedSlider")) + // Load pixmaps w.pixmaps = map[string]*ui.QPixmap{ "ttp": ui.NewPixmapWithFilenameFormatFlags(":/images/server_key.png", "", ui.Qt_AutoColor), @@ -119,6 +122,7 @@ func (w *Window) addActions() { w.playButton.OnClicked(func() { w.playButton.SetDisabled(true) w.stopButton.SetDisabled(false) + speed := 2000 / w.speedSlider.Value() w.timer.StartWithMsec(speed) }) @@ -134,6 +138,17 @@ func (w *Window) addActions() { w.scene.currentEvent = 0 w.PrintQuantumInformation() }) + + w.quantumField.OnValueChanged(func(_ string) { + w.replayButton.Click() + }) + + w.speedSlider.OnValueChanged(func(_ int32) { + if !w.playButton.IsEnabled() { // playing right now + w.stopButton.Click() + w.playButton.Click() + } + }) } // initScene creates the Qt graphic scene associated to our custom scene. -- GitLab