X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModuleBase%2FModuleBase_WidgetMultiSelector.cpp;h=00b13340261664da441ec695877efc0d5a66cfe2;hb=29dfb8a802f61cacf5f57fb79c62badee00ebcdf;hp=09071536151acd0d81ed841f1faac1229287fc22;hpb=cc44f965f1cf88739b70bf73f33e877e72e11628;p=modules%2Fshaper.git diff --git a/src/ModuleBase/ModuleBase_WidgetMultiSelector.cpp b/src/ModuleBase/ModuleBase_WidgetMultiSelector.cpp index 090715361..00b133402 100755 --- a/src/ModuleBase/ModuleBase_WidgetMultiSelector.cpp +++ b/src/ModuleBase/ModuleBase_WidgetMultiSelector.cpp @@ -160,6 +160,23 @@ ModuleBase_WidgetMultiSelector::~ModuleBase_WidgetMultiSelector() { } +//******************************************************************** +void ModuleBase_WidgetMultiSelector::activateCustom() +{ + ModuleBase_WidgetSelector::activateCustom(); + + myWorkshop->module()->activateCustomPrs(myFeature, + ModuleBase_IModule::CustomizeHighlightedObjects, true); +} + +//******************************************************************** +void ModuleBase_WidgetMultiSelector::deactivate() +{ + ModuleBase_WidgetSelector::deactivate(); + + myWorkshop->module()->deactivateCustomPrs(ModuleBase_IModule::CustomizeHighlightedObjects, true); +} + //******************************************************************** bool ModuleBase_WidgetMultiSelector::storeValueCustom() const { @@ -168,11 +185,14 @@ bool ModuleBase_WidgetMultiSelector::storeValueCustom() const if (!myFeature) return false; - AttributeSelectionListPtr aSelectionListAttr = myFeature->data()->selectionList(attributeID()); - if (aSelectionListAttr.get()) { - aSelectionListAttr->setSelectionType(myTypeCombo->currentText().toStdString()); - } - return true; + AttributePtr anAttribute = myFeature->data()->attribute(attributeID()); + std::string aType = anAttribute->attributeType(); + if (aType == ModelAPI_AttributeSelectionList::typeId()) { + AttributeSelectionListPtr aSelectionListAttr = + std::dynamic_pointer_cast(anAttribute); + aSelectionListAttr->setSelectionType(myTypeCombo->currentText().toStdString()); + } + return true; } //******************************************************************** @@ -182,11 +202,13 @@ bool ModuleBase_WidgetMultiSelector::restoreValueCustom() if (!myFeature) return false; - AttributeSelectionListPtr aSelectionListAttr = myFeature->data()->selectionList(attributeID()); - if (aSelectionListAttr.get()) { + AttributePtr anAttribute = myFeature->data()->attribute(attributeID()); + std::string aType = anAttribute->attributeType(); + if (aType == ModelAPI_AttributeSelectionList::typeId()) { + AttributeSelectionListPtr aSelectionListAttr = + std::dynamic_pointer_cast(anAttribute); // Restore shape type - if (!aSelectionListAttr->selectionType().empty()) - setCurrentShapeType(ModuleBase_Tools::shapeType(aSelectionListAttr->selectionType().c_str())); + setCurrentShapeType(ModuleBase_Tools::shapeType(aSelectionListAttr->selectionType().c_str())); } updateSelectionList(); return true; @@ -197,13 +219,17 @@ void ModuleBase_WidgetMultiSelector::storeAttributeValue() { ModuleBase_WidgetValidated::storeAttributeValue(); - AttributeSelectionListPtr aSelectionListAttr = myFeature->data()->selectionList(attributeID()); - if (aSelectionListAttr.get()) { + AttributePtr anAttribute = myFeature->data()->attribute(attributeID()); + std::string aType = anAttribute->attributeType(); + if (aType == ModelAPI_AttributeSelectionList::typeId()) { + AttributeSelectionListPtr aSelectionListAttr = + std::dynamic_pointer_cast(anAttribute); mySelectionType = aSelectionListAttr->selectionType(); mySelectionCount = aSelectionListAttr->size(); } - else { - AttributeRefListPtr aRefListAttr = myFeature->data()->reflist(attributeID()); + else if (aType == ModelAPI_AttributeRefList::typeId()) { + AttributeRefListPtr aRefListAttr = + std::dynamic_pointer_cast(anAttribute); mySelectionCount = aRefListAttr->size(); } } @@ -213,9 +239,11 @@ void ModuleBase_WidgetMultiSelector::restoreAttributeValue(bool theValid) { ModuleBase_WidgetValidated::restoreAttributeValue(theValid); - // Store shape type - AttributeSelectionListPtr aSelectionListAttr = myFeature->data()->selectionList(attributeID()); - if (aSelectionListAttr.get()) { + AttributePtr anAttribute = myFeature->data()->attribute(attributeID()); + std::string aType = anAttribute->attributeType(); + if (aType == ModelAPI_AttributeSelectionList::typeId()) { + AttributeSelectionListPtr aSelectionListAttr = + std::dynamic_pointer_cast(anAttribute); aSelectionListAttr->setSelectionType(mySelectionType); // restore selection in the attribute. Indeed there is only one stored object @@ -223,8 +251,9 @@ void ModuleBase_WidgetMultiSelector::restoreAttributeValue(bool theValid) for (int i = 0; i < aCountAppened; i++) aSelectionListAttr->removeLast(); } - else { - AttributeRefListPtr aRefListAttr = myFeature->data()->reflist(attributeID()); + else if (aType == ModelAPI_AttributeRefList::typeId()) { + AttributeRefListPtr aRefListAttr = + std::dynamic_pointer_cast(anAttribute); // restore objects in the attribute. Indeed there is only one stored object int aCountAppened = aRefListAttr->size() - mySelectionCount; for (int i = 0; i < aCountAppened; i++) @@ -235,11 +264,16 @@ void ModuleBase_WidgetMultiSelector::restoreAttributeValue(bool theValid) //******************************************************************** void ModuleBase_WidgetMultiSelector::clearAttribute() { - AttributeSelectionListPtr aSelectionListAttr = myFeature->data()->selectionList(attributeID()); - if (aSelectionListAttr.get()) + AttributePtr anAttribute = myFeature->data()->attribute(attributeID()); + std::string aType = anAttribute->attributeType(); + if (aType == ModelAPI_AttributeSelectionList::typeId()) { + AttributeSelectionListPtr aSelectionListAttr = + std::dynamic_pointer_cast(anAttribute); aSelectionListAttr->clear(); - else { - AttributeRefListPtr aRefListAttr = myFeature->data()->reflist(attributeID()); + } + else if (aType == ModelAPI_AttributeRefList::typeId()) { + AttributeRefListPtr aRefListAttr = + std::dynamic_pointer_cast(anAttribute); aRefListAttr->clear(); } } @@ -248,13 +282,17 @@ void ModuleBase_WidgetMultiSelector::clearAttribute() void ModuleBase_WidgetMultiSelector::setObject(ObjectPtr theSelectedObject, GeomShapePtr theShape) { - AttributeSelectionListPtr aSelectionListAttr = myFeature->data()->selectionList(attributeID()); - if (aSelectionListAttr.get()) { + AttributePtr anAttribute = myFeature->data()->attribute(attributeID()); + std::string aType = anAttribute->attributeType(); + if (aType == ModelAPI_AttributeSelectionList::typeId()) { + AttributeSelectionListPtr aSelectionListAttr = + std::dynamic_pointer_cast(anAttribute); ResultPtr aResult = std::dynamic_pointer_cast(theSelectedObject); aSelectionListAttr->append(aResult, theShape, myIsInValidate); } - else { - AttributeRefListPtr aRefListAttr = myFeature->data()->reflist(attributeID()); + else if (aType == ModelAPI_AttributeRefList::typeId()) { + AttributeRefListPtr aRefListAttr = + std::dynamic_pointer_cast(anAttribute); aRefListAttr->append(theSelectedObject); } } @@ -337,17 +375,20 @@ bool ModuleBase_WidgetMultiSelector::processDelete() // refill attribute by the items which indices are not in the list of ids bool aDone = false; - AttributeSelectionListPtr aSelectionListAttr = myFeature->data()->selectionList(attributeID()); - if (aSelectionListAttr.get()) { + AttributePtr anAttribute = myFeature->data()->attribute(attributeID()); + std::string aType = anAttribute->attributeType(); + if (aType == ModelAPI_AttributeSelectionList::typeId()) { + AttributeSelectionListPtr aSelectionListAttr = + std::dynamic_pointer_cast(anAttribute); aDone = !anAttributeIds.empty(); aSelectionListAttr->remove(anAttributeIds); + } - else { - AttributeRefListPtr aRefListAttr = myFeature->data()->reflist(attributeID()); - if (aRefListAttr.get()) { + else if (aType == ModelAPI_AttributeRefList::typeId()) { + AttributeRefListPtr aRefListAttr = + std::dynamic_pointer_cast(anAttribute); aDone = !anAttributeIds.empty(); aRefListAttr->remove(anAttributeIds); - } } if (aDone) { // update object is necessary to flush update signal. It leads to objects references map update @@ -357,7 +398,6 @@ bool ModuleBase_WidgetMultiSelector::processDelete() restoreValue(); myWorkshop->setSelected(getAttributeSelection()); - myWorkshop->module()->customizeObject(myFeature, ModuleBase_IModule::CustomizeAllObjects, true); } return aDone; } @@ -447,8 +487,11 @@ void ModuleBase_WidgetMultiSelector::updateSelectionList() { myListControl->clear(); - AttributeSelectionListPtr aSelectionListAttr = myFeature->data()->selectionList(attributeID()); - if (aSelectionListAttr.get()) { + AttributePtr anAttribute = myFeature->data()->attribute(attributeID()); + std::string aType = anAttribute->attributeType(); + if (aType == ModelAPI_AttributeSelectionList::typeId()) { + AttributeSelectionListPtr aSelectionListAttr = + std::dynamic_pointer_cast(anAttribute); for (int i = 0; i < aSelectionListAttr->size(); i++) { AttributeSelectionPtr aAttr = aSelectionListAttr->value(i); QListWidgetItem* anItem = new QListWidgetItem(aAttr->namingName().c_str(), myListControl); @@ -456,8 +499,9 @@ void ModuleBase_WidgetMultiSelector::updateSelectionList() myListControl->addItem(anItem); } } - else { - AttributeRefListPtr aRefListAttr = myFeature->data()->reflist(attributeID()); + else if (aType == ModelAPI_AttributeRefList::typeId()) { + AttributeRefListPtr aRefListAttr = + std::dynamic_pointer_cast(anAttribute); for (int i = 0; i < aRefListAttr->size(); i++) { ObjectPtr anObject = aRefListAttr->object(i); if (anObject.get()) { @@ -468,6 +512,7 @@ void ModuleBase_WidgetMultiSelector::updateSelectionList() } } } + // We have to call repaint because sometimes the List control is not updated myListControl->repaint(); } @@ -538,8 +583,12 @@ void ModuleBase_WidgetMultiSelector::convertIndicesToViewerSelection(std::setdata()->selectionList(attributeID()); - if (aSelectionListAttr.get()) { + + AttributePtr anAttribute = myFeature->data()->attribute(attributeID()); + std::string aType = anAttribute->attributeType(); + if (aType == ModelAPI_AttributeSelectionList::typeId()) { + AttributeSelectionListPtr aSelectionListAttr = + std::dynamic_pointer_cast(anAttribute); for (int i = 0; i < aSelectionListAttr->size(); i++) { // filter by attribute indices only if the container is not empty otherwise return all items if (!theAttributeIds.empty() && theAttributeIds.find(i) == theAttributeIds.end()) @@ -556,17 +605,16 @@ void ModuleBase_WidgetMultiSelector::convertIndicesToViewerSelection(std::setdata()->reflist(attributeID()); - if (aRefListAttr.get()) { - for (int i = 0; i < aRefListAttr->size(); i++) { - // filter by attribute indices only if the container is not empty otherwise return all items - if (!theAttributeIds.empty() && theAttributeIds.find(i) == theAttributeIds.end()) - continue; - ObjectPtr anObject = aRefListAttr->object(i); - if (anObject.get()) { - theValues.append(ModuleBase_ViewerPrs(anObject, TopoDS_Shape(), NULL)); - } + else if (aType == ModelAPI_AttributeRefList::typeId()) { + AttributeRefListPtr aRefListAttr = + std::dynamic_pointer_cast(anAttribute); + for (int i = 0; i < aRefListAttr->size(); i++) { + // filter by attribute indices only if the container is not empty otherwise return all items + if (!theAttributeIds.empty() && theAttributeIds.find(i) == theAttributeIds.end()) + continue; + ObjectPtr anObject = aRefListAttr->object(i); + if (anObject.get()) { + theValues.append(ModuleBase_ViewerPrs(anObject, TopoDS_Shape(), NULL)); } } }