X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_DataModel.cpp;h=157c9ed767b82bc8c474735eb6ffee0572928f1d;hb=64fc7e4fdd63997ec7a502b233ef5f88186d5bbb;hp=31f8f893f71d10969f9ac093740d7fe0835e03b4;hpb=c542d822556a4a63e528e5c64f04f0c7d93558a5;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_DataModel.cpp b/src/XGUI/XGUI_DataModel.cpp index 31f8f893f..157c9ed76 100644 --- a/src/XGUI/XGUI_DataModel.cpp +++ b/src/XGUI/XGUI_DataModel.cpp @@ -26,7 +26,8 @@ #include #include -#define ACTIVE_COLOR QColor(0,72,140) +#define ACTIVE_COLOR Qt::black +//#define ACTIVE_COLOR QColor(0,72,140) //#define PASSIVE_COLOR Qt::black /// Returns ResultPart object if the given object is a Part feature @@ -64,6 +65,7 @@ XGUI_DataModel::XGUI_DataModel(QObject* theParent) : ModuleBase_IDocumentDataMod Events_Loop* aLoop = Events_Loop::loop(); aLoop->registerListener(this, Events_Loop::eventByName(EVENT_OBJECT_CREATED)); aLoop->registerListener(this, Events_Loop::eventByName(EVENT_OBJECT_DELETED)); + aLoop->registerListener(this, Events_Loop::eventByName(EVENT_OBJECT_UPDATED)); aLoop->registerListener(this, Events_Loop::eventByName(EVENT_ORDER_UPDATED)); aLoop->registerListener(this, Events_Loop::eventByName(EVENT_DOCUMENT_CHANGED)); } @@ -206,7 +208,7 @@ void XGUI_DataModel::processEvent(const std::shared_ptr& theMess #endif } } - } else if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_ORDER_UPDATED)) { + } else if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_OBJECT_UPDATED)) { std::shared_ptr aUpdMsg = std::dynamic_pointer_cast(theMessage); std::set aObjects = aUpdMsg->objects(); @@ -215,16 +217,38 @@ void XGUI_DataModel::processEvent(const std::shared_ptr& theMess std::string aObjType; for (aIt = aObjects.begin(); aIt != aObjects.end(); ++aIt) { ObjectPtr aObject = (*aIt); - // We do not show objects which not has to be shown in object browser - if (!aObject->isInHistory()) - continue; QModelIndex aIndex = objectIndex(aObject); - QModelIndex aParent = parent(aIndex); - int aChildNb = rowCount(aParent); - QModelIndex aStartIndex = index(0, 0, aParent); - QModelIndex aEndIndex = index(aChildNb - 1, 0, aParent); - emit dataChanged(aStartIndex, aEndIndex); + if (aIndex.isValid()) + emit dataChanged(aIndex, aIndex); + } + } else if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_ORDER_UPDATED)) { + std::shared_ptr aUpdMsg = + std::dynamic_pointer_cast(theMessage); + DocumentPtr aDoc = aUpdMsg->document(); + std::string aGroup = aUpdMsg->group(); + + QModelIndex aParent; + int aSartId = 0; + if (aDoc == aRootDoc) { + // Update a group under root + if (aGroup == myXMLReader.rootType()) // Update objects under root + aSartId = foldersCount(); + else // Update objects in folder under root + aParent = createIndex(folderId(aGroup), 0, -1); + } else { + // Update a sub-document + if (aGroup == myXMLReader.subType()) { + // Update sub-document root + aParent = findDocumentRootIndex(aDoc.get()); + aSartId = foldersCount(aDoc.get()); + } else + // update folder in sub-document + aParent = createIndex(folderId(aGroup, aDoc.get()), 0, aDoc.get()); } + int aChildNb = rowCount(aParent); + // Rebuild all indexes + removeRows(aSartId, aChildNb - aSartId, aParent); + insertRows(aSartId, aChildNb - aSartId, aParent); } else if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_DOCUMENT_CHANGED)) { DocumentPtr aDoc = ModelAPI_Session::get()->activeDocument(); if (aDoc != aRootDoc) { @@ -373,15 +397,15 @@ QVariant XGUI_DataModel::data(const QModelIndex& theIndex, int theRole) const QString aTitle = QString(aObj->data()->name().c_str()); return aTitle + " = " + aVal; } - QString aPrefix; + QString aSuffix; if (aObj->groupName() == myXMLReader.subType()) { ResultPartPtr aPartRes = getPartResult(aObj); if (aPartRes.get()) { if (aPartRes->partDoc().get() == NULL) - aPrefix = "Not loaded "; + aSuffix = " (Not loaded)"; } } - return aPrefix + aObj->data()->name().c_str(); + return aObj->data()->name().c_str() + aSuffix; } case Qt::DecorationRole: return ModuleBase_IconFactory::get()->getIcon(object(theIndex));