| 1170 | } |
| 1171 | |
| 1172 | void MemoryDialog::onRemove() |
| 1173 | { |
| 1174 | const QSet<int> selectedIndices = selectedMemoryIndices(); |
| 1175 | if (selectedIndices.isEmpty()) |
| 1176 | return; |
| 1177 | |
| 1178 | QList<int> indices = selectedIndices.values(); |
| 1179 | std::sort(indices.begin(), indices.end()); |
| 1180 | |
| 1181 | QStringList memoryDescriptions; |
| 1182 | memoryDescriptions.reserve(indices.size()); |
| 1183 | for (int idx : indices) { |
| 1184 | const auto it = m_model->memories().constFind(idx); |
| 1185 | memoryDescriptions << (it != m_model->memories().constEnd() |
| 1186 | ? describeMemory(it.value()) |
| 1187 | : QString("Memory %1").arg(idx)); |
| 1188 | } |
| 1189 | |
| 1190 | QMessageBox confirm(this); |
| 1191 | confirm.setIcon(QMessageBox::Warning); |
| 1192 | confirm.setWindowTitle(indices.size() == 1 ? "Delete Memory" : "Delete Memories"); |
| 1193 | confirm.setText(indices.size() == 1 |
| 1194 | ? QString("Delete %1?").arg(memoryDescriptions.value(0, "the selected memory")) |
| 1195 | : QString("Delete %1 selected memories?").arg(indices.size())); |
| 1196 | confirm.setInformativeText("This can't be undone."); |
| 1197 | if (memoryDescriptions.size() > 1) |
| 1198 | confirm.setDetailedText(memoryDescriptions.join('\n')); |
| 1199 | confirm.setStandardButtons(QMessageBox::Yes | QMessageBox::Cancel); |
| 1200 | confirm.setDefaultButton(QMessageBox::Cancel); |
| 1201 | if (confirm.exec() != QMessageBox::Yes) { |
| 1202 | focusTableOnCurrentRow(); |
| 1203 | return; |
| 1204 | } |
| 1205 | |
| 1206 | RadioModel* const model = m_model; |
| 1207 | const QPointer<MemoryDialog> dialogGuard(this); |
| 1208 | struct RemovalState { |
| 1209 | QList<int> indices; |
| 1210 | QStringList descriptions; |
| 1211 | int nextIndex{0}; |
| 1212 | int processedCount{0}; |
| 1213 | int failed{0}; |
| 1214 | QStringList failedDescriptions; |
| 1215 | }; |
| 1216 | const auto state = QSharedPointer<RemovalState>::create(); |
| 1217 | state->indices = indices; |
| 1218 | state->descriptions = memoryDescriptions; |
| 1219 | |
| 1220 | auto* progressDialog = new QProgressDialog( |
| 1221 | QString("Deleting 0 of %1 memories...").arg(indices.size()), |
| 1222 | QString(), 0, indices.size(), this); |
| 1223 | auto* progressBar = new QProgressBar(progressDialog); |
| 1224 | progressBar->setTextVisible(false); |
| 1225 | progressDialog->setBar(progressBar); |
| 1226 | progressDialog->setWindowTitle(indices.size() == 1 ? "Delete Memory" : "Delete Memories"); |
| 1227 | progressDialog->setWindowModality(Qt::WindowModal); |
| 1228 | progressDialog->setMinimumDuration(0); |
| 1229 | progressDialog->setAutoClose(false); |
nothing calls this directly
no test coverage detected