X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_CalculationDlg.cxx;h=ba31ad82e4c0b010e89da283171866f569a8ca70;hb=81c9f5cdf82909d0aebd2c491c50fa7516cc80b7;hp=76c0a83d071d33b2eb886a79c36a080127366f4c;hpb=791b55249f942e1b829a0cf693ed3adf2e25ba94;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_CalculationDlg.cxx b/src/HYDROGUI/HYDROGUI_CalculationDlg.cxx index 76c0a83d..ba31ad82 100644 --- a/src/HYDROGUI/HYDROGUI_CalculationDlg.cxx +++ b/src/HYDROGUI/HYDROGUI_CalculationDlg.cxx @@ -64,9 +64,8 @@ HYDROGUI_CalculationDlg::HYDROGUI_CalculationDlg( HYDROGUI_Module* theModule, co : HYDROGUI_Wizard( theModule, theTitle ) { addPage( createObjectsPage() ); + addPage( createGroupsPage() ); addPage( createZonesPage() ); - connect( button( QWizard::NextButton ), SIGNAL( clicked() ), SIGNAL( splitZones() ) ); - connect( button( QWizard::BackButton ), SIGNAL( clicked() ), SIGNAL( hideZones() ) ); } HYDROGUI_CalculationDlg::~HYDROGUI_CalculationDlg() @@ -77,6 +76,8 @@ void HYDROGUI_CalculationDlg::reset() { myObjectName->clear(); myGeomObjects->clear(); + myPolylineName->clear(); + myAvailableGeomObjects->clear(); } QWizardPage* HYDROGUI_CalculationDlg::createObjectsPage() { @@ -92,21 +93,23 @@ QWizardPage* HYDROGUI_CalculationDlg::createObjectsPage() { connect( myValidator, SIGNAL( alreadyExists( QString ) ), SLOT( onAlreadyExists( QString ) ) ); myPolylineName = new QComboBox( aPage ); + connect( myPolylineName, SIGNAL( activated( const QString & ) ), + SIGNAL( boundarySelected( const QString & ) ) ); 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::SingleSelection ); + myAvailableGeomObjects->setSelectionMode( QListWidget::ExtendedSelection ); myAvailableGeomObjects->setEditTriggers( QListWidget::NoEditTriggers ); myAvailableGeomObjects->setViewMode( QListWidget::ListMode ); myAvailableGeomObjects->setSortingEnabled( true ); - connect( myGeomObjects, SIGNAL( currentTextChanged( const QString & ) ), - SIGNAL( objectSelected( const QString & ) ) ); + connect( myGeomObjects, SIGNAL( itemSelectionChanged() ), + SIGNAL( objectsSelected() ) ); QFrame* anObjectsFrame = new QFrame( aPage ); QGridLayout* anObjsLayout = new QGridLayout( anObjectsFrame ); @@ -160,18 +163,67 @@ QWizardPage* HYDROGUI_CalculationDlg::createObjectsPage() { return aPage; } -void HYDROGUI_CalculationDlg::onEmptyName() -{ - QString aTitle = QObject::tr( "INSUFFICIENT_INPUT_DATA" ); - QString aMessage = QObject::tr( "INCORRECT_OBJECT_NAME" ); - SUIT_MessageBox::critical( module()->getApp()->desktop(), aTitle, aMessage ); -} +QWizardPage* HYDROGUI_CalculationDlg::createGroupsPage() { + QWizardPage* aPage = new QWizardPage( mainFrame() ); + QFrame* aFrame = new QFrame( aPage ); -void HYDROGUI_CalculationDlg::onAlreadyExists( QString theName ) -{ - QString aTitle = QObject::tr( "INSUFFICIENT_INPUT_DATA" ); - QString aMessage = QObject::tr( "OBJECT_EXISTS_IN_DOCUMENT" ).arg( theName ); - SUIT_MessageBox::critical( module()->getApp()->desktop(), aTitle, aMessage ); + 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() { @@ -180,7 +232,7 @@ QWizardPage* HYDROGUI_CalculationDlg::createZonesPage() { QGridLayout* aLayout = new QGridLayout( aPage ); - myBrowser = new HYDROGUI_DataBrowser( module(), 0, aPage ); + myBrowser = new HYDROGUI_DataBrowser( module(), NULL, aPage ); myBrowser->setAutoOpenLevel( 3 ); aLayout->setMargin( 5 ); aLayout->setSpacing( 5 ); @@ -198,6 +250,7 @@ QWizardPage* HYDROGUI_CalculationDlg::createZonesPage() { 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 ) ) ); @@ -208,6 +261,42 @@ QWizardPage* HYDROGUI_CalculationDlg::createZonesPage() { 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 ) { @@ -267,7 +356,7 @@ void HYDROGUI_CalculationDlg::onSelected( SUIT_DataObject* theObject ) 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->getBathymetries(); + QStringList aList = aZone->getAltitudes(); for ( int i = 0; i < aList.length(); i++ ) { myBathymetryChoice->addItem( aList.at( i ), HYDROData_Zone::Merge_Object ); @@ -283,7 +372,7 @@ void HYDROGUI_CalculationDlg::onSelected( SUIT_DataObject* theObject ) aCurIndex = 2; break; case HYDROData_Zone::Merge_Object: - aCurIndex = 3 + aList.indexOf( aZone->text( HYDROGUI_DataObject::BathymetryId ) ); + aCurIndex = 3 + aList.indexOf( aZone->text( HYDROGUI_DataObject::AltitudeObjId ) ); break; default: aCurIndex = 0; // Select unknown by default @@ -306,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; @@ -315,39 +404,45 @@ 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::includeGeomObjects( const QStringList& theObjects ) +{ + moveItems( myAvailableGeomObjects, myGeomObjects, theObjects ); +} + void HYDROGUI_CalculationDlg::excludeGeomObjects( const QStringList& theObjects ) { - QList aFoundItems; - int anIdx; - QListWidgetItem* anItem; + 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 ) { - 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 ); - } + myPolylineName->addItem( theObjects.at( i ), theObjectsEntries.at( i ) ); } } - void HYDROGUI_CalculationDlg::setAllGeomObjects( const QStringList& theObjects, const QStringList& theObjectsEntries ) { myAvailableGeomObjects->clear(); @@ -362,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() ); @@ -373,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 ) @@ -389,13 +483,15 @@ void HYDROGUI_CalculationDlg::setEditedObject( const Handle(HYDROData_Calculatio 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 ); - module()->getDataModel()->buildCaseTree( anobj, myEditedObject ); myBrowser->updateTree(); myBrowser->openLevels(); myBrowser->adjustColumnsWidth(); + myBrowser->setAutoUpdate( true ); + myBrowser->setUpdateModified( true ); + } HYDROGUI_Zone* HYDROGUI_CalculationDlg::getCurrentZone() const @@ -405,5 +501,43 @@ HYDROGUI_Zone* HYDROGUI_CalculationDlg::getCurrentZone() const void HYDROGUI_CalculationDlg::refreshZonesBrowser() { - myBrowser->updateTree(); -} \ No newline at end of file + 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 ); +}