+void HYDROGUI_CalculationOp::setAvailableGroups()
+{
+ HYDROGUI_CalculationDlg* aPanel =
+ ::qobject_cast<HYDROGUI_CalculationDlg*>( inputPanel() );
+
+ HYDROData_SequenceOfObjects aSeq = myEditedObject->GetGeometryGroups();
+ QStringList aList, anEntryList;
+ getNamesAndEntries( aSeq, aList, anEntryList );
+
+ QStringList aGroupsNames;
+
+ HYDROData_SequenceOfObjects anObjs = myEditedObject->GetGeometryObjects();
+ for( int anIndex = 1, aLength = anObjs.Length(); anIndex <= aLength; anIndex++ )
+ {
+ Handle_HYDROData_Object anObj = Handle_HYDROData_Object::DownCast( anObjs.Value( anIndex ) );
+ HYDROData_SequenceOfObjects aGroups = anObj->GetGroups();
+ for( int aGIndex = 1, aGLength = aGroups.Length(); aGIndex <= aGLength; aGIndex++ )
+ {
+ Handle_HYDROData_ShapesGroup aGroup = Handle_HYDROData_ShapesGroup::DownCast( aGroups.Value( aGIndex ) );
+ aGroupsNames.append( aGroup->GetName() );
+ }
+ }
+ if( myEditedObject->IsMustBeUpdated() ) {
+ for( int anIndex = 1, aLength = aSeq.Length(); anIndex <= aLength; anIndex++ ) {
+ Handle(HYDROData_ShapesGroup) aGeomGroup =
+ Handle(HYDROData_ShapesGroup)::DownCast( aSeq.Value( anIndex ) );
+ if ( !aGeomGroup.IsNull() && !aGroupsNames.contains( aGeomGroup->GetName() ) ) {
+ myEditedObject->RemoveGeometryGroup( aGeomGroup );
+ }
+ }
+ }
+
+ aPanel->setAvailableGroups( aGroupsNames );
+ aPanel->includeGroups( aList );
+
+ bool isUpdated = myEditedObject->IsMustBeUpdated();
+}
+
+void HYDROGUI_CalculationOp::onAddGroups()
+{
+ HYDROGUI_CalculationDlg* aPanel =
+ ::qobject_cast<HYDROGUI_CalculationDlg*>( inputPanel() );
+ if ( !aPanel )
+ return;
+
+ // Add geometry objects selected in the module browser to the calculation case
+ QStringList aSelectedList = aPanel->getSelectedAvailableGroups();
+ if ( aSelectedList.isEmpty() || !confirmRegionsChange() )
+ return;
+
+ QStringList anAddedList;
+ for (int i = 0; i < aSelectedList.length(); i++)
+ {
+ Handle(HYDROData_ShapesGroup) aGroup = Handle(HYDROData_ShapesGroup)::DownCast(
+ HYDROGUI_Tool::FindObjectByName( module(), aSelectedList.at( i ) ) );
+ if ( aGroup.IsNull() )
+ continue;
+
+ if ( myEditedObject->AddGeometryGroup( aGroup ) )
+ anAddedList.append( aGroup->GetName() );
+ }
+
+ if ( !anAddedList.isEmpty() )
+ {
+ aPanel->includeGroups( anAddedList );
+ }
+}
+
+void HYDROGUI_CalculationOp::onRemoveGroups()
+{
+ // Remove selected objects from the calculation case
+ HYDROGUI_CalculationDlg* aPanel =
+ ::qobject_cast<HYDROGUI_CalculationDlg*>( inputPanel() );
+ if ( !aPanel )
+ return;
+
+ QStringList aSelectedList = aPanel->getSelectedGroups();
+ if ( aSelectedList.isEmpty() || !confirmRegionsChange() )
+ return;
+
+ for (int i = 0; i < aSelectedList.length(); i++)
+ {
+ Handle(HYDROData_ShapesGroup) aGroup = Handle(HYDROData_ShapesGroup)::DownCast(
+ HYDROGUI_Tool::FindObjectByName( module(), aSelectedList.at(i) ) );
+ if ( aGroup.IsNull() )
+ continue;
+
+ myEditedObject->RemoveGeometryGroup( aGroup );
+ }
+
+ aPanel->excludeGroups( aSelectedList );
+}
+
+void HYDROGUI_CalculationOp::onChangeLandCoverMode( int theMode )
+{
+ HYDROGUI_CalculationDlg* aPanel =
+ ::qobject_cast<HYDROGUI_CalculationDlg*>( inputPanel() );
+ if ( !aPanel )
+ return;
+
+ if ( !confirmLandCoverModeChange() ) {
+ aPanel->setLandCoverMode( myEditedObject->GetAssignmentLandCoverMode() );
+ return;
+ }
+
+ myEditedObject->SetAssignmentLandCoverMode( (HYDROData_CalculationCase::AssignmentMode)theMode );
+ aPanel->setLandCoverMode( theMode );
+}
+
+void HYDROGUI_CalculationOp::onAddLandCovers()
+{
+ HYDROGUI_CalculationDlg* aPanel =
+ ::qobject_cast<HYDROGUI_CalculationDlg*>( inputPanel() );
+ if ( !aPanel )
+ return;
+
+ // Add land covers selected in the module browser to the calculation case
+ QStringList aSelectedList = aPanel->getSelectedAvailableLandCovers();
+ if ( aSelectedList.isEmpty() || !confirmRegionsChange() )
+ return;
+
+ QStringList anAddedList;
+ for (int i = 0; i < aSelectedList.length(); i++)
+ {
+ Handle(HYDROData_LandCover) anObject = Handle(HYDROData_LandCover)::DownCast(
+ HYDROGUI_Tool::FindObjectByName( module(), aSelectedList.at( i ) ) );
+ if ( anObject.IsNull() )
+ continue;
+
+ if ( myEditedObject->AddLandCover( anObject ) )
+ anAddedList.append( anObject->GetName() );
+ }
+
+ if ( !anAddedList.isEmpty() )
+ {
+ aPanel->includeLandCovers( anAddedList, false );
+ // TODO: create preview of included land covers
+ //createPreview();
+ }
+}
+
+void HYDROGUI_CalculationOp::onRemoveLandCovers()
+{
+ // Remove selected objects from the calculation case
+ HYDROGUI_CalculationDlg* aPanel =
+ ::qobject_cast<HYDROGUI_CalculationDlg*>( inputPanel() );
+ if ( !aPanel )
+ return;
+
+ QStringList aSelectedList = aPanel->getSelectedLandCovers();
+ if ( aSelectedList.isEmpty() || !confirmRegionsChange() )
+ return;
+
+ for (int i = 0; i < aSelectedList.length(); i++)
+ {
+ Handle(HYDROData_LandCover) anObject = Handle(HYDROData_LandCover)::DownCast(
+ HYDROGUI_Tool::FindObjectByName( module(), aSelectedList.at(i) ) );
+ if ( anObject.IsNull() )
+ continue;