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

marble

  • sources
  • kde-4.14
  • kdeedu
  • marble
  • src
  • plugins
  • render
  • opencachingcom
OpenCachingComItem.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 Anders Lund <anders@alweb.dk>
9 // Copyright 2014 Bernhard Beschow <bbeschow@cs.tu-berlin.de>
10 //
11 
12 #include "OpenCachingComItem.h"
13 #include "GeoPainter.h"
14 #include "ViewportParams.h"
15 #include "MarbleModel.h"
16 #include "PositionTracking.h"
17 #include "MarbleMath.h"
18 #include "MarbleLocale.h"
19 #include "Planet.h"
20 
21 #include "ui_CacheDetailsDialog.h"
22 #include "OpenCachingComModel.h"
23 
24 #include <QFontMetrics>
25 #include <QPixmap>
26 #include <QAction>
27 #include <QDialog>
28 #include <QDateTime>
29 #include <QFile>
30 #include <QScriptEngine>
31 #include <QScriptValue>
32 #include <QDesktopServices>
33 
34 #include <QDebug>
35 
36 namespace Marble
37 {
38 
39 OpenCachingComItem::OpenCachingComItem( QVariantMap cache, OpenCachingComModel *parent )
40  : AbstractDataPluginItem( parent )
41  , m_ui( 0 )
42  , m_model( parent )
43  , m_cache( cache )
44  , m_action( new QAction( this ) )
45 {
46  setId( cache["oxcode"].toString() );
47  setCoordinate( GeoDataCoordinates( cache["location"].toMap()["lon"].toReal(), cache["location"].toMap()["lat"].toReal(), 0.0, GeoDataCoordinates::Degree ) );
48  setTarget( "earth" );
49 
50  // Opencaching.Com does (in effect) this, so as do we..
51  if ( m_cache["type"].toString() == "Unknown Cache" )
52  {
53  m_cache["type"] = QString("Puzzle");
54  }
55 
56  updateTooltip();
57  m_action->setText( m_cache["name"].toString() );
58 
59  connect( action(), SIGNAL(triggered()),
60  this, SLOT(showInfoDialog()) );
61 
62  setSize(QSizeF(24,24));
63 }
64 
65 OpenCachingComItem::~OpenCachingComItem()
66 {
67 }
68 
69 bool OpenCachingComItem::initialized() const
70 {
71  return !id().isEmpty();
72 }
73 
74 QAction *OpenCachingComItem::action()
75 {
76  return m_action;
77 }
78 
79 void OpenCachingComItem::showInfoDialog()
80 {
81  QDialog dialog;
82 
83  Ui::CacheDetailsDialog ui;
84  ui.setupUi( &dialog );
85 
86  m_ui = &ui;
87 
88  dialog.setWindowTitle( tr("Cache Details for %1").arg(id() ));
89 
90  m_ui->labelIcon->setPixmap(QPixmap(":/" + iconName() + ".png"));
91  m_ui->labelHeader->setText(QString("<big><strong>" + m_cache["name"].toString() + "</strong></big>"));
92 
93  m_ui->buttonWww->setIcon( QIcon( ":/internet.png" ) );
94  m_ui->buttonWww->setToolTip( tr("Click to open this cache's page in a browser") );
95  connect( m_ui->buttonWww, SIGNAL(clicked()), SLOT(openWww()) );
96 
97  // basic details
98  QString details = "<table><tr><td colspan=\"2\" valign=\"middle\">"
99  + tr(m_cache["type"].toString().toUtf8())
100  + "<br/>" + id() + "<br/>" + coordinate().toString() + "</td></tr>"
101  + "<tr><td align=\"right\">" + tr("Size:") + " </td><td>" + ratingNumberString(m_cache["size"]) + "</td></tr>"
102  + "<tr><td align=\"right\">" + tr("Difficulty:") + " </td><td>" + ratingNumberString(m_cache["difficulty"]) + "</td></tr>"
103  + "<tr><td align=\"right\">" + tr("Terrain:") + " </td><td>" + ratingNumberString(m_cache["terrain"]) + "</td></tr>"
104  + "<tr><td align=\"right\">" + tr("Awsomeness:") + " </td><td>" + ratingNumberString(m_cache["awsomeness"]) + "</td></tr>"
105  + "<tr><td align=\"right\">" + tr("Hidden by:") + " </td><td>" + m_cache["hidden_by"].toMap()["name"].toString() + "</td></tr>"
106  + "<tr><td align=\"right\">" + tr("Hidden:") + " </td><td>" + dateString(m_cache["hidden"]) + "</td></tr>"
107  + "<tr><td align=\"right\">" + tr("Last found:") + " </td><td>" + dateString(m_cache["last_found"]) + "</td></tr>";
108 
109  // list of tags
110  // ### cache the translated cache string. Necessary??
111  if (m_cache["strTags"].toString().isEmpty() )
112  {
113  QStringList tags = m_cache["tags"].toStringList();
114  QString strTags;
115  for (int i=0; i<tags.count();i++)
116  {
117  if (i)
118  {
119  strTags += ", ";
120  }
121  strTags += tr(tags[i].toUtf8());
122  }
123  m_cache["strTags"] = strTags;
124  }
125  QString strTags = m_cache["strTags"].toString();
126  if (!strTags.isEmpty())
127  {
128  details += "<tr><td align=\"right\">" + tr("Tags:") + " </td><td>" + strTags + "</td></tr>";
129  }
130 
131  // "series" - name of a series that this cache belongs to
132  QString series = m_cache["series"].toString();
133  if (!series.isEmpty())
134  {
135  details += "<tr><td align=\"right\">" + tr("Series:") + " </td><td>" + series + "</td></tr>";
136  }
137 
138  // verification options translated
139  // these are ways to verify a visit to the cache
140  QVariantMap verifyOpts = m_cache["verification"].toMap();
141  if (verifyOpts.count())
142  {
143  QStringList verifyOptsStrings;
144  if (verifyOpts["number"].isValid())
145  verifyOptsStrings << tr("number");
146  if (verifyOpts["chirp"].isValid())
147  verifyOptsStrings << tr("chirp");
148  if (verifyOpts["qr"].isValid())
149  verifyOptsStrings << tr("qr code");
150  if (verifyOpts["code_phrase"].isValid())
151  verifyOptsStrings << tr("code phrase");
152 
153  details += "<tr><td align=\"right\">" + tr("Verification:") + " </td><td>" + verifyOptsStrings.join(", ") + "</td></tr>";
154  }
155 
156  // show a distance to the cache, either from current position if we know,
157  // or from the "home" position
158  bool hasposition = false;
159  PositionTracking *tracking = m_model->marbleModel()->positionTracking();
160  if (tracking)
161  {
162  GeoDataCoordinates location = tracking->currentLocation();
163  if (location.isValid())
164  {
165  QString dist = formatDistance( distanceSphere(location, coordinate()) );
166  details += "<tr><td align=\"right\">" + tr("Distance:") + " </td><td>" + dist + "</td></tr>";
167  hasposition = true;
168  }
169  }
170  if (!hasposition)
171  {
172  GeoDataCoordinates homelocation = m_model->home();
173  if ( homelocation.isValid() )
174  {
175  QString dist = formatDistance( distanceSphere(homelocation, coordinate()) );
176  details += "<tr><td align=\"right\">" + tr("Distance from home:") + " </td><td>" + dist + "</td></tr>";
177  }
178  }
179 
180  ui.labelGeneral->setText(details.append("</table>"));
181 
182  // tags represented as icons
183  int numtags = m_cache["tags"].toList().count();
184  if (numtags)
185  {
186  QStringList tags = m_cache["tags"].toStringList();
187  int tagrows = (numtags/6) + 1;
188  QString tagiconshtml;
189  for (int i=0; i<numtags;i++)
190  {
191  tagiconshtml += QString("<img src=\":/%1.png\" alt=\"%2\">")
192  .arg(tags.at(i).toLower().replace(QLatin1Char(' '),QLatin1Char('-'))).arg(tags.at(i));
193  if (0 == (i+1)%tagrows)
194  {
195  tagiconshtml += "<br/>";
196  }
197  }
198  ui.labelTagIcons->setText(tagiconshtml);
199  }
200 
201  // Description tab
202  QString description = m_cache["description"].toString();
203  if ( description.isEmpty() )
204  {
205  QString url("http://www.opencaching.com/api/geocache/" + id() + "?Authorization=" + AUTHKEY);
206  m_model->fetchData( url, "description_and_logs", this );
207  } else {
208  fillDialogTabs();
209  }
210 
211  m_ui->textDescription->page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks);
212  m_ui->textLogs->setOpenExternalLinks(true);
213 
214  connect( ui.buttonClose, SIGNAL(clicked()), &dialog, SLOT(close()) );
215  connect( ui.buttonClose, SIGNAL(clicked()), this, SLOT(dialogCloseClicked()) );
216 
217  dialog.exec();
218 }
219 
220 void OpenCachingComItem::paint( QPainter *painter )
221 {
222  QPixmap pm(":/" + iconName() + "-m.png");
223  painter->drawPixmap( 0, 0, pm );
224 }
225 
226 void OpenCachingComItem::updateTooltip()
227 {
228  if ( !id().isEmpty() ) {
229  // ### how do i update the tooltip on hover?
230 // QString strDist;
231 // bool hasposition = false;
232 // PositionTracking *tracking = m_model->marbleModel()->positionTracking();
233 // if (tracking)
234 // {
235 // GeoDataCoordinates location = tracking->currentLocation();
236 // if (location.isValid())
237 // {
238 // QString dist = formatDistance( distanceSphere(location, coordinate()) );
239 // strDist = tr("Distance: ") + dist;
240 // hasposition = true;
241 // }
242 // }
243 // if (!hasposition)
244 // {
245 // GeoDataCoordinates homelocation = m_model->home();
246 // if ( homelocation.isValid() )
247 // {
248 // QString dist = formatDistance( distanceSphere(homelocation, coordinate()) );
249 // strDist = tr("Distance from home: ") + dist;
250 // }
251 // }
252 
253  QString html = "<table cellpadding=\"2\">";
254  html += "<tr><td colspan=\"2\"><table cellpadding=\"3\"><tr><td><img src=\":/" + iconName() + "\"></td>"
255  + "<td valign=\"middle\"><big><strong>" + m_cache["name"].toString() + "</strong></big></td></tr></table></td></tr>"
256  + "<tr><td align=\"left\">"
257  + tr(m_cache["type"].toString().toUtf8())
258  + "<br/>" + tr( "by <em>" ) + m_cache["hidden_by"].toMap()["name"].toString() + "</em>"
259  + "<br/>" + coordinate().lonToString()
260  + "<br/>" + coordinate().latToString()
261  + "</td><td align=\"right\">"
262  + tr( "Difficulty") + ": <span style=\"background:#1e4381;color:white;\">&nbsp;" + ratingNumberString(m_cache["difficulty"]) + "&nbsp;</span>"
263  + "<br/>" + tr( "Terrain" ) + ": <span style=\"background:#dda24d;color:white;\">&nbsp;" + ratingNumberString(m_cache["terrain"]) + "&nbsp;</span>"
264  + "<br/>" + tr( "Awsomeness" ) + ": <span style=\"background:#e27c31;color:white;\">&nbsp;" + ratingNumberString(m_cache["awsomeness"]) + "&nbsp;</span>"
265  + "<br/>" + tr( "Size" ) + ": <span style=\"background:#807f39;color:white;\">&nbsp;" + ratingNumberString(m_cache["size"]) + "&nbsp;</span></td></tr>"
266  + "<tr><td colspan=\"2\">" + tr("Last found: ") + dateString(m_cache["last_found"]) + "</td></tr>"
267 // + "<tr><td colspan=\"2\">" + strDist + "</td></tr>"
268  + "</table>";
269  setToolTip( html );
270  }
271 }
272 
273 bool OpenCachingComItem::operator<( const AbstractDataPluginItem *other ) const
274 {
275  return id() < other->id();
276 }
277 
278 void OpenCachingComItem::addDownloadedFile( const QString &url, const QString &type )
279 {
280  if (type == "description_and_logs")
281  {
282  QFile file( url );
283  if (! file.open( QIODevice::ReadOnly | QIODevice::Text ) )
284  {
285  return;
286  }
287 
288  QScriptEngine engine;
289 
290  // Qt requires parentheses around json code
291  QScriptValue data = engine.evaluate( '(' + QString::fromUtf8( file.readAll() ) + ')' );
292  QVariantMap cache = data.toVariant().toMap();
293 
294  m_cache["description"] = cache["description"];
295  m_cache["logs"] = cache["logs"];
296  m_cache["hint"] = cache["hint"];
297 
298  QVariantList images = m_cache["images"].toList();
299  for (int i = 0; i < images.size(); i++) {
300  QVariantMap image = images.at(i).toMap();
301  QString url = "http://www.opencaching.com/api/geocache/" + id() + "/" + image["caption"].toString();
302 // qDebug()<<"Adding image: "<<url;
303  m_images << url;
304  }
305 
306  fillDialogTabs();
307  }
308 }
309 
310 void OpenCachingComItem::dialogCloseClicked()
311 {
312  m_ui = 0;
313 }
314 
315 QString OpenCachingComItem::dateString(const QVariant& ms)
316 {
317  QString result;
318  qlonglong t = ms.toLongLong();
319  if (t)
320  {
321  result = QDateTime::fromMSecsSinceEpoch(t).date().toString(Qt::SystemLocaleShortDate);
322  }
323  else
324  {
325  result = '-';
326  }
327  return result;
328 }
329 
330 QString OpenCachingComItem::iconName() const
331 {
332  static QStringList iconnames;
333  iconnames<<"traditional"<<"multi-cache"<<"puzzle"<<"virtual";
334 
335  QString res = m_cache["type"].toString().section(' ', 0, 0).toLower();
336  if ( iconnames.contains(res) )
337  {
338  return res;
339  }
340  return "unknown";
341 }
342 
343 const QString OpenCachingComItem::ratingNumberString(QVariant number)
344 {
345  return QString::number(number.toDouble(), 'f', 1);
346 }
347 
348 QString OpenCachingComItem::formatDistance(qreal spheredistance) const
349 {
350  qreal distance = m_model->marbleModel()->planet()->radius() * spheredistance;
351  QString distanceString;
352  MarbleLocale::MeasurementSystem measurementSystem;
353  measurementSystem = MarbleGlobal::getInstance()->locale()->measurementSystem();
354 
355  if ( measurementSystem == MarbleLocale::MetricSystem ) {
356  if ( distance >= 1000.0 ) {
357  distanceString = tr("%1 km").arg( distance / 1000.0, 0, 'f', 2 );
358  }
359  else {
360  distanceString = tr("%1 m").arg( distance, 0, 'f', 2 );
361  }
362  }
363  else if (measurementSystem == MarbleLocale::ImperialSystem) {
364  distanceString = QString("%1 mi").arg( distance / 1000.0 * KM2MI, 0, 'f', 2 );
365  } else if (measurementSystem == MarbleLocale::NauticalSystem) {
366  distanceString = QString("%1 nm").arg( distance / 1000.0 * KM2NM, 0, 'f', 2 );
367  }
368 
369  return distanceString;
370 }
371 
372 void OpenCachingComItem::fillDialogTabs()
373 {
374  if (m_ui)
375  {
376  QString html = m_cache["description"].toString();
377 
378  // images
379  for (int i = 0; i < m_images.size(); i++)
380  {
381  if (m_images.size() > i)
382  {
383  // ### what about spoiler images? (don't display, but then what?)
384  html.append(
385  "<p><img src=\"" + m_images.at(i) + "\" width=\"100%\" height=\"auto\"/><br/>"
386  + m_cache["images"].toList().at(i).toMap()["name"].toString()
387  + "</p>");
388  }
389  }
390 
391  m_ui->textDescription->setHtml(html);
392 
393  QString hint = m_cache["hint"].toString().trimmed();
394  if (! hint.isEmpty())
395  {
396  m_ui->textHint->setText(hint);
397  }
398  m_ui->tabWidget->setTabEnabled(2, !hint.isEmpty());
399 
400  QVariantList logs = m_cache["logs"].toList();
401  QString logtext;
402  for (int i = 0; i < logs.size(); ++i)
403  {
404  QVariantMap log = logs.at(i).toMap();
405  if ( i )
406  {
407  logtext += "<hr>";
408  }
409  logtext += tr("User: ") + log["user"].toMap()["name"].toString() + "<br/>";
410  logtext += tr("Type: ") + log["type"].toString() + "<br/>";
411  logtext += tr("Date: ") + dateString(log["log_time"]) + "<br/><br/>";
412  logtext += log["comment"].toString() + "<br/>";
413 
414  // TODO images
415  }
416  m_ui->textLogs->setText(logtext);
417  }
418 }
419 
420 void OpenCachingComItem::openWww()
421 {
422  QDesktopServices::openUrl( QUrl( "http://www.opencaching.com/#!geocache/" + m_cache["oxcode"].toString() ) );
423 }
424 
425 } // namespace Marble
426 
427 #include "OpenCachingComItem.moc"
QAction::setText
void setText(const QString &text)
QVariant::toLongLong
qlonglong toLongLong(bool *ok) const
Marble::AbstractDataPluginItem::setTarget
void setTarget(const QString &target)
Definition: AbstractDataPluginItem.cpp:66
Marble::GeoDataCoordinates
A 3d point representation.
Definition: GeoDataCoordinates.h:52
Marble::GeoDataCoordinates::lonToString
static QString lonToString(qreal lon, GeoDataCoordinates::Notation notation, GeoDataCoordinates::Unit unit=Radian, int precision=-1, char format= 'f')
Definition: GeoDataCoordinates.cpp:933
QString::append
QString & append(QChar ch)
QWidget::setupUi
void setupUi(QWidget *widget)
Marble::MarbleLocale::NauticalSystem
Definition: MarbleLocale.h:40
tracking
Definition: position-tracking.qml:12
Marble::MarbleLocale::measurementSystem
MarbleLocale::MeasurementSystem measurementSystem() const
Definition: MarbleLocale.cpp:45
Marble::MarbleGraphicsItem::setSize
void setSize(const QSizeF &size)
Set the size of the item.
Definition: MarbleGraphicsItem.cpp:197
MarbleMath.h
Marble::OpenCachingComItem::showInfoDialog
void showInfoDialog()
Definition: OpenCachingComItem.cpp:79
QDate::toString
QString toString(Qt::DateFormat format) const
OpenCachingComModel.h
Marble::AbstractDataPluginItem
Definition: AbstractDataPluginItem.h:28
Marble::OpenCachingComItem::paint
void paint(QPainter *painter)
Paints the item in item coordinates.
Definition: OpenCachingComItem.cpp:220
Marble::OpenCachingComItem::addDownloadedFile
void addDownloadedFile(const QString &url, const QString &type)
Definition: OpenCachingComItem.cpp:278
MarbleModel.h
This file contains the headers for MarbleModel.
Marble::AbstractDataPluginItem::setId
void setId(const QString &id)
Definition: AbstractDataPluginItem.cpp:86
QScriptValue
QList::at
const T & at(int i) const
OpenCachingComItem.h
QStringList::contains
bool contains(const QString &str, Qt::CaseSensitivity cs) const
QScriptEngine::evaluate
QScriptValue evaluate(const QString &program, const QString &fileName, int lineNumber)
QDialog::exec
int exec()
Marble::AbstractDataPluginModel::marbleModel
const MarbleModel * marbleModel() const
Definition: AbstractDataPluginModel.cpp:269
Marble::distanceSphere
qreal distanceSphere(qreal lon1, qreal lat1, qreal lon2, qreal lat2)
This method calculates the shortest distance between two points on a sphere.
Definition: MarbleMath.h:52
QStringList::join
QString join(const QString &separator) const
QScriptValue::toVariant
QVariant toVariant() const
Planet.h
Marble::MarbleModel::planet
const Planet * planet() const
Returns the planet object for the current map.
Definition: MarbleModel.cpp:644
Marble::MarbleLocale::MeasurementSystem
MeasurementSystem
Definition: MarbleLocale.h:37
QObject::tr
QString tr(const char *sourceText, const char *disambiguation, int n)
Marble::AbstractDataPluginItem::id
QString id() const
Definition: AbstractDataPluginItem.cpp:81
QDateTime::fromMSecsSinceEpoch
QDateTime fromMSecsSinceEpoch(qint64 msecs)
QFile
Marble::GeoDataCoordinates::Degree
Definition: GeoDataCoordinates.h:66
QList::size
int size() const
Marble::PositionTracking
Definition: PositionTracking.h:31
QScriptEngine
AUTHKEY
#define AUTHKEY
Definition: OpenCachingComModel.h:20
QString::number
QString number(int n, int base)
QList::count
int count(const T &value) const
QString::fromUtf8
QString fromUtf8(const char *str, int size)
QPainter::drawPixmap
void drawPixmap(const QRectF &target, const QPixmap &pixmap, const QRectF &source)
Marble::OpenCachingComItem::OpenCachingComItem
OpenCachingComItem(QVariantMap cache, OpenCachingComModel *parent)
Definition: OpenCachingComItem.cpp:39
QPainter
QString::isEmpty
bool isEmpty() const
Marble::MarbleModel::positionTracking
PositionTracking * positionTracking() const
Definition: MarbleModel.cpp:512
QIODevice::readAll
QByteArray readAll()
Marble::OpenCachingComModel
Definition: OpenCachingComModel.h:34
Marble::MarbleGlobal::locale
MarbleLocale * locale() const
Definition: MarbleGlobal.cpp:43
Marble::OpenCachingComModel::home
const GeoDataCoordinates home() const
home location
Definition: OpenCachingComModel.cpp:117
QString
MarbleLocale.h
GeoPainter.h
QFile::open
virtual bool open(QFlags< QIODevice::OpenModeFlag > mode)
QStringList
QPixmap
Marble::KM2MI
const qreal KM2MI
Definition: MarbleGlobal.h:203
Marble::OpenCachingComItem::operator<
bool operator<(const AbstractDataPluginItem *other) const
Definition: OpenCachingComItem.cpp:273
QUrl
QLatin1Char
ViewportParams.h
This file contains the headers for ViewportParams.
Marble::MarbleGlobal::getInstance
static MarbleGlobal * getInstance()
Definition: MarbleGlobal.cpp:37
Marble::MarbleLocale::MetricSystem
Definition: MarbleLocale.h:38
Marble::GeoDataCoordinates::latToString
static QString latToString(qreal lat, GeoDataCoordinates::Notation notation, GeoDataCoordinates::Unit unit=Radian, int precision=-1, char format= 'f')
Definition: GeoDataCoordinates.cpp:1080
Marble::Planet::radius
qreal radius() const
the radius of the planet, in metres
Definition: Planet.cpp:251
QVariant::toMap
QMap< QString, QVariant > toMap() const
QDateTime::date
QDate date() const
QTest::toString
char * toString(const T &value)
QSizeF
Marble::OpenCachingComModel::fetchData
void fetchData(const QString &url, const QString &type, OpenCachingComItem *item)
Fetch a file for a cache.
Definition: OpenCachingComModel.cpp:112
Marble::OpenCachingComItem::initialized
bool initialized() const
Definition: OpenCachingComItem.cpp:69
QString::at
const QChar at(int position) const
QWidget::setWindowTitle
void setWindowTitle(const QString &)
QAction
Marble::BillboardGraphicsItem::coordinate
GeoDataCoordinates coordinate() const
Definition: BillboardGraphicsItem.cpp:93
Marble::GeoDataCoordinates::toString
QString toString() const
return a string representation of the coordinate this is a convenience function which uses the defaul...
Definition: GeoDataCoordinates.cpp:921
QDialog
QVariant::toDouble
double toDouble(bool *ok) const
Marble::OpenCachingComItem::action
QAction * action()
Returns the action of this specific item.
Definition: OpenCachingComItem.cpp:74
Marble::MarbleLocale::ImperialSystem
Definition: MarbleLocale.h:39
Marble::KM2NM
const qreal KM2NM
Definition: MarbleGlobal.h:207
Marble::OpenCachingComItem::~OpenCachingComItem
~OpenCachingComItem()
Definition: OpenCachingComItem.cpp:65
Marble::PositionTracking::currentLocation
GeoDataCoordinates currentLocation() const
Returns the current position, if any.
Definition: PositionTracking.cpp:389
Marble::GeoDataCoordinates::isValid
bool isValid() const
Returns.
Definition: GeoDataCoordinates.cpp:624
PositionTracking.h
QDesktopServices::openUrl
bool openUrl(const QUrl &url)
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
Marble::BillboardGraphicsItem::setCoordinate
void setCoordinate(const GeoDataCoordinates &coordinates)
Definition: BillboardGraphicsItem.cpp:98
Marble::AbstractDataPluginItem::setToolTip
void setToolTip(const QString &toolTip)
Set the tool tip for the item.
Definition: AbstractDataPluginItem.cpp:76
QString::arg
QString arg(qlonglong a, int fieldWidth, int base, const QChar &fillChar) const
QIcon
QVariant
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:13:41 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
  • 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