]> SALOME platform Git repositories - tools/eficas.git/blob - InterfaceQT4/compooper.py
Salome HOME
update version
[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 != {} : valid=0
105             if valid==0  :
106                 return "ast-red-square"
107             else :
108                 try :
109                 # on traite ici le cas d include materiau
110                 #  print self.object.definition.nom
111                     if  self.object.fichier_ini != self.object.nom_mater :
112                         return "ast-red-square"
113                 except :
114                     pass
115                 return "ast-yellow-square"
116
117     def getLabelText(self):
118         """ Retourne 3 valeurs :
119         - le texte a afficher dans le noeud représentant l'item
120         - la fonte dans laquelle afficher ce texte
121         - la couleur du texte
122         """
123         return self.labeltext,None,None
124         #if self.object.isActif():
125         # None --> fonte et couleur par défaut
126         #  return self.labeltext,None,None
127         #else:
128         #  return self.labeltext, None, None #CS_pbruno todo
129
130     #def get_objet(self,name) :
131     #    for v in self.object.mcListe:
132     #        if v.nom == name : return v
133     #    return None
134
135    # def getType_sd_prod(self):
136    #     """
137    #        Retourne le nom du type du concept résultat de l'étape
138    #     """
139    #     sd_prod=self.object.getType_produit()
140    #     if sd_prod:
141    #        return sd_prod.__name__
142    #     else:
143    #        return ""
144
145     def addItem(self,name,pos):
146         mcent = self._object.addEntite(name,pos)
147         return mcent
148
149
150     def suppItem(self,item) :
151         # item : item du MOCLE de l'ETAPE a supprimer
152         # item.getObject() = MCSIMP, MCFACT, MCBLOC ou MCList
153         itemobject=item.getObject()
154         if itemobject.isOblig() :
155             return (0,tr('Impossible de supprimer un mot-clef obligatoire '))
156         if self.object.suppEntite(itemobject):
157             message = tr("Mot-clef %s supprime " , itemobject.nom)
158             return (1,message)
159         else :
160             return (0,tr('Pb interne : impossible de supprimer ce mot-clef'))
161
162     def getText(self):
163         try:
164             return self.object.getSdname()
165         except:
166             return ''
167
168     # PNPN ????
169     #def keys(self):
170     #    keys=self.object.mc_dict
171     #    return keys
172
173     def getSubList(self):
174         """
175            Reactualise la liste des items fils stockes dans self.sublist
176         """
177         if self.isActif():
178             liste=self.object.mcListe
179         else:
180             liste=[]
181
182         sublist=[None]*len(liste)
183         # suppression des items lies aux objets disparus
184         for item in self.sublist:
185             old_obj=item.getObject()
186             if old_obj in liste:
187                 pos=liste.index(old_obj)
188                 sublist[pos]=item
189             else:
190                 pass # objets supprimes ignores
191
192         # ajout des items lies aux nouveaux objets
193         pos=0
194         for obj in liste:
195             if sublist[pos] is None:
196                 # nouvel objet : on cree un nouvel item
197                 def setFunction(value, object=obj):
198                     object.setval(value)
199                 item = self.makeObjecttreeitem(self.appliEficas, obj.nom + " : ", obj, setFunction)
200                 sublist[pos]=item
201             pos=pos+1
202
203         self.sublist=sublist
204         return self.sublist
205
206     def isValid(self):
207         return self.object.isValid()
208
209     def isCopiable(self):
210         """
211         Retourne 1 si l'objet est copiable, 0 sinon
212         """
213         return 1
214
215     def updateDeplace(self,item):
216         if item.sd and item.sd.nom:
217             self.object.sd=item.sd
218             self.object.sd.nom=item.sd.nom
219
220     def update(self,item):
221         if item.sd and item.sd.nom:
222             self.nommeSd(item.sd.nom)
223
224     def nommeSd(self,nom):
225         """ Lance la méthode de nommage de la SD """
226         oldnom=""
227         if self.object.sd != None :
228             oldnom=self.object.sd.nom
229         test,mess= self.object.nommeSd(nom)
230         if test:self.object.parent.resetContext()
231         if (test and oldnom in self.appliEficas.dict_reels ):
232             self.appliEficas.dict_reels[nom]=self.appliEficas.dict_reels[oldnom]
233         return test,mess
234
235     def isReentrant(self):
236         return self.object.isReentrant()
237
238     def getNomsSdOperReentrant(self):
239         return self.object.getNomsSdOperReentrant()
240
241     def getObjetCommentarise(self):
242         """
243             Cette méthode retourne un objet commentarisé
244             représentatif de self.object
245         """
246         # Format de fichier utilisé
247         format=self.appliEficas.formatFichierIn
248         return self.object.getObjetCommentarise(format)
249
250     def getObjetCommentarise_BAK(self):
251         """
252             Cette méthode retourne un objet commentarisé
253             représentatif de self.object
254         """
255         import generator,Accas
256         # Format de fichier utilisé
257         format=self.appliEficas.format_fichier
258         g=generator.plugins[format]()
259         texte_commande = g.gener(self.object,format='beautifie')
260         # Il faut enlever la premiere ligne vide de texte_commande que
261         # rajoute le generator
262         rebut,texte_commande = texte_commande.split('\n',1)
263         # on construit l'objet COMMANDE_COMM repésentatif de self mais non
264         # enregistré dans le jdc
265         commande_comment = Accas.COMMANDE_COMM(texte=texte_commande,reg='non',
266                                                parent=self.object.parent)
267         commande_comment.niveau = self.object.niveau
268         commande_comment.jdc = commande_comment.parent = self.object.jdc
269
270         pos=self.object.parent.etapes.index(self.object)
271         parent=self.object.parent
272         self.object.parent.suppEntite(self.object)
273         parent.addEntite(commande_comment,pos)
274
275         return commande_comment
276
277
278 import Accas
279 treeitem = EtapeTreeItem
280 objet = Accas.ETAPE