X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_CalculationDlg.cxx;h=a2d3c7dce3107ac9596f114f6775fd666a8f1022;hb=7f56fcbfed23a9fd09b7ab87edd7ec742e2725e6;hp=a8c978db58167cde1dcf22308151447bed92f995;hpb=c7917bada8643db80254fe2a3b3a91d25548b484;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_CalculationDlg.cxx b/src/HYDROGUI/HYDROGUI_CalculationDlg.cxx index a8c978db..a2d3c7dc 100644 --- a/src/HYDROGUI/HYDROGUI_CalculationDlg.cxx +++ b/src/HYDROGUI/HYDROGUI_CalculationDlg.cxx @@ -1,12 +1,8 @@ -// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// +// Copyright (C) 2014-2015 EDF-R&D // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License. +// version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -34,6 +30,7 @@ #include "HYDROGUI_Zone.h" #include "HYDROGUI_OrderedListWidget.h" #include "HYDROGUI_PriorityWidget.h" +#include "HYDROGUI_PriorityTableModel.h" #include #include @@ -74,6 +71,7 @@ HYDROGUI_CalculationDlg::HYDROGUI_CalculationDlg( HYDROGUI_Module* theModule, co { addPage( createObjectsPage() ); addPage( createGroupsPage() ); + addPage( createLandCoverMapPage() ); addPage( createZonesPage() ); } @@ -87,10 +85,15 @@ void HYDROGUI_CalculationDlg::reset() HYDROGUI_ListModel::Object2VisibleList anObject2VisibleList; myGeomObjects->setObjects(anObject2VisibleList); myPolylineName->clear(); + myStricklerTableName->clear(); myAvailableGeomObjects->clear(); // Activate the automatic mode setMode( HYDROData_CalculationCase::AUTOMATIC ); + + // Reset the priority widget state + QList anObjects; + myPriorityWidget->setObjects( anObjects ); } QWizardPage* HYDROGUI_CalculationDlg::createObjectsPage() { @@ -179,9 +182,9 @@ QWizardPage* HYDROGUI_CalculationDlg::createObjectsPage() { // 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( myAvailableGeomObjects, 1, 0 ); anObjsLayout->addWidget( aBtnsFrame, 1, 1, Qt::AlignHCenter ); - anObjsLayout->addWidget( myGeomObjects, 1, 2, Qt::AlignHCenter ); + anObjsLayout->addWidget( myGeomObjects, 1, 2 ); // fill the top of the page QGridLayout* aTopLayout = new QGridLayout; @@ -193,7 +196,7 @@ QWizardPage* HYDROGUI_CalculationDlg::createObjectsPage() { aTopLayout->addWidget( aLimitsLabel, 1, 0, Qt::AlignHCenter ); aTopLayout->addWidget( myPolylineName, 1, 1 ); aTopLayout->addWidget( aModeGroup, 2, 0, 1, 2 ); - aTopLayout->addWidget( anObjectsFrame, 3, 0, 1, 2, Qt::AlignHCenter ); + aTopLayout->addWidget( anObjectsFrame, 3, 0, 1, 2 ); aTopContainer->setLayout( aTopLayout ); @@ -235,6 +238,10 @@ QWizardPage* HYDROGUI_CalculationDlg::createObjectsPage() { connect( anAddBtn, SIGNAL( clicked() ), SIGNAL( addObjects() ) ); connect( aRemoveBtn, SIGNAL( clicked() ), SIGNAL( removeObjects() ) ); + connect( myGeomObjects, SIGNAL( orderChanged() ), SLOT( onOrderChanged() ) ); + + connect( myPriorityWidget, SIGNAL( ruleChanged() ), SLOT( onRuleChanged() ) ); + return aPage; } @@ -282,16 +289,16 @@ QWizardPage* HYDROGUI_CalculationDlg::createGroupsPage() { // 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( myAvailableGroups, 1, 0 ); aGroupsLayout->addWidget( aBtnsFrame, 1, 1, Qt::AlignHCenter ); - aGroupsLayout->addWidget( myGroups, 1, 2, Qt::AlignHCenter ); + aGroupsLayout->addWidget( myGroups, 1, 2 ); // Fill the page QGridLayout* aPageLayout = new QGridLayout( aPage ); aPageLayout->setMargin( 5 ); aPageLayout->setSpacing( 5 ); aPageLayout->setVerticalSpacing( 10 ); - aPageLayout->addWidget( aGroupsFrame, 0, 0, Qt::AlignHCenter ); + aPageLayout->addWidget( aGroupsFrame, 0, 0 ); aPage->setLayout( aPageLayout ); @@ -301,27 +308,72 @@ QWizardPage* HYDROGUI_CalculationDlg::createGroupsPage() { return aPage; } +QWizardPage* HYDROGUI_CalculationDlg::createLandCoverMapPage() { + QWizardPage* aPage = new QWizardPage( mainFrame() ); + QFrame* aFrame = new QFrame( aPage ); + + // Top of the page + QWidget* aTopContainer = new QWidget; + + // TODO: add combo-box to choose land cover map object + // Combo-box to choose Strickler table name + QLabel* aStricklerTableLabel = new QLabel( tr( "STRICKLER_TABLE" ), aPage ); + myStricklerTableName = new QComboBox( aPage ); + myStricklerTableName->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + connect( myStricklerTableName, SIGNAL( activated( const QString & ) ), + SIGNAL( StricklerTableSelected( const QString & ) ) ); + + // Fill the top layout of the page + QGridLayout* aTopLayout = new QGridLayout; + aTopLayout->setMargin( 5 ); + aTopLayout->setSpacing( 5 ); + aTopLayout->setVerticalSpacing( 10 ); + // TODO: add land cover map combo-box to the layout + aTopLayout->addWidget( aStricklerTableLabel, 0, 0, Qt::AlignHCenter ); + aTopLayout->addWidget( myStricklerTableName, 0, 1 ); + + aTopContainer->setLayout( aTopLayout ); + + // Page layout + QVBoxLayout* aPageLayout = new QVBoxLayout; + aPageLayout->setMargin( 5 ); + aPageLayout->setSpacing( 5 ); + + aPage->setLayout( aPageLayout ); + + // Connections + // TODO + + return aPage; +} + QWizardPage* HYDROGUI_CalculationDlg::createZonesPage() { QWizardPage* aPage = new QWizardPage( mainFrame() ); QFrame* aFrame = new QFrame( aPage ); QGridLayout* aLayout = new QGridLayout( aPage ); + + QLabel* aResultsOnGeomObjectsLabel = new QLabel( tr( "RESULTS_ON_GEOMETRY_OBJECTS" ), aFrame ); myBrowser = new HYDROGUI_DataBrowser( module(), NULL, aPage ); myBrowser->setAutoOpenLevel( 3 ); aLayout->setMargin( 5 ); aLayout->setSpacing( 5 ); - aLayout->addWidget( myBrowser, 0, 0, 1, 2 ); + aLayout->addWidget( aResultsOnGeomObjectsLabel, 0, 0 ); + aLayout->addWidget( myBrowser, 1, 0, 1, 2 ); - myBatimetryLabel = new QLabel( tr( "BATHYMETRY" ), aFrame ); + myBathymetryLabel = new QLabel( tr( "BATHYMETRY" ), aFrame ); myBathymetryChoice = new QComboBox( aFrame ); myBathymetryChoice->setVisible( false ); - myBatimetryLabel->setVisible( false ); + myBathymetryLabel->setVisible( false ); + + aLayout->addWidget( myBathymetryLabel, 2, 0 ); + aLayout->addWidget( myBathymetryChoice, 2, 1 ); - aLayout->addWidget( myBatimetryLabel, 1, 0 ); - aLayout->addWidget( myBathymetryChoice, 1, 1 ); + QPushButton* aRegenerateBtn = new QPushButton( tr( "REGENERATE_COLORS" ), this ); + aLayout->addWidget( aRegenerateBtn, 3, 0 ); aPage->setLayout( aLayout ); @@ -332,11 +384,11 @@ QWizardPage* HYDROGUI_CalculationDlg::createZonesPage() { connect( myBrowser, SIGNAL( dropped( const QList&, SUIT_DataObject*, int, Qt::DropAction ) ), SLOT( onZonesDropped( const QList&, SUIT_DataObject*, int, Qt::DropAction ) ) ); - + connect( myBrowser, SIGNAL( newRegion() ), this, SLOT( OnNewRegion() ) ); + connect( aRegenerateBtn, SIGNAL( clicked() ), this, SIGNAL( regenerateColors() ) ); return aPage; } - bool HYDROGUI_CalculationDlg::acceptCurrent() const { QString anErrorMsg; @@ -406,6 +458,11 @@ void HYDROGUI_CalculationDlg::onZonesDropped( const QList& the } } +void HYDROGUI_CalculationDlg::OnNewRegion() +{ + emit createRegion( myBrowser->getSelected() ); +} + void HYDROGUI_CalculationDlg::onMergeTypeSelected( int theIndex ) { int aType = myBathymetryChoice->itemData( theIndex ).toInt(); @@ -431,7 +488,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->getAltitudes(); + QStringList aList = aZone->getObjects(); for ( int i = 0; i < aList.length(); i++ ) { myBathymetryChoice->addItem( aList.at( i ), HYDROData_Zone::Merge_Object ); @@ -457,7 +514,8 @@ void HYDROGUI_CalculationDlg::onSelected( SUIT_DataObject* theObject ) } myBathymetryChoice->setVisible( doShow ); - myBatimetryLabel->setVisible( doShow ); + myBathymetryChoice->setEnabled( getMode() == HYDROData_CalculationCase::MANUAL ); + myBathymetryLabel->setVisible( doShow ); } void HYDROGUI_CalculationDlg::setObjectName( const QString& theName ) @@ -493,7 +551,6 @@ void moveItems( QListWidget* theSource, QListWidget* theDest, const QStringList& void HYDROGUI_CalculationDlg::includeGeomObjects( const QStringList& theObjects ) { - HYDROGUI_ListModel::Object2VisibleList anObjectsToInclude; QList aFoundItems; foreach ( const QString& anObjName, theObjects ) { // Hide the object in the available objects list @@ -507,6 +564,8 @@ void HYDROGUI_CalculationDlg::includeGeomObjects( const QStringList& theObjects HYDROGUI_Tool::FindObjectByName( module(), anObjName ); myGeomObjects->addObject( HYDROGUI_ListModel::Object2Visible( anObject, true ) ); } + + myPriorityWidget->setObjects( getGeometryObjects() ); } void HYDROGUI_CalculationDlg::excludeGeomObjects( const QStringList& theObjects ) @@ -522,6 +581,8 @@ void HYDROGUI_CalculationDlg::excludeGeomObjects( const QStringList& theObjects // Remove the object from the list of included objects myGeomObjects->removeObjectByName( anObjName ); } + + myPriorityWidget->setObjects( getGeometryObjects() ); } void HYDROGUI_CalculationDlg::setBoundary( const QString& theObjName ) @@ -541,6 +602,17 @@ void HYDROGUI_CalculationDlg::setPolylineNames( const QStringList& theObjects, c myPolylineName->addItem( theObjects.at( i ), theObjectsEntries.at( i ) ); } } + +void HYDROGUI_CalculationDlg::setStricklerTableNames( const QStringList& theObjects, const QStringList& theObjectsEntries ) +{ + myStricklerTableName->clear(); + + for ( int i = 0, n = theObjects.length(); i < n; ++i ) + { + myStricklerTableName->addItem( theObjects.at( i ), theObjectsEntries.at( i ) ); + } +} + void HYDROGUI_CalculationDlg::setAllGeomObjects( const QStringList& theObjects, const QStringList& theObjectsEntries ) { myAvailableGeomObjects->clear(); @@ -587,13 +659,24 @@ void HYDROGUI_CalculationDlg::setEditedObject( const Handle(HYDROData_Calculatio myValidator->setEditedObject( theCase ); // Build the calculation case subtree - module()->getDataModel()->buildCaseTree( myBrowser->root(), myEditedObject ); + module()->getDataModel()->buildCaseTree( myBrowser->root(), myEditedObject); myBrowser->updateTree(); myBrowser->openLevels(); myBrowser->adjustColumnsWidth(); myBrowser->setAutoUpdate( true ); myBrowser->setUpdateModified( true ); + + /*TODO + // Build the calculation case subtree for Land Cover regions + module()->getDataModel()->buildCaseTree( myLandCoverBrowser->root(), myEditedObject, true ); + + myLandCoverBrowser->updateTree(); + myLandCoverBrowser->openLevels(); + myLandCoverBrowser->adjustColumnsWidth(); + myLandCoverBrowser->setAutoUpdate( true ); + myLandCoverBrowser->setUpdateModified( true ); + */ } HYDROGUI_Zone* HYDROGUI_CalculationDlg::getCurrentZone() const @@ -673,13 +756,113 @@ void HYDROGUI_CalculationDlg::setMode( int theMode ) } /** - Enable/disable zones drag and drop. - @param theIsEnabled if true - zones drag and drop will be enabled + Enable/disable zones drag'n'drop and renaming. + @param theIsEnabled if true - zones drag'n'drop and renaming will be enabled */ -void HYDROGUI_CalculationDlg::setMoveZonesEnabled( const bool theIsEnabled ) +void HYDROGUI_CalculationDlg::setEditZonesEnabled( const bool theIsEnabled ) { - //TODO: to be reimplemented - foreach ( QTreeView* aView, myBrowser->findChildren() ) { - aView->setDragEnabled ( theIsEnabled ); + myBrowser->setReadOnly( !theIsEnabled ); +} + +/** + Get included geometry objects. + @return the list of geometry objects + */ +QList HYDROGUI_CalculationDlg::getGeometryObjects() +{ + QList anEntities = myGeomObjects->getObjects(); + QList anObjects; + + foreach ( Handle(HYDROData_Entity) anEntity, anEntities ) { + Handle(HYDROData_Object) anObj = Handle(HYDROData_Object)::DownCast( anEntity ); + if ( anObj.IsNull() ) { + continue; + } + + anObjects << anObj; + } + + return anObjects; +} + +/** + Get chosen land cover map. + @return the land cover map object + */ +Handle(HYDROData_LandCoverMap) HYDROGUI_CalculationDlg::getLandCoverMap() +{ + /* TODO + QList anEntities = myLandCovers->getObjects(); + QList aLandCovers; + + foreach ( Handle(HYDROData_Entity) anEntity, anEntities ) { + Handle(HYDROData_LandCover) aLandCover = Handle(HYDROData_LandCover)::DownCast( anEntity ); + if ( aLandCover.IsNull() ) { + continue; + } + + aLandCovers << aLandCover; } -} \ No newline at end of file + + return aLandCovers; + */ + Handle(HYDROData_LandCoverMap) aLandCoverMap = NULL; + return aLandCoverMap; +} + +/** + Get rules. + @return the list of rules + */ +HYDROData_ListOfRules HYDROGUI_CalculationDlg::getRules() const +{ + return myPriorityWidget->getRules(); +} + +/** + Set rules. + @param theRules the list of rules + */ +void HYDROGUI_CalculationDlg::setRules( const HYDROData_ListOfRules& theRules ) const +{ + myPriorityWidget->setRules( theRules ); +} + +/** + Slot called when objects order is changed. + */ +void HYDROGUI_CalculationDlg::onOrderChanged() +{ + bool isConfirmed = true; + emit orderChanged( isConfirmed ); + if( isConfirmed ) + myPriorityWidget->setObjects( getGeometryObjects() ); + else + myGeomObjects->undoLastMove(); +} + +/** + Slot called when priority rule for geometry objects is changed. + */ +void HYDROGUI_CalculationDlg::onRuleChanged() +{ + bool isConfirmed = true; + emit ruleChanged( isConfirmed ); + if( !isConfirmed ) + myPriorityWidget->undoLastChange(); +} + +// TODO: setLandCoverMap(...) +void HYDROGUI_CalculationDlg::setStricklerTable( const QString& theStricklerTableName, bool theBlockSignals ) +{ + bool isBlocked; + if ( theBlockSignals ) + isBlocked = myStricklerTableName->blockSignals( true ); + + myStricklerTableName->setCurrentIndex( myStricklerTableName->findText( theStricklerTableName ) ); + + if ( theBlockSignals ) + myStricklerTableName->blockSignals( isBlocked ); + else + emit StricklerTableSelected( theStricklerTableName ); +}