Changeset View
Changeset View
Standalone View
Standalone View
src/presentation/workdaypagemodel.cpp
- This file was copied to src/presentation/alltaskspagemodel.cpp.
Show First 20 Lines • Show All 93 Lines • ▼ Show 20 Line(s) | 93 | auto flags = [](const Domain::Task::Ptr &task) { | |||
---|---|---|---|---|---|
94 | const Qt::ItemFlags defaultFlags = Qt::ItemIsSelectable | 94 | const Qt::ItemFlags defaultFlags = Qt::ItemIsSelectable | ||
95 | | Qt::ItemIsEnabled | 95 | | Qt::ItemIsEnabled | ||
96 | | Qt::ItemIsEditable | 96 | | Qt::ItemIsEditable | ||
97 | | Qt::ItemIsDragEnabled; | 97 | | Qt::ItemIsDragEnabled; | ||
98 | 98 | | |||
99 | return task ? (defaultFlags | Qt::ItemIsUserCheckable | Qt::ItemIsDropEnabled) : defaultFlags; | 99 | return task ? (defaultFlags | Qt::ItemIsUserCheckable | Qt::ItemIsDropEnabled) : defaultFlags; | ||
100 | }; | 100 | }; | ||
101 | 101 | | |||
102 | struct AdditionalData | 102 | auto data = [](const Domain::Task::Ptr &task, int role, const TaskExtraDataPtr &info) { | ||
103 | { | 103 | return dataForTaskWithProject(task, role, info); | ||
104 | bool childTask = false; | 104 | }; | ||
105 | Domain::QueryResult<Domain::Project::Ptr>::Ptr projectQueryResult; | 105 | | ||
106 | // later on we'll want the context query as well | 106 | auto fetchAdditionalInfo = [this](const QModelIndex &index, const Domain::Task::Ptr &task) { | ||
107 | }; | 107 | return fetchTaskExtraData(m_taskQueries, index, task); | ||
108 | using AdditionalInfo = QSharedPointer<AdditionalData>; | | |||
109 | | ||||
110 | auto data = [](const Domain::Task::Ptr &task, int role, const AdditionalInfo &info) -> QVariant { | | |||
111 | switch (role) { | | |||
112 | case Qt::DisplayRole: | | |||
113 | case Qt::EditRole: | | |||
114 | return task->title(); | | |||
115 | case Qt::CheckStateRole: | | |||
116 | return task->isDone() ? Qt::Checked : Qt::Unchecked; | | |||
117 | case Presentation::QueryTreeModelBase::AdditionalInfoRole: | | |||
118 | if (!info || info->childTask) | | |||
119 | return QString(); | | |||
120 | if (info->projectQueryResult && !info->projectQueryResult->data().isEmpty()) { | | |||
121 | Domain::Project::Ptr project = info->projectQueryResult->data().at(0); | | |||
122 | return i18n("Project: %1", project->name()); | | |||
123 | } | | |||
124 | return i18n("Inbox"); // TODO add source name | | |||
125 | default: | | |||
126 | break; | | |||
127 | } | | |||
128 | return QVariant(); | | |||
129 | }; | | |||
130 | | ||||
131 | auto fetchAdditionalInfo = [this](const QModelIndex &index, const Domain::Task::Ptr &task) -> AdditionalInfo { | | |||
132 | AdditionalInfo info = AdditionalInfo::create(); | | |||
133 | if (index.parent().isValid()) { // children are in the same collection as their parent, so the same project | | |||
134 | info->childTask = true; | | |||
135 | return info; | | |||
136 | } | | |||
137 | | ||||
138 | info->projectQueryResult = m_taskQueries->findProject(task); | | |||
139 | if (info->projectQueryResult) { | | |||
140 | QPersistentModelIndex persistentIndex(index); | | |||
141 | info->projectQueryResult->addPostInsertHandler([persistentIndex](const Domain::Project::Ptr &, int) { | | |||
142 | // When a project was found (inserted into the result), update the rendering of the item | | |||
143 | auto model = const_cast<QAbstractItemModel *>(persistentIndex.model()); | | |||
144 | model->dataChanged(persistentIndex, persistentIndex); | | |||
145 | }); | | |||
146 | } | | |||
147 | return info; | | |||
148 | }; | 108 | }; | ||
149 | 109 | | |||
150 | auto setData = [this](const Domain::Task::Ptr &task, const QVariant &value, int role) { | 110 | auto setData = [this](const Domain::Task::Ptr &task, const QVariant &value, int role) { | ||
151 | if (role != Qt::EditRole && role != Qt::CheckStateRole) { | 111 | if (role != Qt::EditRole && role != Qt::CheckStateRole) { | ||
152 | return false; | 112 | return false; | ||
153 | } | 113 | } | ||
154 | 114 | | |||
155 | const auto currentTitle = task->title(); | 115 | const auto currentTitle = task->title(); | ||
Show All 38 Lines | 153 | if (tasks.isEmpty()) | |||
194 | return nullptr; | 154 | return nullptr; | ||
195 | 155 | | |||
196 | auto data = new QMimeData; | 156 | auto data = new QMimeData; | ||
197 | data->setData(QStringLiteral("application/x-zanshin-object"), "object"); | 157 | data->setData(QStringLiteral("application/x-zanshin-object"), "object"); | ||
198 | data->setProperty("objects", QVariant::fromValue(tasks)); | 158 | data->setProperty("objects", QVariant::fromValue(tasks)); | ||
199 | return data; | 159 | return data; | ||
200 | }; | 160 | }; | ||
201 | 161 | | |||
202 | return new QueryTreeModel<Domain::Task::Ptr, AdditionalInfo>(query, flags, data, setData, drop, drag, fetchAdditionalInfo, this); | 162 | return new QueryTreeModel<Domain::Task::Ptr, TaskExtraDataPtr>(query, flags, data, setData, drop, drag, fetchAdditionalInfo, this); | ||
203 | } | 163 | } |