Back to index

fet  5.18.0
sparseitemmodel.cpp
Go to the documentation of this file.
00001 /***************************************************************************
00002                                 FET
00003                           -------------------
00004    copyright            : (C) by Lalescu Liviu
00005     email                : Please see http://lalescu.ro/liviu/ for details about contacting Liviu Lalescu (in particular, you can find here the e-mail address)
00006  ***************************************************************************
00007                       sparseitemmodel.cpp  -  description
00008                              -------------------
00009     begin                : 2010
00010     copyright            : (C) 2010 by Liviu Lalescu
00011                          : http://lalescu.ro/liviu/
00012  ***************************************************************************
00013  *                                                                         *
00014  *   This program is free software; you can redistribute it and/or modify  *
00015  *   it under the terms of the GNU General Public License as published by  *
00016  *   the Free Software Foundation; either version 2 of the License, or     *
00017  *   (at your option) any later version.                                   *
00018  *                                                                         *
00019  ***************************************************************************/
00020 
00021 #include "timetable_defs.h"
00022 
00023 #include "sparseitemmodel.h"
00024 
00025 SparseItemModel::SparseItemModel()
00026 {
00027        n_rows=0;
00028        n_columns=0;
00029 
00030        items.clear();
00031        horizontalHeaderItems.clear();
00032        verticalHeaderItems.clear();
00033 }
00034 
00035 QModelIndex SparseItemModel::index ( int row, int column, const QModelIndex & parent ) const
00036 {
00037        Q_UNUSED(parent);
00038 
00039        return createIndex(row, column);
00040 }
00041 
00042 QModelIndex SparseItemModel::parent ( const QModelIndex & index ) const
00043 {
00044        Q_UNUSED(index);
00045 
00046        return QModelIndex();
00047 }
00048 
00049 int SparseItemModel::rowCount ( const QModelIndex & parent ) const
00050 {
00051        if(parent!=QModelIndex())
00052               return 0; //qt doc says that
00053 
00054        return n_rows;
00055 }
00056 
00057 int SparseItemModel::columnCount ( const QModelIndex & parent ) const
00058 {
00059        if(parent!=QModelIndex())
00060               return 0; //qt doc says that
00061 
00062        return n_columns;
00063 }
00064 
00065 QVariant SparseItemModel::data ( const QModelIndex & index, int role ) const
00066 {
00067        if(role!=Qt::DisplayRole)
00068               return QVariant();
00069 
00070        int row=index.row();
00071        assert(row>=0 && row<n_rows);
00072        int column=index.column();
00073        assert(column>=0 && column<n_columns);
00074        
00075        QPair<int, int> pair;
00076        pair.first=row;
00077        pair.second=column;
00078        if(items.contains(pair))
00079               return items.value(pair);
00080        else
00081               return QVariant();
00082 }
00083 
00084 QVariant SparseItemModel::headerData ( int section, Qt::Orientation orientation, int role ) const
00085 {
00086        if(role!=Qt::DisplayRole)
00087               return QVariant();
00088 
00089        if(orientation==Qt::Horizontal){
00090               assert(section>=0 && section<horizontalHeaderItems.count());
00091               return horizontalHeaderItems.at(section);
00092        }
00093        else{
00094               assert(section>=0 && section<verticalHeaderItems.count());
00095               return verticalHeaderItems.at(section);
00096        }
00097 }
00098 
00099 void SparseItemModel::clear()
00100 {
00101        assert(n_rows>=0);
00102        if(n_rows>0){
00103               beginRemoveRows(QModelIndex(), 0, n_rows-1);
00104               n_rows=0;
00105               endRemoveRows();
00106        }
00107        
00108        assert(n_columns>=0);
00109        if(n_columns>0){
00110               beginRemoveColumns(QModelIndex(), 0, n_columns-1);
00111               n_columns=0;
00112               endRemoveColumns();
00113        }
00114 
00115        items.clear();
00116        horizontalHeaderItems.clear();
00117        verticalHeaderItems.clear();
00118 }
00119 
00120 void SparseItemModel::clearDataAndHeaders()
00121 {
00122        items.clear();
00123        
00124        assert(n_columns==horizontalHeaderItems.count());
00125        for(int i=0; i<n_columns; i++)
00126               horizontalHeaderItems[i]="";
00127               
00128        assert(n_rows==verticalHeaderItems.count());
00129        for(int i=0; i<n_rows; i++)
00130               verticalHeaderItems[i]="";
00131 }
00132 
00133 void SparseItemModel::resize(int _nr, int _nc)
00134 {
00135        if(_nr==n_rows && _nc==n_columns)
00136               return;
00137 
00138        this->clear();
00139        
00140        assert(verticalHeaderItems.count()==0);
00141        for(int i=0; i<_nr; i++)
00142               verticalHeaderItems.append("");
00143        assert(horizontalHeaderItems.count()==0);
00144        for(int i=0; i<_nc; i++)
00145               horizontalHeaderItems.append("");
00146        
00147        assert(n_rows==0);
00148        beginInsertRows(QModelIndex(), 0, _nr-1);
00149        n_rows=_nr;
00150        endInsertRows();
00151 
00152        assert(n_columns==0);
00153        beginInsertColumns(QModelIndex(), 0, _nc-1);
00154        n_columns=_nc;
00155        endInsertColumns();
00156 }
00157 
00158 void SparseItemModel::allItemsChanged()
00159 {
00160        emit dataChanged(index(0,0), index(n_rows-1, n_columns-1));
00161 }
00162 
00163 void SparseItemModel::allHeadersChanged()
00164 {
00165        emit headerDataChanged(Qt::Horizontal, 0, n_columns-1);
00166        emit headerDataChanged(Qt::Vertical, 0, n_rows-1);
00167 }