• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdeedu API Reference
  • KDE Home
  • Contact Us
 

marble

  • sources
  • kde-4.12
  • kdeedu
  • marble
  • src
  • plugins
  • positionprovider
  • wlocate
WlocatePositionProviderPlugin.cpp
Go to the documentation of this file.
1 //
2 // This file is part of the Marble Virtual Globe.
3 //
4 // This program is free software licensed under the GNU LGPL. You can
5 // find a copy of this license in LICENSE.txt in the top directory of
6 // the source code.
7 //
8 // Copyright 2012 Dennis Nienhüser <earthwings@gentoo.org>
9 //
10 
11 #include "WlocatePositionProviderPlugin.h"
12 
13 #include <QFutureWatcher>
14 #include <QtConcurrentRun>
15 
16 #ifndef ENV_LINUX
17 #define ENV_LINUX
18 #define MARBLE_NEEDS_TO_CLEANUP_FOREIGN_WLOCATE_DEFINE
19 #include <libwlocate.h>
20 #endif
21 
22 #ifdef MARBLE_NEEDS_TO_CLEANUP_FOREIGN_WLOCATE_DEFINE
23 #undef MARBLE_NEEDS_TO_CLEANUP_FOREIGN_WLOCATE_DEFINE
24 #undef ENV_LINUX
25 #endif
26 
27 namespace Marble {
28 
29 class WlocatePositionProviderPluginPrivate
30 {
31 public:
32  PositionProviderStatus m_status;
33  qreal m_speed;
34  qreal m_direction;
35  QDateTime m_timestamp;
36  double m_longitude;
37  double m_latitude;
38  bool m_initialized;
39  char m_quality;
40  short m_ccode;
41  QFutureWatcher<int>* m_futureWatcher;
42 
43  WlocatePositionProviderPluginPrivate();
44 
45  ~WlocatePositionProviderPluginPrivate();
46 };
47 
48 WlocatePositionProviderPluginPrivate::WlocatePositionProviderPluginPrivate() :
49  m_status( PositionProviderStatusAcquiring ), m_speed( 0 ), m_direction( 0 ),
50  m_longitude( 0.0 ), m_latitude( 0.0 ), m_initialized( false ),
51  m_quality( 0 ), m_ccode( 0 ), m_futureWatcher( 0 )
52 {
53  // nothing to do
54 }
55 
56 WlocatePositionProviderPluginPrivate::~WlocatePositionProviderPluginPrivate()
57 {
58  // nothing to do
59 }
60 
61 QString WlocatePositionProviderPlugin::name() const
62 {
63  return tr( "Wlocate Position Provider Plugin" );
64 }
65 
66 QString WlocatePositionProviderPlugin::nameId() const
67 {
68  return "WlocatePositionProvider";
69 }
70 
71 QString WlocatePositionProviderPlugin::guiString() const
72 {
73  return tr( "WLAN (Open WLAN Map)" );
74 }
75 
76 QString WlocatePositionProviderPlugin::version() const
77 {
78  return "1.0";
79 }
80 
81 QString WlocatePositionProviderPlugin::description() const
82 {
83  return tr( "Reports the current position based on nearby WLAN access points" );
84 }
85 
86 QString WlocatePositionProviderPlugin::copyrightYears() const
87 {
88  return "2012";
89 }
90 
91 QList<PluginAuthor> WlocatePositionProviderPlugin::pluginAuthors() const
92 {
93  return QList<PluginAuthor>()
94  << PluginAuthor( QString::fromUtf8( "Dennis Nienhüser" ), "earthwings@gentoo.org" );
95 }
96 
97 QIcon WlocatePositionProviderPlugin::icon() const
98 {
99  return QIcon();
100 }
101 
102 PositionProviderPlugin* WlocatePositionProviderPlugin::newInstance() const
103 {
104  return new WlocatePositionProviderPlugin;
105 }
106 
107 PositionProviderStatus WlocatePositionProviderPlugin::status() const
108 {
109  return d->m_status;
110 }
111 
112 GeoDataCoordinates WlocatePositionProviderPlugin::position() const
113 {
114  return GeoDataCoordinates( d->m_longitude, d->m_latitude, 0.0, GeoDataCoordinates::Degree );
115 }
116 
117 qreal WlocatePositionProviderPlugin::speed() const
118 {
119  return d->m_speed;
120 }
121 
122 qreal WlocatePositionProviderPlugin::direction() const
123 {
124  return d->m_direction;
125 }
126 
127 GeoDataAccuracy WlocatePositionProviderPlugin::accuracy() const
128 {
129  GeoDataAccuracy result;
130 
131  if ( status() == PositionProviderStatusAvailable ) {
132  result.level = GeoDataAccuracy::Detailed;
134  result.horizontal = 0;
135  result.vertical = 0;
136  }
137  else {
138  result.level = GeoDataAccuracy::none;
139  result.horizontal = 0;
140  result.vertical = 0;
141  }
142 
143  return result;
144 }
145 
146 QDateTime WlocatePositionProviderPlugin::timestamp() const
147 {
148  return d->m_timestamp;
149 }
150 
151 WlocatePositionProviderPlugin::WlocatePositionProviderPlugin() :
152  d( new WlocatePositionProviderPluginPrivate )
153 {
154  // nothing to do
155 }
156 
157 WlocatePositionProviderPlugin::~WlocatePositionProviderPlugin()
158 {
159  delete d;
160 }
161 
162 void WlocatePositionProviderPlugin::initialize()
163 {
164  d->m_initialized = true;
165  update();
166 }
167 
168 bool WlocatePositionProviderPlugin::isInitialized() const
169 {
170  return d->m_initialized;
171 }
172 
173 void WlocatePositionProviderPlugin::update()
174 {
175  if ( !d->m_futureWatcher ) {
176  d->m_futureWatcher = new QFutureWatcher<int>( this );
177  connect( d->m_futureWatcher, SIGNAL(finished()), this, SLOT(handleWlocateResult()) );
178  }
179 
180  QFuture<int> future = QtConcurrent::run( &wloc_get_location, &d->m_latitude, &d->m_longitude, &d->m_quality, &d->m_ccode );
181  d->m_futureWatcher->setFuture( future );
182 }
183 
184 void WlocatePositionProviderPlugin::handleWlocateResult()
185 {
186  if ( d->m_futureWatcher->isFinished() ) {
187  int const returnCode = d->m_futureWatcher->result();
188  d->m_status = returnCode == WLOC_OK ? PositionProviderStatusAvailable : PositionProviderStatusError;
189  if ( d->m_status == PositionProviderStatusAvailable ) {
190 #if QT_VERSION < 0x040700
191  d->m_timestamp = QDateTime::currentDateTime().toUTC();
192 #else
193  d->m_timestamp = QDateTime::currentDateTimeUtc();
194 #endif
195  emit positionChanged( position(), accuracy() );
196  }
197  }
198 }
199 
200 } // namespace Marble
201 
202 Q_EXPORT_PLUGIN2( Marble::WlocatePositionProviderPlugin, Marble::WlocatePositionProviderPlugin )
203 
204 #include "WlocatePositionProviderPlugin.moc"
Marble::GeoDataCoordinates
A 3d point representation.
Definition: GeoDataCoordinates.h:52
Marble::WlocatePositionProviderPlugin::isInitialized
virtual bool isInitialized() const
Definition: WlocatePositionProviderPlugin.cpp:168
Marble::PluginAuthor
Definition: PluginInterface.h:28
Marble::WlocatePositionProviderPlugin::pluginAuthors
virtual QList< PluginAuthor > pluginAuthors() const
Definition: WlocatePositionProviderPlugin.cpp:91
WlocatePositionProviderPlugin.h
Marble::WlocatePositionProviderPlugin::WlocatePositionProviderPlugin
WlocatePositionProviderPlugin()
Definition: WlocatePositionProviderPlugin.cpp:151
Marble::GeoDataCoordinates::Degree
Definition: GeoDataCoordinates.h:66
Marble::WlocatePositionProviderPlugin::copyrightYears
virtual QString copyrightYears() const
Definition: WlocatePositionProviderPlugin.cpp:86
Marble::WlocatePositionProviderPlugin::direction
virtual qreal direction() const
Returns the direction in which the gps device is moving.
Definition: WlocatePositionProviderPlugin.cpp:122
Marble::PositionProviderPlugin
The abstract class that provides position information.
Definition: PositionProviderPlugin.h:26
Marble::GeoDataAccuracy::vertical
qreal vertical
Vertical accuracy in meters.
Definition: GeoDataAccuracy.h:52
Marble::WlocatePositionProviderPlugin::version
virtual QString version() const
Definition: WlocatePositionProviderPlugin.cpp:76
Marble::WlocatePositionProviderPlugin::~WlocatePositionProviderPlugin
virtual ~WlocatePositionProviderPlugin()
Definition: WlocatePositionProviderPlugin.cpp:157
Marble::WlocatePositionProviderPlugin::initialize
virtual void initialize()
Definition: WlocatePositionProviderPlugin.cpp:162
Marble::PositionProviderPlugin::positionChanged
void positionChanged(GeoDataCoordinates position, GeoDataAccuracy accuracy) const
Marble::GeoDataAccuracy::horizontal
qreal horizontal
Horizontal accuracy in meters.
Definition: GeoDataAccuracy.h:47
Marble::WlocatePositionProviderPlugin::timestamp
virtual QDateTime timestamp() const
Definition: WlocatePositionProviderPlugin.cpp:146
Marble::PositionProviderStatus
PositionProviderStatus
Definition: PositionProviderPluginInterface.h:25
Q_EXPORT_PLUGIN2
#define Q_EXPORT_PLUGIN2(a, b)
Definition: marble_export.h:34
Marble::WlocatePositionProviderPlugin::description
virtual QString description() const
Returns a user description of the plugin.
Definition: WlocatePositionProviderPlugin.cpp:81
Marble::GeoDataAccuracy::none
Definition: GeoDataAccuracy.h:26
Marble::WlocatePositionProviderPlugin::newInstance
virtual PositionProviderPlugin * newInstance() const
Create a new PositionProvider Plugin and return it.
Definition: WlocatePositionProviderPlugin.cpp:102
Marble::WlocatePositionProviderPlugin::nameId
virtual QString nameId() const
Returns the unique name of the plugin.
Definition: WlocatePositionProviderPlugin.cpp:66
Marble::WlocatePositionProviderPlugin::icon
virtual QIcon icon() const
Returns an icon for the plugin.
Definition: WlocatePositionProviderPlugin.cpp:97
Marble::GeoDataAccuracy::Detailed
Definition: GeoDataAccuracy.h:32
Marble::PositionProviderStatusError
Definition: PositionProviderPluginInterface.h:26
Marble::WlocatePositionProviderPlugin
Definition: WlocatePositionProviderPlugin.h:21
Marble::WlocatePositionProviderPlugin::accuracy
virtual GeoDataAccuracy accuracy() const
Definition: WlocatePositionProviderPlugin.cpp:127
Marble::GeoDataAccuracy::level
Level level
Approximate descriptive accuracy.
Definition: GeoDataAccuracy.h:42
Marble::PositionProviderStatusAvailable
Definition: PositionProviderPluginInterface.h:29
Marble::WlocatePositionProviderPlugin::speed
virtual qreal speed() const
Returns the speed of the gps device in meters per second.
Definition: WlocatePositionProviderPlugin.cpp:117
Marble::WlocatePositionProviderPlugin::name
virtual QString name() const
Returns the user-visible name of the plugin.
Definition: WlocatePositionProviderPlugin.cpp:61
Marble::GeoDataAccuracy
Definition: GeoDataAccuracy.h:22
Marble::WlocatePositionProviderPlugin::position
virtual GeoDataCoordinates position() const
Definition: WlocatePositionProviderPlugin.cpp:112
Marble::WlocatePositionProviderPlugin::status
virtual PositionProviderStatus status() const
Definition: WlocatePositionProviderPlugin.cpp:107
Marble::PositionProviderStatusAcquiring
Definition: PositionProviderPluginInterface.h:28
Marble::WlocatePositionProviderPlugin::guiString
virtual QString guiString() const
Returns the string that should appear in the user interface.
Definition: WlocatePositionProviderPlugin.cpp:71
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:38:53 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

marble

Skip menu "marble"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdeedu API Reference

Skip menu "kdeedu API Reference"
  • Analitza
  •     lib
  • kalgebra
  • kalzium
  •   libscience
  • kanagram
  • kig
  •   lib
  • klettres
  • kstars
  • libkdeedu
  •   keduvocdocument
  • marble
  • parley
  • rocs
  •   App
  •   RocsCore
  •   VisualEditor
  •   stepcore

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal