+# -*- coding: utf-8 -*-
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
les informations attachées au noeud de l'arbre sélectionné
"""
# Modules Python
+import types
+import traceback
import Tkinter
import Pmw
# Modules Eficas
import panels
from treeitemincanvas import TREEITEMINCANVAS
-from tkMessageBox import showinfo,showerror
+from widgets import showinfo,showerror
class CONFIG:
isdeveloppeur='NON'
self.modified='n'
self.pane=Pmw.PanedWidget(self.parent,orient='horizontal')
- self.pane.add('treebrowser',min=0.4)
+ self.pane.add('treebrowser',min=0.4,size=0.5)
self.pane.add('selected',min=0.4)
self.pane.pack(expand=1,fill='both')
self.tree=TREEITEMINCANVAS(jdc,nom_jdc,self.pane.pane('treebrowser'),
- self.appli,self.select_node)
+ self.appli,self.select_node,self.make_rmenu)
+
+ def make_rmenu(self,node,event):
+ if hasattr(node.item,'rmenu_specs'):
+ rmenu = Tkinter.Menu(self.pane.pane('treebrowser'), tearoff=0)
+ #node.select()
+ self.cree_menu(rmenu,node.item.rmenu_specs,node)
+ rmenu.tk_popup(event.x_root,event.y_root)
+
+ def cree_menu(self,menu,itemlist,node):
+ """
+ Ajoute les items du tuple itemlist
+ dans le menu menu
+ """
+ number_item=0
+ radio=None
+ for item in itemlist:
+ number_item=number_item + 1
+ if not item :
+ menu.add_separator()
+ else:
+ label,method=item
+ if type(method) == types.TupleType:
+ # On a un tuple => on cree une cascade
+ menu_cascade=Tkinter.Menu(menu)
+ menu.add_cascade(label=label,menu=menu_cascade)
+ self.cree_menu(menu_cascade,method,node)
+ elif method[0] == '&':
+ # On a une chaine avec & en tete => on cree un radiobouton
+ try:
+ command=getattr(node.item,method[1:])
+ menu.add_radiobutton(label=label,command=lambda a=self.appli,c=command,n=node:c(a,n))
+ if radio == None:radio=number_item
+ except:pass
+ else:
+ try:
+ command=getattr(node.item,method)
+ menu.add_command(label=label,command=lambda a=self.appli,c=command,n=node:c(a,n))
+ except:pass
+ # Si au moins un radiobouton existe on invoke le premier
+ if radio:menu.invoke(radio)
def select_node(self,node):
"""
"""
if node is not self.node_selected :
self.create_panel(node)
- # on conserve la trace du noeud sélectionné et de celui d'avant
- if self.node_selected :
- self.ancien_node = self.node_selected
- self.node_selected = node
- else:
- self.ancien_node = self.node_selected = node
+ self.node_selected = node
+ ## on conserve la trace du noeud sélectionné et de celui d'avant
+ #if self.node_selected :
+ #self.ancien_node = self.node_selected
+ #self.node_selected = node
+ #else:
+ #self.ancien_node = self.node_selected = node
def create_panel(self,node):
"""
z.show_stats()
z.show_cycles()
+ if node is None:
+ self.panel_courant=None
+ return self.panel_courant
if node.item.isactif():
if hasattr(node.item,"panel"):
else:
self.init_modif()
node.delete()
- if nom_sd:
- child.item.nomme_sd(nom_sd)
- child.update()
+ #if nom_sd:
+ #child.item.nomme_sd(nom_sd)
+ child.select()
+ #child.update()
def doCut(self):
"""
Lance la copie de l'objet placé dans self.appli.noeud_a_editer
Ne permet que la copie d'objets de type Commande ou MCF
"""
- objet_a_copier = self.appli.noeud_a_editer.item.get_copie_objet()
- if objet_a_copier.__class__.__name__ in ('ETAPE','PROC_ETAPE','MACRO_ETAPE','FORM_ETAPE'):
- self.doPaste_Commande(objet_a_copier)
- elif objet_a_copier.__class__.__name__ == "MCFACT":
- self.doPaste_MCF(objet_a_copier)
- else:
- showinfo("Copie impossible",
- "Vous ne pouvez copier que des commandes ou des mots-clés facteurs !")
- return
+ try:
+ child=self.appli.noeud_a_editer.doPaste(self.node_selected)
+ except:
+ traceback.print_exc()
+ showinfo("Action de coller impossible",
+ "L'action de coller apres un tel objet n'est pas permise")
+ return
- def doPaste_Commande(self,objet_a_copier):
- """
- Réalise la copie de l'objet passé en argument qui est nécessairement
- une commande
- """
- # il faut vérifier que le noeud sélectionné (noeud courant) est bien
- # une commande ou un JDC sinon la copie est impossible ...
- if self.node_selected.item.isCommande() :
- child = self.node_selected.append_brother(objet_a_copier,retour='oui')
- elif self.node_selected.item.isJdc() :
- child = self.node_selected.append_child(objet_a_copier,pos='first',
- retour='oui')
- else:
- showinfo("Copie impossible",
- "Vous ne pouvez coller la commande copiée à ce niveau de l'arborescence !")
- self.appli.affiche_infos("Copie refusée")
- return
- # il faut déclarer le JDCDisplay_courant modifié
- self.init_modif()
- # suppression éventuelle du noeud sélectionné
- if self.edit == "couper":
- self.appli.noeud_a_editer.delete()
if child == 0:
- # la copie est impossible
if self.appli.message != '':
- showerror("Copie refusée",self.appli.message)
- self.appli.message = ''
- self.appli.affiche_infos("Copie refusée")
- # on rend la copie à nouveau possible en libérant le flag edit
- self.edit="copier"
-
- def doPaste_MCF(self,objet_a_copier):
- """
- Réalise la copie de l'objet passé en argument qui est nécessairement un MCF
- """
- if self.node_selected.item.isCommande() :
- # le noeud courant est une ETAPE
- child = self.node_selected.append_child(objet_a_copier,retour='oui')
- elif self.node_selected.item.isMCList() :
- # le noeud courant est une MCList
- child = self.node_selected.parent.append_child(objet_a_copier,pos='first',retour='oui')
- elif self.node_selected.item.isMCFact():
- # le noeud courant est un MCFACT
- if self.node_selected.parent.item.isMCList():
- # le noeud selectionne est un MCFACT dans une MCList
- child = self.node_selected.parent.append_child(objet_a_copier,
- pos=self.node_selected.item,
- retour='oui')
- else:
- # le noeud MCFACT selectionne n'est pas dans une MCList
- child = self.node_selected.parent.append_child(objet_a_copier,retour='oui')
- else:
- showinfo("Copie impossible",
- "Vous ne pouvez coller le mot-clé facteur copié à ce niveau de l'arborescence !")
+ showerror("Copie refusée",self.appli.message)
+ self.appli.message = ''
self.appli.affiche_infos("Copie refusée")
return
+
# il faut déclarer le JDCDisplay_courant modifié
self.init_modif()
# suppression éventuelle du noeud sélectionné
+ # si possible on renomme l objet comme le noeud couper
if self.edit == "couper":
- self.appli.noeud_a_editer.delete()
- if child == 0:
- if self.appli.message != '':
- showerror("Copie refusée",self.appli.message)
- self.appli.message = ''
- self.appli.affiche_infos("Copie refusée")
+ #nom = self.appli.noeud_a_editer.item.object.sd.nom
+ item=self.appli.noeud_a_editer.item
+ self.appli.noeud_a_editer.delete()
+ child.item.update(item)
+ #test,mess = child.item.nomme_sd(nom)
+ child.select()
# on rend la copie à nouveau possible en libérant le flag edit
self.edit="copier"
+ def update(self):
+ """Cette methode est utilisee par le JDC associe pour
+ signaler des modifications globales du JDC
+ """
+ self.tree.update()
+