Salome HOME
PN
[tools/eficas.git] / Editeur / compocommandecomm.py
1 # -*- coding: utf-8 -*-
2 #            CONFIGURATION MANAGEMENT OF EDF VERSION
3 # ======================================================================
4 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
5 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
6 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
7 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
8 # (AT YOUR OPTION) ANY LATER VERSION.
9 #
10 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
11 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
12 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
13 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
14 #
15 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
16 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
17 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
18 #
19 #
20 # ======================================================================
21 import traceback
22 from Tkinter import *
23 import Pmw
24 import string
25 from widgets import showerror
26
27 import Objecttreeitem
28 import panels
29 import fontes
30
31 Fonte_Commentaire = fontes.standard_italique
32
33 class COMMANDE_COMMPanel(panels.OngletPanel):
34   """
35   Classe servant à définir le panel associé à une commande commentarisée
36   """
37   def init(self):
38     """
39     Initialise les frame des panneaux contextuels relatifs à une commande commentarisée
40     """
41     panneau=Frame(self)
42     panneau.pack(expand=1,fill='both')
43     self.make_buttons()
44     self.makeCOMMPage(panneau)
45
46   def makeCOMMPage(self,page):
47     """
48     Crée la page qui permet d'afficher et d'éditer le texte de la commande commentarisée
49     """
50     self.frame_valeur = Frame(page)
51     self.frame_valeur.place(relwidth=0.9,relheight=0.9,relx=0.05,rely=0.05,anchor='nw')
52     self.widget_text = Pmw.ScrolledText(self.frame_valeur,
53                                         borderframe=1,
54                                         labelpos='n',
55                                         label_text = 'Texte de la commande\n ')
56     self.widget_text.pack(side='top',expand=1,fill='both')
57     self.widget_text.configure(hscrollmode='dynamic',
58                                vscrollmode='dynamic')
59     self.display_valeur()
60
61   def make_buttons(self):
62     """
63     Crée les boutons du panneau
64     """
65     self.bouton_sup.place_forget()
66     self.bouton_doc.place_forget()
67     self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur,width=14)
68     self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur,width=14)
69     self.bouton_unc = Button(self.fr_but,text='Décommentariser',command=self.uncomment,width=14)
70
71     self.bouton_val.place(relx=0.1,rely=0.5,relheight=1,relwidth=0.20,anchor='center')
72     self.bouton_ann.place(relx=0.30,rely=0.5,relheight=1,relwidth=0.20,anchor='center')
73     self.bouton_sup.place(relx=0.50,rely=0.5,relheight=1,relwidth=0.20,anchor='center')
74     self.bouton_unc.place(relx=0.75,rely=0.5,relheight=1,relwidth=0.25,anchor='center')
75
76   def change_valeur(self):
77     """
78     Stocke la nouvelle valeur donnée par l'utilisateur comme valeur de la commande commentarisée
79     """
80     if self.parent.modified == 'n' : self.parent.init_modif()
81     new_valeur = self.widget_text.get()
82     self.node.item.set_valeur(new_valeur)
83     self.node.update()
84
85   def display_valeur(self):
86     """
87     Affiche dans self.widget_text la valeur de la commande commentarisée
88     (annule d'éventuelles modifications faite par l'utilisateur)
89     """
90     self.widget_text.settext(self.node.item.get_valeur())
91
92   def uncomment(self):
93       """
94       Réalise la décommentarisation de self
95       """
96       try:
97           pos=self.node.parent.children.index(self.node)
98           commande,nom = self.node.item.uncomment()
99           self.node.parent.children[pos].select()
100       except Exception,e:
101           showerror("Erreur !",str(e))
102           return
103       #self.parent.appli.bureau.JDCDisplay_courant.ReplaceObjectNode(self.node,commande,nom)
104     
105 class COMMANDE_COMMTreeItem(Objecttreeitem.ObjectTreeItem):
106     panel = COMMANDE_COMMPanel
107
108     def init(self):
109       self.setfunction = self.set_valeur
110
111     def GetIconName(self):
112       """
113       Retourne le nom de l'icône associée au noeud qui porte self,
114       dépendant de la validité de l'objet
115       NB : une commande commentarisée est toujours valide ...
116       """
117       if self.isvalid():
118           return "ast-green-percent"
119       else:
120           return "ast-red-percent"
121
122     def GetLabelText(self):
123         """ Retourne 3 valeurs :
124         - le texte à afficher dans le noeud représentant l'item
125         - la fonte dans laquelle afficher ce texte
126         - la couleur du texte
127         """
128         return 'commande commentarisée',Fonte_Commentaire,None
129
130     def get_valeur(self):
131       """
132       Retourne la valeur de la commande commentarisée cad son texte
133       """
134       return self.object.get_valeur() or ''
135     
136     def GetText(self):
137         texte = self.object.valeur
138         texte = string.split(texte,'\n')[0]
139         if len(texte) < 25 :
140             return texte
141         else :
142             return texte[0:24]
143
144     def set_valeur(self,valeur):
145       """
146       Afefcte valeur à l'objet commande commentarisée
147       """
148       self.object.set_valeur(valeur)
149       
150     def GetSubList(self):
151       """
152       Retourne la liste des fils de self
153       """
154       return []
155
156     def uncomment(self):
157       """
158       Demande à l'objet commande commentarisée de se décommentariser.
159       Si l'opération s'effectue correctement, retourne l'objet commande
160       et éventuellement le nom de la sd produite, sinon lève une exception
161       """
162       try:
163         commande,nom = self.object.uncomment()
164       except Exception,e:
165         traceback.print_exc()
166         raise e
167       return commande,nom
168   
169 import Accas
170 treeitem =COMMANDE_COMMTreeItem
171 objet = Accas.COMMANDE_COMM