Salome HOME
fin du menage
[tools/eficas.git] / InterfaceQT4 / compooper.py
1 #-*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2021   EDF R&D
3 #
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.
8 #
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.
13 #
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
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20 from __future__ import absolute_import
21 try :
22    from builtins import str
23 except : pass
24
25 import os
26 import tempfile
27
28 from Extensions.i18n import tr
29 from Extensions.eficas_exception import EficasException
30
31 from Editeur     import Objecttreeitem
32 from . import browser
33 from . import typeNode
34
35 class Node(browser.JDCNode, typeNode.PopUpMenuNode):
36
37
38     def select(self):
39         browser.JDCNode.select(self)
40         self.treeParent.tree.openPersistentEditor(self,1)
41         self.monWidgetNom=self.treeParent.tree.itemWidget(self,1)
42         self.monWidgetNom.returnPressed.connect(self.nomme)
43         if self.item.getIconName() == "ast-red-square" : self.monWidgetNom.setDisabled(True)
44         #else : self.monWidgetNom.setFocus()  ;self.monWidgetNom.setDisabled(False)
45
46     def nomme(self):
47         nom=str(self.monWidgetNom.text())
48         self.editor.initModif()
49         test,mess = self.item.nommeSd(nom)
50         if (test== 0):
51            self.editor.afficheInfos(mess,'red')
52            old=self.item.getText()
53            self.monWidgetNom.setText(old)
54         else :
55            self.editor.afficheCommentaire(tr("Nommage du concept effectue"))
56            self.onValid()
57            try :
58              self.fenetre.LENom.setText(nom)
59            except :
60              pass
61
62
63     def getPanel(self):
64         from .monWidgetCommande import MonWidgetCommande
65         return MonWidgetCommande(self,self.editor,self.item.object)
66
67     def createPopUpMenu(self):
68         typeNode.PopUpMenuNode.createPopUpMenu(self)
69
70 #    def view3D(self) :
71 #        from Editeur import TroisDPal
72 #        troisD=TroisDPal.TroisDPilote(self.item,self.editor.appliEficas)
73 #        troisD.envoievisu()
74
75
76 class EtapeTreeItem(Objecttreeitem.ObjectTreeItem):
77   """ La classe EtapeTreeItem est un adaptateur des objets ETAPE du noyau
78       Accas. Elle leur permet d'etre affichés comme des noeuds
79       d'un arbre graphique.
80       Cette classe a entre autres deux attributs importants :
81         - _object qui est un pointeur vers l'objet du noyau
82         - object qui pointe vers l'objet auquel sont délégués les
83           appels de méthode et les acces aux attributs
84       Dans le cas d'une ETAPE, _object et object pointent vers le 
85       meme objet.
86   """
87   itemNode=Node
88   
89   def isExpandable(self):
90       return 1
91
92   def getIconName(self):
93       """
94       Retourne le nom de l'icone a afficher dans l'arbre
95       Ce nom depend de la validite de l'objet
96       """
97       if not self.object.isActif():
98          return "ast-white-square"
99       elif self.object.isValid():
100          return "ast-green-square"
101       else:
102          valid=self.validChild()
103          valid=valid * self.validRegles("non")
104          if self.reste_val != {}:
105             valid=0
106          if valid==0  :
107             return "ast-red-square"
108          else :
109             try :
110             # on traite ici le cas d include materiau
111             #  print self.object.definition.nom 
112               if  self.object.fichier_ini != self.object.nom_mater :
113                   return "ast-red-square"
114             except :
115               pass
116             return "ast-yellow-square"
117
118   def getLabelText(self):
119       """ Retourne 3 valeurs :
120       - le texte a afficher dans le noeud représentant l'item
121       - la fonte dans laquelle afficher ce texte
122       - la couleur du texte
123       """
124       return self.labeltext,None,None
125       #if self.object.isActif():
126         # None --> fonte et couleur par défaut
127       #  return self.labeltext,None,None
128       #else:
129       #  return self.labeltext, None, None #CS_pbruno todo
130       
131   #def get_objet(self,name) :
132   #    for v in self.object.mcListe:
133   #        if v.nom == name : return v
134   #    return None
135       
136  # def getType_sd_prod(self):
137  #     """
138  #        Retourne le nom du type du concept résultat de l'étape
139  #     """
140  #     sd_prod=self.object.getType_produit()
141  #     if sd_prod:
142  #        return sd_prod.__name__
143  #     else:
144  #        return ""
145
146   def addItem(self,name,pos):      
147       mcent = self._object.addEntite(name,pos)
148       return mcent
149       
150
151   def suppItem(self,item) :
152       # item : item du MOCLE de l'ETAPE a supprimer
153       # item.getObject() = MCSIMP, MCFACT, MCBLOC ou MCList 
154       itemobject=item.getObject()
155       if itemobject.isOblig() :
156           return (0,tr('Impossible de supprimer un mot-clef obligatoire '))
157       if self.object.suppEntite(itemobject):
158           message = tr("Mot-clef %s supprime " , itemobject.nom)
159           return (1,message)
160       else :
161           return (0,tr('Pb interne : impossible de supprimer ce mot-clef'))
162
163   def getText(self):
164       try:
165           return self.object.getSdname()
166       except:
167           return ''
168
169   # PNPN ????
170   #def keys(self):
171   #    keys=self.object.mc_dict
172   #    return keys
173
174   def getSubList(self):
175       """
176          Reactualise la liste des items fils stockes dans self.sublist
177       """
178       if self.isActif():
179          liste=self.object.mcListe
180       else:
181          liste=[]
182
183       sublist=[None]*len(liste)
184       # suppression des items lies aux objets disparus
185       for item in self.sublist:
186          old_obj=item.getObject()
187          if old_obj in liste:
188             pos=liste.index(old_obj)
189             sublist[pos]=item
190          else:
191             pass # objets supprimes ignores
192
193       # ajout des items lies aux nouveaux objets
194       pos=0
195       for obj in liste:
196          if sublist[pos] is None:
197             # nouvel objet : on cree un nouvel item
198             def setFunction(value, object=obj):
199                 object.setval(value)
200             item = self.makeObjecttreeitem(self.appliEficas, obj.nom + " : ", obj, setFunction)
201             sublist[pos]=item
202          pos=pos+1
203
204       self.sublist=sublist
205       return self.sublist
206
207   def isValid(self):
208       return self.object.isValid()
209
210   def isCopiable(self):
211       """
212       Retourne 1 si l'objet est copiable, 0 sinon
213       """
214       return 1
215
216   def updateDeplace(self,item):
217       if item.sd and item.sd.nom:
218          self.object.sd=item.sd
219          self.object.sd.nom=item.sd.nom
220
221   def update(self,item):
222       if item.sd and item.sd.nom:
223          self.nommeSd(item.sd.nom)
224
225   def nommeSd(self,nom):
226       """ Lance la méthode de nommage de la SD """
227       oldnom=""
228       if self.object.sd != None :
229          oldnom=self.object.sd.nom
230       test,mess= self.object.nommeSd(nom)
231       if test:self.object.parent.resetContext()
232       if (test and oldnom in self.appliEficas.dict_reels ):
233               self.appliEficas.dict_reels[nom]=self.appliEficas.dict_reels[oldnom]
234       return test,mess
235
236   def isReentrant(self):
237       return self.object.isReentrant()
238     
239   def getNomsSdOperReentrant(self):
240       return self.object.getNomsSdOperReentrant()
241
242   def getObjetCommentarise(self):
243       """
244           Cette méthode retourne un objet commentarisé
245           représentatif de self.object
246       """
247       # Format de fichier utilisé
248       format=self.appliEficas.formatFichierIn
249       return self.object.getObjetCommentarise(format)
250
251   def getObjetCommentarise_BAK(self):
252       """
253           Cette méthode retourne un objet commentarisé
254           représentatif de self.object
255       """
256       import generator,Accas
257       # Format de fichier utilisé
258       format=self.appliEficas.format_fichier
259       g=generator.plugins[format]()
260       texte_commande = g.gener(self.object,format='beautifie')
261       # Il faut enlever la premiere ligne vide de texte_commande que 
262       # rajoute le generator
263       rebut,texte_commande = texte_commande.split('\n',1)
264       # on construit l'objet COMMANDE_COMM repésentatif de self mais non 
265       # enregistré dans le jdc
266       commande_comment = Accas.COMMANDE_COMM(texte=texte_commande,reg='non',
267                                              parent=self.object.parent)
268       commande_comment.niveau = self.object.niveau
269       commande_comment.jdc = commande_comment.parent = self.object.jdc
270
271       pos=self.object.parent.etapes.index(self.object)
272       parent=self.object.parent
273       self.object.parent.suppEntite(self.object)
274       parent.addEntite(commande_comment,pos)
275
276       return commande_comment
277
278
279 import Accas
280 treeitem = EtapeTreeItem
281 objet = Accas.ETAPE    
282