Salome HOME
164e7a6e85d88eb44407c041c43c75630b5846e6
[modules/filter.git] / src / FILTERGUI / SelectField.cxx
1 // Copyright (C) 2005  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
2 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
3 //
4 // This library is free software; you can redistribute it and/or
5 // modify it under the terms of the GNU Lesser General Public
6 // License as published by the Free Software Foundation; either
7 // version 2.1 of the License.
8 //
9 // This library is distributed in the hope that it will be useful
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 // Lesser General Public License for more details.
13 //
14 // You should have received a copy of the GNU Lesser General Public
15 // License along with this library; if not, write to the Free Software
16 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 //
18 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 //
20 #include "SelectField.h"
21
22 #include <qgroupbox.h>
23 #include <qframe.h>
24 #include <qlayout.h>
25 #include <qlistview.h>
26 #include <qslider.h>
27 #include <qlabel.h>
28
29 SelectField::SelectField(const QString& file)
30   : _file(file),
31     _mesh(0),
32     _field(0),
33     _ts(0),
34     _myList( 0 ),
35     _myLab( 0 ),
36     _mySlider( 0 ),
37   _fr( 0 )
38 {
39 }
40
41 SelectField::~SelectField()
42 {
43   cout << "destructor called" << endl;
44 }
45
46 QFrame* SelectField::buildFrame()
47 {
48   QListViewItem *element;
49
50   cout << "File: " << _file << endl;
51   SCRUTE(_file);
52   _med = new ::MED(MED_DRIVER,_file);
53   deque<string> meshesNames = _med->getMeshNames();
54   int numberOfMeshes = meshesNames.size();
55   
56   deque<string> fieldsNames = _med->getFieldNames();
57   int numberOfFields = fieldsNames.size();
58
59   QFrame* _fr = new QFrame( 0, "myframe" );
60
61   QGridLayout* _lay = new QGridLayout( _fr, 1, 1 );
62
63   QGroupBox* _GroupC1 = new QGroupBox( _fr, "GroupC1" );
64   _lay->addWidget( _GroupC1,0,0 );
65
66   MESSAGE(basename(_file));
67   QString qs("File : ");
68   qs.append(basename(_file));
69   _GroupC1->setTitle(qs);
70   _GroupC1->setColumnLayout(0, Qt::Vertical );
71   _GroupC1->layout()->setSpacing( 0 );
72   _GroupC1->layout()->setMargin( 0 );
73   _myGroupLayout = new QGridLayout( _GroupC1->layout() );
74   _myGroupLayout->setAlignment( Qt::AlignTop );
75   _myGroupLayout->setSpacing( 6 );
76   _myGroupLayout->setMargin( 11 );
77   _myGroupLayout->setColStretch( 0, 0 );
78   _myGroupLayout->setColStretch( 1, 1 );
79
80   int row = 0;
81
82   // 0)  tree to visualize meshes and fields
83   _myList = new QListView( _GroupC1, "List of fields" );
84   _myList->setMinimumSize( 400, 400 );
85   _myList->setMaximumSize( 400, 400 );
86   _myList->setRootIsDecorated(true);
87   _myList->addColumn("Name");
88   _myList->addColumn("Type");
89
90   for(int i=0;i<numberOfMeshes;i++){
91     element = new QListViewItem( _myList, meshesNames[i], "Mesh" );
92     element->setExpandable(true);
93     _myList->setOpen(element,true);
94
95     for (int j=0; j<numberOfFields; j++){
96       deque<DT_IT_> myIteration = _med->getFieldIteration (fieldsNames[j]);
97       string meshName = _med->getField(fieldsNames[j],myIteration[0].dt,myIteration[0].it)->getSupport()->getMesh()->getName();
98       if( strcmp(meshName.c_str(),meshesNames[i].c_str()) == 0)
99         new QListViewItem( element, fieldsNames[j], "Field" );
100     }
101
102     element->setSelectable(false);
103     _myGroupLayout->addWidget( _myList, row, 0 );
104   }
105   row++;
106
107   // 1)  label for time steps
108   _myLab = new QLabel("Select a time step:",_GroupC1);
109   _myLab->hide();
110   _myGroupLayout->addWidget( _myLab, row, 0 );
111   row++;
112
113   // 2)  slider to visualize time steps
114   _mySlider = new QSlider(_GroupC1);
115   _mySlider->setOrientation(Qt::Horizontal);
116   _mySlider->setTickmarks(QSlider::Below);
117   _myGroupLayout->addWidget( _mySlider, row, 0 );
118
119   _mySlider->hide();
120   row++;
121
122   connect( _myList, SIGNAL(clicked(QListViewItem *)), this, SLOT(fieldSelected(QListViewItem *)));
123   connect( _mySlider, SIGNAL(sliderReleased()), this, SLOT(tsSelected()));
124
125   return _fr;
126 }
127
128 void SelectField::fieldSelected(QListViewItem *lvi)
129 {
130   if(lvi){
131     if( strcmp(lvi->text(1),"Field") == 0){
132       _field = lvi->text(0);
133       _mesh = lvi->parent()->text(0);
134       deque<DT_IT_> myIteration = _med->getFieldIteration (lvi->text(0));
135       int numberOfIteration = myIteration.size();
136       if( numberOfIteration > 1 ){
137         _mySlider->setRange(myIteration[0].dt,
138                             myIteration[numberOfIteration-1].dt);
139         _myLab->show();
140         _mySlider->show();
141       }
142       else{
143         _ts = 0;
144         _myLab->hide();
145         _mySlider->hide();
146       }
147     }
148   }
149 }
150
151 void SelectField::tsSelected()
152 {
153   _ts = _mySlider->value();
154   MESSAGE("File " << _file );
155   MESSAGE("Mesh " << _mesh );
156   MESSAGE("Field " << _field );
157   MESSAGE("Time step " << _ts );
158 }