-// 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
#include "HYDROGUI_Zone.h"
#include "HYDROGUI_OrderedListWidget.h"
#include "HYDROGUI_PriorityWidget.h"
+#include "HYDROGUI_PriorityTableModel.h"
#include <HYDROData_Document.h>
#include <HYDROData_Entity.h>
{
addPage( createObjectsPage() );
addPage( createGroupsPage() );
+ addPage( createLandCoverMapPage() );
addPage( createZonesPage() );
}
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<Handle(HYDROData_Object)> anObjects;
+ QList<Handle(HYDROData_Entity)> anObjects;
myPriorityWidget->setObjects( anObjects );
}
// 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;
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 );
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;
}
// 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 );
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 );
connect( myBrowser,
SIGNAL( dropped( const QList<SUIT_DataObject*>&, SUIT_DataObject*, int, Qt::DropAction ) ),
SLOT( onZonesDropped( const QList<SUIT_DataObject*>&, 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;
}
}
+void HYDROGUI_CalculationDlg::OnNewRegion()
+{
+ emit createRegion( myBrowser->getSelected() );
+}
+
void HYDROGUI_CalculationDlg::onMergeTypeSelected( int theIndex )
{
int aType = myBathymetryChoice->itemData( theIndex ).toInt();
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 );
}
myBathymetryChoice->setVisible( doShow );
- myBatimetryLabel->setVisible( doShow );
+ myBathymetryChoice->setEnabled( getMode() == HYDROData_CalculationCase::MANUAL );
+ myBathymetryLabel->setVisible( doShow );
}
void HYDROGUI_CalculationDlg::setObjectName( const QString& theName )
void HYDROGUI_CalculationDlg::includeGeomObjects( const QStringList& theObjects )
{
- HYDROGUI_ListModel::Object2VisibleList anObjectsToInclude;
QList<QListWidgetItem*> aFoundItems;
foreach ( const QString& anObjName, theObjects ) {
// Hide the object in the available objects list
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();
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
Get included geometry objects.
@return the list of geometry objects
*/
-QList<Handle(HYDROData_Object)> HYDROGUI_CalculationDlg::getGeometryObjects()
+QList<Handle(HYDROData_Entity)> HYDROGUI_CalculationDlg::getGeometryObjects()
{
QList<Handle(HYDROData_Entity)> anEntities = myGeomObjects->getObjects();
- QList<Handle(HYDROData_Object)> anObjects;
+ QList<Handle(HYDROData_Entity)> anObjects;
foreach ( Handle(HYDROData_Entity) anEntity, anEntities ) {
Handle(HYDROData_Object) anObj = Handle(HYDROData_Object)::DownCast( anEntity );
return anObjects;
}
+/**
+ Get chosen land cover map.
+ @return the land cover map object
+ */
+Handle(HYDROData_LandCoverMap) HYDROGUI_CalculationDlg::getLandCoverMap()
+{
+ /* TODO
+ QList<Handle(HYDROData_Entity)> anEntities = myLandCovers->getObjects();
+ QList<Handle(HYDROData_Entity)> aLandCovers;
+
+ foreach ( Handle(HYDROData_Entity) anEntity, anEntities ) {
+ Handle(HYDROData_LandCover) aLandCover = Handle(HYDROData_LandCover)::DownCast( anEntity );
+ if ( aLandCover.IsNull() ) {
+ continue;
+ }
+
+ aLandCovers << aLandCover;
+ }
+
+ return aLandCovers;
+ */
+ Handle(HYDROData_LandCoverMap) aLandCoverMap = NULL;
+ return aLandCoverMap;
+}
+
/**
Get rules.
@return the list of rules
/**
Set rules.
@param theRules the list of rules
-*/
+ */
void HYDROGUI_CalculationDlg::setRules( const HYDROData_ListOfRules& theRules ) const
{
myPriorityWidget->setRules( theRules );
-}
\ No newline at end of file
+}
+
+/**
+ 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 );
+}