From d4cd71fc291a732783caf61bebde87fe5b4bfc92 Mon Sep 17 00:00:00 2001 From: mkr Date: Thu, 18 Jun 2015 17:43:09 +0300 Subject: [PATCH] refs #580: further GUI development. --- src/HYDROGUI/HYDROGUI_CalculationDlg.cxx | 53 ++++++++++++++++++++++-- src/HYDROGUI/HYDROGUI_CalculationDlg.h | 5 ++- src/HYDROGUI/HYDROGUI_CalculationOp.cxx | 35 +++++++++++++--- src/HYDROGUI/HYDROGUI_CalculationOp.h | 7 +++- src/HYDROGUI/HYDROGUI_Zone.cxx | 5 +++ src/HYDROGUI/HYDROGUI_Zone.h | 5 +++ 6 files changed, 97 insertions(+), 13 deletions(-) diff --git a/src/HYDROGUI/HYDROGUI_CalculationDlg.cxx b/src/HYDROGUI/HYDROGUI_CalculationDlg.cxx index c7274371..21773bc8 100644 --- a/src/HYDROGUI/HYDROGUI_CalculationDlg.cxx +++ b/src/HYDROGUI/HYDROGUI_CalculationDlg.cxx @@ -585,7 +585,7 @@ void HYDROGUI_CalculationDlg::onZonesDropped( const QList& the HYDROGUI_Region* aRegion = dynamic_cast(theTargetParent); if ( aRegion ) { - emit moveZones( theTargetParent, aZonesList ); + emit moveZones( theTargetParent, aZonesList, false ); } } } @@ -658,12 +658,49 @@ void HYDROGUI_CalculationDlg::onSelected( SUIT_DataObject* theObject ) void HYDROGUI_CalculationDlg::onLandCoverZoneSelected( SUIT_DataObject* theObject ) { - // TODO: implement this function + bool doShow = false; + HYDROGUI_Zone* aZone = dynamic_cast( theObject ); + if ( aZone ) + { + doShow = aZone->isMergingNeed(); + } + + if ( doShow ) + { + // Fill the merge type combo box + bool prevBlock = myStricklerTypeChoice->blockSignals( true ); + myCurrentZone = aZone; + myStricklerTypeChoice->clear(); + myStricklerTypeChoice->addItem( tr("MERGE_UNKNOWN"), HYDROData_Zone::Merge_UNKNOWN ); + /*QStringList aList = aZone->getStricklerTypes(); + for ( int i = 0; i < aList.length(); i++ ) + { + myStricklerTypeChoice->addItem( aList.at( i ), HYDROData_Zone::Merge_Object ); + } + // Select the current choice if any + int aCurIndex = 0; + switch ( aZone->getMergeType() ) + { + case HYDROData_Zone::Merge_Object: + aCurIndex = 1 + aList.indexOf( aZone->text( HYDROGUI_DataObject::AltitudeObjId ) ); + break; + default: + aCurIndex = 0; // Select unknown by default + } + myStricklerTypeChoice->setCurrentIndex( aCurIndex );*/ + myStricklerTypeChoice->blockSignals( prevBlock ); + } + + myStricklerTypeChoice->setVisible( doShow ); + myStricklerTypeChoice->setEnabled( getLandCoverMode() == HYDROData_CalculationCase::MANUAL ); + myStricklerTypeChoice->setVisible( doShow ); } void HYDROGUI_CalculationDlg::onMergeStricklerTypeSelected( int theIndex ) { - // TODO: implement this function + int aType = myStricklerTypeChoice->itemData( theIndex ).toInt(); + QString aText = myStricklerTypeChoice->itemText( theIndex ); + emit setMergeStricklerType( aType, aText ); } void HYDROGUI_CalculationDlg::onLandCoverZonesDropped( const QList& theList, @@ -843,12 +880,20 @@ void HYDROGUI_CalculationDlg::setEditedObject( const Handle(HYDROData_Calculatio // Build the calculation case subtree module()->getDataModel()->buildCaseTree( myBrowser->root(), myEditedObject ); + // TODO: build subtree items corresponding to regions constructed on land covers + //... myBrowser->updateTree(); myBrowser->openLevels(); myBrowser->adjustColumnsWidth(); myBrowser->setAutoUpdate( true ); myBrowser->setUpdateModified( true ); + + myLandCoverBrowser->updateTree(); + myLandCoverBrowser->openLevels(); + myLandCoverBrowser->adjustColumnsWidth(); + myLandCoverBrowser->setAutoUpdate( true ); + myLandCoverBrowser->setUpdateModified( true ); } HYDROGUI_Zone* HYDROGUI_CalculationDlg::getCurrentZone() const @@ -968,7 +1013,7 @@ void HYDROGUI_CalculationDlg::setEditZonesEnabled( const bool theIsEnabled ) Enable/disable land covers drag'n'drop and renaming. @param theIsEnabled if true - land covers drag'n'drop and renaming will be enabled */ -void HYDROGUI_CalculationDlg::setEditLandCoversEnabled( const bool theIsEnabled ) +void HYDROGUI_CalculationDlg::setEditLandCoverZonesEnabled( const bool theIsEnabled ) { myLandCoverBrowser->setReadOnly( !theIsEnabled ); } diff --git a/src/HYDROGUI/HYDROGUI_CalculationDlg.h b/src/HYDROGUI/HYDROGUI_CalculationDlg.h index da597e86..d6105168 100644 --- a/src/HYDROGUI/HYDROGUI_CalculationDlg.h +++ b/src/HYDROGUI/HYDROGUI_CalculationDlg.h @@ -78,7 +78,7 @@ public: void setAvailableGroups( const QStringList& ); void setEditZonesEnabled( const bool theIsEnabled ); - void setEditLandCoversEnabled( const bool theIsEnabled ); + void setEditLandCoverZonesEnabled( const bool theIsEnabled ); HYDROData_ListOfRules getRules() const; void setRules( const HYDROData_ListOfRules& theRules ) const; @@ -150,7 +150,7 @@ signals: void boundarySelected( const QString & theObjName ); void setMergeType( int theMergeType, QString& theBathymetryName ); void createRegion( const QList& theZonesList ); - void moveZones( SUIT_DataObject* theRegion, const QList& theZonesList ); + void moveZones( SUIT_DataObject* theRegion, const QList& theZonesList, bool theLandCover ); void clickedInZonesBrowser( SUIT_DataObject* ); void changeLandCoverMode( int theMode ); @@ -163,6 +163,7 @@ signals: void createLandCoverRegion( const QList& theLandCoverZonesList ); void StricklerTableSelected( const QString & theObjName ); + void setMergeStricklerType( int theMergeType, QString& theStricklerTypeName ); protected: diff --git a/src/HYDROGUI/HYDROGUI_CalculationOp.cxx b/src/HYDROGUI/HYDROGUI_CalculationOp.cxx index 94ea5dbb..e6b9ea72 100644 --- a/src/HYDROGUI/HYDROGUI_CalculationOp.cxx +++ b/src/HYDROGUI/HYDROGUI_CalculationOp.cxx @@ -223,8 +223,9 @@ HYDROGUI_InputPanel* HYDROGUI_CalculationOp::createInputPanel() const connect( aPanel, SIGNAL( Back( const int ) ), SLOT( onHideZones( const int ) ) ); //connect( aPanel, SIGNAL( clicked( SUIT_DataObject* ) ), SLOT( onSelected( SUIT_DataObject* ) ) ); connect( aPanel, SIGNAL( setMergeType( int, QString& ) ), SLOT( onSetMergeType( int, QString& ) ) ); - connect( aPanel, SIGNAL( moveZones( SUIT_DataObject*, const QList& ) ), - SLOT( onMoveZones( SUIT_DataObject*, const QList& ) ) ); + connect( aPanel, SIGNAL( setMergeStricklerType( int, QString& ) ), SLOT( onSetMergeStricklerType( int, QString& ) ) ); + connect( aPanel, SIGNAL( moveZones( SUIT_DataObject*, const QList&, bool ) ), + SLOT( onMoveZones( SUIT_DataObject*, const QList&, bool ) ) ); connect( aPanel, SIGNAL( createRegion( const QList& ) ), SLOT( onCreateRegion( const QList& ) ) ); connect( aPanel, SIGNAL( clickedInZonesBrowser( SUIT_DataObject* ) ), @@ -460,7 +461,9 @@ void HYDROGUI_CalculationOp::onClickedInZonesBrowser( SUIT_DataObject* theItem ) } } -void HYDROGUI_CalculationOp::onMoveZones( SUIT_DataObject* theRegionItem, const QList& theZonesList ) +void HYDROGUI_CalculationOp::onMoveZones( SUIT_DataObject* theRegionItem, + const QList& theZonesList, + bool theLandCover ) { HYDROGUI_Region* aRegion = dynamic_cast(theRegionItem); if ( aRegion ) @@ -483,9 +486,9 @@ void HYDROGUI_CalculationOp::onMoveZones( SUIT_DataObject* theRegionItem, const ::qobject_cast( inputPanel() ); if ( aPanel ) { - aPanel->refreshZonesBrowser(); + theLandCover ? aPanel->refreshLandCoverZonesBrowser(): aPanel->refreshZonesBrowser(); } - createPreview( false ); + createPreview( theLandCover ); } } } @@ -538,6 +541,26 @@ void HYDROGUI_CalculationOp::onSetMergeType( int theMergeType, QString& theAltit } } +void HYDROGUI_CalculationOp::onSetMergeStricklerType( int theMergeType, QString& theStricklerTypeName ) +{ + HYDROGUI_CalculationDlg* aPanel = + ::qobject_cast( inputPanel() ); + if ( aPanel ) + { + HYDROGUI_Zone* aZone = aPanel->getCurrentZone(); + if ( aZone ) + { + aZone->setMergeStricklerType( theMergeType, theStricklerTypeName ); + HYDROGUI_Shape* aShape = module()->getObjectShape( HYDROGUI_Module::VMR_PreviewCaseZones, aZone->modelObject() ); + if ( aShape ) + { + aShape->update( true, false ); + } + } + aPanel->refreshLandCoverZonesBrowser(); + } +} + void HYDROGUI_CalculationOp::onAddObjects() { HYDROGUI_CalculationDlg* aPanel = @@ -1040,7 +1063,7 @@ void HYDROGUI_CalculationOp::onNext( const int theIndex ) } } } - aPanel->setEditLandCoversEnabled( aMode == HYDROData_CalculationCase::MANUAL ); + aPanel->setEditLandCoverZonesEnabled( aMode == HYDROData_CalculationCase::MANUAL ); bool anIsToUpdateOb = false; if ( myEditedObject->IsMustBeUpdated() ) diff --git a/src/HYDROGUI/HYDROGUI_CalculationOp.h b/src/HYDROGUI/HYDROGUI_CalculationOp.h index 2e0c0fae..dfcf2f6f 100644 --- a/src/HYDROGUI/HYDROGUI_CalculationOp.h +++ b/src/HYDROGUI/HYDROGUI_CalculationOp.h @@ -99,11 +99,16 @@ protected slots: * Set the given bathymetry merge type to the current zone. */ void onSetMergeType( int theMergeType, QString& theBathymetryName ); + /** + * Set the given Strickler merge type to the current zone. + */ + void onSetMergeStricklerType( int theMergeType, QString& theStricklerTypeName ); /** * Selected zones are moved to the existing region. */ void onMoveZones( SUIT_DataObject* theRegionItem, - const QList& theZonesList ); + const QList& theZonesList, + bool theLandCover ); /** * Selected zones are moved to the new region to be created. */ diff --git a/src/HYDROGUI/HYDROGUI_Zone.cxx b/src/HYDROGUI/HYDROGUI_Zone.cxx index 9b6b304b..7cb2c526 100644 --- a/src/HYDROGUI/HYDROGUI_Zone.cxx +++ b/src/HYDROGUI/HYDROGUI_Zone.cxx @@ -270,6 +270,11 @@ void HYDROGUI_Zone::setMergeType( int theMergeType, QString theAltitudeName ) } } +void HYDROGUI_Zone::setMergeStricklerType( int theMergeType, QString theStricklerTypeName) +{ + // TODO: implement this method +} + /*! \brief Check if this object is can't be renamed in place diff --git a/src/HYDROGUI/HYDROGUI_Zone.h b/src/HYDROGUI/HYDROGUI_Zone.h index aaf7a2de..76e2e428 100644 --- a/src/HYDROGUI/HYDROGUI_Zone.h +++ b/src/HYDROGUI/HYDROGUI_Zone.h @@ -86,6 +86,11 @@ public: * If the type is Merge_Object then use the second parameter to set the merge bathymetry. */ void setMergeType( int theMergeType, QString theAltitudeName = QString() ); + /** + * Set the merging type for conflict strickler types. + * If the type is Merge_Object then use the second parameter to set the merge Strickler type. + */ + void setMergeStricklerType( int theMergeType, QString theStricklerTypeName = QString() ); private: QString getRefObjectNames() const; -- 2.39.2