• 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
  • declarative
Bookmarks.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 "Bookmarks.h"
12 
13 #include "MarbleDeclarativeWidget.h"
14 #include "MarbleModel.h"
15 #include "MarbleMath.h"
16 #include "MarblePlacemarkModel.h"
17 #include "BookmarkManager.h"
18 #include "GeoDataDocument.h"
19 #include "GeoDataPlacemark.h"
20 #include "GeoDataFolder.h"
21 #include "GeoDataTypes.h"
22 #include "GeoDataExtendedData.h"
23 #include "GeoDataTreeModel.h"
24 #include "kdescendantsproxymodel.h"
25 
26 #include <QSortFilterProxyModel>
27 
28 Bookmarks::Bookmarks( QObject* parent ) : QObject( parent ),
29  m_marbleWidget( 0 ), m_proxyModel( 0 )
30 {
31  // nothing to do
32 }
33 
34 MarbleWidget *Bookmarks::map()
35 {
36  return m_marbleWidget;
37 }
38 
39 void Bookmarks::setMap( ::MarbleWidget* widget )
40 {
41  m_marbleWidget = widget;
42 }
43 
44 bool Bookmarks::isBookmark( qreal longitude, qreal latitude ) const
45 {
46  if ( !m_marbleWidget || !m_marbleWidget->model()->bookmarkManager() ) {
47  return false;
48  }
49 
50  Marble::BookmarkManager* manager = m_marbleWidget->model()->bookmarkManager();
51  Marble::GeoDataDocument *bookmarks = manager->document();
52  Marble::GeoDataCoordinates const compareTo( longitude, latitude, 0.0, Marble::GeoDataCoordinates::Degree );
53  foreach( const Marble::GeoDataFolder* folder, bookmarks->folderList() ) {
54  foreach( const Marble::GeoDataPlacemark * const placemark, folder->placemarkList() ) {
55  if ( distanceSphere( placemark->coordinate(), compareTo ) * Marble::EARTH_RADIUS < 5 ) {
56  return true;
57  }
58  }
59  }
60 
61  return false;
62 }
63 
64 void Bookmarks::addBookmark( qreal longitude, qreal latitude, const QString &name, const QString &folderName )
65 {
66  if ( !m_marbleWidget || !m_marbleWidget->model()->bookmarkManager() ) {
67  return;
68  }
69 
70  Marble::BookmarkManager* manager = m_marbleWidget->model()->bookmarkManager();
71  Marble::GeoDataDocument *bookmarks = manager->document();
72  Marble::GeoDataContainer *target = 0;
73  foreach( Marble::GeoDataFolder* const folder, bookmarks->folderList() ) {
74  if ( folder->name() == folderName ) {
75  target = folder;
76  break;
77  }
78  }
79 
80  if ( !target ) {
81  manager->addNewBookmarkFolder( bookmarks, folderName );
82 
83  foreach( Marble::GeoDataFolder* const folder, bookmarks->folderList() ) {
84  if ( folder->name() == folderName ) {
85  target = folder;
86  break;
87  }
88  }
89 
90  Q_ASSERT( target );
91  }
92 
93  Marble::GeoDataPlacemark placemark;
94  Marble::GeoDataCoordinates coordinate( longitude, latitude, 0.0, Marble::GeoDataCoordinates::Degree );
95  placemark.setCoordinate( coordinate );
96  placemark.setName( name );
97  Marble::GeoDataLookAt* lookat = new Marble::GeoDataLookAt;
98  lookat->setCoordinates( coordinate );
99  lookat->setRange( 750 );
100  placemark.extendedData().addValue( Marble::GeoDataData( "isBookmark", true ) );
101 
102  manager->addBookmark( target, placemark );
103 }
104 
105 void Bookmarks::removeBookmark( qreal longitude, qreal latitude )
106 {
107  if ( !m_marbleWidget || !m_marbleWidget->model()->bookmarkManager() ) {
108  return;
109  }
110 
111  Marble::BookmarkManager* manager = m_marbleWidget->model()->bookmarkManager();
112  Marble::GeoDataDocument *bookmarks = manager->document();
113  Marble::GeoDataCoordinates const compareTo( longitude, latitude, 0.0, Marble::GeoDataCoordinates::Degree );
114  foreach( const Marble::GeoDataFolder* folder, bookmarks->folderList() ) {
115  foreach( Marble::GeoDataPlacemark * placemark, folder->placemarkList() ) {
116  if ( distanceSphere( placemark->coordinate(), compareTo ) * Marble::EARTH_RADIUS < 5 ) {
117  manager->removeBookmark( placemark );
118  return;
119  }
120  }
121  }
122 }
123 
124 BookmarksModel *Bookmarks::model()
125 {
126  if ( !m_proxyModel && m_marbleWidget && m_marbleWidget->model()->bookmarkManager() ) {
127  Marble::BookmarkManager* manager = m_marbleWidget->model()->bookmarkManager();
128  Marble::GeoDataTreeModel* model = new Marble::GeoDataTreeModel( this );
129  model->setRootDocument( manager->document() );
130 
131  KDescendantsProxyModel* flattener = new KDescendantsProxyModel( this );
132  flattener->setSourceModel( model );
133 
134  m_proxyModel = new BookmarksModel( this );
135  m_proxyModel->setFilterFixedString( Marble::GeoDataTypes::GeoDataPlacemarkType );
136  m_proxyModel->setFilterKeyColumn( 1 );
137  m_proxyModel->setSourceModel( flattener );
138  }
139 
140  return m_proxyModel;
141 }
142 
143 BookmarksModel::BookmarksModel( QObject *parent ) : QSortFilterProxyModel( parent )
144 {
145 #if QT_VERSION < 0x050000
146  // Workaround for https://bugreports.qt-project.org/browse/QTCOMPONENTS-1206
147  QHash<int,QByteArray> roles = roleNames();
148  roles[Qt::DisplayRole] = "name";
149  setRoleNames( roles );
150 #endif
151 
152  connect( this, SIGNAL(layoutChanged()), this, SIGNAL(countChanged()) );
153  connect( this, SIGNAL(modelReset()), this, SIGNAL(countChanged()) );
154  connect( this, SIGNAL(rowsInserted(QModelIndex,int,int)), this, SIGNAL(countChanged()) );
155  connect( this, SIGNAL(rowsRemoved(QModelIndex,int,int)), this, SIGNAL(countChanged()) );
156 }
157 
158 int BookmarksModel::count() const
159 {
160  return rowCount();
161 }
162 
163 qreal BookmarksModel::longitude( int idx ) const
164 {
165  if ( idx >= 0 && idx < rowCount() ) {
166  QVariant const value = data( index( idx, 0 ), Marble::MarblePlacemarkModel::CoordinateRole );
167  Marble::GeoDataCoordinates const coordinates = value.value<Marble::GeoDataCoordinates>();
168  return coordinates.longitude( Marble::GeoDataCoordinates::Degree );
169  }
170  return 0.0;
171 }
172 
173 qreal BookmarksModel::latitude( int idx ) const
174 {
175  if ( idx >= 0 && idx < rowCount() ) {
176  QVariant const value = data( index( idx, 0 ), Marble::MarblePlacemarkModel::CoordinateRole );
177  Marble::GeoDataCoordinates const coordinates = value.value<Marble::GeoDataCoordinates>();
178  return coordinates.latitude( Marble::GeoDataCoordinates::Degree );
179  }
180  return 0.0;
181 }
182 
183 QString BookmarksModel::name( int idx ) const
184 {
185  if ( idx >= 0 && idx < rowCount() ) {
186  return data( index( idx, 0 ) ).toString();
187  }
188  return QString();
189 }
190 
191 #include "Bookmarks.moc"
QSortFilterProxyModel::index
virtual QModelIndex index(int row, int column, const QModelIndex &parent) const
GeoDataDocument.h
QModelIndex
Marble::GeoDataCoordinates
A 3d point representation.
Definition: GeoDataCoordinates.h:52
Marble::GeoDataDocument
A container for Features, Styles and in the future Schemas.
Definition: GeoDataDocument.h:65
Marble::GeoDataTreeModel
The representation of GeoData in a model This class represents all available data given by kml-data f...
Definition: GeoDataTreeModel.h:32
Marble::BookmarkManager::addBookmark
void addBookmark(GeoDataContainer *folder, const GeoDataPlacemark &bookmark)
add bookmark in a folder
Definition: BookmarkManager.cpp:132
BookmarksModel::BookmarksModel
BookmarksModel(QObject *parent=0)
Definition: Bookmarks.cpp:143
QAbstractItemModel::layoutChanged
void layoutChanged()
QAbstractItemModel::setRoleNames
void setRoleNames(const QHash< int, QByteArray > &roleNames)
KDescendantsProxyModel
Proxy Model for restructuring a Tree into a list.
Definition: kdescendantsproxymodel.h:69
MarbleMath.h
QSortFilterProxyModel::setSourceModel
virtual void setSourceModel(QAbstractItemModel *sourceModel)
Marble::GeoDataTreeModel::setRootDocument
void setRootDocument(GeoDataDocument *document)
Sets the root document to use.
Definition: GeoDataTreeModel.cpp:889
MarbleDeclarativeWidget.h
MarbleModel.h
This file contains the headers for MarbleModel.
QAbstractItemModel::roleNames
const QHash< int, QByteArray > & roleNames() const
Marble::GeoDataTypes::GeoDataPlacemarkType
const char * GeoDataPlacemarkType
Definition: GeoDataTypes.cpp:66
Bookmarks.h
Bookmarks::setMap
void setMap(MarbleWidget *widget)
Definition: Bookmarks.cpp:39
QVariant::value
T value() const
Marble::GeoDataContainer
A base class that can hold GeoDataFeatures.
Definition: GeoDataContainer.h:47
Marble::GeoDataPlacemark::coordinate
GeoDataCoordinates coordinate(const QDateTime &dateTime=QDateTime(), bool *iconAtCoordinates=0) const
Return the coordinates of the placemark at time dateTime as a GeoDataCoordinates. ...
Definition: GeoDataPlacemark.cpp:172
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
QAbstractItemModel::modelReset
void modelReset()
GeoDataExtendedData.h
Marble::GeoDataPlacemark::setCoordinate
void setCoordinate(qreal longitude, qreal latitude, qreal altitude=0, GeoDataCoordinates::Unit _unit=GeoDataCoordinates::Radian)
Set the coordinate of the placemark in longitude and latitude.
Definition: GeoDataPlacemark.cpp:215
Marble::GeoDataCoordinates::latitude
qreal latitude(GeoDataCoordinates::Unit unit=GeoDataCoordinates::Radian) const
retrieves the latitude of the GeoDataCoordinates object use the unit parameter to switch between Radi...
Definition: GeoDataCoordinates.cpp:751
Marble::GeoDataCoordinates::Degree
Definition: GeoDataCoordinates.h:66
QSortFilterProxyModel::rowCount
virtual int rowCount(const QModelIndex &parent) const
BookmarkManager.h
Bookmarks::isBookmark
bool isBookmark(qreal longitude, qreal latitude) const
Definition: Bookmarks.cpp:44
BookmarksModel::count
int count() const
Marble::BookmarkManager::removeBookmark
void removeBookmark(GeoDataPlacemark *bookmark)
Definition: BookmarkManager.cpp:147
Marble::BookmarkManager
This class is responsible for loading the book mark objects from the files and various book mark oper...
Definition: BookmarkManager.h:35
QObject::name
const char * name() const
Marble::EARTH_RADIUS
const qreal EARTH_RADIUS
Definition: MarbleGlobal.h:257
Marble::GeoDataFeature::setName
void setName(const QString &value)
Set a new name for this feature.
Definition: GeoDataFeature.cpp:549
QHash
Marble::GeoDataLookAt::setRange
void setRange(qreal range)
Change the distance (in meters) between the camera and the object looked at.
Definition: GeoDataLookAt.cpp:114
QObject
Marble::BookmarkManager::document
GeoDataDocument * document()
Definition: BookmarkManager.cpp:154
Bookmarks::Bookmarks
Bookmarks(QObject *parent=0)
Definition: Bookmarks.cpp:28
Marble::GeoDataContainer::folderList
QVector< GeoDataFolder * > folderList() const
A convenience function that returns all folders in this container.
Definition: GeoDataContainer.cpp:197
BookmarksModel::countChanged
void countChanged()
QString
MarblePlacemarkModel.h
kdescendantsproxymodel.h
BookmarksModel::longitude
qreal longitude(int index) const
Definition: Bookmarks.cpp:163
Marble::GeoDataFolder
Definition: GeoDataFolder.h:50
GeoDataPlacemark.h
QAbstractItemModel::rowsRemoved
void rowsRemoved(const QModelIndex &parent, int start, int end)
GeoDataTreeModel.h
Marble::GeoDataCoordinates::longitude
qreal longitude(GeoDataCoordinates::Unit unit=GeoDataCoordinates::Radian) const
retrieves the longitude of the GeoDataCoordinates object use the unit parameter to switch between Rad...
Definition: GeoDataCoordinates.cpp:739
QSortFilterProxyModel
Marble::GeoDataLookAt
Definition: GeoDataLookAt.h:23
Marble::MarblePlacemarkModel::CoordinateRole
The GeoDataCoordinates coordinate.
Definition: MarblePlacemarkModel.h:53
GeoDataFolder.h
Bookmarks::removeBookmark
void removeBookmark(qreal longitude, qreal latitude)
Definition: Bookmarks.cpp:105
Marble::GeoDataData
Definition: GeoDataData.h:26
Marble::GeoDataExtendedData::addValue
void addValue(const GeoDataData &data)
add a data object to the GeoDataExtendedData with the key
Definition: GeoDataExtendedData.cpp:71
KDescendantsProxyModel::setSourceModel
virtual void setSourceModel(QAbstractItemModel *model)
Sets the source model of the proxy.
Definition: kdescendantsproxymodel.cpp:249
Marble::GeoDataFeature::name
QString name() const
The name of the feature.
Definition: GeoDataFeature.cpp:544
Bookmarks::addBookmark
void addBookmark(qreal longitude, qreal latitude, const QString &name, const QString &folder)
Definition: Bookmarks.cpp:64
Marble::MarbleModel::bookmarkManager
BookmarkManager * bookmarkManager()
return instance of BookmarkManager
Definition: MarbleModel.cpp:213
QSortFilterProxyModel::setFilterFixedString
void setFilterFixedString(const QString &pattern)
Bookmarks::model
BookmarksModel * model()
Bookmarks::map
MarbleWidget * map()
MarbleWidget
Wraps a Marble::MarbleWidget, providing access to important properties and methods.
Definition: MarbleDeclarativeWidget.h:50
GeoDataTypes.h
Marble::GeoDataFeature::extendedData
GeoDataExtendedData & extendedData() const
Return the ExtendedData assigned to the feature.
Definition: GeoDataFeature.cpp:743
QAbstractItemModel::rowsInserted
void rowsInserted(const QModelIndex &parent, int start, int end)
MarbleWidget::model
Marble::MarbleModel * model()
Definition: MarbleDeclarativeWidget.cpp:86
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
BookmarksModel::latitude
qreal latitude(int index) const
Definition: Bookmarks.cpp:173
QVariant::toString
QString toString() const
Marble::GeoDataPlacemark
a class representing a point of interest on the map
Definition: GeoDataPlacemark.h:54
QSortFilterProxyModel::setFilterKeyColumn
void setFilterKeyColumn(int column)
QSortFilterProxyModel::data
virtual QVariant data(const QModelIndex &index, int role) const
Marble::BookmarkManager::addNewBookmarkFolder
void addNewBookmarkFolder(GeoDataContainer *folder, const QString &name)
add a folder
Definition: BookmarkManager.cpp:180
Marble::GeoDataLookAt::setCoordinates
void setCoordinates(const GeoDataCoordinates &coordinates)
set the GeoDataCoordinates object
Definition: GeoDataLookAt.cpp:66
coordinate
Coordinate coordinate
Definition: tools/osm-addresses/OsmParser.cpp:39
BookmarksModel
Definition: Bookmarks.h:19
QVariant
Marble::GeoDataContainer::placemarkList
QVector< GeoDataPlacemark * > placemarkList() const
A convenience function that returns all placemarks in this container.
Definition: GeoDataContainer.cpp:214
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:13:38 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