Salome HOME
refs #550: fix crash when myObject is NULL
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_CalculationDlg.cxx
index 2cab4834a7a5aedddd194899c330bf53aac66eb8..c23683e9ac1c16eccefef716e6131012acc106fe 100644 (file)
@@ -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
@@ -183,9 +179,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;
@@ -197,7 +193,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 );
 
@@ -239,6 +235,8 @@ QWizardPage* HYDROGUI_CalculationDlg::createObjectsPage() {
   connect( anAddBtn, SIGNAL( clicked() ), SIGNAL( addObjects() ) );
   connect( aRemoveBtn, SIGNAL( clicked() ), SIGNAL( removeObjects() ) );
 
+  connect( myGeomObjects, SIGNAL( orderChanged() ), SLOT( onOrderChanged() ) );
+
   return aPage;
 }
 
@@ -286,16 +284,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 );
 
@@ -318,13 +316,13 @@ QWizardPage* HYDROGUI_CalculationDlg::createZonesPage() {
 
   aLayout->addWidget( myBrowser, 0, 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( myBatimetryLabel, 1, 0 );
+  aLayout->addWidget( myBathymetryLabel, 1, 0 );
   aLayout->addWidget( myBathymetryChoice, 1, 1 );
 
   aPage->setLayout( aLayout );
@@ -336,6 +334,7 @@ QWizardPage* HYDROGUI_CalculationDlg::createZonesPage() {
   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() ) );
 
   return aPage;
 }
@@ -410,6 +409,11 @@ void HYDROGUI_CalculationDlg::onZonesDropped( const QList<SUIT_DataObject*>& the
   }
 }
 
+void HYDROGUI_CalculationDlg::OnNewRegion()
+{
+  emit createRegion( myBrowser->getSelected() );
+}
+
 void HYDROGUI_CalculationDlg::onMergeTypeSelected( int theIndex )
 {
   int aType = myBathymetryChoice->itemData( theIndex ).toInt();
@@ -461,7 +465,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 )
@@ -722,8 +727,21 @@ HYDROData_ListOfRules HYDROGUI_CalculationDlg::getRules() const
 /**
   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();
+}