Salome HOME
lot 10 - warnings for DTM - untested
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_ImportPolylineOp.cxx
index 257352f1b1567c14699399e8aa1b0d80b2a72de5..8889bd5c45d786d185948146f1d5f6474c5e562e 100644 (file)
@@ -28,6 +28,7 @@
 #include <HYDROData_Bathymetry.h>
 #include <HYDROData_Iterator.h>
 #include <HYDROData_ShapeFile.h>
+#include <HYDROData_Tool.h>
 
 #include <HYDROData_Profile.h>
 
@@ -39,6 +40,7 @@
 #include <QFile>
 #include <QFileInfo>
 #include <SUIT_MessageBox.h>
+#include <gp_XY.hxx>
 
 
 HYDROGUI_ImportPolylineOp::HYDROGUI_ImportPolylineOp( HYDROGUI_Module* theModule )
@@ -66,32 +68,34 @@ void HYDROGUI_ImportPolylineOp::startOperation()
   myFileDlg->exec();
 }
 
-void HYDROGUI_ImportPolylineOp::onApply()
+NCollection_Sequence<Handle(HYDROData_Entity)> HYDROGUI_ImportPolylineOp::ImportPolyOp(
+  const QStringList& aFileNames, Handle(HYDROData_Document) theDocument,
+  HYDROGUI_Module* module, HYDROData_ShapeFile::ImportShapeType theShapeTypesToImport)
 {
-  if ( !myFileDlg )
-  {
-    abort();
-    return;
-  }
-
-  QStringList aFileNames = myFileDlg->selectedFiles();
-  
-  QApplication::setOverrideCursor( Qt::WaitCursor );  
-  startDocOperation();
-
+  NCollection_Sequence<Handle(HYDROData_Entity)> importedEntities;
   foreach (QString aFileName, aFileNames) 
   {
     if ( aFileName.isEmpty() )
       continue;
 
     QString anExt = aFileName.split('.', QString::SkipEmptyParts).back();
-
+    anExt.toLower();
+    bool importXY = false;
+    if (anExt == "xyz")
+    {
+      importXY = SUIT_MessageBox::question( module->getApp()->desktop(),
+        tr( "IMPORT_POLYLINE" ),
+        tr( "IMPORT_POLYLINE_XY_PART_ONLY" ),
+        QMessageBox::Yes | QMessageBox::No, 
+        SUIT_MessageBox::Yes) == SUIT_MessageBox::Yes;
+    }
     if (anExt == "shp")
     {
       HYDROData_ShapeFile anImporter;
       NCollection_Sequence<Handle(HYDROData_Entity)> theEntities;
       int aShapeTypeOfFile = -1;
-      int aStat = anImporter.ImportPolylines(doc(), aFileName, theEntities, aShapeTypeOfFile ); 
+      int aStat = anImporter.ImportPolylines(theDocument, aFileName, theEntities, 
+        aShapeTypeOfFile, theShapeTypesToImport ); 
       if (aStat == 1 || aStat == 2)
       {
         //try to import DBF
@@ -116,7 +120,7 @@ void HYDROGUI_ImportPolylineOp::onApply()
               }
 
               if (indNameAttrFound != -1)
-                bUseNameAttrFound = SUIT_MessageBox::question( module()->getApp()->desktop(),
+                bUseNameAttrFound = SUIT_MessageBox::question( module->getApp()->desktop(),
                                tr( "IMPORT_POLYLINE" ),
                                tr( "IMPORT_POLYLINE_USE_NAME_ATTR" ),
                                QMessageBox::Yes | QMessageBox::No, 
@@ -167,26 +171,61 @@ void HYDROGUI_ImportPolylineOp::onApply()
         }        
       }
       if (aStat == 1)
-        UpdateView(theEntities);
+        UpdateView(module, theEntities);
       else if (aStat == 2)
       {
-        UpdateView(theEntities);
-        SUIT_MessageBox::information(module()->getApp()->desktop(), 
-          tr( "IMPORT_POLYLINE" ), "Contour of the polygon(s) have been imported as polyline(s)");
+        UpdateView(module, theEntities);
+        if (theShapeTypesToImport == HYDROData_ShapeFile::ImportShapeType_All) //if other flag = > no need to show this messagebox
+          SUIT_MessageBox::information(module->getApp()->desktop(), 
+            tr( "IMPORT_POLYLINE" ), tr ("POLYGON_IMPORTED_AS_POLYLINE"));
       }
       else
       {
-        QString aMess = "Cannot import content of this file as polyline;\n";
+        QString aMess;
+        if (theShapeTypesToImport == HYDROData_ShapeFile::ImportShapeType::ImportShapeType_Polygon)
+          aMess += tr ("POLYLINE_IMPORT_FAILED_AS_POLYGON") + ";\n";
+        else
+          aMess += tr ("POLYLINE_IMPORT_FAILED_AS_POLYLINE") + ";\n";
+
         if (aStat == -1)
-          aMess += "Cannot open SHP file";
+          aMess += tr ("CANT_OPEN_SHP");
         else if (aStat == -2)
-          aMess += "Cannot open SHX file";
+          aMess += tr ("CANT_OPEN_SHX");
         else 
-          aMess += "The shape type of file is " + anImporter.GetShapeTypeName(aShapeTypeOfFile);
-        SUIT_MessageBox::warning( module()->getApp()->desktop(), tr( "IMPORT_POLYLINE" ), aMess);
+          aMess += tr ("SHAPE_TYPE_IS") + anImporter.GetShapeTypeName(aShapeTypeOfFile);
+        SUIT_MessageBox::warning( module->getApp()->desktop(), tr( "IMPORT_POLYLINE" ), aMess);
       }
+      importedEntities.Append(theEntities);
+    }
+    else if ( anExt == "xy" || (importXY && anExt == "xyz"))
+    {
+      if (!HYDROData_Tool::importPolylineFromXYZ(aFileName, theDocument, true, importedEntities))
+        SUIT_MessageBox::warning( module->getApp()->desktop(), tr( "IMPORT_POLYLINE" ), tr( "NO_ONE_POLYLINE_IMPORTED" ));
+    }
+    else if (anExt == "xyz")
+    {
+      if (!HYDROData_Tool::importPolylineFromXYZ(aFileName, theDocument, false, importedEntities))
+        SUIT_MessageBox::warning( module->getApp()->desktop(), tr( "IMPORT_POLYLINE" ), tr( "NO_ONE_POLYLINE_IMPORTED" ));
     }
   }
+  return importedEntities;
+}
+
+void HYDROGUI_ImportPolylineOp::onApply()
+{
+  if ( !myFileDlg )
+  {
+    abort();
+    return;
+  }
+
+  QStringList aFileNames = myFileDlg->selectedFiles();
+  
+  QApplication::setOverrideCursor( Qt::WaitCursor );  
+  startDocOperation();
+
+  ImportPolyOp(aFileNames, doc(), module(), HYDROData_ShapeFile::ImportShapeType_All);
   if (!aFileNames.empty())
   {
     commitDocOperation();
@@ -199,16 +238,16 @@ void HYDROGUI_ImportPolylineOp::onApply()
   QApplication::restoreOverrideCursor();
 }
 
-void HYDROGUI_ImportPolylineOp::UpdateView( NCollection_Sequence<Handle(HYDROData_Entity)>& anEntities)
+void HYDROGUI_ImportPolylineOp::UpdateView( HYDROGUI_Module* module, NCollection_Sequence<Handle(HYDROData_Entity)>& anEntities)
 {
-  size_t anActiveViewId = HYDROGUI_Tool::GetActiveGraphicsViewId( module() );
+  size_t anActiveViewId = HYDROGUI_Tool::GetActiveGraphicsViewId( module );
   if ( anActiveViewId == 0 )
-    anActiveViewId = HYDROGUI_Tool::GetActiveOCCViewId( module() );
+    anActiveViewId = HYDROGUI_Tool::GetActiveOCCViewId( module );
 
   for (int i = 1; i <= anEntities.Size() ; i++)
   {
     anEntities(i)->Update();
-    module()->setObjectVisible( anActiveViewId, anEntities(i), true );
-    module()->setIsToUpdate( anEntities(i) );
+    module->setObjectVisible( anActiveViewId, anEntities(i), true );
+    module->setIsToUpdate( anEntities(i) );
   }
 }