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