#include <QIcon>
#include <QBrush>
-#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
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));
}
}
// Insert new object
int aRow = aRootDoc->size(aObjType) - 1;
- if (aObjType == aRootType) {
- insertRow(aRow + aNbFolders + 1);
- } else {
- int aFolderId = myXMLReader.rootFolderId(aObjType);
- if (aFolderId != -1) {
- insertRow(aRow, createIndex(aFolderId, 0, -1));
- }
- }
+ if (aRow != -1) {
+ if (aObjType == aRootType) {
+ insertRow(aRow + aNbFolders + 1);
+ } else {
+ int aFolderId = myXMLReader.rootFolderId(aObjType);
+ if (aFolderId != -1) {
+ insertRow(aRow, createIndex(aFolderId, 0, -1));
+ }
+ }
+ }
} else {
// Object created in sub-document
QModelIndex aDocRoot = findDocumentRootIndex(aDoc.get());
// Appears first object in folder which can not be shown empty
insertRow(myXMLReader.subFolderId(aObjType), aDocRoot);
}
- int aRow = aDoc->size(aObjType) - 1;
- int aNbSubFolders = foldersCount(aDoc.get());
- if (aObjType == aSubType) {
- // List of objects under document root
- insertRow(aRow + aNbSubFolders, aDocRoot);
- } else {
- // List of objects under a folder
- if (aRow != -1) {
- int aFolderId = myXMLReader.subFolderId(aObjType);
- if (aFolderId != -1) {
- insertRow(aRow, createIndex(aFolderId, 0, aDoc.get()));
+ int aRow = aDoc->index(aObject);
+ if (aRow != -1) {
+ int aNbSubFolders = foldersCount(aDoc.get());
+ if (aObjType == aSubType) {
+ // List of objects under document root
+ insertRow(aRow + aNbSubFolders, aDocRoot);
+ } else {
+ // List of objects under a folder
+ if (aRow != -1) {
+ int aFolderId = folderId(aObjType, aDoc.get());
+ if (aFolderId != -1) {
+ QModelIndex aParentFolder = createIndex(aFolderId, 0, aDoc.get());
+ insertRow(aRow, aParentFolder);
+ emit dataChanged(aParentFolder, aParentFolder);
+ }
}
}
}
removeRow(aRow + aNbSubFolders, aDocRoot);
} else {
// List of objects under a folder
- int aFolderId = myXMLReader.subFolderId(aGroup);
+ int aFolderId = folderId(aGroup, aDoc.get());
if (aFolderId != -1) {
removeRow(aRow, createIndex(aFolderId, 0, aDoc.get()));
}
}
// Check that some folders could disappear
QStringList aNotEmptyFolders = listOfShowNotEmptyFolders(false);
+ int aSize = aDoc->size(aGroup);
foreach (QString aNotEmptyFolder, aNotEmptyFolders) {
- if ((aNotEmptyFolder.toStdString() == aGroup) && (aDoc->size(aGroup) == 1))
+ if ((aNotEmptyFolder.toStdString() == aGroup) && (aSize == 0))
// Appears first object in folder which can not be shown empty
removeRow(myXMLReader.subFolderId(aGroup), aDocRoot);
}
#endif
}
}
+ } else if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_OBJECT_UPDATED)) {
+ std::shared_ptr<ModelAPI_ObjectUpdatedMessage> aUpdMsg =
+ std::dynamic_pointer_cast<ModelAPI_ObjectUpdatedMessage>(theMessage);
+ std::set<ObjectPtr> aObjects = aUpdMsg->objects();
+
+ std::set<ObjectPtr>::const_iterator aIt;
+ std::string aObjType;
+ for (aIt = aObjects.begin(); aIt != aObjects.end(); ++aIt) {
+ ObjectPtr aObject = (*aIt);
+ QModelIndex aIndex = objectIndex(aObject);
+ if (aIndex.isValid())
+ emit dataChanged(aIndex, aIndex);
+ }
+ } else if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_ORDER_UPDATED)) {
+ std::shared_ptr<ModelAPI_OrderUpdatedMessage> aUpdMsg =
+ std::dynamic_pointer_cast<ModelAPI_OrderUpdatedMessage>(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) {
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));
ModelAPI_Document* aDoc = getSubDocument(theParent.internalPointer());
if (aDoc) {
// It is a folder of sub-document
- std::string aType = myXMLReader.subFolderType(aParentPos);
+ int aParentRow = aParentPos;
+ QIntList aMissedIdx = missedFolderIndexes(aDoc);
+ while (aMissedIdx.contains(aParentRow))
+ aParentRow++;
+ std::string aType = myXMLReader.subFolderType(aParentRow);
if (theRow < aDoc->size(aType)) {
ObjectPtr aObj = aDoc->object(aType, theRow);
aIndex = objectIndex(aObj);
else
return createIndex(foldersCount(aCurDoc.get()) - 1, 1, aCurDoc.get());
}
-}
\ No newline at end of file
+}
+
+//******************************************************
+int XGUI_DataModel::folderId(std::string theType, ModelAPI_Document* theDoc)
+{
+ SessionPtr aSession = ModelAPI_Session::get();
+ ModelAPI_Document* aDoc = theDoc;
+ if (aDoc == 0)
+ aDoc = aSession->moduleDocument().get();
+
+ bool aUseSubDoc = (aDoc != aSession->moduleDocument().get());
+
+ int aRes = -1;
+ if (aUseSubDoc) {
+ int aId = myXMLReader.subFolderId(theType);
+ aRes = aId;
+ for (int i = 0; i < aId; i++) {
+ if (!myXMLReader.subShowEmpty(i)) {
+ if (aDoc->size(myXMLReader.subFolderType(i)) == 0)
+ aRes--;
+ }
+ }
+ } else {
+ int aId = myXMLReader.rootFolderId(theType);
+ aRes = aId;
+ for (int i = 0; i < aId; i++) {
+ if (!myXMLReader.rootShowEmpty(i)) {
+ if (aDoc->size(myXMLReader.rootFolderType(i)) == 0)
+ aRes--;
+ }
+ }
+ }
+ return aRes;
+}