+
+ // Deteted object event ***********************
+ } else if (QString(theMessage->eventID().eventText()) == EVENT_FEATURE_DELETED) {
+ const Model_FeatureDeletedMessage* aUpdMsg = dynamic_cast<const Model_FeatureDeletedMessage*>(theMessage);
+ boost::shared_ptr<ModelAPI_Document> aDoc = aUpdMsg->document();
+
+ if (aDoc == myDocument) { // If root objects
+ if (aUpdMsg->group().compare(PARTS_GROUP) == 0) { // Updsate only Parts group
+ int aStart = myModel->rowCount(QModelIndex()) + myPartModels.size() - 1;
+ beginRemoveRows(QModelIndex(), aStart, aStart);
+ removeSubModel(myPartModels.size() - 1);
+ endRemoveRows();
+ } else { // Update top groups (other except parts
+ QModelIndex aIndex = myModel->findGroup(aUpdMsg->group());
+ int aStart = myModel->rowCount(aIndex);
+ aIndex = createIndex(aIndex.row(), aIndex.column(), (void*)getModelIndex(aIndex));
+ beginRemoveRows(aIndex, aStart, aStart);
+ endRemoveRows();
+ }
+ } else {
+ XGUI_PartModel* aPartModel = 0;
+ QList<XGUI_PartModel*>::const_iterator aIt;
+ for (aIt = myPartModels.constBegin(); aIt != myPartModels.constEnd(); ++aIt) {
+ if ((*aIt)->hasDocument(aDoc)) {
+ aPartModel = (*aIt);
+ break;
+ }
+ }
+ if (aPartModel) {
+ QModelIndex aIndex = aPartModel->findGroup(aUpdMsg->group());
+ int aStart = aPartModel->rowCount(aIndex);
+ aIndex = createIndex(aIndex.row(), aIndex.column(), (void*)getModelIndex(aIndex));
+ beginRemoveRows(aIndex, aStart, aStart);
+ endRemoveRows();
+ }
+ }
+
+ // Reset whole tree **************************
+ } else {
+ beginResetModel();
+ int aNbParts = myDocument->featuresIterator(PARTS_GROUP)->numIterationsLeft();
+ if (myPartModels.size() != aNbParts) { // resize internal models
+ while (myPartModels.size() > aNbParts) {
+ delete myPartModels.last();
+ myPartModels.removeLast();
+ }
+ while (myPartModels.size() < aNbParts) {
+ myPartModels.append(new XGUI_PartDataModel(myDocument, this));
+ }
+ for (int i = 0; i < myPartModels.size(); i++)
+ myPartModels.at(i)->setPartId(i);