X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModuleBase%2FModuleBase_WidgetMultiSelector.cpp;h=bb5c6e39d12f0685a8eb7ceb21111894a2adc773;hb=d26c54b7c445dc307ec0b9495c45d3c7671df985;hp=33f14a17ec64014ab79ecf2543b408320d7690da;hpb=9e7c2106b3a1a502db995e8cde557a31759eac42;p=modules%2Fshaper.git diff --git a/src/ModuleBase/ModuleBase_WidgetMultiSelector.cpp b/src/ModuleBase/ModuleBase_WidgetMultiSelector.cpp index 33f14a17e..bb5c6e39d 100644 --- a/src/ModuleBase/ModuleBase_WidgetMultiSelector.cpp +++ b/src/ModuleBase/ModuleBase_WidgetMultiSelector.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2019 CEA/DEN, EDF R&D +// Copyright (C) 2014-2020 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 @@ -128,12 +128,31 @@ ModuleBase_WidgetMultiSelector::ModuleBase_WidgetMultiSelector(QWidget* theParen myMainLayout = new QVBoxLayout(this); ModuleBase_Tools::adjustMargins(myMainLayout); - QStringList aIconsList = getIconsList(myShapeTypes); + + QStringList aIconsList; + std::string aIcons = theData->getProperty("type_icons"); + if (aIcons.size() > 0) + aIconsList = QString(aIcons.c_str()).split(' ', QString::SkipEmptyParts); + + if (aIconsList.size() != myShapeTypes.size()) + aIconsList = getIconsList(myShapeTypes); + myTypeCtrl = new ModuleBase_ChoiceCtrl(this, myShapeTypes, aIconsList); myTypeCtrl->setLabel(tr("Type")); if (!myShapeTypes.empty()) { - myTypeCtrl->setValue(0); - myDefMode = myShapeTypes.first().toStdString(); + std::string aDefType = theData->getProperty("default_type"); + if (aDefType.size() > 0) { + bool aOk = false; + int aId = QString(aDefType.c_str()).toInt(&aOk); + if (aOk) { + myTypeCtrl->setValue(aId); + myDefMode = myShapeTypes.at(aId).toStdString(); + } + } + if (myDefMode.size() == 0) { + myTypeCtrl->setValue(0); + myDefMode = myShapeTypes.first().toStdString(); + } } myMainLayout->addWidget(myTypeCtrl); @@ -250,7 +269,7 @@ void ModuleBase_WidgetMultiSelector::deactivate() ModuleBase_WidgetSelector::deactivate(); if (myVisibleObjects.size()) - onShowOnly(false); + myShowOnlyBtn->setChecked(false); myWorkshop->module()->deactivateCustomPrs(ModuleBase_IModule::CustomizeHighlightedObjects, true); clearSelectedHistory(); @@ -333,7 +352,7 @@ bool ModuleBase_WidgetMultiSelector::restoreValueCustom() if (aSelectionType.empty()) aSelectionListAttr->setSelectionType(myDefMode); else { - setCurrentShapeType(ModuleBase_Tools::shapeType(aSelectionType.c_str())); + setCurrentShapeType(aSelectionType.c_str()); myDefMode = aSelectionType; myIsFirst = false; } @@ -570,6 +589,8 @@ bool ModuleBase_WidgetMultiSelector::processDelete() QList ModuleBase_WidgetMultiSelector::getControls() const { QList result; + if (myTypeCtrl->isVisible()) + result << myTypeCtrl; result << myListView->getControl(); return result; } @@ -618,8 +639,9 @@ void ModuleBase_WidgetMultiSelector::onSelectionTypeChanged() restoreValue(); myWorkshop->setSelected(getAttributeSelection()); // may be the feature's result is not displayed, but attributes should be - myWorkshop->module()->customizeFeature(myFeature, ModuleBase_IModule::CustomizeArguments, - true); /// hope that something is redisplayed by object updated + // hope that something is redisplayed by object updated + myWorkshop->module()->customizeFeature(myFeature, ModuleBase_IModule::CustomizeArguments, false); + myWorkshop->module()->customizeFeature(myFeature, ModuleBase_IModule::CustomizeResults, true); // clear history should follow after set selected to do not increase history by setSelected clearSelectedHistory(); @@ -730,25 +752,28 @@ QIntList ModuleBase_WidgetMultiSelector::shapeTypes() const QIntList aShapeTypes; if (myShapeTypes.length() > 1 && myIsUseChoice) { - aShapeTypes.append(ModuleBase_Tools::shapeType(myTypeCtrl->textValue())); + QStringList aTypes = myTypeCtrl->textValue().split("|", QString::SkipEmptyParts); + for(QString aType: aTypes) { + aShapeTypes.append(ModuleBase_Tools::shapeType(aType)); + } } else { foreach (QString aType, myShapeTypes) { - aShapeTypes.append(ModuleBase_Tools::shapeType(aType)); + QStringList aSubTypes = aType.split("|", QString::SkipEmptyParts); + for(QString aSubType: aSubTypes) { + aShapeTypes.append(ModuleBase_Tools::shapeType(aSubType)); + } } } return aShapeTypes; } //******************************************************************** -void ModuleBase_WidgetMultiSelector::setCurrentShapeType(const int theShapeType) +void ModuleBase_WidgetMultiSelector::setCurrentShapeType(const QString& theShapeType) { - QString aShapeTypeName; - int idx = 0; foreach (QString aShapeTypeName, myShapeTypes) { - int aRefType = ModuleBase_Tools::shapeType(aShapeTypeName); - if(aRefType == theShapeType && idx != myTypeCtrl->value()) { + if(aShapeTypeName == theShapeType && idx != myTypeCtrl->value()) { updateSelectionModesAndFilters(false); bool isBlocked = myTypeCtrl->blockSignals(true); myTypeCtrl->setValue(idx); @@ -779,7 +804,7 @@ void ModuleBase_WidgetMultiSelector::updateSelectionList() AttributeSelectionListPtr aSelectionListAttr = aData->selectionList(attributeID()); for (int i = 0; i < aSelectionListAttr->size(); i++) { AttributeSelectionPtr aAttr = aSelectionListAttr->value(i); - myListView->addItem(aAttr->namingName().c_str(), i); + myListView->addItem(QString::fromStdWString(aAttr->namingName()), i); } } else if (aType == ModelAPI_AttributeRefList::typeId()) { @@ -787,23 +812,23 @@ void ModuleBase_WidgetMultiSelector::updateSelectionList() for (int i = 0; i < aRefListAttr->size(); i++) { ObjectPtr anObject = aRefListAttr->object(i); if (anObject.get()) { - myListView->addItem(anObject->data()->name().c_str(), i); + myListView->addItem(QString::fromStdWString(anObject->data()->name()), i); } } } else if (aType == ModelAPI_AttributeRefAttrList::typeId()) { AttributeRefAttrListPtr aRefAttrListAttr = aData->refattrlist(attributeID()); for (int i = 0; i < aRefAttrListAttr->size(); i++) { - AttributePtr anAttribute = aRefAttrListAttr->attribute(i); + AttributePtr anAttr = aRefAttrListAttr->attribute(i); QString aName; - if (anAttribute.get()) { - std::string anAttrName = ModuleBase_Tools::generateName(anAttribute, myWorkshop); - aName = QString::fromStdString(anAttrName); + if (anAttr.get()) { + std::wstring anAttrName = ModuleBase_Tools::generateName(anAttr, myWorkshop); + aName = QString::fromStdWString(anAttrName); } else { ObjectPtr anObject = aRefAttrListAttr->object(i); if (anObject.get()) { - aName = anObject->data()->name().c_str(); + aName = QString::fromStdWString(anObject->data()->name()); } } myListView->addItem(aName, i); @@ -910,9 +935,9 @@ void ModuleBase_WidgetMultiSelector::convertIndicesToViewerSelection(std::setattribute(i); - if (anAttribute.get()) { - GeomShapePtr aGeomShape = ModuleBase_Tools::getShape(anAttribute, myWorkshop); + AttributePtr anAttr = aRefAttrListAttr->attribute(i); + if (anAttr.get()) { + GeomShapePtr aGeomShape = ModuleBase_Tools::getShape(anAttr, myWorkshop); theValues.append(std::shared_ptr( new ModuleBase_ViewerPrs(anObject, aGeomShape, NULL))); } @@ -937,13 +962,15 @@ bool ModuleBase_WidgetMultiSelector::removeUnusedAttributeObjects AttributeSelectionListPtr aSelectionListAttr = aData->selectionList(attributeID()); for (int i = 0; i < aSelectionListAttr->size(); i++) { AttributeSelectionPtr anAttr = aSelectionListAttr->value(i); - //aFeature = std::dynamic_pointer_cast(anAttr->contextObject()); - //if (!aFeature.get()) { // Feature can not be found as geometry selection - bool aFound = findInSelection( - anAttr->contextObject(), anAttr->value(), aGeomSelection, myWorkshop); - if (!aFound) - anIndicesToBeRemoved.insert(i); -// } + ObjectPtr aContextObject = anAttr->contextObject(); + GeomShapePtr aShape; + aFeature = std::dynamic_pointer_cast(aContextObject); + if (!aFeature.get()) + aShape = anAttr->value(); + + bool aFound = findInSelection(aContextObject, aShape, aGeomSelection, myWorkshop); + if (!aFound) + anIndicesToBeRemoved.insert(i); } isDone = anIndicesToBeRemoved.size() > 0; if (isDone) @@ -981,8 +1008,8 @@ bool ModuleBase_WidgetMultiSelector::removeUnusedAttributeObjects for (int i = 0; i < aRefAttrListAttr->size(); i++) { bool aFound = false; if (aRefAttrListAttr->isAttribute(i)) { - AttributePtr anAttribute = aRefAttrListAttr->attribute(i); - aFound = anAttributes.find(anAttribute) != anAttributes.end(); + AttributePtr anAttr = aRefAttrListAttr->attribute(i); + aFound = anAttributes.find(anAttr) != anAttributes.end(); } else { aFound = findInSelection(aRefAttrListAttr->object(i), GeomShapePtr(), aGeomSelection, @@ -1117,6 +1144,8 @@ QList i--; } break; + default: // [to avoid compilation warning] + break; } } return aList;