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.