From: asl Date: Tue, 17 Dec 2013 08:18:52 +0000 (+0000) Subject: bug #243: GUI for groups X-Git-Tag: BR_hydro_v_0_6~69 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=4b82ec592a58884d56d7637ab16c3cff757f4b8f;p=modules%2Fhydro.git bug #243: GUI for groups --- diff --git a/src/HYDROGUI/HYDROGUI_CalculationDlg.cxx b/src/HYDROGUI/HYDROGUI_CalculationDlg.cxx index da21a508..ece81504 100644 --- a/src/HYDROGUI/HYDROGUI_CalculationDlg.cxx +++ b/src/HYDROGUI/HYDROGUI_CalculationDlg.cxx @@ -395,7 +395,7 @@ QString HYDROGUI_CalculationDlg::getObjectName() const return myObjectName->text(); } -void HYDROGUI_CalculationDlg::includeGeomObjects( const QStringList& theObjects ) +void moveItems( QListWidget* theSource, QListWidget* theDest, const QStringList& theObjects ) { QList aFoundItems; int anIdx; @@ -404,37 +404,26 @@ void HYDROGUI_CalculationDlg::includeGeomObjects( const QStringList& theObjects for ( int i = 0, n = theObjects.length(); i < n; ++i ) { QString anObjName = theObjects.at( i ); - aFoundItems = myAvailableGeomObjects->findItems( anObjName, Qt::MatchExactly ); + aFoundItems = theSource->findItems( anObjName, Qt::MatchExactly ); for ( anIdx = 0; anIdx < aFoundItems.length(); anIdx++ ) { anItem = aFoundItems.at( anIdx ); // Remove this object from available objects list - anItem = myAvailableGeomObjects->takeItem( myAvailableGeomObjects->row( anItem ) ); + anItem = theSource->takeItem( theSource->row( anItem ) ); // Add the item to the included objects list - myGeomObjects->addItem( anItem ); + theDest->addItem( anItem ); } } } -void HYDROGUI_CalculationDlg::excludeGeomObjects( const QStringList& theObjects ) +void HYDROGUI_CalculationDlg::includeGeomObjects( const QStringList& theObjects ) { - QList aFoundItems; - int anIdx; - QListWidgetItem* anItem; + moveItems( myAvailableGeomObjects, myGeomObjects, theObjects ); +} - for ( int i = 0, n = theObjects.length(); i < n; ++i ) - { - QString anObjName = theObjects.at( i ); - aFoundItems = myGeomObjects->findItems( anObjName, Qt::MatchExactly ); - for ( anIdx = 0; anIdx < aFoundItems.length(); anIdx++ ) - { - anItem = aFoundItems.at( anIdx ); - // Remove this object from included objects list - anItem = myGeomObjects->takeItem( myGeomObjects->row( anItem ) ); - // Add the item to the excluded objects list - myAvailableGeomObjects->addItem( anItem ); - } - } +void HYDROGUI_CalculationDlg::excludeGeomObjects( const QStringList& theObjects ) +{ + moveItems( myGeomObjects, myAvailableGeomObjects, theObjects ); } void HYDROGUI_CalculationDlg::setBoundary( const QString& theObjName ) @@ -468,10 +457,10 @@ void HYDROGUI_CalculationDlg::setAllGeomObjects( const QStringList& theObjects, } } -QStringList HYDROGUI_CalculationDlg::getSelectedGeomObjects() const +QStringList getSelected( QListWidget* theWidget ) { QStringList aResList; - QList aList = myGeomObjects->selectedItems(); + QList aList = theWidget->selectedItems(); for ( int i = 0, n = aList.length(); i < n; ++i ) { aResList.append( aList.at( i )->text() ); @@ -479,15 +468,14 @@ QStringList HYDROGUI_CalculationDlg::getSelectedGeomObjects() const return aResList; } +QStringList HYDROGUI_CalculationDlg::getSelectedGeomObjects() const +{ + return getSelected( myGeomObjects ); +} + QStringList HYDROGUI_CalculationDlg::getSelectedAvailableGeomObjects() const { - QStringList aResList; - QList aList = myAvailableGeomObjects->selectedItems(); - for ( int i = 0, n = aList.length(); i < n; ++i ) - { - aResList.append( aList.at( i )->text() ); - } - return aResList; + return getSelected( myAvailableGeomObjects ); } void HYDROGUI_CalculationDlg::setEditedObject( const Handle(HYDROData_CalculationCase) theCase ) @@ -524,4 +512,32 @@ void HYDROGUI_CalculationDlg::onDataChanged() SUIT_DataObject* aRoot = myBrowser->root(); module()->getDataModel()->buildCaseTree( aRoot, myEditedObject ); myBrowser->updateTree( aRoot ); -} \ No newline at end of file +} + +void HYDROGUI_CalculationDlg::setAvailableGroups( const QStringList& theGroups ) +{ + myAvailableGroups->clear(); + myGroups->clear(); + foreach( QString aGroup, theGroups ) + myAvailableGroups->addItem( aGroup ); +} + +QStringList HYDROGUI_CalculationDlg::getSelectedGroups() const +{ + return getSelected( myGroups ); +} + +QStringList HYDROGUI_CalculationDlg::getSelectedAvailableGroups() const +{ + return getSelected( myAvailableGroups ); +} + +void HYDROGUI_CalculationDlg::includeGroups( const QStringList& theObjects ) +{ + moveItems( myAvailableGroups, myGroups, theObjects ); +} + +void HYDROGUI_CalculationDlg::excludeGroups( const QStringList& theObjects ) +{ + moveItems( myGroups, myAvailableGroups, theObjects ); +} diff --git a/src/HYDROGUI/HYDROGUI_CalculationDlg.h b/src/HYDROGUI/HYDROGUI_CalculationDlg.h index 414d4af6..eaf3aa26 100644 --- a/src/HYDROGUI/HYDROGUI_CalculationDlg.h +++ b/src/HYDROGUI/HYDROGUI_CalculationDlg.h @@ -57,12 +57,18 @@ public: void setPolylineNames( const QStringList& theObjects, const QStringList& theObjectsEntries ); QStringList getSelectedGeomObjects() const; QStringList getSelectedAvailableGeomObjects() const; + QStringList getSelectedGroups() const; + QStringList getSelectedAvailableGroups() const; HYDROGUI_Zone* getCurrentZone() const; + void setAvailableGroups( const QStringList& ); + public slots: void setBoundary( const QString& theObjName ); void includeGeomObjects( const QStringList& theObjects ); void excludeGeomObjects( const QStringList& theObjects ); + void includeGroups( const QStringList& theObjects ); + void excludeGroups( const QStringList& theObjects ); void onEmptyName(); void onAlreadyExists( QString theName ); void refreshZonesBrowser(); diff --git a/src/HYDROGUI/HYDROGUI_CalculationOp.cxx b/src/HYDROGUI/HYDROGUI_CalculationOp.cxx index 91cbb27e..7b0bcaa3 100644 --- a/src/HYDROGUI/HYDROGUI_CalculationOp.cxx +++ b/src/HYDROGUI/HYDROGUI_CalculationOp.cxx @@ -31,6 +31,7 @@ #include "HYDROGUI_Region.h" #include +#include #include #include #include @@ -204,6 +205,8 @@ HYDROGUI_InputPanel* HYDROGUI_CalculationOp::createInputPanel() const // Connect signals and slots connect( aPanel, SIGNAL( addObjects() ), SLOT( onAddObjects() ) ); connect( aPanel, SIGNAL( removeObjects() ), SLOT( onRemoveObjects() ) ); + connect( aPanel, SIGNAL( addGroups() ), SLOT( onAddGroups() ) ); + connect( aPanel, SIGNAL( removeGroups() ), SLOT( onRemoveGroups() ) ); connect( aPanel, SIGNAL( Next( const int ) ), SLOT( onNext( const int ) ) ); connect( aPanel, SIGNAL( Back( const int ) ), SLOT( onHideZones() ) ); //connect( aPanel, SIGNAL( clicked( SUIT_DataObject* ) ), SLOT( onSelected( SUIT_DataObject* ) ) ); @@ -776,10 +779,74 @@ void HYDROGUI_CalculationOp::setAvailableGroups() HYDROGUI_CalculationDlg* aPanel = ::qobject_cast( inputPanel() ); + 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 ) ); - //TODO: anObj->GetGroups(); + HYDROData_SequenceOfObjects aGroups = anObj->GetGroups(); + for( int aGIndex = 1, aGLength = aGroups.Length(); aGIndex <= aGLength; aGIndex++ ) + { + Handle_HYDROData_EdgesGroup aGroup = Handle_HYDROData_EdgesGroup::DownCast( aGroups.Value( aGIndex ) ); + aGroupsNames.append( aGroup->GetName() ); + } } + myEditedObject->RemoveGeometryGroups(); + aPanel->setAvailableGroups( aGroupsNames ); +} + +void HYDROGUI_CalculationOp::onAddGroups() +{ + HYDROGUI_CalculationDlg* aPanel = + ::qobject_cast( 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_EdgesGroup) aGroup = Handle(HYDROData_EdgesGroup)::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( inputPanel() ); + if ( !aPanel ) + return; + + QStringList aSelectedList = aPanel->getSelectedGroups(); + if ( aSelectedList.isEmpty() || !confirmRegionsChange() ) + return; + + for (int i = 0; i < aSelectedList.length(); i++) + { + Handle(HYDROData_EdgesGroup) aGroup = Handle(HYDROData_EdgesGroup)::DownCast( + HYDROGUI_Tool::FindObjectByName( module(), aSelectedList.at(i) ) ); + if ( aGroup.IsNull() ) + continue; + + myEditedObject->RemoveGeometryGroup( aGroup ); + } + + aPanel->excludeGroups( aSelectedList ); } diff --git a/src/HYDROGUI/HYDROGUI_CalculationOp.h b/src/HYDROGUI/HYDROGUI_CalculationOp.h index d60637c5..c7c92fde 100644 --- a/src/HYDROGUI/HYDROGUI_CalculationOp.h +++ b/src/HYDROGUI/HYDROGUI_CalculationOp.h @@ -65,6 +65,16 @@ protected slots: * Remove selected objects from the calculation case. */ void onRemoveObjects(); + + /** + * Add geometry groups selected in the module browser to the calculation case. + */ + void onAddGroups(); + /** + * Remove selected groups from the calculation case. + */ + void onRemoveGroups(); + /** * Set the given bathymetry merge type to the current zone. */