• 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
  • eclipses
EclipsesModel.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 Rene Kuettner <rene@bitkanal.net>
9 //
10 
11 #include "EclipsesModel.h"
12 
13 #include "EclipsesItem.h"
14 #include "MarbleDebug.h"
15 #include "MarbleClock.h"
16 
17 #include <eclsolar.h>
18 
19 #include <QIcon>
20 
21 namespace Marble
22 {
23 
24 EclipsesModel::EclipsesModel( const MarbleModel *model, QObject *parent )
25  : QAbstractItemModel( parent ),
26  m_marbleModel( model ),
27  m_currentYear( 0 ),
28  m_withLunarEclipses( false )
29 {
30  m_ecl = new EclSolar();
31  m_ecl->setTimezone( model->clock()->timezone() / 3600. );
32  m_ecl->setLunarEcl( m_withLunarEclipses );
33 
34  // oberservation point defaults to home location
35  qreal lon, lat;
36  int zoom;
37  m_marbleModel->home( lon, lat, zoom );
38  GeoDataCoordinates homeLocation( lon, lat, 0, GeoDataCoordinates::Degree );
39  setObservationPoint( homeLocation );
40 }
41 
42 EclipsesModel::~EclipsesModel()
43 {
44  clear();
45  delete m_ecl;
46 }
47 const GeoDataCoordinates& EclipsesModel::observationPoint() const
48 {
49  return m_observationPoint;
50 }
51 
52 void EclipsesModel::setObservationPoint( const GeoDataCoordinates &coords )
53 {
54  m_observationPoint = coords;
55  m_ecl->setLocalPos( coords.latitude(), coords.altitude(), 6000. );
56 }
57 
58 void EclipsesModel::setYear( int year )
59 {
60  if( m_currentYear != year ) {
61 
62  mDebug() << "Year changed - Calculating eclipses...";
63  m_currentYear = year;
64  m_ecl->putYear( year );
65 
66  update();
67  }
68 }
69 
70 int EclipsesModel::year() const
71 {
72  return m_currentYear;
73 }
74 
75 void EclipsesModel::setWithLunarEclipses( const bool enable )
76 {
77  if( m_withLunarEclipses != enable ) {
78  m_withLunarEclipses = enable;
79  m_ecl->setLunarEcl( m_withLunarEclipses );
80  update();
81  }
82 }
83 
84 bool EclipsesModel::withLunarEclipses() const
85 {
86  return m_withLunarEclipses;
87 }
88 
89 EclipsesItem* EclipsesModel::eclipseWithIndex( int index )
90 {
91  foreach( EclipsesItem *item, m_items ) {
92  if( item->index() == index ) {
93  return item;
94  }
95  }
96 
97  return NULL;
98 }
99 
100 QList<EclipsesItem*> EclipsesModel::items() const
101 {
102  return m_items;
103 }
104 
105 QModelIndex EclipsesModel::index( int row, int column, const QModelIndex &parent ) const
106 {
107  if( !hasIndex( row, column, parent ) ) {
108  return QModelIndex();
109  }
110 
111  if( row >= m_items.count() ) {
112  return QModelIndex();
113  }
114 
115  return createIndex( row, column, m_items.at( row ) );
116 }
117 
118 QModelIndex EclipsesModel::parent( const QModelIndex &index ) const
119 {
120  Q_UNUSED( index );
121  return QModelIndex(); // no parents
122 }
123 
124 int EclipsesModel::rowCount( const QModelIndex &parent ) const
125 {
126  Q_UNUSED( parent );
127  return m_items.count();
128 }
129 
130 int EclipsesModel::columnCount( const QModelIndex &parent ) const
131 {
132  Q_UNUSED( parent );
133  return 4; // start, end, type magnitude
134 }
135 
136 QVariant EclipsesModel::data( const QModelIndex &index, int role ) const
137 {
138  if( !index.isValid() ) {
139  return QVariant();
140  }
141 
142  Q_ASSERT( index.column() < 4 );
143 
144  EclipsesItem *item = static_cast<EclipsesItem*>( index.internalPointer() );
145  if( role == Qt::DisplayRole ) {
146  switch( index.column() ) {
147  case 0: return QVariant( item->startDatePartial() );
148  case 1: return QVariant( item->endDatePartial() );
149  case 2: return QVariant( item->phaseText() );
150  case 3: return QVariant( item->magnitude() );
151  default: break; // should never happen
152  }
153  }
154  if( role == Qt::DecorationRole ) {
155  if ( index.column() == 2 ) return QVariant( item->icon() );
156  }
157 
158  return QVariant();
159 }
160 
161 QVariant EclipsesModel::headerData( int section, Qt::Orientation orientation,
162  int role ) const
163 {
164  if( orientation != Qt::Horizontal || role != Qt::DisplayRole ) {
165  return QVariant();
166  }
167 
168  switch( section ) {
169  case 0: return QVariant( tr( "Start" ) );
170  case 1: return QVariant( tr( "End" ) );
171  case 2: return QVariant( tr( "Type" ) );
172  case 3: return QVariant( tr( "Magnitude" ) );
173  default: break;
174  }
175 
176  return QVariant();
177 }
178 
179 void EclipsesModel::addItem( EclipsesItem *item )
180 {
181  m_items.append( item );
182 }
183 
184 void EclipsesModel::clear()
185 {
186  beginResetModel();
187 
188  qDeleteAll( m_items );
189  m_items.clear();
190 
191  endResetModel();
192 }
193 
194 void EclipsesModel::update()
195 {
196  clear();
197 
198  beginInsertRows( QModelIndex(), 0, rowCount() );
199 
200  int num = m_ecl->getNumberEclYear();
201  for( int i = 1; i <= num; ++i ) {
202  EclipsesItem *item = new EclipsesItem( m_ecl, i );
203  addItem( item );
204  }
205 
206  endInsertRows();
207 }
208 
209 } // namespace Marble
210 
211 #include "EclipsesModel.moc"
212 
QAbstractItemModel::hasIndex
bool hasIndex(int row, int column, const QModelIndex &parent) const
QModelIndex
Marble::GeoDataCoordinates
A 3d point representation.
Definition: GeoDataCoordinates.h:52
Marble::EclipsesModel::index
QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const
Definition: EclipsesModel.cpp:105
Marble::EclipsesModel::data
QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const
Definition: EclipsesModel.cpp:136
EclSolar::setLunarEcl
void setLunarEcl(bool lecl)
Definition: eclsolar.cpp:163
EclSolar::setLocalPos
void setLocalPos(double lat, double lng, double hgt)
Definition: eclsolar.cpp:202
Marble::EclipsesModel::eclipseWithIndex
EclipsesItem * eclipseWithIndex(int index)
Get eclipse item of a given year.
Definition: EclipsesModel.cpp:89
Marble::MarbleClock::timezone
int timezone() const
Returns the timezone of the clock.
Definition: MarbleClock.cpp:127
eclsolar.h
Marble::MarbleModel::clock
MarbleClock * clock()
Definition: MarbleModel.cpp:537
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::EclipsesModel::setObservationPoint
void setObservationPoint(const GeoDataCoordinates &coords)
Set the current observation point.
Definition: EclipsesModel.cpp:52
MarbleDebug.h
Marble::EclipsesModel::setYear
void setYear(int year)
Set the year.
Definition: EclipsesModel.cpp:58
QObject::tr
QString tr(const char *sourceText, const char *disambiguation, int n)
Marble::GeoDataCoordinates::Degree
Definition: GeoDataCoordinates.h:66
EclSolar::getNumberEclYear
int getNumberEclYear()
Definition: eclsolar.cpp:145
EclipsesModel.h
QAbstractItemModel::beginResetModel
void beginResetModel()
Marble::EclipsesModel::~EclipsesModel
~EclipsesModel()
Definition: EclipsesModel.cpp:42
Marble::GeoDataCoordinates::altitude
qreal altitude() const
return the altitude of the Point in meters
Definition: GeoDataCoordinates.cpp:1197
EclSolar
Definition: eclsolar.h:22
QModelIndex::isValid
bool isValid() const
Marble::EclipsesModel::items
QList< EclipsesItem * > items() const
Return the items in this model.
Definition: EclipsesModel.cpp:100
Marble::EclipsesItem::index
int index() const
The index of the eclipse event.
Definition: EclipsesItem.cpp:43
QAbstractItemModel::endInsertRows
void endInsertRows()
Marble::EclipsesModel::setWithLunarEclipses
void setWithLunarEclipses(const bool enable)
Set if lunar eclipses are enbled.
Definition: EclipsesModel.cpp:75
Marble::EclipsesModel::rowCount
int rowCount(const QModelIndex &parent=QModelIndex()) const
Definition: EclipsesModel.cpp:124
QObject
Marble::MarbleModel::home
void home(qreal &lon, qreal &lat, int &zoom) const
get the home point
Definition: MarbleModel.cpp:446
QModelIndex::internalPointer
void * internalPointer() const
EclSolar::putYear
void putYear(int yr)
Definition: eclsolar.cpp:132
QList
Marble::EclipsesModel::year
int year() const
Return the year.
Definition: EclipsesModel.cpp:70
QAbstractItemModel::createIndex
QModelIndex createIndex(int row, int column, void *ptr) const
MarbleClock.h
Marble::EclipsesModel::withLunarEclipses
bool withLunarEclipses() const
Return whether or not lunar eclipses are enabled.
Definition: EclipsesModel.cpp:84
QAbstractItemModel::beginInsertRows
void beginInsertRows(const QModelIndex &parent, int first, int last)
Marble::MarbleModel
The data model (not based on QAbstractModel) for a MarbleWidget.
Definition: MarbleModel.h:97
Marble::EclipsesModel::columnCount
int columnCount(const QModelIndex &parent=QModelIndex()) const
Definition: EclipsesModel.cpp:130
EclipsesItem.h
Marble::EclipsesModel::EclipsesModel
EclipsesModel(const MarbleModel *model, QObject *parent=0)
Definition: EclipsesModel.cpp:24
EclSolar::setTimezone
void setTimezone(double d)
Definition: eclsolar.cpp:179
QModelIndex::column
int column() const
QAbstractItemModel
Marble::EclipsesModel::update
void update()
Update the list of eclipse items.
Definition: EclipsesModel.cpp:194
Marble::EclipsesModel::observationPoint
const GeoDataCoordinates & observationPoint() const
Return the current observation point.
Definition: EclipsesModel.cpp:47
QAbstractItemModel::endResetModel
void endResetModel()
QObject::parent
QObject * parent() const
Marble::mDebug
QDebug mDebug()
a function to replace qDebug() in Marble library code
Definition: MarbleDebug.cpp:36
Marble::EclipsesItem
The representation of an eclipse event.
Definition: EclipsesItem.h:37
Marble::EclipsesModel::headerData
QVariant headerData(int section, Qt::Orientation orientation, int role=Qt::DisplayRole) const
Definition: EclipsesModel.cpp:161
QVariant
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:13:39 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