1 // SPDX-License-Identifier: LGPL-2.1-or-later
2 //
3 // SPDX-FileCopyrightText: 2011 Guillaume Martres <smarter@ubuntu.com>
4 //
5
6 #include "SatellitesConfigModel.h"
7
8 #include "SatellitesConfigLeafItem.h"
9 #include "MarbleDebug.h"
10
11 namespace Marble {
12
SatellitesConfigModel(QObject * parent)13 SatellitesConfigModel::SatellitesConfigModel( QObject *parent )
14 : QAbstractItemModel( parent ),
15 m_rootItem(new SatellitesConfigNodeItem(QString()))
16 {
17 }
18
~SatellitesConfigModel()19 SatellitesConfigModel::~SatellitesConfigModel()
20 {
21 delete m_rootItem;
22 }
23
idList() const24 QStringList SatellitesConfigModel::idList() const
25 {
26 return m_rootItem->data( 0, SatellitesConfigAbstractItem::IdListRole )
27 .toStringList();
28 }
29
fullIdList() const30 QStringList SatellitesConfigModel::fullIdList() const
31 {
32 return m_rootItem->data( 0, SatellitesConfigAbstractItem::FullIdListRole )
33 .toStringList();
34 }
35
urlList() const36 QStringList SatellitesConfigModel::urlList() const
37 {
38 return m_rootItem->data( 0, SatellitesConfigAbstractItem::UrlListRole )
39 .toStringList();
40 }
41
loadSettings(const QHash<QString,QVariant> & settings)42 void SatellitesConfigModel::loadSettings(const QHash<QString, QVariant> &settings)
43 {
44 m_rootItem->loadSettings( settings );
45 }
46
appendChild(SatellitesConfigAbstractItem * child)47 void SatellitesConfigModel::appendChild( SatellitesConfigAbstractItem *child )
48 {
49 m_rootItem->appendChild( child );
50 }
51
clear()52 void SatellitesConfigModel::clear()
53 {
54 m_rootItem->clear();
55 }
56
data(const QModelIndex & index,int role) const57 QVariant SatellitesConfigModel::data( const QModelIndex &index, int role ) const
58 {
59 if ( !index.isValid() ) {
60 return QVariant();
61 }
62
63 SatellitesConfigAbstractItem *item =
64 static_cast<SatellitesConfigAbstractItem *>( index.internalPointer() );
65 return item->data( index.column(), role );
66 }
67
setData(const QModelIndex & index,const QVariant & value,int role)68 bool SatellitesConfigModel::setData( const QModelIndex &index,
69 const QVariant &value,
70 int role )
71 {
72 SatellitesConfigAbstractItem *item =
73 static_cast<SatellitesConfigAbstractItem *>( index.internalPointer() );
74
75 bool success = item->setData( index.column(), role, value );
76
77 if ( success ) {
78 QModelIndex parentCellIndex = this->index( index.parent().row(),
79 index.column(),
80 index.parent().parent() );
81 emit dataChanged( parentCellIndex, parentCellIndex );
82 }
83
84 return success;
85 }
86
columnCount(const QModelIndex & parent) const87 int SatellitesConfigModel::columnCount( const QModelIndex &parent ) const
88 {
89 Q_UNUSED( parent )
90 //TODO: enable second column
91 return 1;
92 }
93
rowCount(const QModelIndex & parent) const94 int SatellitesConfigModel::rowCount( const QModelIndex &parent ) const
95 {
96 if ( parent.column() > 0 ) {
97 return 0;
98 }
99
100 SatellitesConfigAbstractItem *parentItem = nullptr;
101 if ( !parent.isValid() ) {
102 parentItem = m_rootItem;
103 } else {
104 parentItem = static_cast<SatellitesConfigAbstractItem *>(
105 parent.internalPointer() );
106 }
107
108 return parentItem->childrenCount();
109 }
110
parent(const QModelIndex & child) const111 QModelIndex SatellitesConfigModel::parent( const QModelIndex &child ) const
112 {
113 if ( !child.isValid() ) {
114 return QModelIndex();
115 }
116
117 SatellitesConfigAbstractItem *childItem =
118 static_cast<SatellitesConfigAbstractItem *>( child.internalPointer() );
119 SatellitesConfigAbstractItem *parentItem = childItem->parent();
120
121 if ( parentItem == m_rootItem ) {
122 return QModelIndex();
123 }
124
125 return createIndex( parentItem->row(), 0, parentItem );
126 }
127
index(int row,int column,const QModelIndex & parent) const128 QModelIndex SatellitesConfigModel::index( int row, int column,
129 const QModelIndex &parent ) const
130 {
131 if ( !hasIndex( row, column, parent ) ) {
132 return QModelIndex();
133 }
134
135 SatellitesConfigAbstractItem *parentItem = nullptr;
136 if ( !parent.isValid() ) {
137 parentItem = m_rootItem;
138 } else {
139 parentItem = static_cast<SatellitesConfigAbstractItem *>(
140 parent.internalPointer() );
141 }
142
143 SatellitesConfigAbstractItem *childItem = parentItem->childAt( row );
144
145 if ( !childItem ) {
146 return QModelIndex();
147 }
148
149 return createIndex( row, column, childItem );
150 }
151
headerData(int section,Qt::Orientation orientation,int role) const152 QVariant SatellitesConfigModel::headerData( int section,
153 Qt::Orientation orientation,
154 int role ) const
155 {
156 if ( orientation != Qt::Horizontal || role != Qt::DisplayRole ) {
157 return QVariant();
158 }
159
160 switch (section) {
161 case 0: {
162 return QVariant( tr( "Catalogs" ) );
163 }
164 default: {
165 return QVariant();
166 }
167 }
168 }
169
flags(const QModelIndex & index) const170 Qt::ItemFlags SatellitesConfigModel::flags( const QModelIndex &index ) const
171 {
172 if ( !index.isValid() ) {
173 return nullptr;
174 }
175
176 SatellitesConfigAbstractItem *item =
177 static_cast<SatellitesConfigAbstractItem *>( index.internalPointer() );
178 return item->flags();
179 }
180
rootItem() const181 SatellitesConfigNodeItem* SatellitesConfigModel::rootItem() const
182 {
183 return m_rootItem;
184 }
185
186 } // namespace Marble
187
188 #include "moc_SatellitesConfigModel.cpp"
189
190