1
# -*- coding: iso-8859-1 -*-
3
#-------------------------------------------------------------------------------
5
# This file is part of the Code_Saturne User Interface, element of the
6
# Code_Saturne CFD tool.
8
# Copyright (C) 1998-2009 EDF S.A., France
10
# contact: saturne-support@edf.fr
12
# The Code_Saturne User Interface is free software; you can redistribute it
13
# and/or modify it under the terms of the GNU General Public License
14
# as published by the Free Software Foundation; either version 2 of
15
# the License, or (at your option) any later version.
17
# The Code_Saturne User Interface is distributed in the hope that it will be
18
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty
19
# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20
# GNU General Public License for more details.
22
# You should have received a copy of the GNU General Public License
23
# along with the Code_Saturne Kernel; if not, write to the
24
# Free Software Foundation, Inc.,
25
# 51 Franklin St, Fifth Floor,
26
# Boston, MA 02110-1301 USA
28
#-------------------------------------------------------------------------------
31
This module contains the following classes and function:
35
#-------------------------------------------------------------------------------
37
#-------------------------------------------------------------------------------
41
#-------------------------------------------------------------------------------
43
#-------------------------------------------------------------------------------
45
from PyQt4.QtCore import *
46
from PyQt4.QtGui import *
48
#-------------------------------------------------------------------------------
49
# Application modules import
50
#-------------------------------------------------------------------------------
52
from Base.Toolbox import GuiParam
53
from MatisseGeomForm import Ui_MatisseGeomForm
54
import Pages.MatisseTypeModel as MatisseType
55
from Pages.MatisseGeomModel import MatisseGeomModel
56
import Base.QtPage as QtPage
58
#-------------------------------------------------------------------------------
60
#-------------------------------------------------------------------------------
63
log = logging.getLogger("MatisseGeomView")
64
log.setLevel(GuiParam.DEBUG)
66
#-------------------------------------------------------------------------------
68
#-------------------------------------------------------------------------------
70
class LineEditDelegateInt(QItemDelegate):
72
Use of a QLineEdit in the table.
74
def __init__(self, parent=None):
75
QItemDelegate.__init__(self, parent)
77
def createEditor(self, parent, option, index):
78
editor = QLineEdit(parent)
79
validator = QtPage.IntegerValidator(editor, "validatorInt")
80
editor.setValidator(validator)
81
#editor.installEventFilter(self)
84
def setEditorData(self, lineEdit, index):
85
value = index.model().data(index, Qt.DisplayRole).toString()
86
lineEdit.setText(value)
88
def setModelData(self, lineEdit, model, index):
89
value = lineEdit.text()
90
model.setData(index, QVariant(value))
93
class LineEditDelegateFloat(QItemDelegate):
95
Use of a QLineEdit in the table.
97
def __init__(self, parent=None):
98
QItemDelegate.__init__(self, parent)
100
def createEditor(self, parent, option, index):
101
editor = QLineEdit(parent)
102
validator = QtPage.DoubleValidator(editor, "validatorFloat")
103
editor.setValidator(validator)
104
#editor.installEventFilter(self)
107
def setEditorData(self, lineEdit, index):
108
value = index.model().data(index, Qt.DisplayRole).toString()
109
lineEdit.setText(value)
111
def setModelData(self, lineEdit, model, index):
112
value = lineEdit.text()
113
model.setData(index, QVariant(value))
116
#-------------------------------------------------------------------------------
118
#-------------------------------------------------------------------------------
120
class StandardItemModelGeom(QStandardItemModel):
122
def __init__(self, case):
125
QStandardItemModel.__init__(self)
128
self.model = MatisseGeomModel(self.case)
129
self.model_mat_type = MatisseType.MatisseTypeModel(self.case)
131
self.setColumnCount(4)
169
self.texts['jeuchr'] = (6 , self.tr("Upstream space between chimney/register"), "m")
170
self.texts['nechrg'] = (7 , self.tr("Number of cells between chimney/upstream register"))
171
self.texts['jeurcl'] = (8 , self.tr("Space between upstream register/canisters"), "m")
172
self.texts['nergrs'] = (9 , self.tr("Number of cells between upstream register/canisters"))
173
self.texts['jeuclr'] = (10, self.tr("Space between canisters/downstream register"), "m")
174
self.texts['neclrg'] = (11, self.tr("Number of cells between canisters/downstream register"))
175
self.texts['jeurch'] = (12, self.tr("Downstrean space between register/chimney"), "m")
176
self.texts['nergch'] = (13, self.tr("Number of cells between downstream register/chimney"))
177
self.texts['hbdtoi'] = (18, self.tr("Height of roof edge"), "m")
178
self.texts['neciel'] = (20, self.tr("Number of cells layers above canisters"))
179
self.texts['epregi'] = (4 , self.tr("Upstream and downstream registers/doors thickness"), "m")
180
self.texts['epchem'] = (5 , self.tr("chimneys' thickness"), "m")
181
self.texts['hconve'] = (14, self.tr("Convergent height"), "m")
182
self.texts['rconve'] = (15, self.tr("Convergent ratio"), "m")
183
self.texts['hchali'] = (16, self.tr("Inlet chimney height"), "m")
184
self.texts['hcheva'] = (17, self.tr("Outlet chimney height"), "m")
185
self.texts['hfttoi'] = (19, self.tr("Roof ridge height"), "m")
186
self.texts['ptrres'] = (21, self.tr("Transverse step of canisters network"), "m")
187
self.texts['nptran'] = (22, self.tr("Number of tranverse steps"))
188
self.texts['netran'] = (23, self.tr("Number of cells by tranverse step"))
189
self.texts['frdtra'] = (24, self.tr("Transverse reduction factor model/real"), "m")
190
self.texts['plgres'] = (25, self.tr("Longitudinal step of canisters network"), "m")
191
self.texts['nplgrs'] = (26, self.tr("Number of longitudinal steps"))
192
self.texts['nelgrs'] = (27, self.tr("Number of cells by longitudinal step"))
193
self.texts['epchel'] = (28, self.tr("Cells height (storage area)"), "m")
194
self.texts['nchest'] = (29, self.tr("Number of cells layers in the storage area"))
195
self.texts['dmcont'] = (30, self.tr("Canister diameter"), "m")
199
['epregi', self.epregi, 'double'],
200
['epchem', self.epchem, 'double'],
201
['jeuchr', self.jeuchr, 'double'],
202
['nechrg', self.nechrg, 'int'],
203
['jeurcl', self.jeurcl, 'double'],
204
['nergrs', self.nergrs, 'int'],
205
['jeuclr', self.jeuclr, 'double'],
206
['neclrg', self.neclrg, 'int'],
207
['jeurch', self.jeurch, 'double'],
208
['nergch', self.nergch, 'int'],
209
['hconve', self.hconve, 'double'],
210
['rconve', self.rconve, 'double'],
211
['hchali', self.hchali, 'double'],
212
['hcheva', self.hcheva, 'double'],
213
['hbdtoi', self.hbdtoi, 'double'],
214
['hfttoi', self.hfttoi, 'double'],
215
['neciel', self.neciel, 'int'],
216
['ptrres', self.ptrres, 'double'],
217
['nptran', self.nptran, 'int'],
218
['netran', self.netran, 'int'],
219
['frdtra', self.frdtra, 'double'],
220
['plgres', self.plgres, 'double'],
221
['nplgrs', self.nplgrs, 'int'],
222
['nelgrs', self.nelgrs, 'int'],
223
['epchel', self.epchel, 'double'],
224
['nchest', self.nchest, 'int'],
225
['dmcont', self.dmcont, 'double']
229
self.rows_disabled = []
232
for variable in self.variables:
233
if variable[2] == 'double':
234
val = self.model.getMatisseGeomDoubleVar(variable[0])
235
elif variable[2] == 'int':
236
val = self.model.getMatisseGeomIntVar(variable[0])
238
print variable[2]+": unknown type"
240
var = self.variables[i][1]
242
self.variables[i][1] = var
244
t = self.model_mat_type.getMatisseType()
245
if variable[0] in ('hfttoi', 'hbdtoi', 'neciel') :
246
if (t == 'vault') or (t == 'djw'):
247
if not i in self.rows_disabled:
248
self.rows_disabled.append(i)
249
elif variable[0] in ('jeuclr', 'neclrg', 'jeurch', 'nergch' ) :
251
if not i in self.rows_disabled:
252
self.rows_disabled.append(i)
257
self.setRowCount(len(self.variables))
260
def data(self, index, role):
261
if not index.isValid():
264
if role == Qt.DisplayRole:
266
var = self.variables[row][0]
268
if index.column() == 0:
269
num = self.texts[var][0]
272
if index.column() == 1:
273
txt = self.texts[var][1]
276
if index.column() == 2:
277
val = self.variables[row][1]
280
if index.column() == 3:
281
if len(self.texts[var])>2:
282
unit = self.texts[var][2]
285
return QVariant(unit)
290
def flags(self, index):
291
if not index.isValid():
292
return Qt.ItemIsEnabled
293
if index.row() in self.rows_disabled:
294
return Qt.ItemIsSelectable
295
if index.column() in [0,1,3]:
296
return Qt.ItemIsEnabled | Qt.ItemIsSelectable
298
return Qt.ItemIsEnabled | Qt.ItemIsSelectable | Qt.ItemIsEditable
301
#def setData(self, index, value, role):
302
def setData(self, index, value):
305
if index.column() == 2:
306
var = self.variables[row][0]
307
typ = self.variables[row][2]
309
val, ok = value.toInt()
310
elif typ == "double":
311
val, ok = value.toDouble()
314
# get attribute and set value ???
315
attr = getattr(self, var)
317
self.variables[row][1] = val
318
self.model.setMatisseGeomVar(var, val)
320
self.emit(SIGNAL("dataChanged(const QModelIndex &, const QModelIndex &)"), index, index)
323
#-------------------------------------------------------------------------------
325
#-------------------------------------------------------------------------------
327
class MatisseGeomView(QWidget, Ui_MatisseGeomForm):
331
def __init__(self, parent, case):
335
QWidget.__init__(self, parent)
337
Ui_MatisseGeomForm.__init__(self)
342
# Create the Page layout.
344
self.modelGeom = StandardItemModelGeom(self.case)
345
self.tableView.setModel(self.modelGeom)
346
self.tableView.setAlternatingRowColors(True)
347
self.tableView.resizeColumnsToContents()
349
## Note: If a delegate has been assigned to both a row and a column,
350
## the row delegate (i.e., this delegate) will take presedence and
351
## manage the intersecting cell index.
353
# First defines a float delegate (i.e. validator) for the entire column ...
354
delegateFloat = LineEditDelegateFloat(self.tableView)
355
self.tableView.setItemDelegateForColumn(2,delegateFloat)
357
# ... then define an int delegate for certain rows!
358
delegateInt = LineEditDelegateInt(self.tableView)
359
self.tableView.setItemDelegateForRow(3,delegateInt)
360
self.tableView.setItemDelegateForRow(5,delegateInt)
361
self.tableView.setItemDelegateForRow(7,delegateInt)
362
self.tableView.setItemDelegateForRow(9,delegateInt)
363
self.tableView.setItemDelegateForRow(16,delegateInt)
364
self.tableView.setItemDelegateForRow(18,delegateInt)
365
self.tableView.setItemDelegateForRow(19,delegateInt)
366
self.tableView.setItemDelegateForRow(22,delegateInt)
367
self.tableView.setItemDelegateForRow(23,delegateInt)
368
self.tableView.setItemDelegateForRow(25,delegateInt)
378
#-------------------------------------------------------------------------------
380
#-------------------------------------------------------------------------------
383
if __name__ == "__main__":
387
#-------------------------------------------------------------------------------
389
#-------------------------------------------------------------------------------
b'\\ No newline at end of file'