diff --git a/src/itembackendmodel.cpp b/src/itembackendmodel.cpp index cf9655fe9b1890e03f497b74a08c60769682e733..50ec1e3b7fdb8339d5b881a7225d648324091c0f 100644 --- a/src/itembackendmodel.cpp +++ b/src/itembackendmodel.cpp @@ -102,30 +102,35 @@ Qt::ItemFlags CommonItemBackendModel::flags(const QModelIndex& idx) const if (!idx.isValid()) return 0; ProxyItem* item = static_cast<ProxyItem*>(idx.internalPointer()); - if (idx.column() > 0) - return m_lExtensions[idx.column()-1]->flags(item->backend,idx); - const bool checkable = item->backend->supportedFeatures() & (AbstractContactBackend::SupportedFeatures::ENABLEABLE | + if (idx.column() > 0) { + //Make sure the cell is disabled if the row is + Qt::ItemFlags f = m_lExtensions[idx.column()-1]->flags(item->backend,idx); + return (((f&Qt::ItemIsEnabled)&&(!item->backend->isEnabled()))?f^Qt::ItemIsEnabled:f); + } + const bool checkable = item->backend->supportedFeatures() & (AbstractContactBackend::SupportedFeatures::ENABLEABLE | AbstractContactBackend::SupportedFeatures::DISABLEABLE | AbstractContactBackend::SupportedFeatures::MANAGEABLE ); return Qt::ItemIsEnabled | Qt::ItemIsSelectable | (checkable?Qt::ItemIsUserCheckable:Qt::NoItemFlags); } -bool CommonItemBackendModel::setData (const QModelIndex& index, const QVariant &value, int role ) +bool CommonItemBackendModel::setData (const QModelIndex& idx, const QVariant &value, int role ) { - Q_UNUSED(index) + Q_UNUSED(idx) Q_UNUSED(value) Q_UNUSED(role) - if (index.isValid() && index.column() > 0) { - ProxyItem* item = static_cast<ProxyItem*>(index.internalPointer()); - return m_lExtensions[index.column()-1]->setData(item->backend,index,value,role); + if (idx.isValid() && idx.column() > 0) { + ProxyItem* item = static_cast<ProxyItem*>(idx.internalPointer()); + return m_lExtensions[idx.column()-1]->setData(item->backend,idx,value,role); } - if (role == Qt::CheckStateRole) { - ProxyItem* item = static_cast<ProxyItem*>(index.internalPointer()); + if (role == Qt::CheckStateRole && idx.column() == 0) { + ProxyItem* item = static_cast<ProxyItem*>(idx.internalPointer()); if (item) { const bool old = item->backend->isEnabled(); ItemModelStateSerializationVisitor::instance()->setChecked(item->backend,value==Qt::Checked); - if (old != (value==Qt::Checked)) + emit dataChanged(index(idx.row(),0),index(idx.row(),columnCount()-1)); + if (old != (value==Qt::Checked)) { emit checkStateChanged(); + } return true; } }