~ubuntu-branches/ubuntu/precise/code-saturne/precise

« back to all changes in this revision

Viewing changes to gui/Pages/MatisseGeomView.py

  • Committer: Package Import Robot
  • Author(s): Sylvestre Ledru
  • Date: 2011-11-01 17:43:32 UTC
  • mto: (6.1.7 sid)
  • mto: This revision was merged to the branch mainline in revision 11.
  • Revision ID: package-import@ubuntu.com-20111101174332-tl4vk45no0x3emc3
Tags: upstream-2.1.0
ImportĀ upstreamĀ versionĀ 2.1.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# -*- coding: iso-8859-1 -*-
2
 
#
3
 
#-------------------------------------------------------------------------------
4
 
#
5
 
#     This file is part of the Code_Saturne User Interface, element of the
6
 
#     Code_Saturne CFD tool.
7
 
#
8
 
#     Copyright (C) 1998-2009 EDF S.A., France
9
 
#
10
 
#     contact: saturne-support@edf.fr
11
 
#
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.
16
 
#
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.
21
 
#
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
27
 
#
28
 
#-------------------------------------------------------------------------------
29
 
 
30
 
"""
31
 
This module contains the following classes and function:
32
 
- MatisseGeomView
33
 
"""
34
 
 
35
 
#-------------------------------------------------------------------------------
36
 
# Standard modules
37
 
#-------------------------------------------------------------------------------
38
 
 
39
 
import logging
40
 
 
41
 
#-------------------------------------------------------------------------------
42
 
# Third-party modules
43
 
#-------------------------------------------------------------------------------
44
 
 
45
 
from PyQt4.QtCore import *
46
 
from PyQt4.QtGui  import *
47
 
 
48
 
#-------------------------------------------------------------------------------
49
 
# Application modules import
50
 
#-------------------------------------------------------------------------------
51
 
 
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
57
 
 
58
 
#-------------------------------------------------------------------------------
59
 
# log config
60
 
#-------------------------------------------------------------------------------
61
 
 
62
 
logging.basicConfig()
63
 
log = logging.getLogger("MatisseGeomView")
64
 
log.setLevel(GuiParam.DEBUG)
65
 
 
66
 
#-------------------------------------------------------------------------------
67
 
# Line edit delegates
68
 
#-------------------------------------------------------------------------------
69
 
 
70
 
class LineEditDelegateInt(QItemDelegate):
71
 
    """
72
 
    Use of a QLineEdit in the table.
73
 
    """
74
 
    def __init__(self, parent=None):
75
 
        QItemDelegate.__init__(self, parent)
76
 
 
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)
82
 
        return editor
83
 
 
84
 
    def setEditorData(self, lineEdit, index):
85
 
        value = index.model().data(index, Qt.DisplayRole).toString()
86
 
        lineEdit.setText(value)
87
 
 
88
 
    def setModelData(self, lineEdit, model, index):
89
 
        value = lineEdit.text()
90
 
        model.setData(index, QVariant(value))
91
 
 
92
 
 
93
 
class LineEditDelegateFloat(QItemDelegate):
94
 
    """
95
 
    Use of a QLineEdit in the table.
96
 
    """
97
 
    def __init__(self, parent=None):
98
 
        QItemDelegate.__init__(self, parent)
99
 
 
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)
105
 
        return editor
106
 
 
107
 
    def setEditorData(self, lineEdit, index):
108
 
        value = index.model().data(index, Qt.DisplayRole).toString()
109
 
        lineEdit.setText(value)
110
 
 
111
 
    def setModelData(self, lineEdit, model, index):
112
 
        value = lineEdit.text()
113
 
        model.setData(index, QVariant(value))
114
 
 
115
 
 
116
 
#-------------------------------------------------------------------------------
117
 
# Model class
118
 
#-------------------------------------------------------------------------------
119
 
 
120
 
class StandardItemModelGeom(QStandardItemModel):
121
 
 
122
 
    def __init__(self, case):
123
 
        """
124
 
        """
125
 
        QStandardItemModel.__init__(self)
126
 
 
127
 
        self.case = case
128
 
        self.model = MatisseGeomModel(self.case)
129
 
        self.model_mat_type = MatisseType.MatisseTypeModel(self.case)
130
 
 
131
 
        self.setColumnCount(4)
132
 
        self._initData()
133
 
 
134
 
 
135
 
    def _initData(self):
136
 
 
137
 
        # Int
138
 
        self.nechrg = 0
139
 
        self.nergrs = 0
140
 
        self.neclrg = 0
141
 
        self.nergch = 0
142
 
        self.neciel = 0
143
 
        self.nptran = 0
144
 
        self.nplgrs = 0
145
 
        self.nelgrs = 0
146
 
        self.nchest = 0
147
 
        self.netran = 0
148
 
 
149
 
        # Double
150
 
        self.jeuchr = 0.
151
 
        self.jeurcl = 0.
152
 
        self.jeuclr = 0.
153
 
        self.jeurch = 0.
154
 
        self.hbdtoi = 0.
155
 
        self.epchem = 0.
156
 
        self.epregi = 0.
157
 
        self.hconve = 0.
158
 
        self.rconve = 0.
159
 
        self.hchali = 0.
160
 
        self.hcheva = 0.
161
 
        self.hfttoi = 0.
162
 
        self.ptrres = 0.
163
 
        self.frdtra = 0.
164
 
        self.plgres = 0.
165
 
        self.epchel = 0.
166
 
        self.dmcont = 0.
167
 
 
168
 
        self.texts = {}
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")
196
 
 
197
 
 
198
 
        self.variables = [
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']
226
 
            ]
227
 
 
228
 
 
229
 
        self.rows_disabled = []
230
 
 
231
 
        i = 0
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])
237
 
            else :
238
 
                print variable[2]+": unknown type"
239
 
                sys.exit(1)
240
 
            var = self.variables[i][1]
241
 
            var = val
242
 
            self.variables[i][1] = var
243
 
 
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' ) :
250
 
                if t == 'emm' :
251
 
                    if not i in self.rows_disabled:
252
 
                        self.rows_disabled.append(i)
253
 
            else :
254
 
                pass
255
 
            i += 1
256
 
 
257
 
        self.setRowCount(len(self.variables))
258
 
 
259
 
 
260
 
    def data(self, index, role):
261
 
        if not index.isValid():
262
 
            return QVariant()
263
 
 
264
 
        if role == Qt.DisplayRole:
265
 
            row = index.row()
266
 
            var = self.variables[row][0]
267
 
 
268
 
            if index.column() == 0:
269
 
                num = self.texts[var][0]
270
 
                return QVariant(num)
271
 
 
272
 
            if index.column() == 1:
273
 
                txt = self.texts[var][1]
274
 
                return QVariant(txt)
275
 
 
276
 
            if index.column() == 2:
277
 
                val = self.variables[row][1]
278
 
                return QVariant(val)
279
 
 
280
 
            if index.column() == 3:
281
 
                if len(self.texts[var])>2:
282
 
                    unit = self.texts[var][2]
283
 
                else:
284
 
                    unit = ""
285
 
                return QVariant(unit)
286
 
 
287
 
        return QVariant()
288
 
 
289
 
 
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
297
 
        else:
298
 
            return Qt.ItemIsEnabled | Qt.ItemIsSelectable | Qt.ItemIsEditable
299
 
 
300
 
 
301
 
    #def setData(self, index, value, role):
302
 
    def setData(self, index, value):
303
 
        row = index.row()
304
 
 
305
 
        if index.column() == 2:
306
 
            var = self.variables[row][0]
307
 
            typ = self.variables[row][2]
308
 
            if typ == "int":
309
 
                val, ok = value.toInt()
310
 
            elif typ == "double":
311
 
                val, ok = value.toDouble()
312
 
            else:
313
 
                val = 0.
314
 
            # get attribute and set value ???
315
 
            attr = getattr(self, var)
316
 
            attr = val
317
 
            self.variables[row][1] = val
318
 
            self.model.setMatisseGeomVar(var, val)
319
 
 
320
 
        self.emit(SIGNAL("dataChanged(const QModelIndex &, const QModelIndex &)"), index, index)
321
 
        return True
322
 
 
323
 
#-------------------------------------------------------------------------------
324
 
# Main class
325
 
#-------------------------------------------------------------------------------
326
 
 
327
 
class MatisseGeomView(QWidget, Ui_MatisseGeomForm):
328
 
    """
329
 
    """
330
 
 
331
 
    def __init__(self, parent, case):
332
 
        """
333
 
        Constructor
334
 
        """
335
 
        QWidget.__init__(self, parent)
336
 
 
337
 
        Ui_MatisseGeomForm.__init__(self)
338
 
        self.setupUi(self)
339
 
 
340
 
        self.case = case
341
 
 
342
 
        # Create the Page layout.
343
 
 
344
 
        self.modelGeom = StandardItemModelGeom(self.case)
345
 
        self.tableView.setModel(self.modelGeom)
346
 
        self.tableView.setAlternatingRowColors(True)
347
 
        self.tableView.resizeColumnsToContents()
348
 
 
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.
352
 
 
353
 
        # First defines a float delegate (i.e. validator) for the entire column ...
354
 
        delegateFloat = LineEditDelegateFloat(self.tableView)
355
 
        self.tableView.setItemDelegateForColumn(2,delegateFloat)
356
 
 
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)
369
 
 
370
 
 
371
 
    def tr(self, text):
372
 
        """
373
 
        Translation
374
 
        """
375
 
        return text
376
 
 
377
 
 
378
 
#-------------------------------------------------------------------------------
379
 
# Testing part
380
 
#-------------------------------------------------------------------------------
381
 
 
382
 
 
383
 
if __name__ == "__main__":
384
 
    pass
385
 
 
386
 
 
387
 
#-------------------------------------------------------------------------------
388
 
# End
389
 
#-------------------------------------------------------------------------------
 
 
b'\\ No newline at end of file'