-// Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2011 CEA/DEN, EDF R&D, OPEN CASCADE
//
-// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+// 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.
//
-// 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.
+// 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.
//
-// 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
//
-// 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
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
+
// File : StdMeshersGUI_FixedPointsParamWdg.cxx
// Author : Open CASCADE S.A.S.
// SMESH includes
//
#include "StdMeshersGUI_FixedPointsParamWdg.h"
+#include <SMESHGUI_SpinBox.h>
+
+#include <SalomeApp_IntSpinBox.h>
+
// Qt includes
#include <QPushButton>
#include <QIntValidator>
#include <QTreeWidgetItem>
#include <QCheckBox>
#include <QLineEdit>
-#include <QDoubleSpinBox>
#include <QItemDelegate>
#include <QKeyEvent>
#define MARGIN 0
#define SAME_TEXT "-/-"
+#define TOLERANCE 1e-7
+#define EQUAL_DBL(a,b) (fabs(a-b)<TOLERANCE)
+#define LT_DBL(a,b) ((a<b)&&!EQUAL_DBL(a,b))
+#define GT_DBL(a,b) ((a>b)&&!EQUAL_DBL(a,b))
+
/*
- * function : Tree Widget Item Delegate
+ * class : Tree Widget Item Delegate
* purpose : Custom item delegate
*/
}
QWidget* StdMeshersGUI_FixedPointsParamWdg::LineDelegate::createEditor( QWidget* parent,
- const QStyleOptionViewItem& option,
- const QModelIndex& index ) const
+ const QStyleOptionViewItem& option,
+ const QModelIndex& index ) const
{
QWidget* w = 0;
if ( (index.column() == 1 ) ) {
- QSpinBox* sb = new QSpinBox( parent );
+ SalomeApp_IntSpinBox* sb = new SalomeApp_IntSpinBox( parent );
+ sb->setAcceptNames( false ); // No Notebook variables allowed
sb->setFrame( false );
sb->setRange( 1, 999);
w = sb;
}
void StdMeshersGUI_FixedPointsParamWdg::LineDelegate::setModelData( QWidget* editor,
- QAbstractItemModel* model,
- const QModelIndex& index ) const
+ QAbstractItemModel* model,
+ const QModelIndex& index ) const
{
- model->setData( index, qobject_cast<QSpinBox*>( editor )->value(), Qt::EditRole );
- model->setData( index, qobject_cast<QSpinBox*>( editor )->value(), Qt::UserRole );
+ model->setData( index, qobject_cast<SalomeApp_IntSpinBox*>( editor )->value(), Qt::EditRole );
+ model->setData( index, qobject_cast<SalomeApp_IntSpinBox*>( editor )->value(), Qt::UserRole );
}
//================================================================================
myListWidget = new QListWidget( this );
myTreeWidget = new QTreeWidget( this );
- mySpinBox = new QDoubleSpinBox( this );
+ mySpinBox = new SMESHGUI_SpinBox( this );
myAddButton = new QPushButton( tr( "SMESH_BUT_ADD" ), this );
myRemoveButton = new QPushButton( tr( "SMESH_BUT_REMOVE" ), this );
mySameValues = new QCheckBox( tr("SMESH_SAME_NB_SEGMENTS"), this);
myListWidget->setMinimumWidth( 80 );
myTreeWidget->setMinimumWidth( 200 );
- mySpinBox->setRange( 0, 1 );
- mySpinBox->setSingleStep( 0.1 );
+ mySpinBox->setAcceptNames( false ); // No Notebook variables allowed
+ mySpinBox->RangeStepAndValidator( 0., 1., .1, "parametric_precision" );
+ myListWidget->setMinimumWidth( 70 );
- connect( myAddButton, SIGNAL(clicked()), SLOT(onAdd()));
- connect( myRemoveButton, SIGNAL(clicked()), SLOT(onRemove()));
- connect( mySameValues, SIGNAL(stateChanged(int)), SLOT(onCheckBoxChanged()));
+ connect( myAddButton, SIGNAL( clicked() ), SLOT( onAdd() ) );
+ connect( myRemoveButton, SIGNAL( clicked() ), SLOT( onRemove() ) );
+ connect( mySameValues, SIGNAL( stateChanged( int ) ), SLOT( onCheckBoxChanged() ) );
+ connect( mySpinBox, SIGNAL( valueChanged( double ) ), SLOT( updateState() ) );
+ connect( myListWidget, SIGNAL( itemSelectionChanged() ), SLOT( updateState() ) );
myListWidget->installEventFilter( this );
clear();
myTreeWidget->addTopLevelItem( newTreeItem( 0, 1 ) );
mySpinBox->setValue( 0. );
onCheckBoxChanged();
+ updateState();
}
//=================================================================================
{
addPoint( mySpinBox->value() );
}
-
+
//=================================================================================
// function : onRemove()
// purpose : Called when Remove Button Clicked
//=================================================================================
void StdMeshersGUI_FixedPointsParamWdg::addPoint( double v)
{
- if ( v > 0 && v < 1) {
+ if ( GT_DBL(v, 0.0) && LT_DBL(v, 1.0)) {
bool toInsert = true;
int idx = myTreeWidget->topLevelItemCount()-1;
for ( int i = 0 ; i < myListWidget->count(); i++ ) {
double lv = point( i );
- if ( lv == v ) { toInsert = false; break; }
- else if ( lv > v ) {
- idx = i; break;
+ if ( EQUAL_DBL(lv, v) ) { toInsert = false; break; }
+ else if ( GT_DBL(lv, v) ) {
+ idx = i; break;
}
}
if ( toInsert ) {
onCheckBoxChanged();
}
}
+ updateState();
}
//=================================================================================
delete myTreeWidget->topLevelItem( idx );
delete item;
myTreeWidget->topLevelItem( idx )->setText( 0, treeItemText( idx == 0 ? 0 : point( idx-1 ),
- idx > myListWidget->count()-1 ? 1 : point( idx ) ) );
+ idx > myListWidget->count()-1 ? 1 : point( idx ) ) );
}
onCheckBoxChanged();
+ updateState();
}
double StdMeshersGUI_FixedPointsParamWdg::point( int idx ) const
}
}
+//=================================================================================
+// function : updateState()
+// purpose : Update widgets state
+//=================================================================================
+void StdMeshersGUI_FixedPointsParamWdg::updateState()
+{
+ double v = mySpinBox->value();
+ myAddButton->setEnabled( GT_DBL(v, 0.0) && LT_DBL(v, 1.0) );
+ myRemoveButton->setEnabled( myListWidget->selectedItems().count() > 0 );
+}
+
//=================================================================================
// function : GetListOfPoints
// purpose : Called to get the list of Edges IDs
anArray->length( size );
for (int i = 0; i < size; i++) {
anArray[i] = point(i);
- // printf ("Point %f \n", anArray[i]);
}
return anArray;
}
clear();
for ( int i = 0; i < thePoints->length(); i++ ) {
addPoint( thePoints[ i ] );
- // printf ("Add Point %f \n", thePoints[ i ]);
}
}
anArray->length( size );
for (int i = 0; i < size; i++) {
anArray[i] = nbSegments( i );
- // printf ("Segments %d \n", anArray[i] );
}
return anArray;
}
mySameValues->setChecked(true);
for ( int i = 0; i < theSegments->length(); i++ ) {
setNbSegments( i, theSegments[i] );
- // printf ("\nadd Segment = %d\n", theSegments[i]);
}
}