X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FCollectionPlugin%2FCollectionPlugin_WidgetField.cpp;h=f1a5109eff7776b5efcb25e149698b1e29a4e433;hb=refs%2Fheads%2FCR35150;hp=a9e83048fa02522ff5c7a4d0f027ffce77490b2e;hpb=7502992e4b6bb1ee50dbb8dd0443e44cc0595c84;p=modules%2Fshaper.git diff --git a/src/CollectionPlugin/CollectionPlugin_WidgetField.cpp b/src/CollectionPlugin/CollectionPlugin_WidgetField.cpp index a9e83048f..f1a5109ef 100644 --- a/src/CollectionPlugin/CollectionPlugin_WidgetField.cpp +++ b/src/CollectionPlugin/CollectionPlugin_WidgetField.cpp @@ -1,14 +1,28 @@ -// Copyright (C) 2014-20xx CEA/DEN, EDF R&D - -// File: CollectionPlugin_WidgetField.cpp -// Created: 16 Nov 2016 -// Author: Vitaly SMETANNIKOV +// Copyright (C) 2014-2023 CEA, EDF +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// #include "CollectionPlugin_WidgetField.h" #include "CollectionPlugin_Field.h" #include #include +#include #include #include @@ -39,15 +53,22 @@ const char* MYFirstCol = "Shape"; const char* MYTrue = "True"; const char* MYFalse = "False"; +DataTableItemDelegate::DataTableItemDelegate(ModelAPI_AttributeTables::ValueType theType) + : QStyledItemDelegate(), myType(theType) +{ +} + + QWidget* DataTableItemDelegate::createEditor(QWidget* theParent, const QStyleOptionViewItem & theOption, const QModelIndex& theIndex ) const { + QWidget* aEditor = 0; if ((theIndex.column() == 0) && (theIndex.row() > 0)) { QWidget* aWgt = QStyledItemDelegate::createEditor(theParent, theOption, theIndex); QLineEdit* aEdt = static_cast(aWgt); aEdt->setReadOnly(true); - return aEdt; + aEditor = aEdt; } else { QLineEdit* aLineEdt = 0; switch (myType) { @@ -57,7 +78,7 @@ QWidget* DataTableItemDelegate::createEditor(QWidget* theParent, theIndex)); if (aLineEdt) { aLineEdt->setValidator(new QDoubleValidator(aLineEdt)); - return aLineEdt; + aEditor = aLineEdt; } break; case ModelAPI_AttributeTables::INTEGER: @@ -66,7 +87,7 @@ QWidget* DataTableItemDelegate::createEditor(QWidget* theParent, theIndex)); if (aLineEdt) { aLineEdt->setValidator(new QIntValidator(aLineEdt)); - return aLineEdt; + aEditor = aLineEdt; } break; case ModelAPI_AttributeTables::BOOLEAN: @@ -74,11 +95,26 @@ QWidget* DataTableItemDelegate::createEditor(QWidget* theParent, QComboBox* aBox = new QComboBox(theParent); aBox->addItem(MYFalse); aBox->addItem(MYTrue); - return aBox; + aEditor = aBox; } + break; + default: + aEditor = QStyledItemDelegate::createEditor(theParent, theOption, theIndex); } } - return QStyledItemDelegate::createEditor(theParent, theOption, theIndex); + if (myType == ModelAPI_AttributeTables::BOOLEAN) + connect(aEditor, SIGNAL(currentTextChanged(const QString&)), + SLOT(onEditItem(const QString&))); + else + connect(aEditor, SIGNAL(textEdited(const QString&)), + SLOT(onEditItem(const QString&))); + return aEditor; +} + +void DataTableItemDelegate::onEditItem(const QString& theText) +{ + QWidget* aWgt = dynamic_cast(sender()); + commitData(aWgt); } @@ -412,9 +448,14 @@ QList CollectionPlugin_WidgetField::getControls() const { QList aControls; // this control will accept focus and will be highlighted in the Property Panel - aControls.push_back(myShapeTypeCombo); - aControls.push_back(myFieldTypeCombo); - aControls.push_back(myNbComponentsSpn); + aControls.append(myShapeTypeCombo); + aControls.append(myFieldTypeCombo); + aControls.append(myNbComponentsSpn); + if (myStampSpnList.size() > 0) + aControls.append(myStampSpnList.first()); + if (myDataTblList.size() > 0) + aControls.append(myDataTblList.first()); + return aControls; } @@ -457,7 +498,6 @@ bool CollectionPlugin_WidgetField::storeValueCustom() } } } - updateObject(myFeature); return true; } @@ -471,7 +511,9 @@ bool CollectionPlugin_WidgetField::restoreValueCustom() std::string aTypeStr = aSelList->selectionType(); if (aTypeStr == "") return false; // The attribute is not initialized + isBlocked = myShapeTypeCombo->blockSignals(true); myShapeTypeCombo->setCurrentIndex(getSelectionType(aTypeStr)); + myShapeTypeCombo->blockSignals(isBlocked); // Get number of components AttributeStringArrayPtr aStringsAttr = @@ -536,9 +578,9 @@ bool CollectionPlugin_WidgetField::restoreValueCustom() // Add selection names AttributeSelectionPtr aAttr = aSelList->value(k - 1); if (aItem) { - aItem->setText(aAttr->namingName().c_str()); + aItem->setText(QString::fromStdWString(aAttr->namingName())); } else { - aItem = new QTableWidgetItem(aAttr->namingName().c_str()); + aItem = new QTableWidgetItem(QString::fromStdWString(aAttr->namingName())); aTable->setItem(k, j, aItem); } } else if (j > 0) { @@ -556,9 +598,9 @@ bool CollectionPlugin_WidgetField::restoreValueCustom() } } // Restore columns width - for (int i = 0; i < aTable->columnCount(); i++) { - if (i < aColWidth.size()) - aTable->setColumnWidth(i, aColWidth.at(i)); + for (int col = 0; col < aTable->columnCount(); col++) { + if (col < aColWidth.size()) + aTable->setColumnWidth(col, aColWidth.at(col)); } aTable->blockSignals(isBlocked); @@ -727,8 +769,8 @@ void CollectionPlugin_WidgetField::onAddStep() aTable->setItem(j, i, aItem); } AttributeSelectionPtr aAttr = aSelList->value(j - 1); - aItem->setText(aAttr->namingName().c_str()); - aItem->setToolTip(aAttr->namingName().c_str()); + aItem->setText(QString::fromStdWString(aAttr->namingName())); + aItem->setToolTip(QString::fromStdWString(aAttr->namingName())); } } else { QString aDefVal = aTable->item(0, i)->text(); @@ -782,21 +824,29 @@ bool CollectionPlugin_WidgetField:: } //********************************************************************************** -void CollectionPlugin_WidgetField::onSelectionChanged() +bool CollectionPlugin_WidgetField:: + setSelection(QList>& theValues, const bool theToValidate) { - //if (isEditingMode()) - // return; - if (myActivation) { myActivation = false; - return; + return false; } // Ignore selection for Parts mode if (myShapeTypeCombo->currentIndex() == 5) - return; - - QList aSelected = getFilteredSelected(); - + return false; + + QList aSelected; + QList::const_iterator anIt; + for (anIt = theValues.begin(); anIt != theValues.end(); anIt++) { + ModuleBase_ViewerPrsPtr aValue = *anIt; + ResultPtr aRes = std::dynamic_pointer_cast(aValue->object()); + if (theToValidate && aRes.get()) { + if (myShapeTypeCombo->currentIndex() > 3) + aSelected.append(aValue); + else if (acceptSubShape(aValue->shape(), aRes)) + aSelected.append(aValue); + } + } AttributeSelectionListPtr aSelList = myFeature->data()->selectionList(CollectionPlugin_Field::SELECTED_ID()); aSelList->setSelectionType(getSelectionType(myShapeTypeCombo->currentIndex())); @@ -835,8 +885,8 @@ void CollectionPlugin_WidgetField::onSelectionChanged() aTable->setItem(j, i, aItem); } AttributeSelectionPtr aAttr = aSelList->value(j - 1); - aItem->setText(aAttr->namingName().c_str()); - aItem->setToolTip(aAttr->namingName().c_str()); + aItem->setText(QString::fromStdWString(aAttr->namingName())); + aItem->setToolTip(QString::fromStdWString(aAttr->namingName())); } } else { QString aDefVal = aTable->item(0, i)->text(); @@ -854,12 +904,12 @@ void CollectionPlugin_WidgetField::onSelectionChanged() // Update only selection name for(int j = 1; j < aNewRows - 1; j++) { AttributeSelectionPtr aAttr = aSelList->value(j); - aTable->item(j, 0)->setText(aAttr->namingName().c_str()); - aTable->item(j, 0)->setToolTip(aAttr->namingName().c_str()); + aTable->item(j, 0)->setText(QString::fromStdWString(aAttr->namingName())); + aTable->item(j, 0)->setToolTip(QString::fromStdWString(aAttr->namingName())); } } } - emit valuesChanged(); + return true; } //********************************************************************************** @@ -916,7 +966,7 @@ void CollectionPlugin_WidgetField::onTableEdited(int theRow, int theCol) //********************************************************************************** void CollectionPlugin_WidgetField::onShapeTypeChanged(int theType) { - activateSelectionAndFilters(theType == 5? false:true); + updateSelectionModesAndFilters(theType == 5? false:true); AttributeSelectionListPtr aSelList = myFeature->data()->selectionList(CollectionPlugin_Field::SELECTED_ID()); @@ -925,12 +975,16 @@ void CollectionPlugin_WidgetField::onShapeTypeChanged(int theType) if (aTypeName == aSelList->selectionType()) return; aSelList->setSelectionType(aTypeName); + // Updated event has to be sent here in case if type of shapes + // was changed from Part to any other in order to updater Apply button status + myFeature->data()->sendAttributeUpdated(aSelList.get()); //Clear old selection clearData(); aSelList->clear(); AttributeTablesPtr aTablesAttr = myFeature->data()->tables(CollectionPlugin_Field::VALUES_ID()); aTablesAttr->setSize(1, myNbComponentsSpn->value(), myDataTblList.size()); + updateObject(myFeature); emit valuesChanged(); } @@ -941,6 +995,16 @@ bool CollectionPlugin_WidgetField::processEnter() myIsTabEdit = false; return true; } + QWidget* aCurrWgt = qApp->focusWidget(); + int aCurWgtId = myStepWgt->currentIndex(); + if ((aCurrWgt == myShapeTypeCombo) || + (aCurrWgt == myFieldTypeCombo) || + (aCurrWgt == myNbComponentsSpn) || + (aCurrWgt == myStampSpnList[aCurWgtId]) || + (aCurrWgt == myDataTblList[aCurWgtId])) { + setFocus(); + return true; + } return false; } @@ -969,3 +1033,24 @@ void CollectionPlugin_WidgetField::onColumnResize(int theIndex, int theOld, int aTable->setColumnWidth(theIndex, theNew); } } + +//********************************************************************************** +QList> + CollectionPlugin_WidgetField::getAttributeSelection() const +{ + QList> aList; + if(myFeature) { + DataPtr aData = myFeature->data(); + AttributeSelectionListPtr aSelList = + aData->selectionList(CollectionPlugin_Field::SELECTED_ID()); + AttributeSelectionPtr aAttr; + ObjectPtr anObject; + for (int i = 0; i < aSelList->size(); i++) { + aAttr = aSelList->value(i); + ModuleBase_ViewerPrsPtr + aPrs(new ModuleBase_ViewerPrs(aAttr->context(), aAttr->value(), NULL)); + aList.append(aPrs); + } + } + return aList; +} \ No newline at end of file