- // Deleted object event ***********************
- } else if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_OBJECT_DELETED)) {
- std::shared_ptr<ModelAPI_ObjectDeletedMessage> aUpdMsg =
- std::dynamic_pointer_cast<ModelAPI_ObjectDeletedMessage>(theMessage);
- DocumentPtr aDoc = aUpdMsg->document();
- std::set<std::string> aGroups = aUpdMsg->groups();
- std::set<std::string>::const_iterator aIt;
- for (aIt = aGroups.begin(); aIt != aGroups.end(); ++aIt) {
- std::string aGroup = (*aIt);
- if (aDoc == aRootDoc) { // If root objects
- int aRow = aRootDoc->size(aGroup);
- if (aGroup == aRootType) {
- // Process root folder
- removeRow(aRow + aNbFolders);
- rebuildBranch(aNbFolders, aRow);
- } else {
- // Process root sub-folder
- int aFolderId = myXMLReader.rootFolderId(aGroup);
- if (aFolderId != -1) {
- QModelIndex aFolderIndex = createIndex(aFolderId, 0, -1);
- removeRow(aRow, aFolderIndex);
- //rebuildBranch(0, aRow);
- }
- }
- // Check that some folders could erased
- QStringList aNotEmptyFolders = listOfShowNotEmptyFolders();
- foreach (QString aNotEmptyFolder, aNotEmptyFolders) {
- if ((aNotEmptyFolder.toStdString() == aGroup) && (aRootDoc->size(aGroup) == 0)) {
- // Appears first object in folder which can not be shown empty
- removeRow(myXMLReader.rootFolderId(aGroup));
- //rebuildBranch(0, aNbFolders + aDoc->size(myXMLReader.rootType()));
- break;
- }
- }
- } else {
- // Remove row for sub-document
- QModelIndex aDocRoot = findDocumentRootIndex(aDoc.get());
- if (aDocRoot.isValid()) {
- int aRow = aDoc->size(aGroup);
- int aNbSubFolders = foldersCount(aDoc.get());
- if (aGroup == aSubType) {
- // List of objects under document root
- removeRow(aRow + aNbSubFolders, aDocRoot);
- rebuildBranch(aNbSubFolders, aRow, aDocRoot);
- } else {
- // List of objects under a folder
- int aFolderId = folderId(aGroup, aDoc.get());
- if (aFolderId != -1) {
- QModelIndex aFolderRoot = createIndex(aFolderId, 0, aDoc.get());
- removeRow(aRow, aFolderRoot);
- //rebuildBranch(0, aRow, aFolderRoot);
- }
- }
- // Check that some folders could disappear
- QStringList aNotEmptyFolders = listOfShowNotEmptyFolders(false);
- int aSize = aDoc->size(aGroup);
- foreach (QString aNotEmptyFolder, aNotEmptyFolders) {
- if ((aNotEmptyFolder.toStdString() == aGroup) && (aSize == 0)) {
- // Appears first object in folder which can not be shown empty
- removeRow(myXMLReader.subFolderId(aGroup), aDocRoot);
- //rebuildBranch(0, aNbSubFolders + aDoc->size(myXMLReader.subType()), aDocRoot);