Salome HOME
Bug #183: regression: polyline - unnecessary table in Additition mode.
[modules/hydro.git] / src / HYDROCurveCreator / CurveCreator_TableView.cxx
index 52a8f4923b2accc3fea52552ad13370cf0cb0007..b0c4d527f87186dd5aee432a3011ae31536ffa66 100644 (file)
 #include "CurveCreator_TableView.h"
 #include "CurveCreator_UtilsICurve.hxx"
 
+#include <gp_Pnt.hxx>
+
 #include <QTableWidget>
 #include <QTableWidgetItem>
-//#include <QDoubleSpinBox>
+
 #include <QtxDoubleSpinBox.h>
 
 const double DBL_MINIMUM = -10000000.;
@@ -50,7 +52,7 @@ QWidget* CurveCreator_TableItemDelegate::createEditor( QWidget* theParent,
   int aColumnId = theIndex.column();
   if ( aColumnId == 2 || aColumnId == 3 ) {
     QDoubleSpinBox* aSpin = new QtxDoubleSpinBox( theParent );
-    aSpin->setDecimals( 6 );
+    aSpin->setDecimals( 2 );
     aSpin->setRange( DBL_MINIMUM, DBL_MAXIMUM );
     anEditor = aSpin;
   }
@@ -63,14 +65,11 @@ QWidget* CurveCreator_TableItemDelegate::createEditor( QWidget* theParent,
 void CurveCreator_TableItemDelegate::setEditorData( QWidget* theEditor,
                                                     const QModelIndex& theIndex ) const
 {
-  QTableWidget* aTableWidget = dynamic_cast<QTableWidget*>( parent() );
-  QTableWidgetItem* anItem = aTableWidget ? dynamic_cast<QTableWidgetItem*>
-                                  ( aTableWidget->item( theIndex.row(), theIndex.column() ) ) : 0;
   int aColumnId = theIndex.column();
-  if ( anItem && ( aColumnId == 2 || aColumnId == 3 ) ) {
+  if ( aColumnId == 2 || aColumnId == 3 ) {
     QDoubleSpinBox* aDblSpin = dynamic_cast<QDoubleSpinBox*>( theEditor );
-    double aValue = anItem->data( Qt::UserRole ).toDouble();
     if ( aDblSpin ) {
+      double aValue = theIndex.model()->data( theIndex, Qt::EditRole ).toDouble();
       aDblSpin->setValue( aValue );
     }
   }
@@ -82,16 +81,12 @@ void CurveCreator_TableItemDelegate::setModelData( QWidget* theEditor,
                                                    QAbstractItemModel* theModel,
                                                    const QModelIndex& theIndex ) const
 {
-  QTableWidget* aTableWidget = dynamic_cast<QTableWidget*>( parent() );
-  QTableWidgetItem* anItem = aTableWidget ? dynamic_cast<QTableWidgetItem*>
-                      ( aTableWidget->item( theIndex.row(), theIndex.column() ) ) : 0;
-
   int aColumnId = theIndex.column();
-  if ( anItem && ( aColumnId == 2 || aColumnId == 3 ) ) {
+  if ( aColumnId == 2 || aColumnId == 3 ) {
     QDoubleSpinBox* aDblSpin = dynamic_cast<QDoubleSpinBox*>( theEditor );
     if ( aDblSpin ) {
       double aValue = aDblSpin->value();
-      anItem->setData( Qt::UserRole, aValue );
+      theModel->setData( theIndex, aValue, Qt::UserRole);
     }
   }
   else
@@ -117,60 +112,42 @@ void CurveCreator_TableView::setCurve( CurveCreator_ICurve* theCurve )
   myCurve = theCurve;
 }
 
-void CurveCreator_TableView::addLocalPointToTable( const double theX, const double theY )
+void CurveCreator_TableView::addLocalPointToTable(
+                     const CurveCreator_ICurve::SectionToPoint& theSToPoint )
 {
-  CurveCreator_ICurve::SectionToPointList aPoints;
-  CurveCreator_UtilsICurve::findSectionsToPoints( myCurve, theX, theY, aPoints );
-
-  CurveCreator_ICurve::SectionToPointList aSkipList;
-  // table could not contain two equal value rows
   int aRowId = rowCount();
-  double aCurrentX, aCurrentY;
-  int aSectionId, aPointId;
-  CurveCreator_ICurve::SectionToPoint aPoint;
-  for ( int i = 0; i < aRowId; i++ ) {
-    aCurrentX = item( i, 2 )->data( Qt::UserRole ).toDouble();
-    aCurrentY = item( i, 3 )->data( Qt::UserRole ).toDouble();
-    if ( fabs( aCurrentX - theX ) < LOCAL_SELECTION_TOLERANCE &&
-         fabs( aCurrentY - theY ) < LOCAL_SELECTION_TOLERANCE ) {
-      aPoint = std::make_pair<int, int>( getSectionId( i ), getPointId( i ) );
-      if ( !CurveCreator_UtilsICurve::contains( aSkipList, aPoint ) )
-        aSkipList.push_back( aPoint );
-    }
-  }
-  if ( aSkipList.size() == aPoints.size() )
+  int anISection = theSToPoint.first;
+  int anIPoint = theSToPoint.second;
+  bool isFoundPoint = false;
+  for ( int i = 0; i < aRowId && !isFoundPoint; i++ )
+    isFoundPoint = getSectionId( i ) == anISection && 
+                   getPointId( i ) == anIPoint;
+  if ( isFoundPoint )
     return;
 
+  setRowCount( aRowId+1 );
+
   QTableWidgetItem* anItem;
-  CurveCreator_ICurve::SectionToPointList::const_iterator anIt = aPoints.begin(),
-                                                          aLast = aPoints.end();
-  for ( ; anIt != aLast; anIt++ ) {
-    aPoint = *anIt;
-    if ( CurveCreator_UtilsICurve::contains( aSkipList, aPoint ) )
-      continue;
-
-    setRowCount( aRowId+1 );
-    aSectionId = aPoint.first;
-    aPointId = aPoint.second;
-
-    anItem = new QTableWidgetItem( myCurve->getSectionName( aSectionId ).c_str() );
-    anItem->setFlags( anItem->flags() & ~Qt::ItemIsEnabled );
-    anItem->setData( Qt::UserRole, aSectionId );
-    setItem( aRowId, 0, anItem );
-
-    anItem = new QTableWidgetItem( QString::number( aPointId + 1 ) );
-    anItem->setFlags( anItem->flags() & ~Qt::ItemIsEnabled );
-    anItem->setData( Qt::UserRole, aPointId );
-    setItem( aRowId, 1, anItem );
-
-    anItem = new QTableWidgetItem( QString::number( theX ) );
-    anItem->setData( Qt::UserRole, theX );
-    setItem( aRowId, 2, anItem );
-
-    anItem = new QTableWidgetItem( QString::number( theY ) );
-    anItem->setData( Qt::UserRole, theY );
-    setItem( aRowId, 3, anItem );
-  }
+  anItem = new QTableWidgetItem( myCurve->getSectionName( anISection ).c_str() );
+  anItem->setFlags( anItem->flags() & ~Qt::ItemIsEnabled );
+  anItem->setData( Qt::UserRole, anISection );
+  setItem( aRowId, 0, anItem );
+
+  anItem = new QTableWidgetItem( QString::number( anIPoint + 1 ) );
+  anItem->setFlags( anItem->flags() & ~Qt::ItemIsEnabled );
+  anItem->setData( Qt::UserRole, anIPoint );
+  setItem( aRowId, 1, anItem );
+
+  gp_Pnt aPoint;
+  CurveCreator_UtilsICurve::getPoint( myCurve, anISection, anIPoint, aPoint );
+
+  anItem = new QTableWidgetItem( QString::number( aPoint.X(), 'f', 2 ) );
+  anItem->setData( Qt::UserRole, aPoint.X() );
+  setItem( aRowId, 2, anItem );
+
+  anItem = new QTableWidgetItem( QString::number( aPoint.Y(), 'f', 2 ) );
+  anItem->setData( Qt::UserRole, aPoint.Y() );
+  setItem( aRowId, 3, anItem );
 }
 
 int CurveCreator_TableView::getSectionId( const int theRowId ) const