• 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
  • lib
  • marble
MarblePlacemarkModel.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 2006-2007 Torsten Rahn <tackat@kde.org>
9 // Copyright 2007 Inge Wallin <ingwa@kde.org>
10 //
11 
12 
13 // Own
14 #include "MarblePlacemarkModel.h"
15 #include "MarblePlacemarkModel_P.h"
16 
17 // Qt
18 #include <QTime>
19 
20 // Marble
21 #include "MarbleDebug.h"
22 #include "GeoDataExtendedData.h"
23 #include "GeoDataStyle.h" // In geodata/data/
24 
25 using namespace Marble;
26 
27 class MarblePlacemarkModel::Private
28 {
29 
30  public:
31  Private()
32  : m_size(0)
33  {
34  }
35 
36  ~Private()
37  {
38  }
39 
40  int m_size;
41  QVector<GeoDataPlacemark*> *m_placemarkContainer;
42 };
43 
44 
45 // ---------------------------------------------------------------------------
46 
47 
48 MarblePlacemarkModel::MarblePlacemarkModel( QObject *parent )
49  : QAbstractListModel( parent ),
50  d( new Private )
51 {
52  QHash<int,QByteArray> roles;
53  roles[DescriptionRole] = "description";
54  roles[LongitudeRole] = "longitude";
55  roles[LatitudeRole] = "latitude";
56 #if QT_VERSION < 0x050000
57  setRoleNames( roles );
58 #else
59  m_roleNames = roles;
60 #endif
61 }
62 
63 MarblePlacemarkModel::~MarblePlacemarkModel()
64 {
65  delete d;
66 }
67 
68 void MarblePlacemarkModel::setPlacemarkContainer( QVector<GeoDataPlacemark*> *container )
69 {
70  d->m_placemarkContainer = container;
71 }
72 
73 int MarblePlacemarkModel::rowCount( const QModelIndex &parent ) const
74 {
75  if ( !parent.isValid() )
76  return d->m_size;
77  else
78  return 0;
79 }
80 
81 int MarblePlacemarkModel::columnCount( const QModelIndex &parent ) const
82 {
83  if ( !parent.isValid() )
84  return 1;
85  else
86  return 0;
87 }
88 
89 #if QT_VERSION >= 0x050000
90 QHash<int, QByteArray> MarblePlacemarkModel::roleNames() const
91 {
92  return m_roleNames;
93 }
94 #endif
95 
96 QVariant MarblePlacemarkModel::data( const QModelIndex &index, int role ) const
97 {
98  if ( !index.isValid() )
99  return QVariant();
100 
101  if ( index.row() >= d->m_placemarkContainer->size() )
102  return QVariant();
103 
104  if ( role == Qt::DisplayRole ) {
105  return d->m_placemarkContainer->at( index.row() )->name();
106  } else if ( role == Qt::DecorationRole ) {
107  return qVariantFromValue( d->m_placemarkContainer->at( index.row() )->style()->iconStyle().icon() );
108  } else if ( role == PopularityIndexRole ) {
109  return d->m_placemarkContainer->at( index.row() )->zoomLevel();
110  } else if ( role == VisualCategoryRole ) {
111  return d->m_placemarkContainer->at( index.row() )->visualCategory();
112  } else if ( role == AreaRole ) {
113  return d->m_placemarkContainer->at( index.row() )->area();
114  } else if ( role == PopulationRole ) {
115  return d->m_placemarkContainer->at( index.row() )->population();
116  } else if ( role == CountryCodeRole ) {
117  return d->m_placemarkContainer->at( index.row() )->countryCode();
118  } else if ( role == StateRole ) {
119  return d->m_placemarkContainer->at( index.row() )->state();
120  } else if ( role == PopularityRole ) {
121  return d->m_placemarkContainer->at( index.row() )->popularity();
122  } else if ( role == DescriptionRole ) {
123  return d->m_placemarkContainer->at( index.row() )->description();
124  } else if ( role == Qt::ToolTipRole ) {
125  return d->m_placemarkContainer->at( index.row() )->description();
126  } else if ( role == GeoTypeRole ) {
127  return d->m_placemarkContainer->at( index.row() )->role();
128  } else if ( role == CoordinateRole ) {
129  return qVariantFromValue( d->m_placemarkContainer->at( index.row() )->coordinate() );
130  } else if ( role == StyleRole ) {
131  return qVariantFromValue( d->m_placemarkContainer->at( index.row() )->style() );
132  } else if ( role == GmtRole ) {
133  return qVariantFromValue( d->m_placemarkContainer->at( index.row() )->extendedData().value("gmt").value() );
134  } else if ( role == DstRole ) {
135  return qVariantFromValue( d->m_placemarkContainer->at( index.row() )->extendedData().value("dst").value() );
136  } else if ( role == GeometryRole ) {
137  return qVariantFromValue( d->m_placemarkContainer->at( index.row() )->geometry() );
138  } else if ( role == ObjectPointerRole ) {
139  return qVariantFromValue( dynamic_cast<GeoDataObject*>( d->m_placemarkContainer->at( index.row() ) ) );
140  } else if ( role == LongitudeRole ) {
141  return qVariantFromValue( d->m_placemarkContainer->at( index.row() )->coordinate().longitude( GeoDataCoordinates::Degree ) );
142  } else if ( role == LatitudeRole ) {
143  return qVariantFromValue( d->m_placemarkContainer->at( index.row() )->coordinate().latitude( GeoDataCoordinates::Degree ) );
144  } else
145  return QVariant();
146 }
147 
148 QModelIndexList MarblePlacemarkModel::approxMatch( const QModelIndex & start, int role,
149  const QVariant & value, int hits,
150  Qt::MatchFlags flags ) const
151 {
152  QList<QModelIndex> results;
153 
154  int count = 0;
155 
156  QModelIndex entryIndex;
157  QString listName;
158  QString queryString = value.toString().toLower();
159  QString simplifiedListName;
160 
161  int row = start.row();
162  const int rowNum = rowCount();
163 
164  while ( row < rowNum && count != hits ) {
165  if ( flags & Qt::MatchStartsWith ) {
166  entryIndex = index( row, 0 );
167  listName = data( entryIndex, role ).toString().toLower();
168  simplifiedListName = GeoString::deaccent( listName );
169 
170  if ( listName.startsWith( queryString )
171  || simplifiedListName.startsWith( queryString )
172  )
173  {
174  results << entryIndex;
175  ++count;
176  }
177  }
178  ++row;
179  }
180 
181  return results;
182 }
183 
184 void MarblePlacemarkModel::addPlacemarks( int start,
185  int length )
186 {
187  Q_UNUSED(start);
188 
189 // performance wise a reset is far better when the provided list
190 // is significant. That is an issue because we have
191 // MarbleControlBox::m_sortproxy as a sorting customer.
192 // I leave the balance search as an exercise to the reader...
193 
194  QTime t;
195  t.start();
196 // beginInsertRows( QModelIndex(), start, start + length );
197  d->m_size += length;
198 // endInsertRows();
199  beginResetModel();
200  endResetModel();
201  emit countChanged();
202  mDebug() << "addPlacemarks: Time elapsed:" << t.elapsed() << "ms for" << length << "Placemarks.";
203 }
204 
205 void MarblePlacemarkModel::removePlacemarks( const QString &containerName,
206  int start,
207  int length )
208 {
209  if ( length > 0 ) {
210  QTime t;
211  t.start();
212  beginRemoveRows( QModelIndex(), start, start + length );
213  d->m_size -= length;
214  endRemoveRows();
215  emit layoutChanged();
216  emit countChanged();
217  mDebug() << "removePlacemarks(" << containerName << "): Time elapsed:" << t.elapsed() << "ms for" << length << "Placemarks.";
218  }
219 }
220 
221 #include "MarblePlacemarkModel.moc"
Marble::MarblePlacemarkModel::count
int count
Definition: MarblePlacemarkModel.h:43
Marble::GeoString::deaccent
QString deaccent(const QString &accentString)
Definition: MarblePlacemarkModel_P.h:25
Marble::MarblePlacemarkModel::LatitudeRole
The latitude in degree (for use in QML)
Definition: MarblePlacemarkModel.h:67
MarblePlacemarkModel_P.h
Marble::MarblePlacemarkModel::GeometryRole
The GeoDataGeometry geometry.
Definition: MarblePlacemarkModel.h:65
Marble::MarblePlacemarkModel::MarblePlacemarkModel
MarblePlacemarkModel(QObject *parent=0)
Creates a new place mark model.
Definition: MarblePlacemarkModel.cpp:48
Marble::MarblePlacemarkModel::StyleRole
The style.
Definition: MarblePlacemarkModel.h:59
GeoDataStyle.h
GeoDataExtendedData.h
QObject
Marble::MarblePlacemarkModel::ObjectPointerRole
The pointer to a specific object.
Definition: MarblePlacemarkModel.h:62
MarbleDebug.h
Marble::MarblePlacemarkModel::VisualCategoryRole
The category.
Definition: MarblePlacemarkModel.h:58
Marble::GeoDataCoordinates::Degree
Definition: GeoDataCoordinates.h:66
Marble::MarblePlacemarkModel::DescriptionRole
The description.
Definition: MarblePlacemarkModel.h:52
Marble::MarblePlacemarkModel::columnCount
int columnCount(const QModelIndex &parent=QModelIndex()) const
Definition: MarblePlacemarkModel.cpp:81
Marble::MarblePlacemarkModel::countChanged
void countChanged()
Marble::MarblePlacemarkModel::PopulationRole
The population.
Definition: MarblePlacemarkModel.h:54
Marble::MarblePlacemarkModel::data
QVariant data(const QModelIndex &index, int role) const
Return the data according to the index.
Definition: MarblePlacemarkModel.cpp:96
Marble::MarblePlacemarkModel::GeoTypeRole
The geo type (e.g. city or mountain)
Definition: MarblePlacemarkModel.h:51
Marble::MarblePlacemarkModel::GmtRole
The Greenwich Mean Time.
Definition: MarblePlacemarkModel.h:63
MarblePlacemarkModel.h
Marble::MarblePlacemarkModel::PopularityRole
The popularity.
Definition: MarblePlacemarkModel.h:61
Marble::MarblePlacemarkModel::removePlacemarks
void removePlacemarks(const QString &containerName, int start, int length)
This method is used by the PlacemarkManager to remove place marks from the model. ...
Definition: MarblePlacemarkModel.cpp:205
Marble::MarblePlacemarkModel::rowCount
int rowCount(const QModelIndex &parent=QModelIndex()) const
Return the number of Placemarks in the Model.
Definition: MarblePlacemarkModel.cpp:73
Marble::MarblePlacemarkModel::addPlacemarks
void addPlacemarks(int start, int length)
This method is used by the PlacemarkManager to add new place marks to the model.
Definition: MarblePlacemarkModel.cpp:184
Marble::MarblePlacemarkModel::setPlacemarkContainer
void setPlacemarkContainer(QVector< GeoDataPlacemark * > *container)
Definition: MarblePlacemarkModel.cpp:68
Marble::MarblePlacemarkModel::PopularityIndexRole
The popularity index.
Definition: MarblePlacemarkModel.h:60
Marble::MarblePlacemarkModel::DstRole
The Daylight Saving Time.
Definition: MarblePlacemarkModel.h:64
Marble::MarblePlacemarkModel::CoordinateRole
The GeoDataCoordinates coordinate.
Definition: MarblePlacemarkModel.h:53
Marble::MarblePlacemarkModel::CountryCodeRole
The country code.
Definition: MarblePlacemarkModel.h:56
Marble::MarblePlacemarkModel::StateRole
The state.
Definition: MarblePlacemarkModel.h:57
Marble::MarblePlacemarkModel::AreaRole
The area size.
Definition: MarblePlacemarkModel.h:55
Marble::mDebug
QDebug mDebug()
a function to replace qDebug() in Marble library code
Definition: MarbleDebug.cpp:31
Marble::MarblePlacemarkModel::approxMatch
QModelIndexList approxMatch(const QModelIndex &start, int role, const QVariant &value, int hits=1, Qt::MatchFlags flags=Qt::MatchFlags(Qt::MatchStartsWith|Qt::MatchWrap)) const
Definition: MarblePlacemarkModel.cpp:148
Marble::MarblePlacemarkModel::~MarblePlacemarkModel
~MarblePlacemarkModel()
Destroys the place mark model.
Definition: MarblePlacemarkModel.cpp:63
Marble::MarblePlacemarkModel::LongitudeRole
The longitude in degree (for use in QML)
Definition: MarblePlacemarkModel.h:66
coordinate
Coordinate coordinate
Definition: tools/osm-addresses/OsmParser.cpp:38
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:38:51 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