X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModuleBase%2FModuleBase_WidgetMultiSelector.cpp;h=84b0feb65cd220af4a43a2e9f72727c785c10fdd;hb=1b2cab75aa9df76d3fe6f791e2ddb2a065c8cf03;hp=563cc18780fa6d01231a8b41a78bb38d3cb47eee;hpb=c506c6e7f301201b56d0c3db2b255a629f923cb3;p=modules%2Fshaper.git diff --git a/src/ModuleBase/ModuleBase_WidgetMultiSelector.cpp b/src/ModuleBase/ModuleBase_WidgetMultiSelector.cpp index 563cc1878..84b0feb65 100644 --- a/src/ModuleBase/ModuleBase_WidgetMultiSelector.cpp +++ b/src/ModuleBase/ModuleBase_WidgetMultiSelector.cpp @@ -11,10 +11,8 @@ #include #include -#include #include #include -#include #include #include @@ -45,9 +43,10 @@ ModuleBase_WidgetMultiSelector::ModuleBase_WidgetMultiSelector(QWidget* theParen aMainLay->addWidget(aTypeLabel, 0, 0); myTypeCombo = new QComboBox(myMainWidget); - std::string aTypes = theData->getProperty("type_choice"); - myShapeTypes = QString::fromStdString(aTypes).split(' '); - myTypeCombo->addItems(myShapeTypes); + // There is no sence to paramerize list of types while we can not parametrize selection mode + QString aTypesStr("Vertices Edges Faces Solids"); + QStringList aShapeTypes = aTypesStr.split(' '); + myTypeCombo->addItems(aShapeTypes); aMainLay->addWidget(myTypeCombo, 0, 1); QLabel* aListLabel = new QLabel(tr("Selected objects:"), myMainWidget); @@ -70,6 +69,7 @@ ModuleBase_WidgetMultiSelector::~ModuleBase_WidgetMultiSelector() activateSelection(false); } +//******************************************************************** bool ModuleBase_WidgetMultiSelector::storeValue() const { // A rare case when plugin was not loaded. @@ -79,8 +79,13 @@ bool ModuleBase_WidgetMultiSelector::storeValue() const AttributeSelectionListPtr aSelectionListAttr = boost::dynamic_pointer_cast(aData->attribute(attributeID())); - if (aSelectionListAttr && (mySelection.size() > 0)) { + if (aSelectionListAttr) { aSelectionListAttr->clear(); + // Store shapes type + TopAbs_ShapeEnum aCurrentType = + ModuleBase_WidgetShapeSelector::shapeType(myTypeCombo->currentText()); + aSelectionListAttr->setSelectionType((int) aCurrentType); + // Store selection in the attribute foreach (GeomSelection aSelec, mySelection) { aSelectionListAttr->append(aSelec.first, aSelec.second); } @@ -90,9 +95,9 @@ bool ModuleBase_WidgetMultiSelector::storeValue() const return false; } +//******************************************************************** bool ModuleBase_WidgetMultiSelector::restoreValue() { - return false; // A rare case when plugin was not loaded. if(!myFeature) return false; @@ -102,6 +107,10 @@ bool ModuleBase_WidgetMultiSelector::restoreValue() if (aSelectionListAttr) { mySelection.clear(); + // Restore shape type + TopAbs_ShapeEnum aShapeType = (TopAbs_ShapeEnum) aSelectionListAttr->selectionType(); + setCurrentShapeType(aShapeType); + // Restore selection in the list for (int i = 0; i < aSelectionListAttr->size(); i++) { AttributeSelectionPtr aSelectAttr = aSelectionListAttr->value(i); mySelection.append(GeomSelection(aSelectAttr->context(), aSelectAttr->value())); @@ -112,15 +121,17 @@ bool ModuleBase_WidgetMultiSelector::restoreValue() return false; } +//******************************************************************** QWidget* ModuleBase_WidgetMultiSelector::getControl() const { return myMainWidget; } +//******************************************************************** QList ModuleBase_WidgetMultiSelector::getControls() const { QList result; - result << myTypeCombo; + //result << myTypeCombo; result << myListControl; return result; } @@ -135,6 +146,7 @@ bool ModuleBase_WidgetMultiSelector::eventFilter(QObject* theObj, QEvent* theEve return ModuleBase_ModelWidget::eventFilter(theObj, theEvent); } +//******************************************************************** void ModuleBase_WidgetMultiSelector::onSelectionChanged() { ModuleBase_ISelection* aSelection = myWorkshop->selection(); @@ -157,19 +169,31 @@ void ModuleBase_WidgetMultiSelector::onSelectionChanged() } +//******************************************************************** void ModuleBase_WidgetMultiSelector::updateSelectionList() { + QString aType; + if (myTypeCombo->currentText().toLower() == "vertices") + aType = "vertex"; + else if (myTypeCombo->currentText().toLower() == "edges") + aType = "edge"; + else if (myTypeCombo->currentText().toLower() == "faces") + aType = "face"; + else if (myTypeCombo->currentText().toLower() == "solids") + aType = "solid"; + myListControl->clear(); int i = 1; foreach (GeomSelection aSel, mySelection) { QString aName(aSel.first->data()->name().c_str()); - aName += ":" + myTypeCombo->currentText() + QString::number(i); + aName += ":" + aType + QString("_%1").arg(i); myListControl->addItem(aName); i++; } } +//******************************************************************** void ModuleBase_WidgetMultiSelector::filterShapes(const NCollection_List& theShapesToFilter, NCollection_List& theResult) { @@ -186,22 +210,47 @@ void ModuleBase_WidgetMultiSelector::filterShapes(const NCollection_Listcount(); ++idx) { + aShapeTypeName = myTypeCombo->itemText(idx); + TopAbs_ShapeEnum aRefType = ModuleBase_WidgetShapeSelector::shapeType(aShapeTypeName); + if(aRefType == theShapeType && idx != myTypeCombo->currentIndex()) { + myTypeCombo->setCurrentIndex(idx); + break; + } + } +} + +//******************************************************************** void ModuleBase_WidgetMultiSelector::activateSelection(bool toActivate) { myIsActive = toActivate; if (myIsActive) { connect(myWorkshop, SIGNAL(selectionChanged()), this, SLOT(onSelectionChanged())); - onSelectionTypeChanged(); + //onSelectionTypeChanged(); } else { disconnect(myWorkshop, SIGNAL(selectionChanged()), this, SLOT(onSelectionChanged())); myWorkshop->deactivateSubShapesSelection(); } } -void ModuleBase_WidgetMultiSelector::onSelectionTypeChanged() +void ModuleBase_WidgetMultiSelector::activateShapeSelection() { QString aNewType = myTypeCombo->currentText(); QIntList aList; aList.append(ModuleBase_WidgetShapeSelector::shapeType(aNewType)); myWorkshop->activateSubShapesSelection(aList); } + +//******************************************************************** +void ModuleBase_WidgetMultiSelector::onSelectionTypeChanged() +{ + QList anEmptyList; + myWorkshop->setSelected(anEmptyList); + activateShapeSelection(); + onSelectionChanged(); +}