1 // SPDX-License-Identifier: LGPL-2.1-or-later
2 //
3 // SPDX-FileCopyrightText: 2015 Mikhail Ivchenko <ematirov@gmail.com>
4 //
5
6 #include "NodeModel.h"
7
8 #include "MarbleLocale.h"
9
10 namespace Marble
11 {
12
NodeModel(QObject * parent)13 NodeModel::NodeModel( QObject *parent ) : QAbstractListModel( parent )
14 {
15
16 }
17
rowCount(const QModelIndex & parent) const18 int NodeModel::rowCount( const QModelIndex &parent ) const
19 {
20 if( parent == QModelIndex() ) {
21 return m_nodes.size();
22 } else {
23 return 0;
24 }
25 }
26
columnCount(const QModelIndex & parent) const27 int NodeModel::columnCount( const QModelIndex &parent ) const
28 {
29 Q_UNUSED( parent )
30 return 4;
31 }
32
data(const QModelIndex & index,int role) const33 QVariant NodeModel::data( const QModelIndex &index, int role ) const
34 {
35 if( !index.isValid() ) {
36 return QVariant();
37 }
38 if( role == Qt::DisplayRole ) {
39 switch( index.column() ) {
40 case 0:
41 return index.row();
42 case 1: {
43 return m_nodes[ index.row() ].lonToString();
44 }
45 case 2: {
46 return m_nodes[ index.row() ].latToString();
47 }
48 case 3: {
49 qreal altitude = m_nodes[ index.row() ].altitude();
50 MarbleLocale *locale = MarbleGlobal::getInstance()->locale();
51 qreal convertedAltitude;
52 const MarbleLocale::MeasurementSystem currentSystem = locale->measurementSystem();
53 MarbleLocale::MeasureUnit elevationUnit;
54 switch ( locale->measurementSystem() ) {
55 case MarbleLocale::MetricSystem:
56 elevationUnit = MarbleLocale::Meter;
57 break;
58 case MarbleLocale::ImperialSystem:
59 elevationUnit = MarbleLocale::Foot;
60 break;
61 case MarbleLocale::NauticalSystem:
62 elevationUnit = MarbleLocale::NauticalMile;
63 break;
64 }
65 locale->meterToTargetUnit( altitude, currentSystem, convertedAltitude, elevationUnit );
66 return convertedAltitude;
67 }
68 default:
69 return QVariant();
70 }
71 }
72 return QVariant();
73 }
74
headerData(int section,Qt::Orientation orientation,int role) const75 QVariant NodeModel::headerData( int section, Qt::Orientation orientation, int role ) const
76 {
77 if( role == Qt::DisplayRole && orientation == Qt::Horizontal ) {
78 switch( section ) {
79 case 0:
80 return tr( "No." );
81 case 1:
82 return tr( "Longitude" );
83 case 2:
84 return tr( "Latitude" );
85 case 3:
86 return tr( "Elevation" );
87 }
88 }
89 return QAbstractListModel::headerData( section, orientation, role );
90 }
91
clear()92 void NodeModel::clear()
93 {
94 int last = rowCount( QModelIndex() ) - 1;
95 beginRemoveRows( QModelIndex(), 0, last );
96 m_nodes.clear();
97 endRemoveRows();
98 }
99
addNode(const GeoDataCoordinates & node)100 int NodeModel::addNode( const GeoDataCoordinates &node )
101 {
102 int row = rowCount( QModelIndex() );
103 beginInsertRows( QModelIndex(), row, row );
104 m_nodes.append( node );
105 endInsertRows();
106 return row;
107 }
108
flags(const QModelIndex & index) const109 Qt::ItemFlags NodeModel::flags(const QModelIndex & index) const
110 {
111 if ( index.column() == 1 || index.column() == 2 ) {
112 return Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsEnabled;
113 }
114 else
115 return Qt::ItemIsSelectable | Qt::ItemIsEnabled;
116 }
117
118 }
119
120 #include "moc_NodeModel.cpp"
121