#include "PackFieldsListModel.h" #include "../dictionary/CardPack.h" #include "../dictionary/Field.h" #include int PackFieldsListModel::rowCount( const QModelIndex& /*parent*/ ) const { CardPack* pack = m_parent->m_dict.cardPack( m_parentRow ); if( !pack ) return 0; return pack->getFields().size(); } QVariant PackFieldsListModel::data( const QModelIndex &index, int role ) const { if (!index.isValid()) return QVariant(); if (index.row() >= rowCount()) return QVariant(); CardPack* pack = m_parent->m_dict.cardPack( m_parentRow ); if( !pack ) return QVariant(); const Field* field = pack->getFields().value(index.row()); switch( role ) { case Qt::DisplayRole: case Qt::EditRole: return field->name(); case Qt::FontRole: if( index.row() == 0 ) { QFont font; font.setBold(true); return font; } else return QFont(); default: return QVariant(); } } void PackFieldsListModel::changeParentRow( const QModelIndex& aIndex ) { m_parentRow = aIndex.row(); emit layoutChanged(); } bool PackFieldsListModel::setData(const QModelIndex& index, const QVariant& aValue, int role) { if( !index.isValid() || role != Qt::EditRole ) return false; const Field* field = m_parent->m_dict.field( aValue.toString() ); if( !field ) return false; CardPack* pack = m_parent->m_dict.cardPack( m_parentRow ); pack->setField( index.row(), field ); emit dataChanged(index, index); return true; } bool PackFieldsListModel::insertRows(int position, int rows, const QModelIndex &/*parent*/) { beginInsertRows(QModelIndex(), position, position+rows-1); CardPack* pack = m_parent->m_dict.cardPack( m_parentRow ); for (int row = 0; row < rows; ++row) pack->insertField( position, m_parent->m_emptyField ); endInsertRows(); return true; } bool PackFieldsListModel::removeRows(int position, int rows, const QModelIndex &/*parent*/) { beginRemoveRows(QModelIndex(), position, position+rows-1); CardPack* pack = m_parent->m_dict.cardPack( m_parentRow ); for (int row = 0; row < rows; ++row) pack->removeField( position ); endRemoveRows(); return true; } const void* PackFieldsListModel::dataPtr( const QModelIndex& aIndex ) const { CardPack* pack = m_parent->m_dict.cardPack( m_parentRow ); if( !pack ) return NULL; const Field* field = pack->getFields().value( aIndex.row() ); return static_cast( field ); } void PackFieldsListModel::insertPointer( int aPos, void* aData ) { beginInsertRows(QModelIndex(), aPos, aPos ); CardPack* pack = m_parent->m_dict.cardPack( m_parentRow ); if( !pack ) return; pack->insertField( aPos, static_cast( aData ) ); endInsertRows(); }