[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("Aldebaran")">setFocusBySkyObjectName("Aldebaran")</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