X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FPartSet%2FPartSet_TreeNodes.cpp;h=9164dbc3d81243ade98c2d47655c1bfd96c89f1c;hb=64bd95cebe79a5639800635efb7b0d21f13c079c;hp=b49acbb10ec811917d19510e29b8c50fdb1684ba;hpb=4c74e5b864eef28128e27b3ece944990ca8f3fbe;p=modules%2Fshaper.git diff --git a/src/PartSet/PartSet_TreeNodes.cpp b/src/PartSet/PartSet_TreeNodes.cpp index b49acbb10..9164dbc3d 100644 --- a/src/PartSet/PartSet_TreeNodes.cpp +++ b/src/PartSet/PartSet_TreeNodes.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2019 CEA/DEN, EDF R&D +// Copyright (C) 2014-2022 CEA/DEN, EDF R&D // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -40,6 +40,8 @@ #include #include +#include + #include #include @@ -85,11 +87,16 @@ QVariant PartSet_TreeNode::data(int theColumn, int theRole) const return QBrush(DISABLED_COLOR); if (!aFlags.testFlag(Qt::ItemIsEditable)) return QBrush(SELECTABLE_COLOR); - return ACTIVE_COLOR; + return activeItemColor(); } return ModuleBase_ITreeNode::data(theColumn, theRole); } +QColor PartSet_TreeNode::activeItemColor() const +{ + return ACTIVE_COLOR; +} + ////////////////////////////////////////////////////////////////////////////////// QVariant PartSet_ObjectNode::data(int theColumn, int theRole) const @@ -102,10 +109,10 @@ QVariant PartSet_ObjectNode::data(int theColumn, int theRole) const AttributeDoublePtr aValueAttribute = aParam->data()->real(ModelAPI_ResultParameter::VALUE()); QString aVal = QString::number(aValueAttribute->value()); - QString aTitle = QString(myObject->data()->name().c_str()); + QString aTitle = QString::fromStdWString(myObject->data()->name()); return aTitle + " = " + aVal; } - return myObject->data()->name().c_str(); + return QString::fromStdWString(myObject->data()->name()); } break; case Qt::DecorationRole: @@ -133,6 +140,17 @@ QVariant PartSet_ObjectNode::data(int theColumn, int theRole) const return PartSet_TreeNode::data(theColumn, theRole); } +QColor PartSet_ObjectNode::activeItemColor() const +{ + if (myObject.get() && myObject->groupName() == ModelAPI_Feature::group()) { + std::vector aColor = + Config_PropManager::color("Visualization", "feature_objectbrowser_color"); + return QColor(aColor[0], aColor[1], aColor[2]); + } + return PartSet_TreeNode::activeItemColor(); +} + + Qt::ItemFlags PartSet_ObjectNode::flags(int theColumn) const { if (myObject->isDisabled()) { @@ -140,6 +158,17 @@ Qt::ItemFlags PartSet_ObjectNode::flags(int theColumn) const } else { DocumentPtr aDoc = myObject->document(); SessionPtr aSession = ModelAPI_Session::get(); + + FeaturePtr aFeature = std::dynamic_pointer_cast(myObject); + if (aFeature.get() && aFeature->getKind() == "Group") + { + std::shared_ptr anOwner = + ModelAPI_Tools::compositeOwner (aFeature); + + if (anOwner.get() && anOwner->getKind() == "ImportResult") + return aDefaultFlag; + } + if (aSession->activeDocument() == aDoc) return aEditingFlag; } @@ -232,6 +261,9 @@ void PartSet_ObjectNode::update() // If the object is a field result then delete extra sub-objects if (aFieldRes.get()) { + // Call shape in order to update content of Field. + // It is necessary to do for cases when field was created by script when module is inactive. + aFieldRes->shape(); while (myChildren.size() > aNb) { ModuleBase_ITreeNode* aNode = myChildren.last(); myChildren.removeAll(aNode); @@ -274,15 +306,17 @@ void PartSet_ObjectNode::update() } else if (aFieldRes.get()) { FieldStepPtr aStep = aFieldRes->step(i); - if (i < myChildren.size()) { - PartSet_StepNode* aStepNode = static_cast(myChildren.at(i)); - if (aStepNode->object() != aStep) { - aStepNode->setObject(aStep); + if (aStep.get()) { + if (i < myChildren.size()) { + PartSet_StepNode* aStepNode = static_cast(myChildren.at(i)); + if (aStepNode->object() != aStep) { + aStepNode->setObject(aStep); + } + } + else { + aNode = new PartSet_StepNode(aStep, this); + myChildren.append(aNode); } - } - else { - aNode = new PartSet_StepNode(aStep, this); - myChildren.append(aNode); } } } @@ -291,8 +325,8 @@ void PartSet_ObjectNode::update() aNode = myChildren.takeLast(); delete aNode; } - foreach(ModuleBase_ITreeNode* aNode, myChildren) { - aNode->update(); + foreach(ModuleBase_ITreeNode* aChildNode, myChildren) { + aChildNode->update(); } } else { @@ -309,6 +343,10 @@ QTreeNodesList PartSet_ObjectNode::objectCreated(const QObjectPtrList& theObject ResultFieldPtr aFieldRes = std::dynamic_pointer_cast(myObject); ObjectPtr aBody; int i; + // Call shape in order to update content of Field. + // It is necessary to do for cases when field was created by script when module is inactive. + if (aFieldRes.get()) + aFieldRes->shape(); for (i = 0; i < aNb; i++) { aBody = subObject(i); if (aBody.get()) { @@ -328,20 +366,22 @@ QTreeNodesList PartSet_ObjectNode::objectCreated(const QObjectPtrList& theObject } else { FieldStepPtr aStep = aFieldRes->step(i); - if (i < myChildren.size()) { - PartSet_StepNode* aStepNode = static_cast(myChildren.at(i)); - if (aStepNode->object() != aStep) { - aStepNode->setObject(aStep); + if (aStep.get()) { + if (i < myChildren.size()) { + PartSet_StepNode* aStepNode = static_cast(myChildren.at(i)); + if (aStepNode->object() != aStep) { + aStepNode->setObject(aStep); + } + } + else { + aNode = new PartSet_StepNode(aStep, this); + myChildren.append(aNode); } - } - else { - aNode = new PartSet_StepNode(aStep, this); - myChildren.append(aNode); } } } - foreach(ModuleBase_ITreeNode* aNode, myChildren) { - aResult.append(aNode->objectCreated(theObjects)); + foreach(ModuleBase_ITreeNode* aChildNode, myChildren) { + aResult.append(aChildNode->objectCreated(theObjects)); } } return aResult; @@ -378,10 +418,10 @@ QTreeNodesList PartSet_ObjectNode::objectsDeleted( aResult.append(this); int i = 0; ObjectPtr aBody; - foreach(ModuleBase_ITreeNode* aNode, myChildren) { + foreach(ModuleBase_ITreeNode* aChildNode, myChildren) { aBody = subObject(i); - ((PartSet_ObjectNode*)aNode)->setObject(aBody); - aResult.append(aNode->objectsDeleted(theDoc, theGroup)); + ((PartSet_ObjectNode*)aChildNode)->setObject(aBody); + aResult.append(aChildNode->objectsDeleted(theDoc, theGroup)); i++; } } @@ -954,9 +994,9 @@ QVariant PartSet_PartRootNode::data(int theColumn, int theRole) const ResultPartPtr aPartRes = getPartResult(myObject); if (aPartRes.get()) { if (aPartRes->partDoc().get() == NULL) - return QString(myObject->data()->name().c_str()) + " (Not loaded)"; + return QString::fromStdWString(myObject->data()->name()) + " (Not loaded)"; } - return QString(myObject->data()->name().c_str()); + return QString::fromStdWString(myObject->data()->name()); } case Qt::DecorationRole: return ModuleBase_IconFactory::get()->getIcon(myObject); @@ -1072,7 +1112,7 @@ void PartSet_ObjectFolderNode::update() int aNbOfFeatures = aDoc->size(ModelAPI_Feature::group(), true); while (aId < myChildren.size()) { ModuleBase_ITreeNode* aNode = myChildren.at(aId); - if ((aFirst + aId) < aNbOfFeatures) { + if ((aId < aNbItems) && ((aFirst + aId) < aNbOfFeatures)) { if (aNode->object() != aDoc->object(ModelAPI_Feature::group(), aFirst + aId)) { myChildren.removeAll(aNode); delete aNode; @@ -1108,7 +1148,7 @@ void PartSet_ObjectFolderNode::update() } } -QTreeNodesList PartSet_ObjectFolderNode::objectCreated(const QObjectPtrList& theObjects) +QTreeNodesList PartSet_ObjectFolderNode::objectCreated(const QObjectPtrList& /*theObjects*/) { QTreeNodesList aResult; int aFirst = -1, aLast = -1; @@ -1142,8 +1182,8 @@ QTreeNodesList PartSet_ObjectFolderNode::objectCreated(const QObjectPtrList& the return aResult; } -QTreeNodesList PartSet_ObjectFolderNode::objectsDeleted(const DocumentPtr& theDoc, - const QString& theGroup) +QTreeNodesList PartSet_ObjectFolderNode::objectsDeleted(const DocumentPtr& /*theDoc*/, + const QString& /*theGroup*/) { QTreeNodesList aResult; int aFirst = -1, aLast = -1; @@ -1188,7 +1228,18 @@ QTreeNodesList PartSet_ObjectFolderNode::objectsDeleted(const DocumentPtr& theDo return aResult; } +QVariant PartSet_ObjectFolderNode::data(int theColumn, int theRole) const +{ + if (theRole == Qt::ForegroundRole) { + if (!myObject->isDisabled()) { + std::vector aColor = + Config_PropManager::color("Visualization", "feature_objectbrowser_color"); + return QColor(aColor[0], aColor[1], aColor[2]); + } + } + return PartSet_ObjectNode::data(theColumn, theRole); +} ////////////////////////////////////////////////////////////////////////////////// QVariant PartSet_StepNode::data(int theColumn, int theRole) const