void Qtilities::CoreGui::ObjectScopeWidget::handle_actionDetachToSelection_triggered() { // Get the ids of all unselected items QList<int> other_ids; int selected_id = ui->observerTable->currentItem()->type(); for (int i = 0; i < ui->observerTable->rowCount(); i++) { if (selected_id != ui->observerTable->item(i,0)->type()) other_ids << ui->observerTable->item(i,0)->type(); } QStringList unsupported_items; for (int i = 0; i < other_ids.count(); i++) { Observer* observer = OBJECT_MANAGER->observerReference(other_ids.at(i)); if (!observer) break; if (observer->displayHints()) { if (!(observer->displayHints()->actionHints() & ObserverHints::ActionRemoveItem)) { unsupported_items << observer->observerName(); } } else { unsupported_items << observer->observerName(); } } if (unsupported_items.count() > 0) { QMessageBox msgBox; msgBox.setText(tr("All other contexts does not support removing of child items.")); msgBox.setInformativeText(tr("Do you want to continue and remove the contexts which does support this?")); msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); msgBox.setDefaultButton(QMessageBox::Yes); int ret = msgBox.exec(); switch (ret) { case QMessageBox::No: return; default: break; } } for (int i = 0; i < other_ids.count(); i++) { Observer* observer = OBJECT_MANAGER->observerReference(other_ids.at(i)); if (!observer) break; if (observer->displayHints()) { if (observer->displayHints()->actionHints() & ObserverHints::ActionRemoveItem) { observer->detachSubject(d->obj); } } } }
void Qtilities::CoreGui::ObjectScopeWidget::handle_actionRemoveContext_triggered() { // Get the current selected observer int id = ui->observerTable->currentItem()->type(); Observer* observer = OBJECT_MANAGER->observerReference(id); if (!observer) return; if (observer->displayHints()) { // Check if a detach operation is supported by this observer. if (observer->displayHints()->actionHints() & ObserverHints::ActionRemoveItem) observer->detachSubject(d->obj); else { QMessageBox msgBox; msgBox.setText(tr("The selected context does not support removing of child items. The operation cannot continue.")); msgBox.exec(); } } }