From f63f2520afca72828ffab29e632774dc03efa6a8 Mon Sep 17 00:00:00 2001
From: Oliver Bock <oliver.bock@aei.mpg.de>
Date: Thu, 5 Feb 2009 16:53:23 +0100
Subject: [PATCH] Fixed marker positioning/synchronization

* Using rotation angle directly (instead of independent stepping)
* One signal/slot link for position update and reset
* Also: added pulse profile update (reset) to stop animation slot
---
 src/pulsaranimationwidget.cpp |  9 ++++++---
 src/pulsaranimationwidget.h   |  3 +--
 src/pulsatingscience.cpp      |  5 +----
 src/pulsescopewidget.cpp      | 16 ++--------------
 src/pulsescopewidget.h        |  3 +--
 5 files changed, 11 insertions(+), 25 deletions(-)

diff --git a/src/pulsaranimationwidget.cpp b/src/pulsaranimationwidget.cpp
index 5855e24..a6d169b 100644
--- a/src/pulsaranimationwidget.cpp
+++ b/src/pulsaranimationwidget.cpp
@@ -64,7 +64,8 @@ PulsarAnimationWidget::PulsarAnimationWidget(QWidget *parent) :
 	m_framesPerSecond = 25;
 	m_pulsarRotationDelta = 0.0;
 	m_orbitRotationDelta = 0.0;
-	resetParameters();
+	m_pulsarRotationAngle = 0.0;
+	m_orbitRotationAngle = 0.0;
 
 	// initial binary system parameters (have to match GUI!)
 	m_pulsarMass = 1.4;
@@ -393,7 +394,7 @@ void PulsarAnimationWidget::updateFrame()
 
 	updateGL();
 
-	emit pulsarAnimationStep(m_pulsarRotationDelta);
+	emit pulsarAnimationStep(m_pulsarRotationAngle);
 }
 
 void PulsarAnimationWidget::showOrbits(bool enabled)
@@ -455,6 +456,7 @@ void PulsarAnimationWidget::mouseReleaseEvent(QMouseEvent *event)
 	m_mouseLastX = 0;
 	m_mouseLastY = 0;
 	m_cameraInteraction = false;
+
 	updateGL();
 }
 
@@ -554,8 +556,9 @@ void PulsarAnimationWidget::resetParameters()
 {
 	m_pulsarRotationAngle = 0.0;
 	m_orbitRotationAngle = 0.0;
+	updatePulseProfile();
 
-	emit pulsarAnimationReset();
+	emit pulsarAnimationStep(m_pulsarRotationAngle);
 }
 
 void PulsarAnimationWidget::updatePulseProfile()
diff --git a/src/pulsaranimationwidget.h b/src/pulsaranimationwidget.h
index b4ac3e1..cd7ee99 100644
--- a/src/pulsaranimationwidget.h
+++ b/src/pulsaranimationwidget.h
@@ -59,8 +59,7 @@ public slots:
 signals:
 	void pulsarSemiMajorAxisUpdated(double value);
 	void pulseProfileUpdated(const QVector<double>& data);
-	void pulsarAnimationStep(double stepSize);
-	void pulsarAnimationReset();
+	void pulsarAnimationStep(double position);
 
 private:
     void initializeGL();
diff --git a/src/pulsatingscience.cpp b/src/pulsatingscience.cpp
index f0c4019..bb77ceb 100644
--- a/src/pulsatingscience.cpp
+++ b/src/pulsatingscience.cpp
@@ -73,10 +73,7 @@ PulsatingScience::PulsatingScience(QWidget *parent) : QMainWindow(parent)
 				this, SLOT(updatePulsarSemiMajorAxisValue(double)));
 
 	connect(ui.pulsarGlWidget, SIGNAL(pulsarAnimationStep(double)),
-				ui.pulseScopeWidget, SLOT(markerStep(double)), Qt::DirectConnection);
-
-	connect(ui.pulsarGlWidget, SIGNAL(pulsarAnimationReset()),
-				ui.pulseScopeWidget, SLOT(markerReset()));
+				ui.pulseScopeWidget, SLOT(setMarker(double)), Qt::DirectConnection);
 
 	connect(ui.pulsarGlWidget, SIGNAL(pulseProfileUpdated(const QVector<double>&)),
 				ui.pulseScopeWidget, SLOT(drawCurve(const QVector<double>&)), Qt::DirectConnection);
diff --git a/src/pulsescopewidget.cpp b/src/pulsescopewidget.cpp
index 0b83e8d..e75bec9 100644
--- a/src/pulsescopewidget.cpp
+++ b/src/pulsescopewidget.cpp
@@ -83,18 +83,6 @@ void PulseScopeWidget::drawCurve(const QVector<double>& vector)
 	}
 }
 
-void PulseScopeWidget::markerStep(double stepSize) {
-	static double x = 0.0;
-
-	if(x < m_scopeSizeH) {
-		x += stepSize;
-		m_marker->setLine(x, 0.0, x, m_scopeSizeV);
-	}
-	else {
-		x -= m_scopeSizeH;
-	}
-}
-
-void PulseScopeWidget::markerReset() {
-	m_marker->setLine(0.0, 0.0, 0.0, m_scopeSizeV);
+void PulseScopeWidget::setMarker(double position) {
+	m_marker->setLine(position, 0.0, position, m_scopeSizeV);
 }
diff --git a/src/pulsescopewidget.h b/src/pulsescopewidget.h
index 96192a3..267ef2f 100644
--- a/src/pulsescopewidget.h
+++ b/src/pulsescopewidget.h
@@ -42,8 +42,7 @@ public:
 
 public slots:
 	void drawCurve(const QVector<double>& vector);
-	void markerStep(double stepSize);
-	void markerReset();
+	void setMarker(double position);
 
 private:
 	QGraphicsScene m_scene;
-- 
GitLab