QAbstractItemModel *Tag::taskModel() { // TODO: this should be ok now if (!m_taskModel && m_kernel) { m_taskModel = new TaskFilterProxyModel(this); m_taskModel->setTagName(m_name); m_taskModel->setSourceModel(m_kernel->storage()->archivedTasksModel()); m_taskModel->setObjectName(QString("Tasks with tag %1 model").arg(m_name)); connect(this, &Tag::taskCountChanged, m_taskModel, &TaskFilterProxyModel::invalidateFilter, Qt::QueuedConnection); #if defined(UNIT_TEST_RUN) AssertingProxyModel *assert = new AssertingProxyModel(this); assert->setSourceModel(m_taskModel); #endif } return m_taskModel; }
void Task::modelSetup() { Storage *storage = m_kernel->storage(); m_checkableTagModel = new CheckableTagModel(this); m_tags.setDataFunction(&dataFunction); m_tags.insertRole("tag", Q_NULLPTR, TagRole); m_tags.insertRole("task", Q_NULLPTR, TaskRole); QAbstractItemModel *tagsModel = m_tags; // android doesn't build if you use m_tags directly in the connect statement connect(tagsModel, &QAbstractListModel::modelReset, this, &Task::tagsChanged); connect(tagsModel, &QAbstractListModel::rowsInserted, this, &Task::tagsChanged); connect(tagsModel, &QAbstractListModel::rowsRemoved, this, &Task::tagsChanged); connect(tagsModel, &QAbstractListModel::layoutChanged, this, &Task::tagsChanged); connect(tagsModel, &QAbstractListModel::dataChanged, this, &Task::tagsChanged); QHash<int, QByteArray> roleNames = storage->tagsModel()->roleNames(); roleNames.insert(Qt::CheckStateRole, QByteArray("checkState")); QAbstractItemModel *allTagsModel = storage->tagsModel(); Q_ASSERT(allTagsModel); m_checkableTagModel->setSourceModel(allTagsModel); m_contextMenuModel = new TaskContextMenuModel(this, this); m_sortedContextMenuModel = new SortedTaskContextMenuModel(this); m_sortedContextMenuModel->setSourceModel(m_contextMenuModel); #if defined(UNIT_TEST_RUN) AssertingProxyModel *assert = new AssertingProxyModel(this); assert->setSourceModel(m_contextMenuModel); assert = new AssertingProxyModel(this); assert->setSourceModel(m_sortedContextMenuModel); assert = new AssertingProxyModel(this); assert->setSourceModel(m_checkableTagModel); assert = new AssertingProxyModel(this); assert->setSourceModel(m_tags); #endif }