Salome HOME
This commit was generated by cvs2git to create tag 'V4_1_0a1'.
[modules/filter.git] / src / FILTERGUI / SelectField.cxx
index 164e7a6e85d88eb44407c041c43c75630b5846e6..a10c0b9120989d7f15aff19a1cd1f1e4b75fe3da 100644 (file)
@@ -18,6 +18,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 #include "SelectField.h"
+#include "MEDMEM_define.hxx"
 
 #include <qgroupbox.h>
 #include <qframe.h>
 #include <qlistview.h>
 #include <qslider.h>
 #include <qlabel.h>
-
-SelectField::SelectField(const QString& file)
-  : _file(file),
-    _mesh(0),
-    _field(0),
+#include <qpushbutton.h>
+
+SelectField::SelectField(FilterGUI* theModule,const QString& file, 
+                        const char* name,
+                        bool modal, WFlags fl)
+  : QDialog(FILTER::GetDesktop( theModule ), name, modal, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu),
+    myFilterGUI( theModule ),
+    _file(file),
+    _mesh(NULL),
+    _field(NULL),
     _ts(0),
-    _myList( 0 ),
-    _myLab( 0 ),
-    _mySlider( 0 ),
-  _fr( 0 )
-{
-}
-
-SelectField::~SelectField()
-{
-  cout << "destructor called" << endl;
-}
-
-QFrame* SelectField::buildFrame()
+    _dimMesh(-1)
 {
   QListViewItem *element;
 
-  cout << "File: " << _file << endl;
   SCRUTE(_file);
-  _med = new ::MED(MED_DRIVER,_file);
-  deque<string> meshesNames = _med->getMeshNames();
-  int numberOfMeshes = meshesNames.size();
-  
-  deque<string> fieldsNames = _med->getFieldNames();
-  int numberOfFields = fieldsNames.size();
+  _filter = myFilterGUI->InitFilterGen();
+  _filter->loadMED(_file);
+  SALOME_FILTER::StrSeq* meshesNames = _filter->getMeshNames();
+  int numberOfMeshes = (*meshesNames).length();
 
-  QFrame* _fr = new QFrame( 0, "myframe" );
+  SALOME_FILTER::StrSeq* fieldsNames = _filter->getFieldNames();
+  int numberOfFields = (*fieldsNames).length();
 
-  QGridLayout* _lay = new QGridLayout( _fr, 1, 1 );
+  QGridLayout* _lay = new QGridLayout( this, 1, 1 );
 
-  QGroupBox* _GroupC1 = new QGroupBox( _fr, "GroupC1" );
+  QGroupBox* _GroupC1 = new QGroupBox( this, "GroupC1" );
   _lay->addWidget( _GroupC1,0,0 );
 
-  MESSAGE(basename(_file));
-  QString qs("File : ");
-  qs.append(basename(_file));
+  MESSAGE(basename((char*)(_file.ascii())));
+  QString qs(tr("FILTER_FILE"));
+  qs.append(basename((char*)(_file.ascii())));
   _GroupC1->setTitle(qs);
   _GroupC1->setColumnLayout(0, Qt::Vertical );
   _GroupC1->layout()->setSpacing( 0 );
@@ -79,38 +71,67 @@ QFrame* SelectField::buildFrame()
 
   int row = 0;
 
-  // 0)  tree to visualize meshes and fields
+  // 0)  label to select field on 3D mesh
+  _myGroupLayout->addWidget( new QLabel(tr("FILTER_SEL_3D"),_GroupC1), row, 0 );
+  row++;
+
+  // 1)  tree to visualize meshes and fields
   _myList = new QListView( _GroupC1, "List of fields" );
-  _myList->setMinimumSize( 400, 400 );
-  _myList->setMaximumSize( 400, 400 );
+  _myList->setMinimumSize( 500, 500 );
+  _myList->setMaximumSize( 500, 500 );
   _myList->setRootIsDecorated(true);
-  _myList->addColumn("Name");
-  _myList->addColumn("Type");
+  _myList->addColumn(tr("FILTER_NAME"));
+  _myList->addColumn(tr("FILTER_TYPE"));
+  _myList->addColumn(tr("FILTER_DIM"));
 
   for(int i=0;i<numberOfMeshes;i++){
-    element = new QListViewItem( _myList, meshesNames[i], "Mesh" );
+    _dimMesh = _filter->getMeshDimension((*meshesNames)[i]);
+    char strd[4];
+    sprintf(strd,"%dD\0",_dimMesh);
+    element = new QListViewItem( _myList, QString((*meshesNames)[i]), tr("FILTER_MESH") ,strd);
     element->setExpandable(true);
     _myList->setOpen(element,true);
 
     for (int j=0; j<numberOfFields; j++){
-      deque<DT_IT_> myIteration = _med->getFieldIteration (fieldsNames[j]);
-      string meshName = _med->getField(fieldsNames[j],myIteration[0].dt,myIteration[0].it)->getSupport()->getMesh()->getName();
-      if( strcmp(meshName.c_str(),meshesNames[i].c_str()) == 0)
-       new QListViewItem( element, fieldsNames[j], "Field" );
+      SALOME_FILTER::DTITSeq *myIteration = _filter->getFieldIteration((*fieldsNames)[j]);
+      string meshName = _filter->getMeshName((*fieldsNames)[j],(*myIteration)[0].dt,(*myIteration)[0].it);
+      if( strcmp(meshName.c_str(),(*meshesNames)[i]) == 0){
+       int ent = _filter->getFieldEntity((*fieldsNames)[j],(*myIteration)[0].dt,(*myIteration)[0].it);
+       bool isOnAllElements = _filter->fieldIsOnAllElements((*fieldsNames)[j],(*myIteration)[0].dt,(*myIteration)[0].it);
+
+       char stre[10];
+       switch(ent){
+       case MED_EN::MED_CELL:
+         strcpy(stre,"on cells");
+         break;
+       case MED_EN::MED_FACE:
+         strcpy(stre,"on faces");
+         break;
+       case MED_EN::MED_EDGE:
+         strcpy(stre,"on edges");
+         break;
+       case MED_EN::MED_NODE:
+         strcpy(stre,"on nodes");
+         break;
+       }
+       QListViewItem *elem = new QListViewItem( element, QString((*fieldsNames)[j]), tr("FILTER_FIELD"),stre );
+       if( (_dimMesh != 3) || (ent != MED_EN::MED_NODE) || !isOnAllElements )
+         elem->setSelectable(false);
+      }
     }
 
     element->setSelectable(false);
-    _myGroupLayout->addWidget( _myList, row, 0 );
   }
+  _myGroupLayout->addWidget( _myList, row, 0 );
   row++;
 
-  // 1)  label for time steps
-  _myLab = new QLabel("Select a time step:",_GroupC1);
+  // 2)  label for time steps
+  _myLab = new QLabel(tr("FILTER_SEL_TS"),_GroupC1);
   _myLab->hide();
   _myGroupLayout->addWidget( _myLab, row, 0 );
   row++;
 
-  // 2)  slider to visualize time steps
+  // 3)  slider to visualize time steps
   _mySlider = new QSlider(_GroupC1);
   _mySlider->setOrientation(Qt::Horizontal);
   _mySlider->setTickmarks(QSlider::Below);
@@ -119,23 +140,60 @@ QFrame* SelectField::buildFrame()
   _mySlider->hide();
   row++;
 
+  // 4) buttons Ok, Cancel and Help
+  _GroupButtons = new QGroupBox(_GroupC1, "GroupButtons");
+  _GroupButtons->setSizePolicy(QSizePolicy((QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, 0, 0, _GroupButtons->sizePolicy().hasHeightForWidth()));
+//   _GroupButtons->setGeometry(QRect(10, 10, 281, 48));
+  _GroupButtons->setTitle(tr("" ));
+  _GroupButtons->setColumnLayout(0, Qt::Vertical);
+  _GroupButtons->layout()->setSpacing(0);
+  _GroupButtons->layout()->setMargin(0);
+  _GroupButtonsLayout = new QGridLayout(_GroupButtons->layout());
+  _GroupButtonsLayout->setAlignment(Qt::AlignTop);
+  _GroupButtonsLayout->setSpacing(6);
+  _GroupButtonsLayout->setMargin(11);
+  _buttonHelp = new QPushButton(_GroupButtons, "buttonHelp");
+  _buttonHelp->setText(tr("FILTER_BUT_HELP" ));
+  _buttonHelp->setAutoDefault(TRUE);
+  _GroupButtonsLayout->addWidget(_buttonHelp, 0, 2);
+  _buttonCancel = new QPushButton(_GroupButtons, "buttonClose");
+  _buttonCancel->setText(tr("FILTER_BUT_CANCEL" ));
+  _buttonCancel->setAutoDefault(TRUE);
+  _GroupButtonsLayout->addWidget(_buttonCancel, 0, 1);
+  _buttonOk = new QPushButton(_GroupButtons, "buttonOk");
+  _buttonOk->setText(tr("FILTER_BUT_OK" ));
+  _buttonOk->setAutoDefault(TRUE);
+  _GroupButtonsLayout->addWidget(_buttonOk, 0, 0);
+  _myGroupLayout->addWidget( _GroupButtons, row, 0 );
+  row++;
+
   connect( _myList, SIGNAL(clicked(QListViewItem *)), this, SLOT(fieldSelected(QListViewItem *)));
   connect( _mySlider, SIGNAL(sliderReleased()), this, SLOT(tsSelected()));
+  connect(_buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel()));
+  connect(_buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk()));
+  connect(_buttonHelp, SIGNAL(clicked()),   this, SLOT(ClickOnHelp()));
 
-  return _fr;
+}
+
+SelectField::~SelectField()
+{
+  // no need to delete child widgets, Qt does it all for us
+  cout << "SelectField: destructor called" << endl;
+  _filter->unloadMED();
 }
 
 void SelectField::fieldSelected(QListViewItem *lvi)
 {
   if(lvi){
-    if( strcmp(lvi->text(1),"Field") == 0){
+    if( (strcmp(lvi->text(1),"Field") == 0) && (_dimMesh == 3) ){
       _field = lvi->text(0);
       _mesh = lvi->parent()->text(0);
-      deque<DT_IT_> myIteration = _med->getFieldIteration (lvi->text(0));
-      int numberOfIteration = myIteration.size();
+//       deque<DT_IT_> myIteration = _filterMED->getFieldIteration(lvi->text(0));
+      SALOME_FILTER::DTITSeq *myIteration = _filter->getFieldIteration(lvi->text(0));
+      int numberOfIteration = (*myIteration).length();
       if( numberOfIteration > 1 ){
-       _mySlider->setRange(myIteration[0].dt,
-                           myIteration[numberOfIteration-1].dt);
+       _mySlider->setRange((*myIteration)[0].dt,
+                           (*myIteration)[numberOfIteration-1].dt);
        _myLab->show();
        _mySlider->show();
       }
@@ -156,3 +214,20 @@ void SelectField::tsSelected()
   MESSAGE("Field " << _field );
   MESSAGE("Time step " << _ts );
 }
+
+void SelectField::ClickOnOk()
+{
+  MESSAGE("click on Ok");
+  accept();
+}
+
+void SelectField::ClickOnCancel()
+{
+  MESSAGE("click on Cancel");
+  reject();
+}
+
+void SelectField::ClickOnHelp()
+{
+  MESSAGE("click on Help");
+}