Salome HOME
Selector implementation for OCC viewer.
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_CalculationDlg.cxx
index 5ecbbd432f9b5332e9ca73d3f1f7cf122b36bc35..57e38659b0d6bb21e68438a5ffb6f8f03ba17e4e 100644 (file)
@@ -22,6 +22,7 @@
 
 #include "HYDROGUI_CalculationDlg.h"
 
+#include "HYDROGUI_ObjSelector.h"
 #include "HYDROGUI_Tool.h"
 
 #include <SUIT_FileDlg.h>
 #include <QLabel>
 #include <QLayout>
 #include <QLineEdit>
+#include <QListWidget>
 #include <QPicture>
+#include <QPushButton>
 #include <QToolButton>
 
 HYDROGUI_CalculationDlg::HYDROGUI_CalculationDlg( HYDROGUI_Module* theModule, const QString& theTitle )
 : HYDROGUI_InputPanel( theModule, theTitle )
 {
   // Calculation name
-  myObjectNameGroup = new QGroupBox( tr( "CALCULATION_NAME" ) );
+  myObjectNameGroup = new QGroupBox( tr( "CALCULATION_NAME" ), mainFrame() );
 
   myObjectName = new QLineEdit( myObjectNameGroup );
 
@@ -49,9 +52,56 @@ HYDROGUI_CalculationDlg::HYDROGUI_CalculationDlg( HYDROGUI_Module* theModule, co
   aNameLayout->addWidget( new QLabel( tr( "NAME" ), myObjectNameGroup ) );
   aNameLayout->addWidget( myObjectName );
 
+  
+  // Calculation boundary line
+  QGroupBox* aBndGroup = new QGroupBox( tr( "CALCULATION_BOUNDARY" ), mainFrame() );
+
+  myBndPolyline = new HYDROGUI_ObjSelector( theModule, KIND_POLYLINE, aBndGroup );
+
+  QBoxLayout* aBndLayout = new QHBoxLayout( aBndGroup );
+  aBndLayout->setMargin( 5 );
+  aBndLayout->setSpacing( 5 );
+  aBndLayout->addWidget( new QLabel( tr( "BOUNDARY_POLYLINE" ), aBndGroup ) );
+  aBndLayout->addWidget( myBndPolyline );
+
+
+  // Calculation zones
+  QGroupBox* aZonesGroup = new QGroupBox( tr( "CALCULATION_ZONES" ), mainFrame() );
+
+  myZones = new QListWidget( aZonesGroup );
+  myZones->setSelectionMode( QListWidget::SingleSelection );
+  myZones->setEditTriggers( QListWidget::NoEditTriggers );
+  myZones->setViewMode( QListWidget::ListMode );
+
+  myRegions = new QListWidget( aZonesGroup );
+  myRegions->setSelectionMode( QListWidget::SingleSelection );
+  myRegions->setEditTriggers( QListWidget::NoEditTriggers );
+  myRegions->setViewMode( QListWidget::ListMode );
+
+  mySplittedZonesPrefix = new QLineEdit( aZonesGroup );
+
+  QPushButton* aSplitBtn = new QPushButton( tr( "SPLIT_REFERENCE_ZONES" ), aZonesGroup );
+
+  QGridLayout* aZonesLayout = new QGridLayout( aZonesGroup );
+  aZonesLayout->setMargin( 5 );
+  aZonesLayout->setSpacing( 5 );
+  aZonesLayout->addWidget( new QLabel( tr( "CALCULATION_REFERENCE_ZONES" ), aZonesGroup ), 0, 0, 1, 2 );
+  aZonesLayout->addWidget( myZones, 1, 0, 1, 2 );
+  aZonesLayout->addWidget( new QLabel( tr( "CALCULATION_REGIONS" ), aZonesGroup ), 2, 0, 1, 2 );
+  aZonesLayout->addWidget( myRegions, 3, 0, 1, 2 );
+  aZonesLayout->addWidget( new QLabel( tr( "PREFIX_REGIONS" ), aZonesGroup ), 4, 0 );
+  aZonesLayout->addWidget( mySplittedZonesPrefix, 4, 1 );
+  aZonesLayout->addWidget( aSplitBtn, 5, 0, 1, 2 );
+
   // Common
   addWidget( myObjectNameGroup );
+  addWidget( aBndGroup );
+  addWidget( aZonesGroup );
   addStretch();
+
+
+  // Connect signals and slots
+  connect( aSplitBtn, SIGNAL( clicked( bool ) ), this, SIGNAL( SplitZones() ) );
 }
 
 HYDROGUI_CalculationDlg::~HYDROGUI_CalculationDlg()
@@ -61,6 +111,13 @@ HYDROGUI_CalculationDlg::~HYDROGUI_CalculationDlg()
 void HYDROGUI_CalculationDlg::reset()
 {
   myObjectName->clear();
+
+  myBndPolyline->Clear();
+
+  myZones->clear();
+  myRegions->clear();
+
+  setSplitZonesPrefix( tr( "DEFAULT_PREFIX_REGIONS" ) );
 }
 
 void HYDROGUI_CalculationDlg::setObjectName( const QString& theName )
@@ -73,6 +130,106 @@ QString HYDROGUI_CalculationDlg::getObjectName() const
   return myObjectName->text();
 }
 
+void HYDROGUI_CalculationDlg::setPolylineName( const QString& theName )
+{
+  myBndPolyline->SetName( theName );
+}
+
+QString HYDROGUI_CalculationDlg::getPolylineName() const
+{
+  return myBndPolyline->GetName();
+}
+
+void HYDROGUI_CalculationDlg::setZones( const QStringList& theZones )
+{
+  myZones->clear();
+
+  for ( int i = 0, n = theZones.length(); i < n; ++i )
+  {
+    QString aZoneName = theZones.at( i );
+
+    QListWidgetItem* aListItem = new QListWidgetItem( aZoneName, myZones );
+    aListItem->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsUserCheckable );
+    aListItem->setCheckState( Qt::Unchecked );
+  }
+}
+
+void HYDROGUI_CalculationDlg::setSelectedZones( const QStringList& theZones )
+{
+  for ( int i = 0, n = theZones.length(); i < n; ++i )
+  {
+    QString aZoneName = theZones.at( i );
+
+    QList<QListWidgetItem *> anItems = 
+      myZones->findItems( aZoneName, Qt::MatchFixedString | Qt::MatchCaseSensitive );
+    if ( anItems.isEmpty() )
+      continue;
+
+    QListWidgetItem* aListItem = anItems.first();
+    if ( !aListItem )
+      continue;
+
+    aListItem->setCheckState( Qt::Checked );
+  }
+}
+
+QStringList HYDROGUI_CalculationDlg::getSelectedZones() const
+{
+  QStringList aResList;
+
+  for ( int i = 0, n = myZones->count(); i < n; ++i )
+  {
+    QListWidgetItem* aListItem = myZones->item( i );
+    if ( !aListItem || aListItem->checkState() != Qt::Checked )
+      continue;
+
+    QString aSelZoneName = aListItem->text();
+    aResList.append( aSelZoneName );
+  }
+
+  return aResList;
+}
+
+void HYDROGUI_CalculationDlg::setRegions( const QStringList& theRegions )
+{
+  myRegions->clear();
 
+  for ( int i = 0, n = theRegions.length(); i < n; ++i )
+  {
+    QString aRegionName = theRegions.at( i );
 
+    QListWidgetItem* aListItem = new QListWidgetItem( aRegionName, myRegions );
+    aListItem->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable );
+  }
+}
+
+QStringList HYDROGUI_CalculationDlg::getRegions() const
+{
+  QStringList aResList;
+
+  for ( int i = 0, n = myRegions->count(); i < n; ++i )
+  {
+    QListWidgetItem* aListItem = myRegions->item( i );
+    if ( !aListItem )
+      continue;
+
+    QString aRegionName = aListItem->text();
+    aResList.append( aRegionName );
+  }
+
+  return aResList;
+}
+
+void HYDROGUI_CalculationDlg::setSplitZonesPrefix( const QString& theName )
+{
+  mySplittedZonesPrefix->setText( theName );
+}
+
+QString HYDROGUI_CalculationDlg::getSplitZonesPrefix() const
+{
+  QString aPrefix = mySplittedZonesPrefix->text();
+  if ( aPrefix.isEmpty() )
+    aPrefix = tr( "DEFAULT_PREFIX_REGIONS" );
+  return aPrefix;
+}