#include <LightApp_Application.h>
+#include <SUIT_MessageBox.h>
+#include <SUIT_Desktop.h>
+
#include <TopoDS.hxx>
#include <TopoDS_Face.hxx>
#include <TopoDS_Wire.hxx>
QString anObjectName = HYDROGUI_Tool::GenerateObjectName( module(), tr( "DEFAULT_LAND_COVER_NAME" ) );
- QStringList aSelectedPolylines;
+ HYDROGUI_ListModel::Object2VisibleList aSelectedPolylines;
QString aSelectedStricklerType;
if ( myIsEdit )
for ( int i = aRefPolylines.Lower(); i <= aRefPolylines.Upper(); i++ ) {
Handle(HYDROData_PolylineXY) aPolyline = Handle(HYDROData_PolylineXY)::DownCast( aRefPolylines.Value( i ) );
if ( !aPolyline.IsNull() ) {
- aSelectedPolylines.append( aPolyline->GetName() );
+ aSelectedPolylines.append( HYDROGUI_ListModel::Object2Visible( aPolyline, true ) );
}
}
}
}
aPanel->setObjectName( anObjectName );
- aPanel->setPolylineNames( HYDROGUI_Tool::FindExistingObjectsNames( doc(), KIND_POLYLINEXY ) );
// Construct a list of unique names of all Strickler types defined within the data model
QStringList aStricklerTypes;
HYDROData_Iterator anIterator( doc(), KIND_STRICKLER_TABLE );
Handle(HYDROData_StricklerTable)::DownCast( anIterator.Current() );
if ( !aStricklerTableObj.IsNull() )
{
- // TODO: implement GetTypes method in data model
- //QStringList aTypes = aStricklerTableObj->GetTypes();
- // The code below is a sample of data filling list of Strickler types
- QStringList aTypes;
- aTypes.append("Zones de champs, prairies, sans cultures");
- aTypes.append("Canaux naturels");
- aTypes.append("Zones à faible urbanization (bourg)");
- QStringList::const_iterator anIt = aTypes.begin(), aLast = aTypes.end();
- for( ; anIt!=aLast; anIt++ )
+ // Get Strickler table data from the data model
+ TColStd_SequenceOfExtendedString aTypes = aStricklerTableObj->GetTypes();
+ for ( int i = 1; i <= aTypes.Length(); i++ )
{
- QString aType = *anIt;
+ QString aType = HYDROGUI_Tool::ToQString( aTypes.Value( i ) );
if ( !aType.isEmpty() && !aStricklerTypes.contains( aType ))
aStricklerTypes.append( aType );
}
aPanel->blockSignals( false );
- aPanel->setSelectedPolylineNames( aSelectedPolylines );
+ aPanel->includePolylines( aSelectedPolylines );
aPanel->setSelectedAdditionalParamName( aSelectedStricklerType );
}
HYDROGUI_LandCoverDlg* aPanel = new HYDROGUI_LandCoverDlg( module(), getName() );
connect( aPanel, SIGNAL( CreatePreview( const QStringList& ) ),
this, SLOT( onCreatePreview( const QStringList& ) ) );
+ connect( aPanel, SIGNAL( addPolylines() ), SLOT( onAddPolylines() ) );
+ connect( aPanel, SIGNAL( removePolylines() ), SLOT( onRemovePolylines() ) );
return aPanel;
}
HYDROData_SequenceOfObjects aZonePolylines;
QString aStricklerType;
- QStringList aSelectedPolylineNames = aPanel->getSelectedPolylineNames();
+ QStringList aSelectedPolylineNames = aPanel->getPolylineNames();
QStringList::const_iterator anIt = aSelectedPolylineNames.begin(), aLast = aSelectedPolylineNames.end();
for( ; anIt!=aLast; anIt++ )
{
if ( aViewManager && myPreviewPrs )
{
- // TODO: Temporary commented until GetFillingColor, DefaultFillingColor,
- // GetBorderColor and DefaultBorderColor data model methods will be implemented
- /*
QColor aFillingColor = HYDROData_LandCover::DefaultFillingColor();
QColor aBorderColor = HYDROData_LandCover::DefaultBorderColor();
if ( !myEditedObject.IsNull() ) {
myPreviewPrs->setFillingColor( aFillingColor, false, false );
myPreviewPrs->setBorderColor( aBorderColor, false, false );
- */
TopoDS_Face aFace;
if( !aZoneShape.IsNull() )
QApplication::restoreOverrideCursor();
}
+void HYDROGUI_LandCoverOp::onAddPolylines()
+{
+ HYDROGUI_LandCoverDlg* aPanel = ::qobject_cast<HYDROGUI_LandCoverDlg*>( inputPanel() );
+ if ( !aPanel )
+ return;
+
+ // Add polylines selected in the module browser
+ Handle(HYDROData_PolylineXY) aPolyXY;
+ HYDROGUI_ListModel::Object2VisibleList aSelectedPolylines;
+ HYDROData_SequenceOfObjects aSeq = HYDROGUI_Tool::GetSelectedObjects( module() );
+
+ if ( aSeq.IsEmpty() || !confirmPolylinesChange() )
+ return;
+
+ for( int anIndex = 1, aLength = aSeq.Length(); anIndex <= aLength; anIndex++ )
+ {
+ aPolyXY = Handle(HYDROData_PolylineXY)::DownCast( aSeq.Value( anIndex ));
+ if (!aPolyXY.IsNull())
+ aSelectedPolylines.append( HYDROGUI_ListModel::Object2Visible( aPolyXY, true ) );
+ }
+
+ aPanel->includePolylines( aSelectedPolylines );
+ // TODO: create preview of included polylines
+}
+
+void HYDROGUI_LandCoverOp::onRemovePolylines()
+{
+ // Remove selected polylines from the calculation case
+ HYDROGUI_LandCoverDlg* aPanel = ::qobject_cast<HYDROGUI_LandCoverDlg*>( inputPanel() );
+ if ( !aPanel )
+ return;
+
+ QStringList aSelectedList = aPanel->getSelectedPolylineNames();
+ if ( aSelectedList.isEmpty() || !confirmPolylinesChange() )
+ return;
+
+ HYDROGUI_ListModel::Object2VisibleList aSelectedPolylines;
+ for (int i = 0; i < aSelectedList.length(); i++)
+ {
+ Handle(HYDROData_PolylineXY) anObject = Handle(HYDROData_PolylineXY)::DownCast(
+ HYDROGUI_Tool::FindObjectByName( module(), aSelectedList.at(i) ) );
+ if ( anObject.IsNull() )
+ continue;
+
+ aSelectedPolylines.append( HYDROGUI_ListModel::Object2Visible( anObject, true ) );
+ }
+
+ module()->update( UF_OCCViewer );
+ aPanel->excludePolylines( aSelectedPolylines );
+}
+
void HYDROGUI_LandCoverOp::closePreview()
{
if( myPreviewPrs )
myPreviewPrs = 0;
}
}
+
+bool HYDROGUI_LandCoverOp::confirmPolylinesChange() const
+{
+ if ( myEditedObject.IsNull() )
+ return true;
+
+ // Check if the land cover object is already modified or not
+ bool isConfirmed = myEditedObject->IsMustBeUpdated();
+ if ( !isConfirmed )
+ {
+ // If not modified check if the land cover has already defined polylines
+ HYDROData_SequenceOfObjects aSeq = myEditedObject->GetPolylines();
+ if ( aSeq.Length() > 0 )
+ {
+ // If there are already defined polylines then ask a user to confirm land cover recalculation
+ isConfirmed = ( SUIT_MessageBox::question( module()->getApp()->desktop(),
+ tr( "POLYLINES_CHANGED" ),
+ tr( "CONFIRM_LAND_COVER_RECALCULATION" ),
+ QMessageBox::Yes | QMessageBox::No,
+ QMessageBox::No ) == QMessageBox::Yes );
+ }
+ else
+ {
+ isConfirmed = true; // No polylines - nothing to recalculate
+ }
+ }
+ return isConfirmed;
+}