X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_ImportLandCoverMapOp.cxx;h=9708f6563ee4437f6e19aac542ffec6a09aded9d;hb=f3535c63440d6ca7b7662d92ce6af3526560d56b;hp=14c7e04ba85e2ea04369a3453788e270d2de1088;hpb=01c12054cd573c907306af4292e14b59f5a227d8;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_ImportLandCoverMapOp.cxx b/src/HYDROGUI/HYDROGUI_ImportLandCoverMapOp.cxx index 14c7e04b..9708f656 100644 --- a/src/HYDROGUI/HYDROGUI_ImportLandCoverMapOp.cxx +++ b/src/HYDROGUI/HYDROGUI_ImportLandCoverMapOp.cxx @@ -28,46 +28,42 @@ #include "HYDROGUI_Tool.h" #include "HYDROGUI_ImportLandCoverMapDlg.h" #include "HYDROGUI_Shape.h" -#include #include - #include #include #include #include +#include +#include #include #include -#include - -#include -#include -#include #include +#include +#include #include #include #include - #include #include #include #include -#include - -#include -#include #include #include #include #include + #include +#include +#include -#include +#include + +#define MAX_LCM_NAME_INDEX 1000 -//TODO add definitions into TS file HYDROGUI_ImportLandCoverMapOp::HYDROGUI_ImportLandCoverMapOp( HYDROGUI_Module* theModule ) : HYDROGUI_Operation( theModule ) { @@ -78,23 +74,19 @@ HYDROGUI_ImportLandCoverMapOp::~HYDROGUI_ImportLandCoverMapOp() { erasePreview(); myImporter.Free(); - myAttrV.clear(); + myAttrValue.clear(); } void HYDROGUI_ImportLandCoverMapOp::startOperation() { HYDROGUI_Operation::startOperation(); - if ( !getPreviewManager() ) { - setPreviewManager( ::qobject_cast( - module()->getApp()->getViewManager( OCCViewer_Viewer::Type(), true ) ) ); - } + if ( !getPreviewManager() ) + setPreviewManager( ::qobject_cast( module()->getApp()->getViewManager( OCCViewer_Viewer::Type(), true ) ) ); - HYDROGUI_ImportLandCoverMapDlg* aPanel = - ::qobject_cast( inputPanel() ); - if ( !aPanel ) { + HYDROGUI_ImportLandCoverMapDlg* aPanel = ::qobject_cast( inputPanel() ); + if ( !aPanel ) return; - } aPanel->reset(); } @@ -169,13 +161,13 @@ void HYDROGUI_ImportLandCoverMapOp::onFileSelected() if ( aViewManager && !aCtx.IsNull() ) { HYDROGUI_Shape* aShape = new HYDROGUI_Shape( aCtx, NULL, getPreviewZLayer() ); - //Green color for now.. - aShape->setFillingColor(QColor(0,255,0), false, false); - aShape->setBorderColor(QColor(0,255,0), false, false); + //Preview color is grey + aShape->setFillingColor(QColor(50,50,50), false, false); + aShape->setBorderColor(QColor(50,50,50), false, false); if( !aFace.IsNull() ) aShape->setShape( aFace); - myPolygonName2PrsShape.insert( "polygon_" + QString::number(i), aShape); + myPolygonName2PrsShape.insert( tr( "DEF_POLYGON_NAME" ) + "_" + QString::number(i), aShape); } } @@ -189,9 +181,9 @@ void HYDROGUI_ImportLandCoverMapOp::onFileSelected() aPanel->setFirstPageState(true); // //Try to load DBF-database... - QString theDBFFileName; - theDBFFileName = myFileName.simplified().replace( ".shp", ".dbf", Qt::CaseInsensitive); - bool DBF_Stat = myImporter.DBF_OpenDBF(theDBFFileName); + QString aDBFFileName; + aDBFFileName = myFileName.simplified().replace( ".shp", ".dbf", Qt::CaseInsensitive); + bool DBF_Stat = myImporter.DBF_OpenDBF(aDBFFileName); // TODO: // add MSG BOX if stat is bad if (DBF_Stat) @@ -207,22 +199,20 @@ void HYDROGUI_ImportLandCoverMapOp::onFileSelected() aPanel->setPolygonNames(QStringList()); aPanel->setObjectName(""); QApplication::restoreOverrideCursor(); - QString aMess = "Cannot import content of this file as land cover map;\n"; + QString aMess = tr( "CANNT_IMPORT_LCM" ) + "\n"; if (aStat == -1) - aMess += "Cannot open SHP file"; + aMess += tr( "CANNT_OPEN_SHP" ); else if (aStat == -2) - aMess += "Cannot open SHX file"; + aMess += tr( "CANNT_OPEN_SHX" ); else - aMess += "The shape type of file is " + myImporter.GetShapeTypeName(aShapeTypeOfFile); + aMess += tr ("SHP_TYPEFORMAT_MESS") + myImporter.GetShapeTypeName(aShapeTypeOfFile); SUIT_MessageBox::warning( module()->getApp()->desktop(), tr( "IMPORT_LANDCOVER" ), aMess); commitDocOperation(); myImporter.Free(); //abort(); aPanel->setFirstPageState(false); } - } - } HYDROGUI_InputPanel* HYDROGUI_ImportLandCoverMapOp::createInputPanel() const @@ -250,10 +240,10 @@ bool HYDROGUI_ImportLandCoverMapOp::processApply( int& theUpdateFlags, QStringList aAttrV_T; QStringList aSTL; - aPanel->GetAttribute2StricklerCorr(aAttrV_T, aSTL); + aPanel->getValAttr2StricklerTypeCorr(aAttrV_T, aSTL); QVector aSelIndices = aPanel->getSelectedPolygonIndices(); - foreach ( int Ind, aSelIndices ) //check i-base. + foreach ( int Ind, aSelIndices ) { TopoDS_Shape aShape = myPolygonFaces(Ind + 1); if ( aShape.IsNull() ) @@ -261,24 +251,39 @@ bool HYDROGUI_ImportLandCoverMapOp::processApply( int& theUpdateFlags, QString aST = ""; if (aPanel->getAttrCheckBoxState()) { - HYDROData_ShapeFile::DBF_AttrValue aV = myAttrV[Ind]; - int StricklerTypesInd = aAttrV_T.indexOf(QString(aV.myStrVal)); - aST = aSTL.at(StricklerTypesInd); + HYDROData_ShapeFile::DBF_AttrValue aDataVal = myAttrValue[Ind]; + int aStricklerTypesInd = aAttrV_T.indexOf(QString(aDataVal.myStrVal)); + aST = aSTL.at(aStricklerTypesInd); } // else => ST is empty - aMapFace2ST.Add( TopoDS::Face( aShape ), aST ); //TODO get from tableW + aMapFace2ST.Add( TopoDS::Face( aShape ), aST ); } // myLCM->StoreLandCovers(aMapFace2ST); - QString ObjName; + QString anObjName; if ( !aPanel->getFileName().isEmpty() ) - ObjName = aPanel->getObjectName(); + anObjName = aPanel->getObjectName(); + + Handle_HYDROData_Document aDoc = HYDROData_Document::Document( application()->activeStudy()->id() ); + + //check if name of LCM is already exists + QSet aNameList; + if (aDoc) + { + HYDROData_Iterator anIt( aDoc, KIND_LAND_COVER_MAP ); + for( ; anIt.More(); anIt.Next() ) + aNameList << anIt.Current()->GetName(); + } + + QString aNewName = anObjName; + for ( int i = 1; i < MAX_LCM_NAME_INDEX && aNameList.contains(aNewName); i++) + aNewName = anObjName + "_" + QString::number(i); if( !myLCM.IsNull() ) { - myLCM->SetName( ObjName ); + myLCM->SetName( aNewName ); myLCM->SetColor( Qt::gray ); myLCM->Show(); module()->setIsToUpdate( myLCM ); @@ -288,7 +293,7 @@ bool HYDROGUI_ImportLandCoverMapOp::processApply( int& theUpdateFlags, erasePreview(); myImporter.Free(); - myAttrV.clear(); + myAttrValue.clear(); return true; } @@ -322,9 +327,8 @@ void HYDROGUI_ImportLandCoverMapOp::onSelectionChanged( const QStringList& theSe void HYDROGUI_ImportLandCoverMapOp::onViewerSelectionChanged() { HYDROGUI_ImportLandCoverMapDlg* aPanel = ::qobject_cast( inputPanel() ); - if ( !aPanel ) { + if ( !aPanel ) return; - } OCCViewer_ViewManager* aViewManager = getPreviewManager(); Handle(AIS_InteractiveContext) aCtx = NULL; @@ -349,9 +353,8 @@ void HYDROGUI_ImportLandCoverMapOp::onViewerSelectionChanged() void HYDROGUI_ImportLandCoverMapOp::erasePreview() { - foreach ( HYDROGUI_Shape* aShape, myPolygonName2PrsShape ) { + foreach ( HYDROGUI_Shape* aShape, myPolygonName2PrsShape ) delete aShape; - } myPolygonName2PrsShape.clear(); } @@ -360,9 +363,8 @@ void HYDROGUI_ImportLandCoverMapOp::erasePreview() void HYDROGUI_ImportLandCoverMapOp::abortOperation() { LightApp_Application* anApp = module()->getApp(); - if ( anApp ) { + if ( anApp ) anApp->disconnect( this ); - } erasePreview(); myImporter.Free(); @@ -377,30 +379,33 @@ void HYDROGUI_ImportLandCoverMapOp::onNext( const int theIndex ) if (theIndex == 2) { - //std::vector myAttrV; - int Ind = myFieldList.indexOf(aPanel->getSelectedFieldName()); - if (Ind == -1) + //std::vector myAttrValue; + int anIndOfSelField = myFieldList.indexOf(aPanel->getSelectedFieldName()); + if (anIndOfSelField == -1) return; //aPanel->setSecondPageState(true); - myAttrV.clear(); - myImporter.DBF_GetAttributeList(Ind, myAttrV ); + myAttrValue.clear(); + myImporter.DBF_GetAttributeList(anIndOfSelField, myAttrValue ); mySetOfAttrValues.clear(); - for (size_t i = 0; i < myAttrV.size(); i++) + for (size_t i = 0; i < myAttrValue.size(); i++) { - HYDROData_ShapeFile::DBF_AttrValue aV = myAttrV[i]; - mySetOfAttrValues << QString(aV.myStrVal); //take myStrVal by now.. + HYDROData_ShapeFile::DBF_AttrValue aV = myAttrValue[i]; + mySetOfAttrValues << QString(aV.myStrVal); //take myStrVal for now.. } //Collect all strickler_types QSet aSTSet; Handle_HYDROData_Document aDoc = HYDROData_Document::Document( application()->activeStudy()->id() ); + Handle(HYDROData_StricklerTable) DefStricklerTableObj; if ( aDoc ) { HYDROData_Iterator It( aDoc, KIND_STRICKLER_TABLE ); for( ; It.More(); It.Next() ) { - Handle(HYDROData_StricklerTable) aStricklerTableObj = Handle(HYDROData_StricklerTable)::DownCast( It.Current() ); + Handle(HYDROData_StricklerTable) aStricklerTableObj = Handle(HYDROData_StricklerTable)::DownCast( It.Current() ); + if (DefStricklerTableObj.IsNull()) + DefStricklerTableObj = aStricklerTableObj; if ( !aStricklerTableObj.IsNull()) { const QStringList& aStricklerList = aStricklerTableObj->GetTypes(); @@ -409,17 +414,35 @@ void HYDROGUI_ImportLandCoverMapOp::onNext( const int theIndex ) } } } - QList SetOfAttrValuesList = mySetOfAttrValues.toList(); + + QList aSetOfAttrValuesList = mySetOfAttrValues.toList(); QList aSTSetList = aSTSet.toList(); - QVector STColors; - STColors.reserve(aSTSetList.size()); + QVector aSTColors; + aSTColors.reserve(aSTSetList.size()); foreach (QString str, aSTSetList) { QColor col = aDoc->GetAssociatedColor(str, NULL); - STColors.append (col); + aSTColors.append (col); } - aPanel->FillCorrTable(SetOfAttrValuesList, aSTSetList, STColors); + //add an empty Strickler type + aSTSetList.prepend(""); + aSTColors.prepend(QColor(Qt::gray)); + + QVector aCurCBIndices(aSetOfAttrValuesList.size()); + if (DefStricklerTableObj->GetAttrName() == aPanel->getSelectedFieldName()) + for (int i = 0; i < aSetOfAttrValuesList.size(); i++) + { + QString aST = DefStricklerTableObj->GetType(aSetOfAttrValuesList[i]); + int anIndOfSt = aSTSetList.indexOf(aST); + aCurCBIndices[i] = anIndOfSt; + } + else + //TODO add warning ??? + for (int i = 0; i < aSetOfAttrValuesList.size(); i++) + aCurCBIndices[i] = 0; + + aPanel->FillCorrespondenceTable(aSetOfAttrValuesList, aSTSetList, aCurCBIndices, aSTColors); } } @@ -439,7 +462,7 @@ void HYDROGUI_ImportLandCoverMapOp::onApply() } catch (...) { - SUIT_MessageBox::critical( module()->getApp()->desktop(), tr( "LCM_IMPORT_ERROR" ), "Cant import choosed polygons"); + SUIT_MessageBox::critical( module()->getApp()->desktop(), tr( "LCM_IMPORT_ERROR" ), tr ("CANNT_IMPORT_POLYGONS_FROM_SHP")); aResult = false; }