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