X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_FilterDlg.cxx;h=1ad06d9d0e88262278db9448f28a4594bd002919;hb=9ab9c302deacf37196fd233e6a099e21ab047e5a;hp=1bb4e6184b43cd2a6080593a1cd7261ef0b592d6;hpb=69ac5acd7edeb9d311a072c73a8adcf0b5c42dba;p=modules%2Fsmesh.git diff --git a/src/SMESHGUI/SMESHGUI_FilterDlg.cxx b/src/SMESHGUI/SMESHGUI_FilterDlg.cxx index 1bb4e6184..1ad06d9d0 100755 --- a/src/SMESHGUI/SMESHGUI_FilterDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_FilterDlg.cxx @@ -501,6 +501,8 @@ public: Table( int, int, QWidget* = 0 ); virtual ~Table(); + QSize minimumSizeHint() const; + void setEditable( bool, int, int ); bool isEditable( int, int ) const; @@ -526,6 +528,10 @@ SMESHGUI_FilterTable::Table::Table (QWidget* parent) setReadOnly( false ); } +//======================================================================= +// name : SMESHGUI_FilterTable::Table::Table +// Purpose : Constructor +//======================================================================= SMESHGUI_FilterTable::Table::Table (int numRows, int numCols, QWidget* parent) : QTableWidget(numRows, numCols, parent) { @@ -535,10 +541,27 @@ SMESHGUI_FilterTable::Table::Table (int numRows, int numCols, QWidget* parent) setReadOnly( false ); } +//======================================================================= +// name : SMESHGUI_FilterTable::Table::~Table +// Purpose : Destructor +//======================================================================= SMESHGUI_FilterTable::Table::~Table() { } +//======================================================================= +// name : SMESHGUI_FilterTable::Table::minimumSizeHint +// Purpose : Get minimum size for the table +//======================================================================= +QSize SMESHGUI_FilterTable::Table::minimumSizeHint() const +{ + QSize s = QTableWidget::minimumSizeHint(); + QHeaderView* hv = horizontalHeader(); + if ( hv ) + s.setWidth( qMax( s.width(), hv->length() ) ); + return s; +} + //======================================================================= // name : SMESHGUI_FilterTable::Table::setEditable // Purpose : Set editable of specified cell @@ -548,10 +571,15 @@ void SMESHGUI_FilterTable::Table::setEditable (bool isEditable, { QTableWidgetItem* anItem = item( row, col ); if ( anItem ) { + bool isSignalsBlocked = signalsBlocked(); + blockSignals( true ); + Qt::ItemFlags f = anItem->flags(); if ( !isEditable ) f = f & ~Qt::ItemIsEditable; else f = f | Qt::ItemIsEditable; anItem->setFlags( f ); + + blockSignals( isSignalsBlocked ); } } @@ -569,15 +597,12 @@ void SMESHGUI_FilterTable::Table::setReadOnly( bool on ) { setEditTriggers( on ? QAbstractItemView::NoEditTriggers : - QAbstractItemView::DoubleClicked | - QAbstractItemView::SelectedClicked | - QAbstractItemView::EditKeyPressed | - QAbstractItemView::AnyKeyPressed ); + QAbstractItemView::AllEditTriggers ); } bool SMESHGUI_FilterTable::Table::isReadOnly() const { - return editTriggers() != QAbstractItemView::NoEditTriggers; + return editTriggers() == QAbstractItemView::NoEditTriggers; } //======================================================================= @@ -728,7 +753,7 @@ void SMESHGUI_FilterTable::Init (const QList& theTypes) // layout widgets QGridLayout* aLay = new QGridLayout(myTableGrp); - aLay->setMargin(0); + aLay->setMargin(MARGIN); aLay->setSpacing(SPACING); aLay->addWidget(mySwitchTableGrp, 0, 0, 7, 1); @@ -999,9 +1024,9 @@ void SMESHGUI_FilterTable::GetCriterion (const int theRow, } else { - theCriterion.ThresholdStr = aTable->text(theRow, 2).toLatin1().data(); + theCriterion.ThresholdStr = aTable->text(theRow, 2).toLatin1().constData(); if ( aCriterionType != SMESH::FT_RangeOfIds ) - theCriterion.ThresholdID = aTable->text( theRow, 5 ).toLatin1().data(); + theCriterion.ThresholdID = aTable->text( theRow, 5 ).toLatin1().constData(); } QTableWidgetItem* anItem = aTable->item(theRow, 0); @@ -1278,9 +1303,15 @@ void SMESHGUI_FilterTable::onCriterionChanged (const int row, const int col, con aType == SMESH::FACE && aCriterionType == SMESH::FT_FreeEdges || aType == SMESH::VOLUME && aCriterionType == SMESH::FT_BadOrientedVolume) { + bool isSignalsBlocked = aTable->signalsBlocked(); + aTable->blockSignals( true ); + if (aCompareItem->count() > 0) aCompareItem->clear(); + aTable->setEditable(false, row, 1); aTable->setEditable(false, row, 2); + + aTable->blockSignals( isSignalsBlocked ); } else if (aCriterionType == SMESH::FT_RangeOfIds || aCriterionType == SMESH::FT_BelongToGeom || @@ -1292,6 +1323,8 @@ void SMESHGUI_FilterTable::onCriterionChanged (const int row, const int col, con QMap aMap; aMap[ SMESH::FT_EqualTo ] = tr("EQUAL_TO"); aCompareItem->setItems(aMap); + if (!aTable->isEditable(row, 2)) + aTable->setEditable(true, row, 1); if (!aTable->isEditable(row, 2)) aTable->setEditable(true, row, 2); } @@ -1306,6 +1339,8 @@ void SMESHGUI_FilterTable::onCriterionChanged (const int row, const int col, con bool isOk = false; aText.toDouble(&isOk); aTable->item( row, 2 )->setText(isOk ? aText : QString("")); + if (!aTable->isEditable(row, 1)) + aTable->setEditable(true, row, 1); if (!aTable->isEditable(row, 2)) aTable->setEditable(true, row, 2); } @@ -1381,6 +1416,8 @@ void SMESHGUI_FilterTable::addRow (Table* theTable, const int theType, const boo // Logical operation AND / OR theTable->setItem(aCurrRow, 4, new QTableWidgetItem()); + theTable->setItem(aCurrRow, 5, new QTableWidgetItem()); + theTable->blockSignals( isSignalsBlocked ); // Logical binary operation for previous value @@ -1402,7 +1439,7 @@ void SMESHGUI_FilterTable::addRow (Table* theTable, const int theType, const boo } theTable->setEditable(false, theTable->rowCount() - 1, 4); - + if (aCurrRow >=0 && aCurrRow < theTable->rowCount() && aCurrCol >=0 && aCurrCol < theTable->rowCount()) theTable->setCurrentCell(aCurrRow, aCurrCol); @@ -1615,7 +1652,7 @@ SMESHGUI_FilterTable::Table* SMESHGUI_FilterTable::createTable (QWidget* thePar aHeaderLabels.append( tr("BINARY") + " " ); aHeaderLabels.append( tr("ID") ); aTable->setHorizontalHeaderLabels( aHeaderLabels ); - + // set geometry of the table for (int i = 0; i <= 4; i++) aTable->resizeColumnToContents(i); @@ -1659,6 +1696,21 @@ void SMESHGUI_FilterTable::SetEditable (const bool isEditable) { anIter.value()->setReadOnly(!isEditable); + // Set Flags for CheckItems directly IPAL 19974 + Table* aTable = anIter.value(); + for (int i = 0, n = aTable->rowCount(); i < n; i++) + for (int j = 0, m = aTable->columnCount(); j < m; j++) + { + QTableWidgetItem* anItem = aTable->item(i, j); + if ( dynamic_cast( anItem ) ) { + Qt::ItemFlags f = anItem->flags(); + if (!isEditable) f = f & ~Qt::ItemIsUserCheckable; + else f = f | Qt::ItemIsUserCheckable; + anItem->setFlags( f ); + } + } + //end of IPAL19974 + if (isEditable) { myAddBtn->show(); @@ -2030,11 +2082,11 @@ QWidget* SMESHGUI_FilterDlg::createButtonFrame (QWidget* theParent) aLay->setMargin(MARGIN); aLay->setSpacing(SPACING); - myButtons[ BTN_OK ] = new QPushButton(tr("SMESH_BUT_OK" ), aGrp); - myButtons[ BTN_Apply ] = new QPushButton(tr("SMESH_BUT_APPLY"), aGrp); - myButtons[ BTN_Cancel ] = new QPushButton(tr("SMESH_BUT_CANCEL"), aGrp); - myButtons[ BTN_Close ] = new QPushButton(tr("SMESH_BUT_CLOSE"), aGrp); - myButtons[ BTN_Help ] = new QPushButton(tr("SMESH_BUT_HELP"), aGrp); + myButtons[ BTN_OK ] = new QPushButton(tr("SMESH_BUT_APPLY_AND_CLOSE"), aGrp); + myButtons[ BTN_Apply ] = new QPushButton(tr("SMESH_BUT_APPLY"), aGrp); + myButtons[ BTN_Cancel ] = new QPushButton(tr("SMESH_BUT_CANCEL"), aGrp); + myButtons[ BTN_Close ] = new QPushButton(tr("SMESH_BUT_CLOSE"), aGrp); + myButtons[ BTN_Help ] = new QPushButton(tr("SMESH_BUT_HELP"), aGrp); aLay->addWidget(myButtons[ BTN_OK ]); aLay->addSpacing(10); @@ -2365,7 +2417,7 @@ bool SMESHGUI_FilterDlg::isValid() const myTable->GetThreshold(i, aName); std::vector<_PTR(SObject)> aList = - SMESH::GetActiveStudyDocument()->FindObjectByName(aName.toLatin1().data(), "GEOM"); + SMESH::GetActiveStudyDocument()->FindObjectByName(aName.toLatin1().constData(), "GEOM"); if (aList.size() == 0) { SUIT_MessageBox::information(SMESHGUI::desktop(), tr("SMESH_INSUFFICIENT_DATA"), tr("BAD_SHAPE_NAME").arg(aName)); @@ -2428,9 +2480,13 @@ void SMESHGUI_FilterDlg::SetSourceWg (QWidget* theWg) // name : SMESHGUI_FilterDlg::SetGroupIds // Purpose : Set mesh //======================================================================= -void SMESHGUI_FilterDlg::SetMesh (SMESH::SMESH_Mesh_ptr theMesh) +void SMESHGUI_FilterDlg::SetMesh (SMESH::SMESH_Mesh_var theMesh) { myMesh = theMesh; + if ( myMesh->_is_nil() ) { + myButtons[BTN_OK]->setEnabled(false); + myButtons[BTN_Apply]->setEnabled(false); + } } //======================================================================= @@ -2765,6 +2821,14 @@ void SMESHGUI_FilterDlg::onSelectionDone() int aRow, aCol; const SALOME_ListIO& aList = mySelector->StoredIObjects(); + if ( myMesh->_is_nil() && aList.Extent()>0 ) { + myMesh = SMESH::IObjectToInterface(aList.First()); + if ( !(myMesh->_is_nil()) ) { + myButtons[BTN_OK]->setEnabled(true); + myButtons[BTN_Apply]->setEnabled(true); + } + } + if (aList.Extent() != 1 || !myTable->CurrentCell(aRow, aCol) || myTable->GetCriterionType(aRow) != SMESH::FT_BelongToGeom && @@ -2784,6 +2848,7 @@ void SMESHGUI_FilterDlg::onSelectionDone() } } + //======================================================================= // name : SMESHGUI_FilterDlg::onCriterionChanged // Purpose : SLOT called when cretarion of current row changed. Update selection