Salome HOME
Merge branch 'BR_1328' into BR_DEMO
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_ImportLandCoverMapDlg.cxx
index 7fd79557c4c827b2032a45c13dcea70c17cc8e2d..3ad5e1dcc1869bc7eabc66c51a6c28275a41ef40 100644 (file)
@@ -47,6 +47,7 @@ HYDROGUI_ImportLandCoverMapDlg::HYDROGUI_ImportLandCoverMapDlg( HYDROGUI_Module*
   addPage( createPage3() );
   myFirstPageState = false;
   myDbfState = false;
+  myUpdateViewerState = false;
 }
 
 QWizardPage* HYDROGUI_ImportLandCoverMapDlg::createPage1() {
@@ -55,7 +56,7 @@ QWizardPage* HYDROGUI_ImportLandCoverMapDlg::createPage1() {
 
   SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr();
 
-  myFileNameGroup = new QGroupBox( tr( "IMPORT_LANDCOVERMAP_FROM_FILE" ) );
+  myFileNameGroup = new QGroupBox( tr( "IMPORT_LANDCOVER_MAP_FROM_FILE" ) );
 
   QLabel* aFileNameLabel = new QLabel( tr( "FILE_NAME" ), myFileNameGroup );
 
@@ -83,19 +84,19 @@ QWizardPage* HYDROGUI_ImportLandCoverMapDlg::createPage1() {
   aLandcoverNameLayout->addWidget( aLandcoverNameLabel );
   aLandcoverNameLayout->addWidget( myObjectName );
 
-  QGroupBox* aPolygonsGroup = new QGroupBox( tr( "FOUNDED_POLYGONS" ) );
-  myPolygons = new QListWidget( aPolygonsGroup );
-  myPolygons->setSelectionMode( QListWidget::ExtendedSelection );
-  myPolygons->setEditTriggers( QListWidget::NoEditTriggers );
-  myPolygons->setViewMode( QListWidget::ListMode );
-  myPolygons->setSortingEnabled( false );
+  QGroupBox* aPolygonsGroup = new QGroupBox( tr( "FOUND_POLYGONS" ) );
+  myPolygonsListWidget = new QListWidget( aPolygonsGroup );
+  myPolygonsListWidget->setSelectionMode( QListWidget::ExtendedSelection );
+  myPolygonsListWidget->setEditTriggers( QListWidget::NoEditTriggers );
+  myPolygonsListWidget->setViewMode( QListWidget::ListMode );
+  myPolygonsListWidget->setSortingEnabled( false );
 
   QBoxLayout* aPolygonsLayout = new QVBoxLayout;
-  aPolygonsLayout->addWidget( myPolygons );
+  aPolygonsLayout->addWidget( myPolygonsListWidget );
   aPolygonsGroup->setLayout( aPolygonsLayout );
 
   QVBoxLayout* aPageLayout = new QVBoxLayout;
-  myAttrCheckBox = new QCheckBox( "Use dBase attributes as a Strickler Types" ); //TODO replace with tr()
+  myAttrCheckBox = new QCheckBox( tr("USE_DBF_AS_ST") );
   myAttrCheckBox->setChecked(true);
 
   // Layout
@@ -108,7 +109,7 @@ QWizardPage* HYDROGUI_ImportLandCoverMapDlg::createPage1() {
   aPage->setLayout( aPageLayout );
 
   // Conections
-  connect( myPolygons, SIGNAL( itemSelectionChanged() ), this, SLOT( onItemSelectionChanged() ) );
+  connect( myPolygonsListWidget, SIGNAL( itemSelectionChanged() ), this, SLOT( onItemSelectionChanged() ) );
   connect( aBrowseBtn, SIGNAL( clicked() ), this, SLOT( onBrowse() ) ); 
   connect( myAttrCheckBox, SIGNAL(clicked(bool)), this, SLOT(onAttrCBChecked(bool)));
 
@@ -120,20 +121,20 @@ QWizardPage* HYDROGUI_ImportLandCoverMapDlg::createPage2() {
   QFrame* aFrame = new QFrame( aPage );
 
   myAvAttrLabel = new QLabel();
-  myAvAttrLabel->setText("Available attributes");
+  myAvAttrLabel->setText(tr("AV_ATTRS"));
   
-  myDBFAttr = new QListWidget( );
-  myDBFAttr->setSelectionMode( QListWidget::SingleSelection );
-  myDBFAttr->setEditTriggers( QListWidget::NoEditTriggers );
-  myDBFAttr->setViewMode( QListWidget::ListMode );
-  myDBFAttr->setSortingEnabled( false );
+  myDBFAttrListWidget = new QListWidget( );
+  myDBFAttrListWidget->setSelectionMode( QListWidget::SingleSelection );
+  myDBFAttrListWidget->setEditTriggers( QListWidget::NoEditTriggers );
+  myDBFAttrListWidget->setViewMode( QListWidget::ListMode );
+  myDBFAttrListWidget->setSortingEnabled( false );
 
   // Layout
   QVBoxLayout* aPageLayout = new QVBoxLayout;
   aPageLayout->setMargin( 5 );
   aPageLayout->setSpacing( 5 );
   aPageLayout->addWidget( myAvAttrLabel );
-  aPageLayout->addWidget( myDBFAttr );
+  aPageLayout->addWidget( myDBFAttrListWidget );
   aPage->setLayout( aPageLayout );
 
   return aPage;
@@ -143,17 +144,17 @@ QWizardPage* HYDROGUI_ImportLandCoverMapDlg::createPage3() {
 
   QWizardPage* aPage = new QWizardPage( mainFrame() );
   QFrame* aFrame = new QFrame( aPage );
-  myCLabel = new QLabel();
-  myCLabel->setText("Correspondence");
+  myCorrLabel = new QLabel();
+  myCorrLabel->setText(tr ("CORR"));
   
-  myTableW = new QTableWidget();
+  myCorrTableWidget = new QTableWidget();
 
   // Layout
   QVBoxLayout* aPageLayout = new QVBoxLayout;
   aPageLayout->setMargin( 5 );
   aPageLayout->setSpacing( 5 );
-  aPageLayout->addWidget( myCLabel );
-  aPageLayout->addWidget( myTableW );
+  aPageLayout->addWidget( myCorrLabel );
+  aPageLayout->addWidget( myCorrTableWidget );
   aPage->setLayout( aPageLayout );
   return aPage;
 }
@@ -161,47 +162,34 @@ QWizardPage* HYDROGUI_ImportLandCoverMapDlg::createPage3() {
 
 HYDROGUI_ImportLandCoverMapDlg::~HYDROGUI_ImportLandCoverMapDlg()
 {
-  myPolygons->clear();
-  myDBFAttr->clear();
+  myPolygonsListWidget->clear();
+  myDBFAttrListWidget->clear();
 }
 
 void HYDROGUI_ImportLandCoverMapDlg::reset()
 {
-  myPolygons->clear();
-  myDBFAttr->clear();
+  myPolygonsListWidget->clear();
+  myDBFAttrListWidget->clear();
 }
 
 void HYDROGUI_ImportLandCoverMapDlg::setPolygonNames( const QStringList& theNames )
 {
-  myPolygons->clear();
-  myPolygons->addItems( theNames );
+  myPolygonsListWidget->clear();
+  myPolygonsListWidget->addItems( theNames );
 }
 
 void HYDROGUI_ImportLandCoverMapDlg::setAttributeNames( const QStringList& theAttrNames )
 {
-  myDBFAttr->clear();
-  myDBFAttr->addItems( theAttrNames );
+  myDBFAttrListWidget->clear();
+  myDBFAttrListWidget->addItems( theAttrNames );
 }
 
-/*void HYDROGUI_ImportLandCoverMapDlg::removePolygonNames( const QStringList& theNames )
-{
-  QList<QListWidgetItem*> aFoundItems;
-
-  foreach ( const QString& aName, theNames ) {
-    aFoundItems = myPolygons->findItems( aName, Qt::MatchExactly );
-    foreach ( QListWidgetItem* anItem, aFoundItems ) {
-      anItem = myPolygons->takeItem( myPolygons->row( anItem ) );
-      delete anItem;
-    }
-  }
-}*/
-
 void HYDROGUI_ImportLandCoverMapDlg::setSelectedPolygonNames( const QStringList& theNames )
 {
-  myPolygons->clearSelection();
+  myPolygonsListWidget->clearSelection();
 
   foreach( const QString aName, theNames ) {
-    QList<QListWidgetItem*> anItems = myPolygons->findItems( aName, Qt::MatchExactly );
+    QList<QListWidgetItem*> anItems = myPolygonsListWidget->findItems( aName, Qt::MatchExactly );
     if ( anItems.count() == 1 ) {
       anItems.first()->setSelected( true );
     }
@@ -209,27 +197,27 @@ void HYDROGUI_ImportLandCoverMapDlg::setSelectedPolygonNames( const QStringList&
 }
 
 void HYDROGUI_ImportLandCoverMapDlg::onItemSelectionChanged()
-{
-  emit selectionChanged( getSelectedPolygonNames() );
+{ 
+  int aCurIndex = getCurrentWizardIndex();
+  if (aCurIndex == 0 && getViewerState())
+    emit selectionChanged( getSelectedPolygonNames() );
 }
 
 QStringList HYDROGUI_ImportLandCoverMapDlg::getSelectedPolygonNames() const
 {
   QStringList aSelectedNames;
 
-  QList<QListWidgetItem*> aSelectedItems = myPolygons->selectedItems();
+  QList<QListWidgetItem*> aSelectedItems = myPolygonsListWidget->selectedItems();
   foreach( const QListWidgetItem* anItem, aSelectedItems )
     aSelectedNames << anItem->text();
 
   return aSelectedNames;
 }
 
-
-
 void HYDROGUI_ImportLandCoverMapDlg::onBrowse()
 {
   QString aFilter( tr( "LANDCOVERMAP_FILTER" ) );
-  QString aFileName = SUIT_FileDlg::getFileName( this, "", aFilter, tr( "IMPORT_LANDCOVERMAP_FROM_FILE" ), true );
+  QString aFileName = SUIT_FileDlg::getFileName( this, "", aFilter, tr( "IMPORT_LANDCOVER_MAP_FROM_FILE" ), true );
 
   if( !aFileName.isEmpty() )
   {
@@ -263,91 +251,102 @@ QString HYDROGUI_ImportLandCoverMapDlg::getFileName() const
 }
 
 
-void HYDROGUI_ImportLandCoverMapDlg::FillCorrTable(const QStringList& theFirstColumn, 
+void HYDROGUI_ImportLandCoverMapDlg::FillCorrespondenceTable(const QStringList& theFirstColumn, 
                                                    const QStringList& theSecondColumn,
+                                                   const QVector<int> theDefCBIndices,
                                                    const QVector<QColor> theColors)
 {
-  int FCSize = theFirstColumn.size();
-  int SCSize = theSecondColumn.size();
+  int aFCSize = theFirstColumn.size();  // == theDefCBIndices.size() !
+  int aSCSize = theSecondColumn.size(); 
 
   myStrColors = theColors;
 
-  myTableW->setRowCount(FCSize);
-  myTableW->setColumnCount(3);
-  QTableWidgetItem* Header_1 = new QTableWidgetItem(QString("Attribute"), QTableWidgetItem::Type);
-  QTableWidgetItem* Header_2 = new QTableWidgetItem(QString("Strickler Type"), QTableWidgetItem::Type);
-  QTableWidgetItem* Header_3 = new QTableWidgetItem(QString("Color"), QTableWidgetItem::Type);
-  myTableW->setHorizontalHeaderItem(0, Header_1);
-  myTableW->setHorizontalHeaderItem(1, Header_2);
-  myTableW->setHorizontalHeaderItem(2, Header_3);
+  myCorrTableWidget->setRowCount(aFCSize);
+  myCorrTableWidget->setColumnCount(3);
+  QTableWidgetItem* aHeader_1 = new QTableWidgetItem(QString(tr("TABLE_H1")), QTableWidgetItem::Type);
+  QTableWidgetItem* aHeader_2 = new QTableWidgetItem(QString(tr("TABLE_H2")), QTableWidgetItem::Type);
+  QTableWidgetItem* aHeader_3 = new QTableWidgetItem(QString(tr("TABLE_H3")), QTableWidgetItem::Type);
+  myCorrTableWidget->setHorizontalHeaderItem(0, aHeader_1);
+  myCorrTableWidget->setHorizontalHeaderItem(1, aHeader_2);
+  myCorrTableWidget->setHorizontalHeaderItem(2, aHeader_3);
+  myCorrTableWidget->horizontalHeader()->setSectionResizeMode( QHeaderView::ResizeToContents );
   //
-  for (int i = 0; i < FCSize; i++)
+  for (int i = 0; i < aFCSize; i++)
   {
     QTableWidgetItem* aTWI = new QTableWidgetItem();
     aTWI->setText(theFirstColumn.at(i));
     aTWI->setFlags(Qt::ItemIsUserCheckable);
-    myTableW->setItem(i, 0, aTWI);
+    myCorrTableWidget->setItem(i, 0, aTWI);
   }
   //
   QSignalMapper* signalMap = new QSignalMapper();
-  for (int i = 0; i < FCSize; i++)
+  for (int i = 0; i < aFCSize; i++)
   {
     QComboBox* aCB = new QComboBox();
     connect(aCB, SIGNAL(currentIndexChanged(int)), signalMap, SLOT(map()));
     signalMap->setMapping(aCB, i);
     aCB->addItems(theSecondColumn);
-    myTableW->setCellWidget(i, 1, aCB);
+    aCB->setCurrentIndex(theDefCBIndices[i]);
+    myCorrTableWidget->setCellWidget(i, 1, aCB);
   }
-  connect(signalMap, SIGNAL(mapped(int)), this, SLOT(OnComboBoxColorChanged(int)));
+  connect(signalMap, SIGNAL(mapped(int)), this, SLOT(onComboBoxColorChanged(int)));
+
   //
-  for (int i = 0; i < FCSize; i++)
+  for (int i = 0; i < aFCSize; i++)
   {
-    myTableW->setItem(i, 2, new QTableWidgetItem);
-    //take the first color from array; this color corresponds to the first item in the combo box
-    myTableW->item(i, 2)->setBackground(myStrColors[0]);
+    QTableWidgetItem* aTWI = new QTableWidgetItem;
+    aTWI->setBackground(myStrColors[theDefCBIndices[i]]);
+    aTWI->setFlags(Qt::NoItemFlags);
+    myCorrTableWidget->setItem(i, 2, aTWI);
   }
 
 }
 
 QString HYDROGUI_ImportLandCoverMapDlg::getSelectedFieldName() const
 {
-  return myDBFAttr->selectedItems().first()->text();
+  return myDBFAttrListWidget->selectedItems().first()->text();
+}
+
+void HYDROGUI_ImportLandCoverMapDlg::setFirstPageState(bool theState)
+{
+  myFirstPageState = theState;
 }
 
-void HYDROGUI_ImportLandCoverMapDlg::setFirstPageState(bool bState)
+bool HYDROGUI_ImportLandCoverMapDlg::getFirstPageState() const
 {
-  myFirstPageState = bState;
+  return myFirstPageState;
 }
 
+
 bool HYDROGUI_ImportLandCoverMapDlg::acceptCurrent() const
 {
   //Check the state of the current page
-  int CurrPage = wizard()->currentIndex();
-  switch ( CurrPage )
+  int aCurrPage = getCurrentWizardIndex();
+  switch ( aCurrPage )
   {
     case 0:
     {
-      if (!myFirstPageState)
-      {
-        SUIT_MessageBox::warning( module()->getApp()->desktop(), tr( "LCM_IMPORT_WARNING" ), "File isn't chosen");
+      //this method verifies first page
+      if (!CheckFirstPageFilling())
         return false;
-      }
-      if (myPolygons->selectedItems().empty())
+      break;
+    }
+    case 1:
+    {
+      if (myDBFAttrListWidget->selectedItems().empty())
       {
-        SUIT_MessageBox::warning( module()->getApp()->desktop(), tr( "LCM_IMPORT_WARNING" ), "Polygons isn't selected");
+        SUIT_MessageBox::warning( module()->getApp()->desktop(), tr( "LCM_IMPORT_WARNING" ), tr ("ATTRS_ISNT_SELECTED"));
         return false;
       }
-      if (getAttrCheckBoxState() && !getDbfState())
-      {
-         SUIT_MessageBox::critical( module()->getApp()->desktop(), tr( "DBF_LOAD_ERROR" ), "Cant open DBF file or it's corrupted");
-         return false;
-      }
       break;
     }
-    case 1:
+    case 2: //last page
     {
-      if (myDBFAttr->selectedItems().empty())
+      if (this->isPolygonListEmpty())
+      {
+        SUIT_MessageBox::warning( module()->getApp()->desktop(), tr( "LCM_IMPORT_WARNING" ), tr("POLYGONS_ISNT_SELECTED"));
         return false;
+      }
       break;
     }
     default:
@@ -356,20 +355,20 @@ bool HYDROGUI_ImportLandCoverMapDlg::acceptCurrent() const
   return true;
 }
 
-void HYDROGUI_ImportLandCoverMapDlg::GetAttribute2StricklerCorr(QStringList& AttrValues, QStringList& ST)
+void HYDROGUI_ImportLandCoverMapDlg::getValAttr2StricklerTypeCorr(QStringList& theAttrValues, QStringList& theST)
 {
-  int aRowCount = myTableW->rowCount();
+  int aRowCount = myCorrTableWidget->rowCount();
   for (int i = 0; i < aRowCount; i++)
   {
-    QTableWidgetItem* aTWI = myTableW->item(i, 0);
-    AttrValues.push_back(aTWI->text());
+    QTableWidgetItem* aTWI = myCorrTableWidget->item(i, 0);
+    theAttrValues.push_back(aTWI->text());
   }
 
   for (int i = 0; i < aRowCount; i++)
   {
-    QWidget* aW = myTableW->cellWidget(i, 1);
+    QWidget* aW = myCorrTableWidget->cellWidget(i, 1);
     QComboBox* aCB = dynamic_cast<QComboBox*> (aW);
-    ST.push_back(aCB->currentText());
+    theST.push_back(aCB->currentText());
   }
 }
 
@@ -378,7 +377,7 @@ QVector<int> HYDROGUI_ImportLandCoverMapDlg::getSelectedPolygonIndices() const
 {
   QVector<int> aSelectedIndices;
 
-  QModelIndexList aSelectedItems = myPolygons->selectionModel()->selectedIndexes();
+  QModelIndexList aSelectedItems = myPolygonsListWidget->selectionModel()->selectedIndexes();
   foreach( QModelIndex index, aSelectedItems ) {
     aSelectedIndices << index.row();
   }
@@ -399,19 +398,74 @@ bool HYDROGUI_ImportLandCoverMapDlg::getAttrCheckBoxState() const
   return myAttrCheckBox->isChecked();
 }
 
-void HYDROGUI_ImportLandCoverMapDlg::OnComboBoxColorChanged(int theInd)
+void HYDROGUI_ImportLandCoverMapDlg::onComboBoxColorChanged(int theInd)
 {
-  QComboBox* CB = qobject_cast<QComboBox*> (myTableW->cellWidget(theInd, 1));
-  int CurIndOfCB = CB->currentIndex();
-  myTableW->item(theInd, 2)->setBackground(myStrColors[CurIndOfCB]);
+  QComboBox* CB = qobject_cast<QComboBox*> (myCorrTableWidget->cellWidget(theInd, 1));
+  int aCurIndOfCB = CB->currentIndex();
+  myCorrTableWidget->item(theInd, 2)->setBackground(myStrColors[aCurIndOfCB]);
 }
 
-void HYDROGUI_ImportLandCoverMapDlg::setDbfState(bool _state)
+void HYDROGUI_ImportLandCoverMapDlg::setDbfState(bool theState)
 {
-  myDbfState = _state;
+  myDbfState = theState;
 }
 
 bool HYDROGUI_ImportLandCoverMapDlg::getDbfState() const
 {
   return myDbfState;
-}
\ No newline at end of file
+}
+
+void HYDROGUI_ImportLandCoverMapDlg::setDbfRecordsNb(int theRecordsNbs)
+{
+  myDbfRecordsNbs = theRecordsNbs;
+}
+
+int HYDROGUI_ImportLandCoverMapDlg::getDbfRecordsNb() const
+{
+  return myDbfRecordsNbs;
+}
+
+int HYDROGUI_ImportLandCoverMapDlg::getCurrentWizardIndex() const
+{
+  return wizard()->currentIndex();
+}
+
+void HYDROGUI_ImportLandCoverMapDlg::setViewerState(bool theState)
+{
+  myUpdateViewerState = theState;
+}
+
+bool HYDROGUI_ImportLandCoverMapDlg::getViewerState() const
+{
+  return myUpdateViewerState;
+}
+
+bool HYDROGUI_ImportLandCoverMapDlg::isPolygonListEmpty() const
+{
+  return myPolygonsListWidget->selectedItems().empty();
+}
+
+bool HYDROGUI_ImportLandCoverMapDlg::CheckFirstPageFilling() const
+{
+  if (!this->getFirstPageState())
+  {
+    SUIT_MessageBox::warning( module()->getApp()->desktop(), tr( "LCM_IMPORT_WARNING" ), tr("FILE_ISNT_CHOSEN"));
+    return false;
+  }
+  if (this->isPolygonListEmpty())
+  {
+    SUIT_MessageBox::warning( module()->getApp()->desktop(), tr( "LCM_IMPORT_WARNING" ), tr("POLYGONS_ISNT_SELECTED"));
+    return false;
+  }
+  if (this->getAttrCheckBoxState() && !this->getDbfState())
+  {
+     SUIT_MessageBox::critical( module()->getApp()->desktop(), tr( "DBF_LOAD_ERROR" ), tr("DBF_LOAD_ERR_MESS"));
+     return false;
+  }
+  if (this->getAttrCheckBoxState() && this->getDbfRecordsNb() == 0)
+  {
+     SUIT_MessageBox::warning( module()->getApp()->desktop(), tr( "DBF_NB_RECORDS_IS_NULL" ), tr("DBF_NB_RECORDS_IS_NULL_MESS"));
+     return false;
+  }
+  return true;
+}