/usr/share/pyshared/InterfaceTK/compooper.py is in eficas 2.0.3-1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 | # -*- coding: utf-8 -*-
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
# THIS PROGRAM 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.
#
# THIS PROGRAM 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 THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
#
#
# ======================================================================
from Tkinter import *
import Pmw
import traceback
from Editeur import Objecttreeitem
import panels
import fontes
class OPERPanel(panels.OngletPanel):
def init(self):
nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
nb.pack(fill = 'both', expand = 1)
self.nb=nb
nb.add('Mocles', tab_text='Nouveau mot-clé')
nb.add('Concept', tab_text='Nommer concept')
nb.add('Commande', tab_text='Nouvelle Commande')
nb.add('Commentaire',tab_text='Paramètre/Commentaire')
panneau=Pmw.PanedWidget(nb.page("Mocles"),
orient='horizontal')
panneau.add('left',min=0.4,max=0.60,size=0.50)
panneau.add('right',min=0.4,max=0.60,size=0.50)
panneau.pack(expand=1,fill='both')
panneau.setnaturalsize()
self.makeCommandePage(nb.page("Commande"))
self.makeConceptPage_oper(nb.page("Concept"))
self.makeMoclesPage(panneau.pane('left'))
self.makeReglesPage(panneau.pane('right'))
#self.makeCommentairePage(nb.page("Commentaire"))
self.makeParamCommentPage_for_etape(nb.page("Commentaire"))
nb.tab('Mocles').focus_set()
self.nb.setnaturalsize()
self.enlevebind()
self.creebind()
self.affiche()
def makeConceptPage_oper(self,page):
""" Crée la page de saisie du nom du concept """
if self.node.item.is_reentrant():
# commande obligatoirement reentrante
self.makeConceptPage_reentrant(page)
else:
# commande non reentrante ou facultativement reentrante
self.makeConceptPage(page)
def makeConceptPage_reentrant(self,page):
""" Crée la page de saisie du nom de concept pour un opérateur reentrant
cad propose dans la liste des SD utilisées dans la commande celle(s) dont le
type est compatible avec celui que retourne l'opérateur """
liste_noms_sd = self.node.item.get_noms_sd_oper_reentrant()
self.listbox = Pmw.ScrolledListBox(page,
items=liste_noms_sd,
labelpos='n',
label_text="Structure(s) de données à enrichir par l'opérateur courant :",
listbox_height = 6,
selectioncommand=self.select_valeur_from_list,
dblclickcommand=lambda s=self,c=self.execConcept : s.choose_valeur_from_list(c))
self.listbox.place(relx=0.5,rely=0.3,relheight=0.4,anchor='center')
Label(page,text='Structure de donnée choisie :').place(relx=0.05,rely=0.6)
self.valeur_choisie = StringVar()
self.label_valeur = Label(page,textvariable=self.valeur_choisie)
self.label_valeur.place(relx=0.45,rely=0.6)
if len(liste_noms_sd) == 1 :
self.valeur_choisie.set(liste_noms_sd[0])
def select_valeur_from_list(self):
try:
choix = self.listbox.getcurselection()[0]
self.valeur_choisie.set(choix)
except:
traceback.print_exc()
def choose_valeur_from_list(self,command):
try:
choix = self.listbox.getcurselection()[0]
self.valeur_choisie.set(choix)
apply(command,(),{})
except:
traceback.print_exc()
import treewidget
class Node(treewidget.Node):
def doPaste(self,node_selected):
"""
Déclenche la copie de l'objet item avec pour cible
l'objet passé en argument : node_selected
"""
objet_a_copier = self.item.get_copie_objet()
child=node_selected.doPaste_Commande(objet_a_copier)
return child
def doPaste_Commande(self,objet_a_copier):
"""
Réalise la copie de l'objet passé en argument qui est nécessairement
une commande
"""
parent=self.parent
#child = parent.item.append_child(objet_a_copier,self.item.getObject())
child = self.append_brother(objet_a_copier,retour='oui')
#if child is None:return 0
return child
def doPaste_MCF(self,objet_a_copier):
"""
Réalise la copie de l'objet passé en argument (objet_a_copier)
Il s'agit forcément d'un mot clé facteur
"""
child = self.append_child(objet_a_copier,pos='first',retour='oui')
return child
class EtapeTreeItem(Objecttreeitem.ObjectTreeItem):
""" La classe EtapeTreeItem est un adaptateur des objets ETAPE du noyau
Accas. Elle leur permet d'etre affichés comme des noeuds
d'un arbre graphique.
Cette classe a entre autres deux attributs importants :
- _object qui est un pointeur vers l'objet du noyau
- object qui pointe vers l'objet auquel sont délégués les
appels de méthode et les accès aux attributs
Dans le cas d'une ETAPE, _object et object pointent vers le
meme objet.
"""
panel = OPERPanel
itemNode=Node
def IsExpandable(self):
return 1
def GetIconName(self):
"""
Retourne le nom de l'icône à afficher dans l'arbre
Ce nom dépend de la validité de l'objet
"""
if not self.object.isactif():
return "ast-white-square"
elif self.object.isvalid():
return "ast-green-square"
else:
valid=self.valid_child()
valid=valid * self.valid_regles("non")
if self.reste_val != {}:
valid=0
if valid==0 :
return "ast-red-square"
else :
return "ast-yellow-square"
def GetLabelText(self):
""" Retourne 3 valeurs :
- le texte à afficher dans le noeud représentant l'item
- la fonte dans laquelle afficher ce texte
- la couleur du texte
"""
if self.object.isactif():
# None --> fonte et couleur par défaut
return self.labeltext,None,None
else:
return self.labeltext,fontes.standard_italique,None
def get_objet(self,name) :
for v in self.object.mc_liste:
if v.nom == name : return v
return None
def get_type_sd_prod(self):
"""
Retourne le nom du type du concept résultat de l'étape
"""
sd_prod=self.object.get_type_produit()
if sd_prod:
return sd_prod.__name__
else:
return ""
def additem(self,name,pos):
#print "compooper.additem",name,pos
mcent = self._object.addentite(name,pos)
return mcent
def suppitem(self,item) :
# item : item du MOCLE de l'ETAPE à supprimer
# item.getObject() = MCSIMP, MCFACT, MCBLOC ou MCList
itemobject=item.getObject()
if itemobject.isoblig() :
self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ')
return 0
if self.object.suppentite(itemobject):
message = "Mot-clé " + itemobject.nom + " supprimé"
self.appli.affiche_infos(message)
return 1
else :
self.appli.affiche_infos('Pb interne : impossible de supprimer ce mot-clé')
return 0
def GetText(self):
try:
return self.object.get_sdname()
except:
return ''
def keys(self):
keys=self.object.mc_dict.keys()
return keys
def GetSubList(self):
"""
Reactualise la liste des items fils stockes dans self.sublist
"""
if self.isactif():
liste=self.object.mc_liste
else:
liste=[]
sublist=[None]*len(liste)
# suppression des items lies aux objets disparus
for item in self.sublist:
old_obj=item.getObject()
if old_obj in liste:
pos=liste.index(old_obj)
sublist[pos]=item
else:
pass # objets supprimes ignores
# ajout des items lies aux nouveaux objets
pos=0
for obj in liste:
if sublist[pos] is None:
# nouvel objet : on cree un nouvel item
def setfunction(value, object=obj):
object.setval(value)
item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
sublist[pos]=item
pos=pos+1
self.sublist=sublist
return self.sublist
def isvalid(self):
return self.object.isvalid()
def iscopiable(self):
"""
Retourne 1 si l'objet est copiable, 0 sinon
"""
return 1
def update(self,item):
if item.sd and item.sd.nom:
self.nomme_sd(item.sd.nom)
def nomme_sd(self,nom):
""" Lance la méthode de nommage de la SD """
oldnom=""
if self.object.sd != None :
oldnom=self.object.sd.nom
test,mess= self.object.nomme_sd(nom)
if test:self.object.parent.reset_context()
if (test and self.appli.dict_reels.has_key(oldnom) ):
self.appli.dict_reels[nom]=self.appli.dict_reels[oldnom]
return test,mess
def is_reentrant(self):
return self.object.is_reentrant()
def get_noms_sd_oper_reentrant(self):
return self.object.get_noms_sd_oper_reentrant()
def get_objet_commentarise(self):
"""
Cette méthode retourne un objet commentarisé
représentatif de self.object
"""
# Format de fichier utilisé
format=self.appli.format_fichier.get()
return self.object.get_objet_commentarise(format)
def get_objet_commentarise_BAK(self):
"""
Cette méthode retourne un objet commentarisé
représentatif de self.object
"""
import generator,string,Accas
# Format de fichier utilisé
format=self.appli.format_fichier.get()
g=generator.plugins[format]()
texte_commande = g.gener(self.object,format='beautifie')
# Il faut enlever la première ligne vide de texte_commande que
# rajoute le generator
rebut,texte_commande = string.split(texte_commande,'\n',1)
# on construit l'objet COMMANDE_COMM repésentatif de self mais non
# enregistré dans le jdc
commande_comment = Accas.COMMANDE_COMM(texte=texte_commande,reg='non',
parent=self.object.parent)
commande_comment.niveau = self.object.niveau
commande_comment.jdc = commande_comment.parent = self.object.jdc
pos=self.object.parent.etapes.index(self.object)
parent=self.object.parent
self.object.parent.suppentite(self.object)
parent.addentite(commande_comment,pos)
return commande_comment
def visu_3D(self,appli,node) :
import TroisDPal
troisD=TroisDPal.TroisDPilote(node.item,appli,node.parent)
troisD.envoievisu()
import Accas
treeitem = EtapeTreeItem
objet = Accas.ETAPE
|