Salome HOME
- Geometry objects selected in Calculation case wizard are highlighted now in the...
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_CalculationDlg.cxx
index 4cf7eb3720f21998f060e2f604d31f3bc4ff8aa5..6345e5f5b94f704fbacb4c469d3309c7b48878c7 100644 (file)
 #include "HYDROGUI_Module.h"
 #include "HYDROGUI_DataObject.h"
 #include "HYDROGUI_NameValidator.h"
+#include "HYDROGUI_Region.h"
+#include "HYDROGUI_Zone.h"
 
 #include <HYDROData_Document.h>
 #include <HYDROData_Entity.h>
-#include <HYDROGUI_Zone.h>
 
 #include <CAM_Application.h>
 #include <LightApp_DataObject.h>
@@ -65,6 +66,8 @@ HYDROGUI_CalculationDlg::HYDROGUI_CalculationDlg( HYDROGUI_Module* theModule, co
   aWizard->addPage( createObjectsPage() );
   aWizard->addPage( createZonesPage() );
   connect( aWizard->button( QWizard::NextButton ), SIGNAL( clicked() ), SIGNAL( splitZones() ) );
+  connect( aWizard->button( QWizard::BackButton ), SIGNAL( clicked() ), SIGNAL( hideZones() ) );
+  
   aWizard->show();
 }
 
@@ -87,8 +90,8 @@ QWizardPage* HYDROGUI_CalculationDlg::createObjectsPage() {
   myValidator = new HYDROGUI_NameValidator(module(), myObjectName);
   myObjectName->setValidator( myValidator );
 
-  connect( myValidator, SIGNAL( emptyName() ), this, SLOT( onEmptyName() ) );
-  connect( myValidator, SIGNAL( alreadyExists( QString ) ), this, SLOT( onAlreadyExists( QString ) ) );
+  connect( myValidator, SIGNAL( emptyName() ), SLOT( onEmptyName() ) );
+  connect( myValidator, SIGNAL( alreadyExists( QString ) ), SLOT( onAlreadyExists( QString ) ) );
 
   myGeomObjects = new QListWidget( aPage );
   myGeomObjects->setSelectionMode( QListWidget::SingleSelection );
@@ -96,6 +99,9 @@ QWizardPage* HYDROGUI_CalculationDlg::createObjectsPage() {
   myGeomObjects->setViewMode( QListWidget::ListMode );
   myGeomObjects->setSortingEnabled( true );
 
+  connect( myGeomObjects, SIGNAL( currentTextChanged( const QString & ) ), 
+    SIGNAL( objectSelected( const QString & ) ) );
+
   QFrame* aBtnsFrame = new QFrame( aPage );
   QVBoxLayout* aBtnsLayout = new QVBoxLayout( aBtnsFrame );
   aBtnsLayout->setMargin( 5 );
@@ -166,12 +172,50 @@ QWizardPage* HYDROGUI_CalculationDlg::createZonesPage() {
 
   aPage->setLayout( aLayout );
 
+  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*>&, SUIT_DataObject*, int, Qt::DropAction ) ),
+      SLOT( onZonesDropped( const QList<SUIT_DataObject*>&, SUIT_DataObject*, int, Qt::DropAction ) ) );
 
   return aPage;
 }
 
+void HYDROGUI_CalculationDlg::onZonesDropped( const QList<SUIT_DataObject*>& theList, 
+    SUIT_DataObject* theTargetParent, int theTargetRow, Qt::DropAction theDropAction )
+{
+  QList<SUIT_DataObject*> aZonesList;
+  HYDROGUI_Zone* aZone;
+  // Get a list of dropped zones
+  for ( int i = 0; i < theList.length(); i++ )
+  {
+    aZone = dynamic_cast<HYDROGUI_Zone*>( theList.at( i ) );
+    if ( aZone )
+    {
+      aZonesList.append( aZone );
+    }
+  }
+  if ( aZonesList.length() > 0 )
+  {
+    // Get the target region
+    HYDROGUI_NamedObject* aRegionsRoot = dynamic_cast<HYDROGUI_NamedObject*>(theTargetParent);
+    if ( aRegionsRoot )
+    {
+      // Create a new region
+      emit createRegion( aZonesList );
+    }
+    else
+    {
+      HYDROGUI_Region* aRegion = dynamic_cast<HYDROGUI_Region*>(theTargetParent);
+      if ( aRegion )
+      {
+        emit moveZones( theTargetParent, aZonesList );
+      }
+    }
+  }
+}
+
 void HYDROGUI_CalculationDlg::onMergeTypeSelected( int theIndex )
 {
   int aType = myBathymetryChoice->itemData( theIndex ).toInt();
@@ -194,9 +238,9 @@ void HYDROGUI_CalculationDlg::onSelected( SUIT_DataObject* theObject )
     bool prevBlock = myBathymetryChoice->blockSignals( true );
     myCurrentZone = aZone;
     myBathymetryChoice->clear();
-    myBathymetryChoice->addItem( QObject::tr("MERGE_UNKNOWN"), HYDROData_Zone::Merge_UNKNOWN );
-    myBathymetryChoice->addItem( QObject::tr("MERGE_ZMIN"), HYDROData_Zone::Merge_ZMIN );
-    myBathymetryChoice->addItem( QObject::tr("MERGE_ZMAX"), HYDROData_Zone::Merge_ZMAX );
+    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();
     for ( int i = 0; i < aList.length(); i++ )
     {
@@ -213,7 +257,7 @@ void HYDROGUI_CalculationDlg::onSelected( SUIT_DataObject* theObject )
         aCurIndex = 2;
         break;
       case HYDROData_Zone::Merge_Object:
-        aCurIndex = aList.indexOf( aZone->text( HYDROGUI_DataObject::BathymetryId ) );
+        aCurIndex = 3 + aList.indexOf( aZone->text( HYDROGUI_DataObject::BathymetryId ) );
         break;
       default:
         aCurIndex = 0; // Select unknown by default
@@ -237,10 +281,6 @@ QString HYDROGUI_CalculationDlg::getObjectName() const
 }
 
 void HYDROGUI_CalculationDlg::setGeomObjects( const QStringList& theObjects )
-{
-}
-
-void HYDROGUI_CalculationDlg::setSelectedGeomObjects( const QStringList& theObjects )
 {
   myGeomObjects->clear();
 
@@ -272,13 +312,18 @@ void HYDROGUI_CalculationDlg::setEditedObject( const Handle(HYDROData_Calculatio
   HYDROGUI_DataObject* anobj = new HYDROGUI_DataObject( 0, NULL, "" );
   myBrowser->setRoot(anobj);
 
-  LightApp_DataObject* aCaseItem = module()->getDataModel()->createObject( anobj,
-                                     myEditedObject, "", true );
+  module()->getDataModel()->buildCaseTree( anobj, myEditedObject );
   myBrowser->updateTree();
   myBrowser->openLevels();
+  myBrowser->adjustColumnsWidth();
 }
 
 HYDROGUI_Zone* HYDROGUI_CalculationDlg::getCurrentZone() const
 {
   return myCurrentZone;
+}
+
+void HYDROGUI_CalculationDlg::refreshZonesBrowser()
+{
+  myBrowser->updateTree();
 }
\ No newline at end of file