# -*- coding: iso-8859-1 -*-
#
#-------------------------------------------------------------------------------
# Code_Saturne version 1.3
# ------------------------
#
#
# This file is part of the Code_Saturne User Interface, element of the
# Code_Saturne CFD tool.
#
# Copyright (C) 1998-2007 EDF S.A., France
#
# contact: saturne-support@edf.fr
#
# The Code_Saturne User Interface is free software; you can redistribute it
# and/or modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2 of
# the License, or (at your option) any later version.
#
# The Code_Saturne User Interface is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty
# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with the Code_Saturne Kernel; if not, write to the
# Free Software Foundation, Inc.,
# 51 Franklin St, Fifth Floor,
# Boston, MA 02110-1301 USA
#
#-------------------------------------------------------------------------------
"""
"""
#-------------------------------------------------------------------------------
# Library odules import
#-------------------------------------------------------------------------------
import string
import Tix
from Tkconstants import *
#-------------------------------------------------------------------------------
# Application modules import
#-------------------------------------------------------------------------------
from Base.Common import *
import Base.Toolbox as Tool
import Base.Dialog as Dialog
import Base.TkPage as TkPage
import Base.XMLmodel as XMLmodel
#-------------------------------------------------------------------------------
#
#-------------------------------------------------------------------------------
class ProbeValidator(TkPage.DataValidator2):
"""
"""
def isProbeOK(self, entry, var):
"""
This method validates the strict Positivity of the value, when an error
occurs, an exception ValueError is raised.
"""
try:
if int(var) <= 0:
return self._error(entry, ValueError, "value must be positive")
else:
return 1
except:
return self._error(entry, ValueError, "value must be positive")
#-------------------------------------------------------------------------------
# Output class
#-------------------------------------------------------------------------------
class VariableOption:
"""
"""
def __init__(self, case, master, check, stbar, node, list_turb_probe, color, glob):
"""
à faire : afficher les variables en fonction du modele de turb
limiter le nombre de caractére des entry à 19
test sur la cohérence des sondes (existence)
on est obligé de passer la stbar en argument pour afficher les messages d'erreur:
+ de 19 caracteres pour le nom
num des sondes existant et > 0
"""
self.master = master
self.case = case
self.check = check
self.stbar = stbar
self.node = node
self.color = color
self.glob = glob
self.list_turb_probe = list_turb_probe
self.balloon = Tix.Balloon(self.master, statusbar=self.stbar.label, bd=1, bg='black')
self.balloon.message.config(bg=wm['background'])
self.dicoLabelName = {}
self.name = self.node['name']
self.node_bc = self.case.xmlInitNode('boundary_conditions')
self.node_var = self.node_bc.xmlInitNodeList('variable')
self.node_sca = self.node_bc.xmlInitNodeList('scalar')
self.label = Tix.StringVar()
self.printing = Tix.StringVar()
self.post = Tix.StringVar()
self.probe = Tix.StringVar()
self._createWidgets()
def _createWidgets(self):
"""
"""
t = PageText()
f1 = Tix.Frame(self.master)
f1.pack()
self.lab = Tix.Entry(f1, width=11, textvariable=self.label, fg=self.color)
self.lab.event_add("<<Event1>>", "<Return>", "<Leave>")
self.lab.bind("<<Event1>>", self.getLabel)
self.balloon.bind_widget(self.lab, statusmsg=t.MSG_LABEL,
balloonmsg=t.KEYWORD+"NOMVAR")
butl = Tix.Checkbutton(f1, onvalue="on", offvalue="off",
variable=self.printing, command=self.getPrinting)
self.balloon.bind_widget(butl, statusmsg=t.MSG_LISTING,
balloonmsg=t.KEYWORD+"ILISVR")
butp = Tix.Checkbutton(f1, onvalue="on", offvalue="off",
variable=self.post, command=self.getPost)
self.balloon.bind_widget(butp, statusmsg=t.MSG_POST,
balloonmsg=t.KEYWORD+"ICHRVR")
self.eProbes = Tix.Entry(f1, width=21, textvariable=self.probe)
self.eProbes.event_add("<<Event2>>", "<Return>", "<Leave>", "<FocusOut>")
self.eProbes.bind("<<Event2>>", self.getProbe)
self.balloon.bind_widget(self.eProbes, statusmsg=t.MSG_PROBES,
balloonmsg=t.KEYWORD+"IHISVR")
# popup for selection or none selection by probe
pm_probe = Tix.PopupMenu(self.eProbes, title=t.POP_GLOBAL, state=NORMAL)
pm_probe.bind_widget(self.eProbes)
pm_probe.menu.add_separator()
pm_probe.menu.add_command(label=t.SELECT_ALL, command=self.selectAll)
pm_probe.menu.add_command(label=t.UNSELECT_ALL, command=self.cancelAll)
pm_probe.menu.m1 = Tix.Menu(pm_probe.menu)
#if glob ==0:
# self.lab.grid (row=0, column=0, pady=2)
# butl.grid (row=0, column=1, padx=28, pady=2)
# butp.grid (row=0, column=2, padx=18, pady=2)
# self.eProbes.grid(row=0, column=3, padx=2, pady=2)
self.lab.grid(row=0, column=0, pady=2)
butl.grid(row=0, column=1, padx=28, pady=2)
butp.grid(row=0, column=2, padx=18, pady=2)
self.eProbes.grid(row=0, column=3, padx=2, pady=2)
if self.node['label']:
self.label.set(self.node['label'])
# self.dicoLabelName[self.name] = self.node['label']
else:
self.label.set(self.node['name'])
# self.dicoLabelName[self.name] = self.node['name']
self.node_printing = self.node.xmlGetChildNodeList('listing_printing','status')
self.node_post = self.node.xmlGetChildNodeList('postprocessing_recording','status')
self.node_probe = self.node.xmlGetChildNodeList('probe_recording')
self.printing.set('on')
if self.node_printing:
self.printing.set('off')
self.post.set('on')
if self.node_post:
self.post.set('off')
listProbe = []
#TODELETE
# if self.case['probes'] == 1:
# if self.list_turb_probe:
# self.probe.set(string.join(self.list_turb_probe))
# self.getProbe()
# else:
list_name_probe = []
if self.node_probe:
for node in self.node_probe:
listProbe.append(str(node['name']))
if listProbe: self.probe.set(string.join(listProbe," "))
if self.glob == 1:
self.selectAll()
return
if self.glob == 2:
self.cancelAll()
return
def getLabel(self, event= None):
t = PageText()
self.check.begin(self.lab)
self.stbar.busy()
if len(self.label.get()) > 19:
#self.check._error(self.lab, t.ERROR_8_CAR)
self.check.error(self.lab)
self.stbar.set(t.ERROR_8_CAR)
elif len(self.label.get()) == 0:
self.check.error(self.lab)
else:
self.node['label'] = self.label.get()
for node1 in [self.node_var, self.node_sca]:
for nodebc in node1:
if nodebc['name'] == self.node['name']:
nodebc['label'] = self.label.get()
break
self.stbar.idle()
return self.label.get()
self.stbar.idle()
def getPrinting(self, event= None):
if self.printing.get() == 'off':
self.node.xmlInitChildNode('listing_printing')['status'] = self.printing.get()
else:
if self.node.xmlGetChildNode('listing_printing'):
self.node.xmlRemoveChild('listing_printing')
return self.printing.get()
def getPost(self, event= None):
if self.post.get() == 'off':
self.node.xmlInitChildNode('postprocessing_recording')['status'] = self.post.get()
else:
if self.node.xmlGetChildNode('postprocessing_recording'):
self.node.xmlRemoveChild('postprocessing_recording')
return self.post.get()
def selectAll(self, event= None):
self.probe.set(string.join(self.list_turb_probe))
self.getProbe()
def cancelAll(self, event= None):
self.probe.set("")
self.getProbe()
def getProbe(self, event=None):
t = PageText()
self.stbar.clear()
iok = 0
ierr = []
msg = ""
self.check.begin(self.eProbes)
for i in string.split(self.probe.get()):
if not self.check.isProbeOK(self.eProbes,i):
iok = 1
try:
pr = int(i)
if i not in self.list_turb_probe: ierr.append(i)
except:
pass
if iok:
msg= t.ERROR_INT
if ierr:
msg= msg + " " + t.NOT_A_PROBE+ string.join(ierr)
if iok or ierr:
self.stbar.set(msg)
self.check.error(self.eProbes)
else:
try:
self.node.xmlRemoveChild('probe_recording')
except:
pass
for i in string.split(self.probe.get()):
self.node.xmlInitNodeList('probe_recording',name=i)
#-------------------------------------------------------------------------------
# Main class
#-------------------------------------------------------------------------------
class OutputVariables(TkPage.Page):
def _dependsPages(self, name):
"""
Construction of the list of dependencies Pages.
"""
self.case[name]['depends'] = ['bounda/scalar']
def _pageControl(self):
"""
"""
self.check = ProbeValidator()
self.info_turb_name = []
self.node_models = self.case.xmlInitNode('thermophysical_models')
self.analysis_ctrl = self.case.xmlInitNode('analysis_control')
self.fluid_prop = self.case.xmlInitNode('physical_properties')
self.node_model_vp = self.node_models.xmlInitNode('velocity_pressure')
self.node_var_vp = self.node_model_vp.xmlGetNodeList('variable')
self.node_pro_vp = self.node_model_vp.xmlGetNodeList('property')
self.node_output = self.analysis_ctrl.xmlInitNode('output')
self.node_probe = self.node_output.xmlGetNodeList('probe','name')
def GlobSelectAll(self):
"""
We select all probes for all variables as asked in popup
"""
model = XMLmodel.XMLmodel(self.case)
probeList = []
for node in self.node_probe: probeList.append(node['name'])
for nodeList, color in [(self.node_var_vp, 'black'),
(model.getTurbNodeList(), 'black'),
(model.getThermalScalar(), 'brown'),
(model.getAdditionalScalar(), 'darkblue'),
(model.getAdditionalScalarProperty(), 'darkblue'),
(model.getFluidProperty(), 'darkgreen'),
(model.getTimeProperty(), 'darkgreen'),
(model.getWeightMatrixProperty(), 'blue'),
(model.getPuCoalScalProper(), 'green')]:
for node in nodeList:
glob = 1
VariableOption(self.case, self.f2.window,
self.check, self.stbar,
node, probeList, color, glob)
def GlobCancelAll(self):
"""
We select all probes for all variables as asked in popup
"""
model = XMLmodel.XMLmodel(self.case)
probeList = ""
for nodeList, color in [(self.node_var_vp, 'black'),
(model.getTurbNodeList(), 'black'),
(model.getThermalScalar(), 'brown'),
(model.getAdditionalScalar(), 'darkblue'),
(model.getAdditionalScalarProperty(), 'darkblue'),
(model.getFluidProperty(), 'darkgreen'),
(model.getTimeProperty(), 'darkgreen'),
(model.getPuCoalScalProper(), 'green'),
(model.getWeightMatrixProperty(), 'blue')]:
for node in nodeList:
glob = 2
VariableOption(self.case, self.f2.window,
self.check, self.stbar,
node, probeList, color, glob)
def _createWidgets(self):
"""
"""
t = PageText()
lf1 = Tix.LabelFrame(self.myPage, bd=2, label=t.TITLE, relief=FLAT)
lf1.label.config(font=fT)
lf1.pack(side=TOP, fill=X, padx=10, pady=10)
f1 = Tix.Frame(lf1.frame, relief=FLAT)
f1.pack(side=TOP, padx=10, pady=10)
self.l1 = Tix.Label(f1, text=t.NAME, bd=1, relief=GROOVE)
self.l2 = Tix.Label(f1, text=t.LISTING, bd=1, relief=GROOVE)
self.l3 = Tix.Label(f1, text=t.POST, bd=1, relief=GROOVE)
self.l4 = Tix.Label(f1, text=t.PROBE, bd=1, relief=GROOVE)
self.l1.grid (row=0, column=0, ipadx=26, ipady=8)
self.l2.grid (row=0, column=1, ipadx=8, ipady=1)
self.l3.grid (row=0, column=2, ipadx=8, ipady=1)
self.l4.grid (row=0, column=3, ipadx=55, ipady=8)
self.f2 = Tix.ScrolledWindow(lf1.frame, relief=FLAT)
self.f2.pack()
# popup for global selection or none selection
pm_global = Tix.PopupMenu(lf1.frame, title=t.POP_GLOBAL, state=NORMAL)
pm_global.bind_widget(lf1.frame)
pm_global.menu.add_separator()
pm_global.menu.add_command(label=t.GLOB_SELECT_ALL, command=self.GlobSelectAll)
pm_global.menu.add_command(label=t.GLOB_UNSELECT_ALL, command=self.GlobCancelAll)
pm_global.menu.m1 = Tix.Menu(pm_global.menu)
def _initializeWidgets(self):
"""
"""
model = XMLmodel.XMLmodel(self.case)
probeList = []
for node in self.node_probe: probeList.append(node['name'])
for nodeList, color in [(self.node_pro_vp, 'black'),
(self.node_var_vp, 'black'),
(model.getTurbNodeList(), 'black'),
(model.getThermalScalar(), 'brown'),
(model.getAdditionalScalar(), 'darkblue'),
(model.getAdditionalScalarProperty(), 'darkblue'),
(model.getFluidProperty(), 'darkgreen'),
(model.getTimeProperty(), 'darkgreen'),
(model.getPuCoalScalProper(), 'green'),
(model.getWeightMatrixProperty(), 'blue')]:
for node in nodeList:
glob = 0
VariableOption(self.case, self.f2.window,
self.check, self.stbar,
node, probeList, color, glob)
#-------------------------------------------------------------------------------
# Text and messages for this page
#-------------------------------------------------------------------------------
class PageText:
"""
Storage of all texts and messages for this page.
"""
def __init__(self):
# 1) Texts
#
if Tool.GuiParam.lang == 'fr':
self.ERROR_8_CAR = "Le nombre de caractères doit etre égal ou inférieur à 19"
self.ERROR_INT = "Le numéro de la sonde doit être > 0"
self.GLOB_SELECT_ALL = "Selectionner toutes les sondes pour toutes les variables"
self.GLOB_UNSELECT_ALL= "Déselectionner toutes les sondes pour toutes les variables"
self.KEYWORD = "Mot clé Code_Saturne: "
self.LISTING = "Affichage\nlisting"
self.NAME = "Nom"
self.NOT_A_PROBE = "Erreur, numéro de sonde(s) inexistant(s) : "
self.POP_GLOBAL = "Menu popup"
self.POST = "Post-\nprocessing"
self.PROBE = "Sondes"
self.SELECT_ALL = "Tout sélectionner"
self.TITLE = "Suivi des variables / scalaires"
self.UNSELECT_ALL = "Tout désélectionner"
else:
self.ERROR_8_CAR = "Number of character must be lower or equal than 19"
self.ERROR_INT = "Probe Number must be an integer > 0"
self.GLOB_SELECT_ALL = "Select all probes for all variables"
self.GLOB_UNSELECT_ALL= "Unselect all probes for all variables"
self.KEYWORD = "Code_Saturne key word: "
self.LISTING = "Print in\nlisting"
self.NAME = "Name"
self.NOT_A_PROBE = "Error, this probe doesn't exist: "
self.POP_GLOBAL = "Menu popup"
self.POST = "Post-\nprocessing"
self.PROBE = "Probes"
self.SELECT_ALL = "Select all"
self.TITLE = "Control Solution"
self.UNSELECT_ALL = "Unselect all"
# 2) Messages
#
if Tool.GuiParam.lang == 'fr':
self.MSG_LABEL = "Nom de la Variable/Scalaire max 8 caractères"
self.MSG_LISTING = "Suivi dans le listing"
self.MSG_POST = "Suivi en Post-processing"
self.MSG_PROBES = "Entrer le numero des sondes"
else:
self.MSG_LABEL = "Variable/Scalar name =< 8 characters"
self.MSG_LISTING = "Printing listing"
self.MSG_POST = "Post-processing"
self.MSG_PROBES = "Enter Probes number"
#-------------------------------------------------------------------------------
# End
#-------------------------------------------------------------------------------
syntax highlighted by Code2HTML, v. 0.9.1