X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_CalculationDlg.cxx;h=ba31ad82e4c0b010e89da283171866f569a8ca70;hb=9f7b45d044e701442d0b370e9779299d25a5d44c;hp=30292fac85e0e881ea3edd837a8a591e40e21740;hpb=0802ce8638b337a7c7f655fd3fc83ccaae1244b6;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_CalculationDlg.cxx b/src/HYDROGUI/HYDROGUI_CalculationDlg.cxx index 30292fac..ba31ad82 100644 --- a/src/HYDROGUI/HYDROGUI_CalculationDlg.cxx +++ b/src/HYDROGUI/HYDROGUI_CalculationDlg.cxx @@ -28,19 +28,26 @@ #include "HYDROGUI_DataModel.h" #include "HYDROGUI_Module.h" #include "HYDROGUI_DataObject.h" +#include "HYDROGUI_NameValidator.h" +#include "HYDROGUI_Region.h" +#include "HYDROGUI_Zone.h" #include #include -#include #include #include +#include #include #include #include #include +#include +#include +#include + #include #include #include @@ -51,14 +58,14 @@ #include #include #include +#include HYDROGUI_CalculationDlg::HYDROGUI_CalculationDlg( HYDROGUI_Module* theModule, const QString& theTitle ) : HYDROGUI_Wizard( theModule, theTitle ) { - QWizard* aWizard = wizard(); - aWizard->addPage( createObjectsPage() ); - aWizard->addPage( createZonesPage() ); - aWizard->show(); + addPage( createObjectsPage() ); + addPage( createGroupsPage() ); + addPage( createZonesPage() ); } HYDROGUI_CalculationDlg::~HYDROGUI_CalculationDlg() @@ -69,96 +76,315 @@ void HYDROGUI_CalculationDlg::reset() { myObjectName->clear(); myGeomObjects->clear(); + myPolylineName->clear(); + myAvailableGeomObjects->clear(); } QWizardPage* HYDROGUI_CalculationDlg::createObjectsPage() { - QWizardPage* aPage = new QWizardPage( wizard() ); + QWizardPage* aPage = new QWizardPage( mainFrame() ); QFrame* aFrame = new QFrame( aPage ); - // Calculation name -// myObjectNameGroup = new QGroupBox( tr( "CALCULATION_NAME" ), aFrame ); -// myObjectName = new QLineEdit( myObjectNameGroup ); + // Calculation name myObjectName = new QLineEdit( aPage ); + myValidator = new HYDROGUI_NameValidator(module(), myObjectName); + myObjectName->setValidator( myValidator ); - //QBoxLayout* aNameLayout = new QHBoxLayout( myObjectNameGroup ); - //aNameLayout->setMargin( 5 ); - //aNameLayout->setSpacing( 5 ); - //aNameLayout->addWidget( new QLabel( tr( "NAME" ), myObjectNameGroup ) ); - //aNameLayout->addWidget( myObjectName ); + connect( myValidator, SIGNAL( emptyName() ), SLOT( onEmptyName() ) ); + connect( myValidator, SIGNAL( alreadyExists( QString ) ), SLOT( onAlreadyExists( QString ) ) ); - // Calculation zones - //QFrame* anObjectsFrame = new QFrame( aFrame ); + myPolylineName = new QComboBox( aPage ); + connect( myPolylineName, SIGNAL( activated( const QString & ) ), + SIGNAL( boundarySelected( const QString & ) ) ); - //myGeomObjects = new QListWidget( anObjectsFrame ); myGeomObjects = new QListWidget( aPage ); - myGeomObjects->setSelectionMode( QListWidget::SingleSelection ); + myGeomObjects->setSelectionMode( QListWidget::ExtendedSelection ); myGeomObjects->setEditTriggers( QListWidget::NoEditTriggers ); myGeomObjects->setViewMode( QListWidget::ListMode ); + myGeomObjects->setSortingEnabled( true ); + + myAvailableGeomObjects = new QListWidget( aPage ); + myAvailableGeomObjects->setSelectionMode( QListWidget::ExtendedSelection ); + myAvailableGeomObjects->setEditTriggers( QListWidget::NoEditTriggers ); + myAvailableGeomObjects->setViewMode( QListWidget::ListMode ); + myAvailableGeomObjects->setSortingEnabled( true ); + + connect( myGeomObjects, SIGNAL( itemSelectionChanged() ), + SIGNAL( objectsSelected() ) ); - QFrame* aBtnsFrame = new QFrame( aPage ); + QFrame* anObjectsFrame = new QFrame( aPage ); + QGridLayout* anObjsLayout = new QGridLayout( anObjectsFrame ); + anObjsLayout->setMargin( 5 ); + anObjsLayout->setSpacing( 5 ); + anObjectsFrame->setLayout( anObjsLayout ); + + QFrame* aBtnsFrame = new QFrame( anObjectsFrame ); QVBoxLayout* aBtnsLayout = new QVBoxLayout( aBtnsFrame ); aBtnsLayout->setMargin( 5 ); aBtnsLayout->setSpacing( 5 ); aBtnsFrame->setLayout( aBtnsLayout ); - QPushButton* anAddBtn = new QPushButton( tr("ADD"), aBtnsFrame ); - QPushButton* aRemoveBtn = new QPushButton( tr("REMOVE"), aBtnsFrame ); + QPushButton* anAddBtn = new QPushButton( tr("INCLUDE"), aBtnsFrame ); + QPushButton* aRemoveBtn = new QPushButton( tr("EXCLUDE"), aBtnsFrame ); + + // Fill the butons frame with two buttons aBtnsLayout->addWidget( anAddBtn ); aBtnsLayout->addWidget( aRemoveBtn ); aBtnsLayout->addStretch( 1 ); + QLabel* anIncludedLabel = new QLabel( tr( "INCLUDED_OBJECTS" ), anObjectsFrame ); + QLabel* anObjectsLabel = new QLabel( tr( "CALCULATION_REFERENCE_OBJECTS" ), anObjectsFrame ); + + // Fill the objects frame with two lists, two labels and with buttons frame + anObjsLayout->addWidget( anObjectsLabel, 0, 0, Qt::AlignHCenter ); + anObjsLayout->addWidget( anIncludedLabel, 0, 2, Qt::AlignHCenter ); + anObjsLayout->addWidget( myAvailableGeomObjects, 1, 0, Qt::AlignHCenter ); + anObjsLayout->addWidget( aBtnsFrame, 1, 1, Qt::AlignHCenter ); + anObjsLayout->addWidget( myGeomObjects, 1, 2, Qt::AlignHCenter ); + + QLabel* aNameLabel = new QLabel( tr( "NAME" ), aPage ); - QLabel* anObjectsLabel = new QLabel( tr( "CALCULATION_REFERENCE_OBJECTS" ), aPage ); - - QGridLayout* aZonesLayout = new QGridLayout( aPage ); - aZonesLayout->setMargin( 5 ); - aZonesLayout->setSpacing( 5 ); - aZonesLayout->setVerticalSpacing( 10 ); - aZonesLayout->addWidget( aNameLabel, 0, 0, Qt::AlignHCenter ); - aZonesLayout->addWidget( myObjectName, 0, 1 ); - aZonesLayout->addWidget( anObjectsLabel, 1, 0, Qt::AlignHCenter ); - aZonesLayout->addWidget( myGeomObjects, 1, 1, 2, 1 ); - aZonesLayout->addWidget( aBtnsFrame, 2, 0, Qt::AlignHCenter ); - - //QBoxLayout* aMainLayout = new QVBoxLayout( aFrame ); - //aMainLayout->setMargin( 0 ); - //aMainLayout->setSpacing( 5 ); - //aMainLayout->addWidget( myObjectNameGroup ); - //aMainLayout->addWidget( anObjectsFrame ); - //aMainLayout->addStretch(); - - //aPage->setLayout( aMainLayout ); - aPage->setLayout( aZonesLayout ); + QLabel* aLimitsLabel = new QLabel( tr( "LIMITS" ), aPage ); + + // Fill the page + QGridLayout* aPageLayout = new QGridLayout( aPage ); + aPageLayout->setMargin( 5 ); + aPageLayout->setSpacing( 5 ); + aPageLayout->setVerticalSpacing( 10 ); + aPageLayout->addWidget( aNameLabel, 0, 0, Qt::AlignHCenter ); + aPageLayout->addWidget( myObjectName, 0, 1 ); + aPageLayout->addWidget( aLimitsLabel, 1, 0, Qt::AlignHCenter ); + aPageLayout->addWidget( myPolylineName, 1, 1 ); + aPageLayout->addWidget( anObjectsFrame, 2, 0, 1, 2, Qt::AlignHCenter ); + + aPage->setLayout( aPageLayout ); + + connect( anAddBtn, SIGNAL( clicked() ), SIGNAL( addObjects() ) ); + connect( aRemoveBtn, SIGNAL( clicked() ), SIGNAL( removeObjects() ) ); + + return aPage; +} + +QWizardPage* HYDROGUI_CalculationDlg::createGroupsPage() { + QWizardPage* aPage = new QWizardPage( mainFrame() ); + QFrame* aFrame = new QFrame( aPage ); + + myGroups = new QListWidget( aPage ); + myGroups->setSelectionMode( QListWidget::ExtendedSelection ); + myGroups->setEditTriggers( QListWidget::NoEditTriggers ); + myGroups->setViewMode( QListWidget::ListMode ); + myGroups->setSortingEnabled( true ); + + myAvailableGroups = new QListWidget( aPage ); + myAvailableGroups->setSelectionMode( QListWidget::ExtendedSelection ); + myAvailableGroups->setEditTriggers( QListWidget::NoEditTriggers ); + myAvailableGroups->setViewMode( QListWidget::ListMode ); + myAvailableGroups->setSortingEnabled( true ); + + connect( myGroups, SIGNAL( itemSelectionChanged() ), + SIGNAL( groupsSelected() ) ); + + QFrame* aGroupsFrame = new QFrame( aPage ); + QGridLayout* aGroupsLayout = new QGridLayout( aGroupsFrame ); + aGroupsLayout->setMargin( 5 ); + aGroupsLayout->setSpacing( 5 ); + aGroupsFrame->setLayout( aGroupsLayout ); + + QFrame* aBtnsFrame = new QFrame( aGroupsFrame ); + QVBoxLayout* aBtnsLayout = new QVBoxLayout( aBtnsFrame ); + aBtnsLayout->setMargin( 5 ); + aBtnsLayout->setSpacing( 5 ); + aBtnsFrame->setLayout( aBtnsLayout ); + QPushButton* anAddBtn = new QPushButton( tr("INCLUDE"), aBtnsFrame ); + QPushButton* aRemoveBtn = new QPushButton( tr("EXCLUDE"), aBtnsFrame ); + + // Fill the butons frame with two buttons + aBtnsLayout->addWidget( anAddBtn ); + aBtnsLayout->addWidget( aRemoveBtn ); + aBtnsLayout->addStretch( 1 ); + + QLabel* anIncludedLabel = new QLabel( tr( "INCLUDED_GROUPS" ), aGroupsFrame ); + QLabel* anAvailableLabel = new QLabel( tr( "AVAILABLE_GROUPS" ), aGroupsFrame ); + + // Fill the objects frame with two lists, two labels and with buttons frame + aGroupsLayout->addWidget( anAvailableLabel, 0, 0, Qt::AlignHCenter ); + aGroupsLayout->addWidget( anIncludedLabel, 0, 2, Qt::AlignHCenter ); + aGroupsLayout->addWidget( myAvailableGroups, 1, 0, Qt::AlignHCenter ); + aGroupsLayout->addWidget( aBtnsFrame, 1, 1, Qt::AlignHCenter ); + aGroupsLayout->addWidget( myGroups, 1, 2, Qt::AlignHCenter ); + + // Fill the page + QGridLayout* aPageLayout = new QGridLayout( aPage ); + aPageLayout->setMargin( 5 ); + aPageLayout->setSpacing( 5 ); + aPageLayout->setVerticalSpacing( 10 ); + aPageLayout->addWidget( aGroupsFrame, 0, 0, Qt::AlignHCenter ); + + aPage->setLayout( aPageLayout ); + + connect( anAddBtn, SIGNAL( clicked() ), SIGNAL( addGroups() ) ); + connect( aRemoveBtn, SIGNAL( clicked() ), SIGNAL( removeGroups() ) ); return aPage; } QWizardPage* HYDROGUI_CalculationDlg::createZonesPage() { - QWizardPage* aPage = new QWizardPage( wizard() ); + QWizardPage* aPage = new QWizardPage( mainFrame() ); QFrame* aFrame = new QFrame( aPage ); QGridLayout* aLayout = new QGridLayout( aPage ); - //Handle(HYDROData_Entity) anEntity = module()->getDataModel()->getDocument()->CreateObject( KIND_CALCULATION ); - myBrowser = new HYDROGUI_DataBrowser( module(), 0/*module()->application()->activeStudy()->root()*/, aPage ); + myBrowser = new HYDROGUI_DataBrowser( module(), NULL, aPage ); myBrowser->setAutoOpenLevel( 3 ); aLayout->setMargin( 5 ); aLayout->setSpacing( 5 ); aLayout->addWidget( myBrowser, 0, 0, 1, 2 ); - QLabel* aBatimetryLabel = new QLabel( tr( "BATHYMETRY" ), aFrame ); + myBatimetryLabel = new QLabel( tr( "BATHYMETRY" ), aFrame ); myBathymetryChoice = new QComboBox( aFrame ); - myBathymetryChoice->addItem( tr( "ZMIN" ) ); - myBathymetryChoice->addItem( tr( "ZMAX" ) ); - aLayout->addWidget( aBatimetryLabel, 1, 0 ); + myBathymetryChoice->setVisible( false ); + myBatimetryLabel->setVisible( false ); + + aLayout->addWidget( myBatimetryLabel, 1, 0 ); aLayout->addWidget( myBathymetryChoice, 1, 1 ); aPage->setLayout( aLayout ); + connect( myBrowser, SIGNAL( dataChanged() ), SLOT( onDataChanged() ) ); + connect( myBrowser, SIGNAL( clicked( SUIT_DataObject* ) ), SIGNAL( clickedInZonesBrowser( SUIT_DataObject* ) ) ); + connect( myBrowser, SIGNAL( clicked( SUIT_DataObject* ) ), SLOT( onSelected( SUIT_DataObject* ) ) ); + connect( myBathymetryChoice, SIGNAL( activated( int ) ), SLOT( onMergeTypeSelected( int ) ) ); + connect( myBrowser, + SIGNAL( dropped( const QList&, SUIT_DataObject*, int, Qt::DropAction ) ), + SLOT( onZonesDropped( const QList&, SUIT_DataObject*, int, Qt::DropAction ) ) ); + return aPage; } + +bool HYDROGUI_CalculationDlg::acceptCurrent() const +{ + QString anErrorMsg; + + if ( myGeomObjects->count() == 0 ) + { + anErrorMsg = tr( "EMPTY_GEOMETRY_OBJECTS" ); + } + + if ( !anErrorMsg.isEmpty() ) + { + anErrorMsg += "\n" + tr( "INPUT_VALID_DATA" ); + + QString aTitle = tr( "INSUFFICIENT_INPUT_DATA" ); + SUIT_MessageBox::critical( module()->getApp()->desktop(), aTitle, anErrorMsg ); + } + + return anErrorMsg.isEmpty(); +} + +void HYDROGUI_CalculationDlg::onEmptyName() +{ + QString aTitle = tr( "INSUFFICIENT_INPUT_DATA" ); + QString aMessage = tr( "INCORRECT_OBJECT_NAME" ) + "\n" + tr( "INPUT_VALID_DATA" ); + SUIT_MessageBox::critical( module()->getApp()->desktop(), aTitle, aMessage ); +} + +void HYDROGUI_CalculationDlg::onAlreadyExists( QString theName ) +{ + QString aTitle = tr( "INSUFFICIENT_INPUT_DATA" ); + QString aMessage = QObject::tr( "OBJECT_EXISTS_IN_DOCUMENT" ).arg( theName ) + + "\n" + tr( "INPUT_VALID_DATA" ); + SUIT_MessageBox::critical( module()->getApp()->desktop(), aTitle, aMessage ); +} + +void HYDROGUI_CalculationDlg::onZonesDropped( const QList& theList, + SUIT_DataObject* theTargetParent, int theTargetRow, Qt::DropAction theDropAction ) +{ + QList aZonesList; + HYDROGUI_Zone* aZone; + // Get a list of dropped zones + for ( int i = 0; i < theList.length(); i++ ) + { + aZone = dynamic_cast( theList.at( i ) ); + if ( aZone ) + { + aZonesList.append( aZone ); + } + } + if ( aZonesList.length() > 0 ) + { + // Get the target region + HYDROGUI_NamedObject* aRegionsRoot = dynamic_cast(theTargetParent); + if ( aRegionsRoot ) + { + // Create a new region + emit createRegion( aZonesList ); + } + else + { + HYDROGUI_Region* aRegion = dynamic_cast(theTargetParent); + if ( aRegion ) + { + emit moveZones( theTargetParent, aZonesList ); + } + } + } +} + +void HYDROGUI_CalculationDlg::onMergeTypeSelected( int theIndex ) +{ + int aType = myBathymetryChoice->itemData( theIndex ).toInt(); + QString aText = myBathymetryChoice->itemText( theIndex ); + emit setMergeType( aType, aText ); +} + +void HYDROGUI_CalculationDlg::onSelected( SUIT_DataObject* theObject ) +{ + bool doShow = false; + HYDROGUI_Zone* aZone = dynamic_cast( theObject ); + if ( aZone ) + { + doShow = aZone->isMergingNeed(); + } + + if ( doShow ) + { + // Fill the merge type combo box + bool prevBlock = myBathymetryChoice->blockSignals( true ); + myCurrentZone = aZone; + myBathymetryChoice->clear(); + myBathymetryChoice->addItem( tr("MERGE_UNKNOWN"), HYDROData_Zone::Merge_UNKNOWN ); + myBathymetryChoice->addItem( tr("MERGE_ZMIN"), HYDROData_Zone::Merge_ZMIN ); + myBathymetryChoice->addItem( tr("MERGE_ZMAX"), HYDROData_Zone::Merge_ZMAX ); + QStringList aList = aZone->getAltitudes(); + for ( int i = 0; i < aList.length(); i++ ) + { + myBathymetryChoice->addItem( aList.at( i ), HYDROData_Zone::Merge_Object ); + } + // Select the current choice if any + int aCurIndex = 0; + switch ( aZone->getMergeType() ) + { + case HYDROData_Zone::Merge_ZMIN: + aCurIndex = 1; + break; + case HYDROData_Zone::Merge_ZMAX: + aCurIndex = 2; + break; + case HYDROData_Zone::Merge_Object: + aCurIndex = 3 + aList.indexOf( aZone->text( HYDROGUI_DataObject::AltitudeObjId ) ); + break; + default: + aCurIndex = 0; // Select unknown by default + } + myBathymetryChoice->setCurrentIndex( aCurIndex ); + myBathymetryChoice->blockSignals( prevBlock ); + } + + myBathymetryChoice->setVisible( doShow ); + myBatimetryLabel->setVisible( doShow ); +} + void HYDROGUI_CalculationDlg::setObjectName( const QString& theName ) { myObjectName->setText( theName ); @@ -169,50 +395,149 @@ QString HYDROGUI_CalculationDlg::getObjectName() const return myObjectName->text(); } -void HYDROGUI_CalculationDlg::setGeomObjects( const QStringList& theObjects ) +void moveItems( QListWidget* theSource, QListWidget* theDest, const QStringList& theObjects ) { + QList aFoundItems; + int anIdx; + QListWidgetItem* anItem; + + for ( int i = 0, n = theObjects.length(); i < n; ++i ) + { + QString anObjName = theObjects.at( i ); + 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 = theSource->takeItem( theSource->row( anItem ) ); + // Add the item to the included objects list + theDest->addItem( anItem ); + } + } } -void HYDROGUI_CalculationDlg::setSelectedGeomObjects( const QStringList& theObjects ) +void HYDROGUI_CalculationDlg::includeGeomObjects( const QStringList& theObjects ) { - myGeomObjects->clear(); + moveItems( myAvailableGeomObjects, myGeomObjects, theObjects ); +} + +void HYDROGUI_CalculationDlg::excludeGeomObjects( const QStringList& theObjects ) +{ + moveItems( myGeomObjects, myAvailableGeomObjects, theObjects ); +} + +void HYDROGUI_CalculationDlg::setBoundary( const QString& theObjName ) +{ + bool isBlocked = myPolylineName->blockSignals( true ); + myPolylineName->setCurrentIndex( myPolylineName->findText( theObjName ) ); + myPolylineName->blockSignals( isBlocked ); +} + +void HYDROGUI_CalculationDlg::setPolylineNames( const QStringList& theObjects, const QStringList& theObjectsEntries ) +{ + myPolylineName->clear(); + myPolylineName->addItem( "", "" ); // No boundary item + + for ( int i = 0, n = theObjects.length(); i < n; ++i ) + { + myPolylineName->addItem( theObjects.at( i ), theObjectsEntries.at( i ) ); + } +} +void HYDROGUI_CalculationDlg::setAllGeomObjects( const QStringList& theObjects, const QStringList& theObjectsEntries ) +{ + myAvailableGeomObjects->clear(); for ( int i = 0, n = theObjects.length(); i < n; ++i ) { QString anObjName = theObjects.at( i ); - QListWidgetItem* aListItem = new QListWidgetItem( anObjName, myGeomObjects ); + QListWidgetItem* aListItem = new QListWidgetItem( anObjName, myAvailableGeomObjects ); aListItem->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable ); + aListItem->setData( Qt::UserRole, theObjectsEntries.at( i ) ); } } -QStringList HYDROGUI_CalculationDlg::getSelectedGeomObjects() const +QStringList getSelected( QListWidget* theWidget ) { QStringList aResList; - - for ( int i = 0, n = myGeomObjects->count(); i < n; ++i ) + QList aList = theWidget->selectedItems(); + for ( int i = 0, n = aList.length(); i < n; ++i ) { - QListWidgetItem* aListItem = myGeomObjects->item( i ); - if ( !aListItem ) - continue; - - QString aSelObjName = aListItem->text(); - aResList.append( aSelObjName ); + aResList.append( aList.at( i )->text() ); } - return aResList; } -void HYDROGUI_CalculationDlg::setEditedObject( const Handle(HYDROData_Calculation) theCase ) +QStringList HYDROGUI_CalculationDlg::getSelectedGeomObjects() const +{ + return getSelected( myGeomObjects ); +} + +QStringList HYDROGUI_CalculationDlg::getSelectedAvailableGeomObjects() const +{ + return getSelected( myAvailableGeomObjects ); +} + +void HYDROGUI_CalculationDlg::setEditedObject( const Handle(HYDROData_CalculationCase) theCase ) { myEditedObject = theCase; + myValidator->setEditedObject( theCase ); - HYDROGUI_DataObject* anobj = new HYDROGUI_DataObject( 0, NULL, "" ); - myBrowser->setRoot(anobj); + // Build the calculation case subtree + module()->getDataModel()->buildCaseTree( myBrowser->root(), myEditedObject ); - LightApp_DataObject* aCaseItem = module()->getDataModel()->createObject( anobj, - myEditedObject, "", true ); - myBrowser->updateTree(); myBrowser->openLevels(); + myBrowser->adjustColumnsWidth(); + myBrowser->setAutoUpdate( true ); + myBrowser->setUpdateModified( true ); + +} + +HYDROGUI_Zone* HYDROGUI_CalculationDlg::getCurrentZone() const +{ + return myCurrentZone; +} + +void HYDROGUI_CalculationDlg::refreshZonesBrowser() +{ + SUIT_DataObject* aRoot = myBrowser->root(); + module()->getDataModel()->updateObjectTree( myEditedObject ); + module()->getDataModel()->buildCaseTree( aRoot, myEditedObject ); + myBrowser->updateTree( aRoot ); +} + +void HYDROGUI_CalculationDlg::onDataChanged() +{ + SUIT_DataObject* aRoot = myBrowser->root(); + module()->getDataModel()->buildCaseTree( aRoot, myEditedObject ); + myBrowser->updateTree( aRoot ); +} + +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 ); }