#include <QApplication>
#include <QKeySequence>
#include <QShortcut>
+#include <QPushButton>
#include <BRep_Builder.hxx>
#include <TopoDS.hxx>
#include <TopTools_IndexedMapOfShape.hxx>
#include <TopExp.hxx>
#include <TopoDS.hxx>
+#include <HYDROData_CompleteCalcCase.h>
+
+
HYDROGUI_CalculationOp::HYDROGUI_CalculationOp( HYDROGUI_Module* theModule, bool theIsEdit, bool IsComplete )
: HYDROGUI_Operation( theModule ),
myIsEdit( theIsEdit ),
myShowGeomObjects( true ),
myShowLandCoverMap( false ),
myShowZones( false ),
- myDenyIncExcl (IsComplete)
+ myIsComplete (IsComplete)
{
- setName( myIsEdit ? tr( "EDIT_CALCULATION" ) : tr( "CREATE_CALCULATION" ) );
+ QString aDlgName;
+ if (myIsComplete)
+ aDlgName = tr( "COMPLETE_CALCULATION" );
+ else
+ aDlgName = myIsEdit ? tr( "EDIT_CALCULATION" ) : tr( "CREATE_CALCULATION" );
+ setName( aDlgName );
}
HYDROGUI_CalculationOp::~HYDROGUI_CalculationOp()
QString anObjectName = HYDROGUI_Tool::GenerateObjectName( module(), tr( "DEFAULT_CALCULATION_CASE_NAME" ) );
myEditedObject.Nullify();
+
if ( myIsEdit )
{
myEditedObject = Handle(HYDROData_CalculationCase)::DownCast( HYDROGUI_Tool::GetSelectedObject( module() ) );
aSeq.Append(anInterPolyList);
getNamesAndEntries( aSeq, aList, anEntryList );
- aPanel->includeGeomObjects( aList );
+ if (!myIsComplete)
+ aPanel->includeGeomObjects( aList );
+ else
+ {
+ //aPanel->includeGeomObjects( aList );
+ aPanel->setAlreadyAddedGeomObjects( aList );
+ //myIncObjAtStart = aSeq;
+ aPanel->hideAvailableGeomObjects( aList );
+ aPanel->setGeomOrderingEnabled(true);
+ }
// set rules
setRules( HYDROData_CalculationCase::DataTag_CustomRules );
aPanel->setObjectName( anObjectName );
aPanel->setEditedObject( myEditedObject );
- myIncObjAtStart.clear();
- myIncObjAtStart = aPanel->getGeometryObjects(false);
-
setGeomObjectsVisible( true );
createPreview( false );
HYDROGUI_InputPanel* HYDROGUI_CalculationOp::createInputPanel() const
{
- HYDROGUI_CalculationDlg* aPanel = new HYDROGUI_CalculationDlg( module(), getName() );
+ HYDROGUI_CalculationDlg* aPanel = new HYDROGUI_CalculationDlg( module(), getName(), myIsComplete );
// Connect signals and slots
connect( aPanel, SIGNAL( changeMode( int ) ), SLOT( onChangeMode( int ) ) );
QStringList aSelectedList = aPanel->getSelectedGeomObjects();
- if (myDenyIncExcl)
+ if (myIsComplete)
{
QSet<QString> selMap = aSelectedList.toSet();
- myIncObjAtStart.toVector();
- for (int i=0;i<myIncObjAtStart.size();i++)
- {
- QString str = myIncObjAtStart[i]->GetName();
- if (selMap.contains(str))
- return;
- }
}
if ( !isConfirmed )
{
- if (myDenyIncExcl)
+ if (myIsComplete)
{
- SUIT_MessageBox::information(module()->getApp()->desktop(),
- tr( "REGIONS_CHANGED" ),
- tr( "COMPLETE_OP_WILL_BE_PERFORMED" ));
+ //SUIT_MessageBox::information(module()->getApp()->desktop(),
+ // tr( "REGIONS_CHANGED" ),
+ // tr( "COMPLETE_OP_WILL_BE_PERFORMED" ));
return true;
}
#include <HYDROData_CompleteCalcCase.h>
void HYDROGUI_CalculationOp::onNext( const int theIndex )
{
- if( theIndex==1 )
+ if( theIndex==1 && !myIsComplete)
{
setAvailableGroups();
}
- else if( theIndex==2 )
+ else if( theIndex==2 && !myIsComplete)
{
setAvailableBoundaryPolygons();
}
- else if( theIndex==3 )
+ else if( theIndex==3 && !myIsComplete)
{
// Land cover map panel
HYDROGUI_CalculationDlg* aPanel =
closePreview( false );
createPreview( true );
}
- else if( theIndex==4 )
+ else if( theIndex==4 || myIsComplete)
{
HYDROGUI_CalculationDlg* aPanel =
::qobject_cast<HYDROGUI_CalculationDlg*>( inputPanel() );
if( myEditedObject->IsMustBeUpdated( HYDROData_Entity::Geom_2d ) )
{
myEditedObject->RemoveGeometryObjects();
- foreach ( const QString& aName, aPanel->getAllGeomObjects() )
+ QStringList aGeomObjNames;
+ if (myIsComplete) //erase objects ?
+ aGeomObjNames << aPanel->getAlreadyAddedGeomObjects();
+ aGeomObjNames << aPanel->getAllGeomObjects();
+ foreach ( const QString& aName, aGeomObjNames )
{
Handle(HYDROData_Object) anObject = Handle(HYDROData_Object)::DownCast(
HYDROGUI_Tool::FindObjectByName( module(), aName ) );
myEditedObject->AddGeometryObject( anObject );
}
- // Clear priority rules
- //@ASL if ( myEditedObject->GetRulesCount() > 0 ) {
+ if (!myIsComplete)
+ {
+ // Clear priority rules
+ //@ASL if ( myEditedObject->GetRulesCount() > 0 ) {
myEditedObject->ClearRules( HYDROData_CalculationCase::DataTag_CustomRules, true );
- //@ASL }
- // Set priority rules
- foreach ( const HYDROData_CustomRule& aRule, aPanel->getRules() ) {
- myEditedObject->AddRule( aRule.Object1, aRule.Priority,
- aRule.Object2, aRule.MergeType,
- HYDROData_CalculationCase::DataTag_CustomRules );
+ //@ASL }
+ // Set priority rules
+ foreach ( const HYDROData_CustomRule& aRule, aPanel->getRules() ) {
+ myEditedObject->AddRule( aRule.Object1, aRule.Priority,
+ aRule.Object2, aRule.MergeType,
+ HYDROData_CalculationCase::DataTag_CustomRules );
+ }
}
}
}
aPanel->setEditZonesEnabled( aMode == HYDROData_CalculationCase::MANUAL );
+ if (myIsComplete)
+ aPanel->BackButton()->setEnabled(false); //force disable; to prevent moving to the first page
+
if ( myEditedObject->IsMustBeUpdated( HYDROData_Entity::Geom_All ) )
{
myShowZones = true;
- if (myDenyIncExcl)
+ if (myIsComplete)
{
- QList<Handle(HYDROData_Entity)> ibcludedGeomObj = aPanel->getGeometryObjects(false);
+ //abortDocOperation();
+ //module()->getApp()->updateObjectBrowser();
+ QList<Handle(HYDROData_Entity)> newGeomObj = aPanel->getGeometryObjects(false);
//QSet<Handle(HYDROData_Entity)> includedObjAtStartSet = myIncObjAtStart.toSet();
NCollection_Sequence<Handle(HYDROData_Entity)> theNewObjects;
- foreach (Handle(HYDROData_Entity) obj, ibcludedGeomObj)
- {
- if (!myIncObjAtStart.contains(obj))
- theNewObjects.Append(obj);
- }
+ foreach (Handle(HYDROData_Entity) obj, newGeomObj)
+ theNewObjects.Append(obj);
+
bool is_int = false;
- HYDROData_CompleteCalcCase::AddObjects(doc(), myEditedObject, theNewObjects, is_int);
+ bool UseOrigNamingOfNewRegions = true;
+ NCollection_Sequence<Handle(HYDROData_Region)> theNewRegions;
+ QSet<QString> newRegionEntries;
+ HYDROData_CompleteCalcCase::AddObjects(doc(), myEditedObject, theNewObjects, UseOrigNamingOfNewRegions, is_int, theNewRegions);
if (is_int)
SUIT_MessageBox::information(module()->getApp()->desktop(),
tr( "COMPLETE_CASE" ),
tr( "There is an intersection(s) between new objects. result will be depend on order" ));
myEditedObject->ClearChanged();
+ for (int k=1;k<=theNewRegions.Size();k++)
+ {
+ QString anEntry = HYDROGUI_DataObject::dataObjectEntry( theNewRegions(k) );
+ newRegionEntries.insert(anEntry);
+ }
+ AssignDefaultZonesColors(&newRegionEntries);
}
else
+ {
myEditedObject->Update();
+ AssignDefaultZonesColors(NULL);
+ }
- AssignDefaultZonesColors();
//aPanel->setEditedObject( myEditedObject );
aPanel->refreshZonesBrowser();
void HYDROGUI_CalculationOp::onHideZones( const int theIndex )
{
- if( theIndex==1 )
- {
- setGeomObjectsVisible( true );
-
- closePreview( false );
- createPreview( false );
+ if (myIsComplete)
+ {
+ //theIndex == 0
+ // setGeomObjectsVisible( true );
+ // // HYDROGUI_CalculationDlg* aPanel = ::qobject_cast<HYDROGUI_CalculationDlg*>( inputPanel() );
+ // // QList<Handle(HYDROData_Entity)> geomObjList = aPanel->getGeometryObjects(false);
+ // // foreach ( Handle(HYDROData_Entity) geomObj, geomObjList)
+ // // setObjectVisibility( geomObj, true );
+ //
+ // setZonesVisible( false );
+ // closePreview( false );
+ // createPreview( false );
}
- if( theIndex==3 )
+ else
{
- setLandCoverMapVisible( true );
+ if( theIndex==1 )
+ {
+ setGeomObjectsVisible( true );
- closePreview( false );
- createPreview( true );
+ closePreview( false );
+ createPreview( false );
+ }
+ if( theIndex==3 )
+ {
+ setLandCoverMapVisible( true );
- // Hide zones
- setZonesVisible( false );
- }
- else if( theIndex==4 )
- {
- AssignDefaultZonesColors();
+ closePreview( false );
+ createPreview( true );
- closePreview( false );
- createPreview( false );
+ // Hide zones
+ setZonesVisible( false );
+ }
+ else if( theIndex==4 )
+ {
+ AssignDefaultZonesColors();
+
+ closePreview( false );
+ createPreview( false );
- // Show zones
- setZonesVisible( true );
+ // Show zones
+ setZonesVisible( true );
+ }
}
}
setObjectVisibility( myEditedObject->GetLandCoverMap(), theIsVisible );
}
-void HYDROGUI_CalculationOp::AssignDefaultZonesColors()
+void HYDROGUI_CalculationOp::AssignDefaultZonesColors(const QSet<QString>* theRegionsEntriesToColored)
{
HYDROData_SequenceOfObjects aRegions = myEditedObject->GetRegions();
HYDROData_SequenceOfObjects::Iterator aRegionsIter( aRegions );
for ( ; aRegionsIter.More(); aRegionsIter.Next() )
{
aRegion = Handle(HYDROData_Region)::DownCast( aRegionsIter.Value() );
+ QString anEntry = HYDROGUI_DataObject::dataObjectEntry( aRegion );
+
+ if (theRegionsEntriesToColored && !theRegionsEntriesToColored->contains(anEntry))
+ continue;
+
if ( !aRegion.IsNull() )
{
aZones = aRegion->GetZones();