Salome HOME
Selector implementation for OCC viewer.
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_CalculationDlg.cxx
index b1f888174f1366048fa16c431475e8e73912ea78..57e38659b0d6bb21e68438a5ffb6f8f03ba17e4e 100644 (file)
@@ -33,7 +33,9 @@
 #include <QLabel>
 #include <QLayout>
 #include <QLineEdit>
+#include <QListWidget>
 #include <QPicture>
+#include <QPushButton>
 #include <QToolButton>
 
 HYDROGUI_CalculationDlg::HYDROGUI_CalculationDlg( HYDROGUI_Module* theModule, const QString& theTitle )
@@ -50,6 +52,8 @@ 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 );
@@ -60,10 +64,44 @@ HYDROGUI_CalculationDlg::HYDROGUI_CalculationDlg( HYDROGUI_Module* theModule, co
   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()
@@ -75,6 +113,11 @@ void HYDROGUI_CalculationDlg::reset()
   myObjectName->clear();
 
   myBndPolyline->Clear();
+
+  myZones->clear();
+  myRegions->clear();
+
+  setSplitZonesPrefix( tr( "DEFAULT_PREFIX_REGIONS" ) );
 }
 
 void HYDROGUI_CalculationDlg::setObjectName( const QString& theName )
@@ -97,5 +140,96 @@ 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;
+}