diff --git a/dfssd/gui/events.go b/dfssd/gui/events.go
index e03d81d7888c705b7b09afac98acb8dddef922c2..39d755584e955ed48a7a90a13851c4afed7b5e48 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 209fd856356eda31cc8c219b3e772fbce1e2acdd..c7191a9a916618e7f875e80e2993bd7f5416299e 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 7e1c26393ee66374ccfed1b814926ecc38f85ba6..3f34780b8b29f8debaaeb3c4f79645d9164849e1 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 8ea71a917f63484e277b2d6739c14d4b7a33037b..2e22a41c38cbc8eca738fe6df498381ee25bc43e 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.