# -*- 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 #-------------------------------------------------------------------------------