1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2013 EDF R&D
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License.
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 # Lesser General Public License for more details.
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 import string,types,os
25 from PyQt4.QtGui import *
26 from PyQt4.QtCore import *
27 from Extensions.i18n import tr
35 Classe contenant les methodes Qt communes a tous les panneaux droits
36 Tous les panneaux Mon...Panel heritent de cette classe
37 Gere plus precisement :
38 - l affichage de la doc
39 - le bouton Suppression (BSupPressed)
40 - la mutualisation de l affichage des regles
42 def __init__(self,node, parent = None):
45 if hasattr(self,'TWChoix'):
46 self.connect(self.TWChoix, SIGNAL("currentChanged(QWidget *)"), self.GestionBALpha)
48 def keyReleaseEvent(self,event):
49 if event.matches(QKeySequence.Copy): self.editor.appliEficas.editCopy()
50 if event.matches(QKeySequence.Cut): self.editor.appliEficas.editCut()
51 if event.matches(QKeySequence.Paste): self.editor.appliEficas.editPaste()
54 def GestionBALpha(self,fenetre):
55 if self.TWChoix.currentIndex()!=0:
56 if hasattr(self,'BAlpha'): #pour include materiau
59 if hasattr(self,'BAlpha'):
60 self.BAlpha.setVisible(True)
61 self.BuildLBMCPermis()
64 if hasattr(self, "Commande") and self.TWChoix.currentWidget() is self.Commande:
66 elif hasattr(self, "Concept") and self.TWChoix.currentWidget() is self.Concept:
67 self.LENomConceptReturnPressed()
68 elif hasattr(self, "MotClef") and self.TWChoix.currentWidget() is self.MotClef:
69 if self.LBMCPermis.currentItem() == None : return
70 self.DefMC(self.LBMCPermis.currentItem())
71 elif hasattr(self, "Formule") and self.TWChoix.currentWidget() is self.Formule:
72 self.BOkPressedFormule()
73 elif hasattr(self, "Valeur_Parametre") and self.TWChoix.currentWidget() is self.Valeur_Parametre:
74 self.BOkParamPressed()
75 elif hasattr(self, "maPageOk") and self.TWChoix.currentWidget() is self.maPageOk:
78 raise Exception("Unknown selected tab %s" % self.TWChoix.tabText(self.TWChoix.currentIndex()))
80 def BParametresPressed(self):
81 liste=self.node.item.get_liste_param_possible()
82 from monListeParamPanel import MonListeParamPanel
83 MonListeParamPanel(liste=liste,parent=self).show()
85 def AppelleBuildLBRegles(self):
86 listeRegles = self.node.item.get_regles()
87 listeNomsEtapes = self.node.item.get_mc_presents()
88 self.BuildLBRegles(listeRegles,listeNomsEtapes)
91 def BuildLBRegles(self,listeRegles,listeNomsEtapes):
93 if len(listeRegles) > 0:
94 for regle in listeRegles :
95 texteRegle=regle.gettext()
96 texteMauvais,test = regle.verif(listeNomsEtapes)
97 for ligne in texteRegle.split("\n") :
99 self.LBRegles.addItem(ligne)
104 self.LBRegles.addItem(ligne)
107 monItem=QListWidgetItem(ligne)
108 monItem.setForeground(Qt.red)
109 self.LBRegles.addItem(monItem)
112 # ----------------------- #
113 class QTPanelTBW1(QTPanel):
114 # ----------------------- #
116 Classe contenant les methodes necessaires a l onglet "Ajouter Mot-Clef"
117 herite de QTPanel # Attention n appelle pas le __init__
118 Gere plus precisement :
120 def __init__(self,node, parent = None):
123 if not(hasattr(self.node,'alpha')): self.node.alpha = 0
124 self.BuildLBMCPermis()
125 self.AppelleBuildLBRegles()
126 if hasattr(self,'BAlpha'):
127 self.connect(self.BAlpha,SIGNAL("clicked()"),self.BAlphaPressed)
129 def BAlphaPressed (self):
130 if self.node.alpha == 0 :
132 self.BAlpha.setText(tr("Tri Cata"))
135 self.BAlpha.setText(tr("Tri Alpha"))
136 self.BuildLBMCPermis()
139 def BuildLBMCPermis(self):
140 self.LBMCPermis.clear()
141 QObject.connect(self.LBMCPermis,SIGNAL("itemDoubleClicked(QListWidgetItem*)"),self.DefMC)
142 jdc = self.node.item.get_jdc()
143 genea =self.node.item.get_genealogie()
144 liste_mc=self.node.item.get_liste_mc_ordonnee(genea,jdc.cata_ordonne_dico)
145 if ((len(liste_mc) < 10) and (hasattr(self,'BAlpha'))):
147 if self.node.alpha == 1 : liste_mc.sort()
148 for aMc in liste_mc: self.LBMCPermis.addItem( aMc)
149 if len(liste_mc) !=0: self.LBMCPermis.setCurrentItem(self.LBMCPermis.item(0))
152 def DefMC(self,item):
153 """ On ajoute un mot-cle à la commande : subnode """
154 name=str(item.text())
155 self.editor.init_modif()
156 self.node.append_child(name)
158 # ---------------------------- #
159 class QTPanelTBW2(QTPanel):
160 # ---------------------------- #
162 Classe contenant les methodes necessaires a l onglet "Nouvelle Commande"
163 herite de QTPanel # Attention n appelle pas le __init__
164 Gere plus precisement :
167 def __init__(self,node, parent = None, racine = 0):
170 self.BuildLBNouvCommande()
171 self.LEFiltre.setFocus()
172 self.NbRecherches = 0
174 self.AppelleBuildLBRegles()
175 self.LEFiltre.setFocus()
177 self.connect(self.TWChoix, SIGNAL("currentChanged(QWidget *)"), self.handleCurrentChanged)
181 def handleCurrentChanged(self):
183 label=self.TWChoix.tabText(self.TWChoix.currentIndex())
184 if label==tr("Nouvelle Commande"):
185 self.LEFiltre.setFocus()
186 if label==tr("Nommer Concept"):
187 self.LENomConcept.setFocus()
188 if label==tr("Definition Formule"):
189 self.LENomFormule.setFocus()
190 if label==tr("Valeur Parametre"):
191 self.lineEditNom.setFocus()
192 if label==tr("Fichier Include"):
193 self.LENomFichier.setFocus()
194 if label==tr("Ajouter Mot-Clef"):
195 self.LBMCPermis.setCurrentItem(self.LBMCPermis.item(0))
200 def BuildLBNouvCommande(self):
201 self.LBNouvCommande.clear()
203 jdc=self.node.item.object.get_jdc_root()
205 listeGroupes,dictGroupes=jdc.get_groups()
206 if "CACHE" in dictGroupes.keys():
207 aExclure=dictGroupes["CACHE"]
210 if ((self.editor.mode_nouv_commande == "alpha") and (hasattr(self,'RBalpha'))):
211 self.RBalpha.setChecked(True)
212 self.RBGroupe.setChecked(False)
213 listeCmd = jdc.get_liste_cmd()
214 for aCmd in listeCmd:
215 if aCmd not in aExclure :
216 self.LBNouvCommande.addItem( aCmd )
217 elif self.editor.mode_nouv_commande== "groupe" :
218 self.RBGroupe.setChecked(True)
219 self.RBalpha.setChecked(False)
221 listeGroupes,dictGroupes=jdc.get_groups()
222 for grp in listeGroupes:
223 if grp == "CACHE":continue
224 listeCmd=dictGroupes[grp]
225 texte="GROUPE : "+grp
226 self.LBNouvCommande.addItem( texte )
227 self.LBNouvCommande.addItem( " " )
228 for aCmd in listeCmd:
229 if aCmd not in aExclure :
230 self.LBNouvCommande.addItem( aCmd)
231 self.LBNouvCommande.addItem( " " )
232 elif self.editor.mode_nouv_commande== "initial" :
233 listeCmd = self.editor.Commandes_Ordre_Catalogue
234 listeCmd2=jdc.get_liste_cmd()
235 if len(listeCmd) != len(listeCmd2):
237 for aCmd in listeCmd:
238 if aCmd not in aExclure :
239 self.LBNouvCommande.addItem( aCmd )
240 #QObject.connect( self.LBNouvCommande, SIGNAL("itemClicked(QListWidgetItem*)"),self.DefCmd )
241 QObject.connect( self.LBNouvCommande, SIGNAL("itemDoubleClicked(QListWidgetItem*)"),self.DefCmd )
243 def BuildLBNouvCommandChanged(self) :
244 if self.RBalpha.isChecked():
245 self.editor.mode_nouv_commande="alpha"
247 self.editor.mode_nouv_commande="groupe"
248 self.BuildLBNouvCommande()
249 self.LEFiltre.setFocus()
252 if self.LBNouvCommande.currentItem()== 0 : return
253 if self.LBNouvCommande.currentItem()== None : return
254 name=str(self.LBNouvCommande.currentItem().text())
255 if name==QString(" "):
257 if name.find("GROUPE :")==0 :
259 self.editor.init_modif()
260 new_node = self.node.append_brother(name,'after')
263 def LEFiltreTextChanged(self):
264 self.NbRecherches = 0
266 MonItem=self.LBNouvCommande.findItems(self.LEFiltre.text().toUpper(),Qt.MatchContains)[0]
267 self.LBNouvCommande.setCurrentItem(MonItem)
271 def LEfiltreReturnPressed(self):
274 def BNextPressed(self):
275 self.NbRecherches = self.NbRecherches + 1
278 MonItem=self.LBNouvCommande.findItems(self.LEFiltre.text().toUpper(),Qt.MatchContains)[self.NbRecherches]
280 try : # ce try sert si la liste est vide
281 MonItem=self.LBNouvCommande.findItems(self.LEFiltre.text().toUpper(),Qt.MatchContains)[0]
282 self.NbRecherches = 0
285 self.LBNouvCommande.setCurrentItem(MonItem)
287 def LBNouvCommandeClicked(self):
288 name=str(self.LBNouvCommande.currentText())
291 # ---------------------------- #
292 class QTPanelTBW3(QTPanel):
293 # ---------------------------- #
296 Classe contenant les methodes necessaires a l onglet "Nommer Concept"
298 herite de QTPanel # Attention n appelle pas le __init__
299 Gere plus precisement :
302 def __init__(self,node, parent = None):
305 type_sd = self.node.item.get_type_sd_prod()
306 nomConcept = self.node.item.GetText()
307 self.typeConcept.setText(type_sd)
308 self.LENomConcept.setText("")
309 self.LENomConcept.setText(nomConcept)
310 self.LENomConcept.setFocus()
311 if self.node.item.is_reentrant():
312 self.makeConceptPage_reentrant()
314 self.listBoxASSD.close()
316 def makeConceptPage_reentrant(self):
318 self.LENomConcept.close()
321 self.typeConcept.close()
322 self.LENomConcept.close()
323 self.Label1.setText(tr("<font size=\"+1\"><p align=\"center\">Structures de donnees a enrichir\n"
324 " par l\'operateur courant :</p></font>"))
325 listeNomsSD = self.node.item.get_noms_sd_oper_reentrant()
326 for aSD in listeNomsSD:
327 self.listBoxASSD.addItem( aSD)
328 QObject.connect(self.listBoxASSD, SIGNAL("itemDoubleClicked(QListWidgetItem*)" ), self.ClicASSD )
332 if self.listBoxASSD.currentItem()== None : return
333 val=self.listBoxASSD.currentItem().text()
335 nom = string.strip(nom)
336 test,mess = self.node.item.nomme_sd(nom)
338 self.editor.affiche_infos(mess,Qt.red)
340 def LENomConceptReturnPressed(self):
342 Nomme le concept SD retourne par l'etape
344 nom = str(self.LENomConcept.text())
345 nom = string.strip(nom)
346 if nom == '' : return # si pas de nom, on ressort sans rien faire
347 self.editor.init_modif()
348 test,mess = self.node.item.nomme_sd(nom)
349 #Notation scientifique
350 from politiquesValidation import Validation
351 validation=Validation(self.node,self.editor)
352 validation.AjoutDsDictReelEtape()
353 self.editor.affiche_infos(mess)
355 # ------------------------------- #
356 from desViewTexte import Ui_dView
357 class ViewText(Ui_dView,QDialog):
358 # ------------------------------- #
360 Classe permettant la visualisation de texte
362 def __init__(self,parent,editor=None,entete=None):
363 QDialog.__init__(self,parent)
367 self.resize( QSize(600,600).expandedTo(self.minimumSizeHint()) )
368 self.connect( self.bclose,SIGNAL("clicked()"), self, SLOT("close()") )
369 self.connect( self.bsave,SIGNAL("clicked()"), self.saveFile )
370 if entete != None : self.setWindowTitle (entete)
373 def setText(self, txt ):
374 self.view.setText(txt)
377 #recuperation du nom du fichier
378 if self.editor != None :
379 dir=self.editor.appliEficas.CONFIGURATION.savedir
382 fn = QFileDialog.getSaveFileName(None,
383 tr("Sauvegarder le fichier"),
385 if fn.isNull() : return
386 ulfile = os.path.abspath(unicode(fn))
387 if self.editor != None :
388 self.editor.appliEficas.CONFIGURATION.savedir=os.path.split(ulfile)[0]
391 f.write(str(self.view.toPlainText()))
395 QMessageBox.critical(self, tr("Sauvegarder le fichier"),
396 tr("Le fichier <b>%(v_1)s</b> n'a pu etre sauvegarde. <br>Raison : %(v_2)s", {'v_1': unicode(fn), 'v_2': unicode(why)}))