[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [kstars/socis2014-skyguides] kstars: Added skydata QML/JS adapter
From:       Gioacchino Mazzurco <gio () eigenlab ! org>
Date:       2014-07-30 10:32:20
Message-ID: E1XCRBE-0002RO-G5 () scm ! kde ! org
[Download RAW message or body]

Git commit c442e6588dd99a0b137d21d5a6307e5dd334f6ee by Gioacchino Mazzurco.
Committed on 30/07/2014 at 10:30.
Pushed by gmazzurco into branch 'socis2014-skyguides'.

Added skydata QML/JS adapter
More methods for skymap adapter (notably focusByName
Added more examples to sky_jumper guide
More code cleanup

M  +1    -0    kstars/CMakeLists.txt
M  +19   -4    kstars/skyguides/guides/skymap_jumper/index.html
M  +18   -3    kstars/skyguides/qml/GuidesListView.qml
A  +93   -0    kstars/skyguides/skydataqmladapter.cpp     [License: GPL (v2+)]
C  +25   -17   kstars/skyguides/skydataqmladapter.h [from: \
kstars/skyguides/skymapqmladapter.cpp - 058% similarity] M  +8    -8    \
kstars/skyguides/skyguideslistview.cpp M  +4    -1    \
kstars/skyguides/skyguideslistview.h M  +9    -6    \
kstars/skyguides/skymapqmladapter.cpp M  +27   -3    \
kstars/skyguides/skymapqmladapter.h

http://commits.kde.org/kstars/c442e6588dd99a0b137d21d5a6307e5dd334f6ee

diff --git a/kstars/CMakeLists.txt b/kstars/CMakeLists.txt
index 6155d98..f1df2f1 100644
--- a/kstars/CMakeLists.txt
+++ b/kstars/CMakeLists.txt
@@ -458,6 +458,7 @@ set(kstars_skyguides_SRCS
 	skyguides/skyguideslistmodel.cpp
 	skyguides/skyguidedata.cpp
 	skyguides/skymapqmladapter.cpp
+	skyguides/skydataqmladapter.cpp
 )
 
 ##set(kstars_SRCS ${indi_SRCS} ${ekos_SRCS} ${fits_SRCS}
diff --git a/kstars/skyguides/guides/skymap_jumper/index.html \
b/kstars/skyguides/guides/skymap_jumper/index.html index 7ee2f93..25a1468 100644
--- a/kstars/skyguides/guides/skymap_jumper/index.html
+++ b/kstars/skyguides/guides/skymap_jumper/index.html
@@ -2,14 +2,29 @@
 <html>
 	<head>
 		<title>Sky Jumper</title>
+		<script type="text/javascript">
+			function sunDataMe(elem)
+			{
+				skd = window.skydata
+				ascention = skd.getSkyObjectRightAscention("Sun")
+				declination = skd.getSkyObjectDeclination("Sun")
+				magnitude = skd.getSkyObjectMagnitude("Sun")
+				elem.innerHTML = "Data from Sun:<br/>" + ascention + "<br/>" + declination + \
"<br/>" + magnitude +			}
+		</script>
 	</head>
 	<body>
 		<table>
 			<tr>
-				<td bgcolor="red" onclick="window.skymap.setZoomFactor(1)">Set zoom factor to \
                1</td>
-				<td bgcolor="green" onclick="window.skymap.setZoomFactor(10)">Set zoom factor to \
                10</td>
-				<td bgcolor="yellow" onclick="window.skymap.setFocus( 10, 10 )">setFocus( 10, 10 \
                )</td>
-				<td bgcolor="orange" onclick="window.skymap.setFocus( 100, 100 )">setFocus( 100, \
100 )</td> +				<td bgcolor="grey" onclick="sunDataMe(this)">Click to see Sun \
Ascention Declination and Magnitude</td> +				<td bgcolor="red" \
onclick="window.skymap.setZoomFactor(300)">Set zoom factor to 300</td> +				<td \
bgcolor="yellow" onclick="window.skymap.setFocusByCoordinates( 10, 10 \
)">setFocusByCoordinates( 10, 10 )</td> +				<td bgcolor="orange" \
onclick="window.skymap.setFocusByCoordinates( 100, 100 )">setFocusByCoordinates( 100, \
100 )</td> +			</tr>
+			<tr>
+				<td bgcolor="orange" \
onclick="window.skymap.setFocusBySkyObjectName(&quot;Aldebaran&quot;)">setFocusBySkyObjectName(&quot;Aldebaran&quot;)</td>
 +				<td bgcolor="green" onclick="window.skymap.setZoomFactor(3000)">Set zoom factor \
to 3000</td> +				<td bgcolor="yellow" \
onclick="window.skymap.forceUpdate()">forceUpdate()</td>  </tr>
 		</table>
 	</body>
diff --git a/kstars/skyguides/qml/GuidesListView.qml \
b/kstars/skyguides/qml/GuidesListView.qml index 0cd4aa8..17e744b 100644
--- a/kstars/skyguides/qml/GuidesListView.qml
+++ b/kstars/skyguides/qml/GuidesListView.qml
@@ -9,6 +9,7 @@ Rectangle
 
 	WebView
 	{
+		settings.developerExtrasEnabled: true;
 		id: webView
 		visible: false
 		preferredWidth: 640
@@ -20,12 +21,26 @@ Rectangle
 			rootRect.height = height;
 		}
 		javaScriptWindowObjects:
+		[
 			QtObject
 			{
 				WebView.windowObjectName: "skymap"
-				function setZoomFactor(factor) { skyMap.setZoomFactor(factor); console.log("JS: \
                skymap.setZoomFactor( " + factor + ")"); }
-				function setFocus( ra, dec ) { skyMap.setFocus( ra, dec ); console.log("JS: \
skymap.setFocus( " + ra + ", " + dec + " )"); } +				function \
setFocusBySkyObjectName(name) { skymap.setFocusBySkyObjectName(name) } +				function \
setFocusByCoordinates( ra, dec ) { skymap.setFocusByCoordinates( ra, dec ) } \
+				function setZoomFactor(factor) { skymap.setZoomFactor(factor) } +				function \
zoomIn() { skymap.zoomIn() } +				function zoomOut() { skymap.zoomOut() }
+				function zoomDefault() { skyMap.zoomDefault() }
+				function forceUpdate() { skymap.forceUpdate() }
+			},
+			QtObject
+			{
+				WebView.windowObjectName: "skydata"
+				function getSkyObjectRightAscention(name) { return \
skydata.getSkyObjectRightAscention(name) } +				function \
getSkyObjectDeclination(name) { return skydata.getSkyObjectDeclination(name) } \
+				function getSkyObjectMagnitude(name) { return \
skydata.getSkyObjectMagnitude(name) }  }
+		]
 	}
 
 	Text
@@ -52,7 +67,7 @@ Rectangle
 		anchors.left: parent.left
 
 		spacing: 10
-		model: guidesModel
+		model: guidesmodel
 		delegate: Column
 		{
 			Rectangle
diff --git a/kstars/skyguides/skydataqmladapter.cpp \
b/kstars/skyguides/skydataqmladapter.cpp new file mode 100644
index 0000000..c1c1194
--- /dev/null
+++ b/kstars/skyguides/skydataqmladapter.cpp
@@ -0,0 +1,93 @@
+/***************************************************************************
+                          kstarsdataqmladapter.cpp  -  K Desktop Planetarium
+                             -------------------
+    begin                : 2014/04/07
+    copyright            : (C) 2014 by Gioacchino Mazzurco
+    email                : gmazzurco89@gmail.com
+ ***************************************************************************/
+
+/***************************************************************************
+ *                                                                         *
+ *   This program is free software; you can redistribute it and/or modify  *
+ *   it under the terms of the GNU General Public License as published by  *
+ *   the Free Software Foundation; either version 2 of the License, or     *
+ *   (at your option) any later version.                                   *
+ *                                                                         *
+ ***************************************************************************/
+
+#include <QString>
+
+#include "skydataqmladapter.h"
+
+#include "kstarsdata.h"
+#include "skymapcomposite.h"
+#include "starcomponent.h"
+#include "skyobject.h"
+
+SkyDataQmlAdapter::SkyDataQmlAdapter(QObject * parent) :
+	QObject(parent),
+	preloadedObject(0)
+{}
+
+SkyDataQmlAdapter::~SkyDataQmlAdapter()
+{
+	delete(preloadedObject);
+}
+
+double SkyDataQmlAdapter::getSkyObjectRightAscention(const QString & name)
+{
+	if(preloadObject(name))
+		return preloadedObject->ra().Degrees();
+
+	return 0;
+}
+
+double SkyDataQmlAdapter::getSkyObjectDeclination(const QString & name)
+{
+	if(preloadObject(name))
+		return preloadedObject->dec().Degrees();
+
+	return 0;
+}
+
+float SkyDataQmlAdapter::getSkyObjectMagnitude(const QString & name)
+{
+	if(preloadObject(name))
+		return preloadedObject->mag();
+
+	return 0;
+}
+
+SkyObject * SkyDataQmlAdapter::findSkyObjectByName(const QString & name)
+{
+	SkyObject * foundObject = KStarsData::Instance()->skyComposite()->findByName(name);
+
+	if(!foundObject && name.startsWith("HD"))
+	{
+		QString hdString(name);
+		hdString.remove("HD");
+
+		bool conversionOk;
+		uint hd = hdString.toInt(&conversionOk);
+		if(conversionOk)
+			foundObject = StarComponent::Instance()->findByHDIndex(hd);
+	}
+
+	return foundObject;
+}
+
+bool SkyDataQmlAdapter::preloadObject(const QString & name)
+{
+	if (preloadedObject && preloadedObject->hasName() && (preloadedObject->name() == \
name)) +		return true;
+
+	SkyObject * foundObject = findSkyObjectByName(name);
+	if (foundObject)
+	{
+		delete(preloadedObject);
+		preloadedObject = foundObject->clone();
+		return true;
+	}
+
+	return false;
+}
diff --git a/kstars/skyguides/skymapqmladapter.cpp \
b/kstars/skyguides/skydataqmladapter.h similarity index 58%
copy from kstars/skyguides/skymapqmladapter.cpp
copy to kstars/skyguides/skydataqmladapter.h
index c3127ab..bcff5d2 100644
--- a/kstars/skyguides/skymapqmladapter.cpp
+++ b/kstars/skyguides/skydataqmladapter.h
@@ -1,5 +1,5 @@
 /***************************************************************************
-                          skymapqmladapter.cpp  -  K Desktop Planetarium
+                          kstarsdataqmladapter.h  -  K Desktop Planetarium
                              -------------------
     begin                : 2014/04/07
     copyright            : (C) 2014 by Gioacchino Mazzurco
@@ -15,23 +15,31 @@
  *                                                                         *
  ***************************************************************************/
 
-#include "skymapqmladapter.h"
-#include "skymap.h"
-#include "dms.h"
+#ifndef KSTARSDATAQMLADAPTER_H
+#define KSTARSDATAQMLADAPTER_H
 
-SkyMapQmlAdapter::SkyMapQmlAdapter(SkyMap * skymap, QObject * parent) :
-	QObject(parent),
-	mSkyMap(skymap)
-{}
+#include <QObject>
 
-void SkyMapQmlAdapter::setZoomFactor(double factor) const
-{
-	mSkyMap->setZoomFactor(factor);
-}
+class SkyObject;
 
-void SkyMapQmlAdapter::setFocus( double ra, double dec ) const
+class SkyDataQmlAdapter : public QObject
 {
-	dms dRa(ra);
-	dms dDec(dec);
-	mSkyMap->setFocus( dRa, dDec );
-}
+	Q_OBJECT
+
+public:
+	SkyDataQmlAdapter(QObject * parent = 0);
+	~SkyDataQmlAdapter();
+
+	static SkyObject * findSkyObjectByName(const QString & name);
+
+	Q_INVOKABLE double getSkyObjectRightAscention(const QString & name);
+	Q_INVOKABLE double getSkyObjectDeclination(const QString & name);
+	Q_INVOKABLE float getSkyObjectMagnitude(const QString & name);
+
+private:
+	const SkyObject * preloadedObject;
+
+	bool preloadObject(const QString & name);
+};
+
+#endif // KSTARSDATAQMLADAPTER_H
diff --git a/kstars/skyguides/skyguideslistview.cpp \
b/kstars/skyguides/skyguideslistview.cpp index ed36af7..1a95d1b 100644
--- a/kstars/skyguides/skyguideslistview.cpp
+++ b/kstars/skyguides/skyguideslistview.cpp
@@ -23,24 +23,26 @@
 #include <kdeclarative.h>
 
 #include "skyguideslistview.h"
+
 #include "skyguideslistmodel.h"
 #include "../skymap.h"
 
 
 SkyGuidesListView::SkyGuidesListView(const SkyGuidesListModel & guidesModel, SkyMap \
* skyMap) :  QWidget(skyMap),
+	mSkyMapQmlAdapter(skyMap),
+	mKStarsDataQmlAdapter(this),
 	mBaseView()
-{
-	mSkyMapQmlAdapter = new SkyMapQmlAdapter(skyMap);
-	
+{	
 	///To use i18n() instead of qsTr() in qml/wiview.qml for translation
 	KDeclarative kd;
 	kd.setDeclarativeEngine(mBaseView.engine());
 	kd.initialize();
 	kd.setupBindings();
 
-	mBaseView.rootContext()->setContextProperty( "guidesModel", \
                QVariant::fromValue(guidesModel.data()) );
-	mBaseView.rootContext()->setContextProperty( "skyMap", mSkyMapQmlAdapter);
+	mBaseView.rootContext()->setContextProperty( "guidesmodel", \
QVariant::fromValue(guidesModel.data()) ); \
+	mBaseView.rootContext()->setContextProperty( "skymap", &mSkyMapQmlAdapter ); \
+	mBaseView.rootContext()->setContextProperty( "skydata", &mKStarsDataQmlAdapter );  
 	QString qmlpath = KStandardDirs::locate("appdata","skyguides/qml/GuidesListView.qml");
  mBaseView.setSource(qmlpath);
@@ -48,6 +50,4 @@ SkyGuidesListView::SkyGuidesListView(const SkyGuidesListModel & \
guidesModel, Sky  }
 
 SkyGuidesListView::~SkyGuidesListView()
-{
-	delete(mSkyMapQmlAdapter);
-}
\ No newline at end of file
+{}
\ No newline at end of file
diff --git a/kstars/skyguides/skyguideslistview.h \
b/kstars/skyguides/skyguideslistview.h index 6f430c3..fa4b16c 100644
--- a/kstars/skyguides/skyguideslistview.h
+++ b/kstars/skyguides/skyguideslistview.h
@@ -21,6 +21,8 @@
 #include <QDeclarativeView>
 
 #include "skyguideslistmodel.h"
+
+#include "skydataqmladapter.h"
 #include "skymapqmladapter.h"
 
 class QWidget;
@@ -56,7 +58,8 @@ public:
 	inline void show() { mBaseView.show(); };
 
 private:
-	SkyMapQmlAdapter * mSkyMapQmlAdapter;
+	SkyMapQmlAdapter mSkyMapQmlAdapter;
+	SkyDataQmlAdapter mKStarsDataQmlAdapter;
 	QDeclarativeView mBaseView;
 };
 
diff --git a/kstars/skyguides/skymapqmladapter.cpp \
b/kstars/skyguides/skymapqmladapter.cpp index c3127ab..86d7772 100644
--- a/kstars/skyguides/skymapqmladapter.cpp
+++ b/kstars/skyguides/skymapqmladapter.cpp
@@ -18,20 +18,23 @@
 #include "skymapqmladapter.h"
 #include "skymap.h"
 #include "dms.h"
+#include "skydataqmladapter.h"
 
 SkyMapQmlAdapter::SkyMapQmlAdapter(SkyMap * skymap, QObject * parent) :
 	QObject(parent),
 	mSkyMap(skymap)
 {}
 
-void SkyMapQmlAdapter::setZoomFactor(double factor) const
-{
-	mSkyMap->setZoomFactor(factor);
-}
-
-void SkyMapQmlAdapter::setFocus( double ra, double dec ) const
+void SkyMapQmlAdapter::setFocusByCoordinates( double ra, double dec ) const
 {
 	dms dRa(ra);
 	dms dDec(dec);
 	mSkyMap->setFocus( dRa, dDec );
 }
+
+void SkyMapQmlAdapter::setFocusBySkyObjectName(const QString & name) const
+{
+	SkyObject * obj = SkyDataQmlAdapter::findSkyObjectByName(name); 
+	if(obj)
+		mSkyMap->setFocus(obj);
+}
diff --git a/kstars/skyguides/skymapqmladapter.h \
b/kstars/skyguides/skymapqmladapter.h index 80683cb..867c975 100644
--- a/kstars/skyguides/skymapqmladapter.h
+++ b/kstars/skyguides/skymapqmladapter.h
@@ -20,7 +20,9 @@
 
 #include <QObject>
 
-class SkyMap;
+#include "Options.h"
+#include "skymap.h"
+
 
 class SkyMapQmlAdapter : public QObject
 {
@@ -29,11 +31,22 @@ class SkyMapQmlAdapter : public QObject
 public:
 	SkyMapQmlAdapter(SkyMap * skymap, QObject * parent = 0);
 
+	Q_INVOKABLE double zoomFactor() const { return Options::zoomFactor(); };
+	
 	/**
 	 * @short Set zoom factor.
 	 * @param factor zoom factor
 	 */
-	Q_INVOKABLE void setZoomFactor(double factor) const;
+	Q_INVOKABLE void setZoomFactor(double factor) const { \
mSkyMap->setZoomFactor(factor); } +	
+	/** Zoom in one step. */
+	Q_INVOKABLE void zoomIn() { mSkyMap->slotZoomIn(); }
+
+	/** Zoom out one step. */
+	Q_INVOKABLE void zoomOut() { mSkyMap->slotZoomOut(); }
+
+	/** Set default zoom. */
+	Q_INVOKABLE void zoomDefault() { mSkyMap->slotZoomDefault(); }
 
 	/**
 	 * @short sets the focus point of the skymap, using ra/dec coordinates
@@ -44,7 +57,18 @@ public:
 	 * @param ra the new right ascension
 	 * @param dec the new declination
 	 */
-	Q_INVOKABLE void setFocus( double ra, double dec ) const;
+	Q_INVOKABLE void setFocusByCoordinates( double ra, double dec ) const;
+
+	/** @short sets the central focus point of the sky map.
+	 * @param name the name of the SkyObject the map should be centered on
+	 */
+	Q_INVOKABLE void setFocusBySkyObjectName(const QString & name) const;
+	
+	/** Recalculates the positions of objects in the sky, and then repaints the sky \
map. +     */
+	Q_INVOKABLE void forceUpdate() const { mSkyMap->forceUpdate(); }
+
+	
 
 private:
 	SkyMap * mSkyMap;


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic