1 // Copyright (C) 2007-2008 CEA/DEN, EDF R&D
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License.
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 #include "SelectField.h"
22 #include "MEDMEM_define.hxx"
24 #include <qgroupbox.h>
27 #include <qlistview.h>
30 #include <qpushbutton.h>
32 SelectField::SelectField(FilterGUI* theModule,const QString& file,
34 bool modal, WFlags fl)
35 : QDialog(FILTER::GetDesktop( theModule ), name, modal, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu),
36 myFilterGUI( theModule ),
43 QListViewItem *element;
46 _filter = myFilterGUI->InitFilterGen();
47 _filter->loadMED(_file);
48 SALOME_FILTER::StrSeq* meshesNames = _filter->getMeshNames();
49 int numberOfMeshes = (*meshesNames).length();
51 SALOME_FILTER::StrSeq* fieldsNames = _filter->getFieldNames();
52 int numberOfFields = (*fieldsNames).length();
54 QGridLayout* _lay = new QGridLayout( this, 1, 1 );
56 QGroupBox* _GroupC1 = new QGroupBox( this, "GroupC1" );
57 _lay->addWidget( _GroupC1,0,0 );
59 MESSAGE(basename((char*)(_file.ascii())));
60 QString qs(tr("FILTER_FILE"));
61 qs.append(basename((char*)(_file.ascii())));
62 _GroupC1->setTitle(qs);
63 _GroupC1->setColumnLayout(0, Qt::Vertical );
64 _GroupC1->layout()->setSpacing( 0 );
65 _GroupC1->layout()->setMargin( 0 );
66 _myGroupLayout = new QGridLayout( _GroupC1->layout() );
67 _myGroupLayout->setAlignment( Qt::AlignTop );
68 _myGroupLayout->setSpacing( 6 );
69 _myGroupLayout->setMargin( 11 );
70 _myGroupLayout->setColStretch( 0, 0 );
71 _myGroupLayout->setColStretch( 1, 1 );
75 // 0) label to select field on 3D mesh
76 _myGroupLayout->addWidget( new QLabel(tr("FILTER_SEL_3D"),_GroupC1), row, 0 );
79 // 1) tree to visualize meshes and fields
80 _myList = new QListView( _GroupC1, "List of fields" );
81 _myList->setMinimumSize( 500, 500 );
82 _myList->setMaximumSize( 500, 500 );
83 _myList->setRootIsDecorated(true);
84 _myList->addColumn(tr("FILTER_NAME"));
85 _myList->addColumn(tr("FILTER_TYPE"));
86 _myList->addColumn(tr("FILTER_DIM"));
88 for(int i=0;i<numberOfMeshes;i++){
89 _dimMesh = _filter->getMeshDimension((*meshesNames)[i]);
91 sprintf(strd,"%dD\0",_dimMesh);
92 element = new QListViewItem( _myList, QString((*meshesNames)[i]), tr("FILTER_MESH") ,strd);
93 element->setExpandable(true);
94 _myList->setOpen(element,true);
96 for (int j=0; j<numberOfFields; j++){
97 SALOME_FILTER::DTITSeq *myIteration = _filter->getFieldIteration((*fieldsNames)[j]);
98 string meshName = _filter->getMeshName((*fieldsNames)[j],(*myIteration)[0].dt,(*myIteration)[0].it);
99 if( strcmp(meshName.c_str(),(*meshesNames)[i]) == 0){
100 int ent = _filter->getFieldEntity((*fieldsNames)[j],(*myIteration)[0].dt,(*myIteration)[0].it);
101 bool isOnAllElements = _filter->fieldIsOnAllElements((*fieldsNames)[j],(*myIteration)[0].dt,(*myIteration)[0].it);
105 case MED_EN::MED_CELL:
106 strcpy(stre,"on cells");
108 case MED_EN::MED_FACE:
109 strcpy(stre,"on faces");
111 case MED_EN::MED_EDGE:
112 strcpy(stre,"on edges");
114 case MED_EN::MED_NODE:
115 strcpy(stre,"on nodes");
118 QListViewItem *elem = new QListViewItem( element, QString((*fieldsNames)[j]), tr("FILTER_FIELD"),stre );
119 if( (_dimMesh != 3) || (ent != MED_EN::MED_NODE) || !isOnAllElements )
120 elem->setSelectable(false);
124 element->setSelectable(false);
126 _myGroupLayout->addWidget( _myList, row, 0 );
129 // 2) label for time steps
130 _myLab = new QLabel(tr("FILTER_SEL_TS"),_GroupC1);
132 _myGroupLayout->addWidget( _myLab, row, 0 );
135 // 3) slider to visualize time steps
136 _mySlider = new QSlider(_GroupC1);
137 _mySlider->setOrientation(Qt::Horizontal);
138 _mySlider->setTickmarks(QSlider::Below);
139 _myGroupLayout->addWidget( _mySlider, row, 0 );
144 // 4) buttons Ok, Cancel and Help
145 _GroupButtons = new QGroupBox(_GroupC1, "GroupButtons");
146 _GroupButtons->setSizePolicy(QSizePolicy((QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, 0, 0, _GroupButtons->sizePolicy().hasHeightForWidth()));
147 // _GroupButtons->setGeometry(QRect(10, 10, 281, 48));
148 _GroupButtons->setTitle(tr("" ));
149 _GroupButtons->setColumnLayout(0, Qt::Vertical);
150 _GroupButtons->layout()->setSpacing(0);
151 _GroupButtons->layout()->setMargin(0);
152 _GroupButtonsLayout = new QGridLayout(_GroupButtons->layout());
153 _GroupButtonsLayout->setAlignment(Qt::AlignTop);
154 _GroupButtonsLayout->setSpacing(6);
155 _GroupButtonsLayout->setMargin(11);
156 _buttonHelp = new QPushButton(_GroupButtons, "buttonHelp");
157 _buttonHelp->setText(tr("FILTER_BUT_HELP" ));
158 _buttonHelp->setAutoDefault(TRUE);
159 _GroupButtonsLayout->addWidget(_buttonHelp, 0, 2);
160 _buttonCancel = new QPushButton(_GroupButtons, "buttonClose");
161 _buttonCancel->setText(tr("FILTER_BUT_CANCEL" ));
162 _buttonCancel->setAutoDefault(TRUE);
163 _GroupButtonsLayout->addWidget(_buttonCancel, 0, 1);
164 _buttonOk = new QPushButton(_GroupButtons, "buttonOk");
165 _buttonOk->setText(tr("FILTER_BUT_OK" ));
166 _buttonOk->setAutoDefault(TRUE);
167 _GroupButtonsLayout->addWidget(_buttonOk, 0, 0);
168 _myGroupLayout->addWidget( _GroupButtons, row, 0 );
171 connect( _myList, SIGNAL(clicked(QListViewItem *)), this, SLOT(fieldSelected(QListViewItem *)));
172 connect( _mySlider, SIGNAL(sliderReleased()), this, SLOT(tsSelected()));
173 connect(_buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel()));
174 connect(_buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk()));
175 connect(_buttonHelp, SIGNAL(clicked()), this, SLOT(ClickOnHelp()));
179 SelectField::~SelectField()
181 // no need to delete child widgets, Qt does it all for us
182 cout << "SelectField: destructor called" << endl;
183 _filter->unloadMED();
186 void SelectField::fieldSelected(QListViewItem *lvi)
189 if( (strcmp(lvi->text(1),"Field") == 0) && (_dimMesh == 3) ){
190 _field = lvi->text(0);
191 _mesh = lvi->parent()->text(0);
192 // deque<DT_IT_> myIteration = _filterMED->getFieldIteration(lvi->text(0));
193 SALOME_FILTER::DTITSeq *myIteration = _filter->getFieldIteration(lvi->text(0));
194 int numberOfIteration = (*myIteration).length();
195 if( numberOfIteration > 1 ){
196 _mySlider->setRange((*myIteration)[0].dt,
197 (*myIteration)[numberOfIteration-1].dt);
210 void SelectField::tsSelected()
212 _ts = _mySlider->value();
213 MESSAGE("File " << _file );
214 MESSAGE("Mesh " << _mesh );
215 MESSAGE("Field " << _field );
216 MESSAGE("Time step " << _ts );
219 void SelectField::ClickOnOk()
221 MESSAGE("click on Ok");
225 void SelectField::ClickOnCancel()
227 MESSAGE("click on Cancel");
231 void SelectField::ClickOnHelp()
233 MESSAGE("click on Help");