cifrado r97 - in trunk: . package/cifrado



Author: bersace
Date: Fri Apr 18 09:44:50 2008
New Revision: 97
URL: http://svn.gnome.org/viewvc/cifrado?rev=97&view=rev

Log:
ImplÃmentation de la substitution dans les message.


Modified:
   trunk/ChangeLog
   trunk/package/cifrado/cifrado.glade
   trunk/package/cifrado/cifrado.py
   trunk/package/cifrado/emission.py
   trunk/package/cifrado/message.py

Modified: trunk/package/cifrado/cifrado.glade
==============================================================================
--- trunk/package/cifrado/cifrado.glade	(original)
+++ trunk/package/cifrado/cifrado.glade	Fri Apr 18 09:44:50 2008
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
-<!--Generated with glade3 3.4.2 on Thu Apr  3 16:40:48 2008 -->
+<!--Generated with glade3 3.4.2 on Fri Apr 18 11:26:02 2008 -->
 <glade-interface>
   <widget class="GtkWindow" id="cifrado_fenetre">
     <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
@@ -594,7 +594,7 @@
                         </child>
                       </widget>
                       <packing>
-                        <property name="resize">False</property>
+                        <property name="resize">True</property>
                         <property name="shrink">False</property>
                       </packing>
                     </child>
@@ -711,93 +711,158 @@
                               </packing>
                             </child>
                             <child>
-                              <widget class="GtkScrolledWindow" id="scrolledwindow3">
+                              <widget class="GtkExpander" id="chiffrement_exp">
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
-                                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                <property name="tooltip" translatable="yes">SÃlectionner une Ãtape du chiffrement et choisissez le chiffrement à appliquer</property>
-                                <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
-                                <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-                                <property name="shadow_type">GTK_SHADOW_IN</property>
+                                <property name="expanded">True</property>
+                                <property name="use_markup">True</property>
                                 <child>
-                                  <widget class="GtkTreeView" id="codeur_liste">
-                                    <property name="height_request">96</property>
+                                  <widget class="GtkVBox" id="vbox4">
                                     <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                    <property name="headers_clickable">True</property>
-                                    <property name="reorderable">True</property>
+                                    <property name="spacing">5</property>
+                                    <child>
+                                      <widget class="GtkScrolledWindow" id="scrolledwindow3">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                        <property name="tooltip" translatable="yes">SÃlectionner une Ãtape du chiffrement et choisissez le chiffrement à appliquer</property>
+                                        <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
+                                        <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+                                        <property name="shadow_type">GTK_SHADOW_IN</property>
+                                        <child>
+                                          <widget class="GtkTreeView" id="codeur_liste">
+                                            <property name="height_request">96</property>
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">True</property>
+                                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                            <property name="headers_clickable">True</property>
+                                            <property name="reorderable">True</property>
+                                          </widget>
+                                        </child>
+                                      </widget>
+                                    </child>
+                                    <child>
+                                      <widget class="GtkHBox" id="hbox3">
+                                        <property name="visible">True</property>
+                                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                        <property name="spacing">6</property>
+                                        <child>
+                                          <widget class="GtkButton" id="codeur_nv_btn">
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">True</property>
+                                            <property name="receives_default">True</property>
+                                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                            <property name="tooltip" translatable="yes">Ajouter une Ãtape de chiffrement supplÃmentaire</property>
+                                            <property name="label" translatable="yes">gtk-add</property>
+                                            <property name="use_stock">True</property>
+                                            <property name="response_id">0</property>
+                                            <signal name="clicked" handler="on_codeur_nv_btn_clicked"/>
+                                          </widget>
+                                        </child>
+                                        <child>
+                                          <widget class="GtkButton" id="codeur_prop_btn">
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">True</property>
+                                            <property name="receives_default">True</property>
+                                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                            <property name="tooltip" translatable="yes">Configurer le chiffrement sÃlectionnÃ</property>
+                                            <property name="label" translatable="yes">gtk-properties</property>
+                                            <property name="use_stock">True</property>
+                                            <property name="response_id">0</property>
+                                            <signal name="clicked" handler="on_codeur_prop_btn_clicked"/>
+                                          </widget>
+                                          <packing>
+                                            <property name="position">1</property>
+                                          </packing>
+                                        </child>
+                                        <child>
+                                          <widget class="GtkButton" id="codeur_conv_btn">
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">True</property>
+                                            <property name="receives_default">True</property>
+                                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                            <property name="tooltip" translatable="yes">Voir le message chiffrà final</property>
+                                            <property name="label" translatable="yes">gtk-convert</property>
+                                            <property name="use_stock">True</property>
+                                            <property name="response_id">0</property>
+                                            <signal name="clicked" handler="on_codeur_conv_btn_clicked"/>
+                                          </widget>
+                                          <packing>
+                                            <property name="position">2</property>
+                                          </packing>
+                                        </child>
+                                        <child>
+                                          <widget class="GtkButton" id="codeur_suppr_btn">
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">True</property>
+                                            <property name="receives_default">True</property>
+                                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                            <property name="tooltip" translatable="yes">Supprimer l'Ãtape de chiffrement sÃlectionnÃe</property>
+                                            <property name="label" translatable="yes">gtk-remove</property>
+                                            <property name="use_stock">True</property>
+                                            <property name="response_id">0</property>
+                                            <signal name="clicked" handler="on_codeur_suppr_btn_clicked"/>
+                                          </widget>
+                                          <packing>
+                                            <property name="position">3</property>
+                                          </packing>
+                                        </child>
+                                      </widget>
+                                      <packing>
+                                        <property name="expand">False</property>
+                                        <property name="position">1</property>
+                                      </packing>
+                                    </child>
                                   </widget>
                                 </child>
+                                <child>
+                                  <widget class="GtkLabel" id="label3">
+                                    <property name="visible">True</property>
+                                    <property name="label" translatable="yes">&lt;b&gt;Chiffrement&lt;/b&gt;</property>
+                                    <property name="use_markup">True</property>
+                                  </widget>
+                                  <packing>
+                                    <property name="type">label_item</property>
+                                  </packing>
+                                </child>
                               </widget>
                               <packing>
                                 <property name="position">1</property>
                               </packing>
                             </child>
                             <child>
-                              <widget class="GtkHBox" id="hbox3">
+                              <widget class="GtkExpander" id="subs_exp">
                                 <property name="visible">True</property>
-                                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                <property name="spacing">6</property>
-                                <child>
-                                  <widget class="GtkButton" id="codeur_nv_btn">
-                                    <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                    <property name="receives_default">True</property>
-                                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                    <property name="tooltip" translatable="yes">Ajouter une Ãtape de chiffrement supplÃmentaire</property>
-                                    <property name="label" translatable="yes">gtk-add</property>
-                                    <property name="use_stock">True</property>
-                                    <property name="response_id">0</property>
-                                    <signal name="clicked" handler="on_codeur_nv_btn_clicked"/>
-                                  </widget>
-                                </child>
-                                <child>
-                                  <widget class="GtkButton" id="codeur_prop_btn">
-                                    <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                    <property name="receives_default">True</property>
-                                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                    <property name="tooltip" translatable="yes">Configurer le chiffrement sÃlectionnÃ</property>
-                                    <property name="label" translatable="yes">gtk-properties</property>
-                                    <property name="use_stock">True</property>
-                                    <property name="response_id">0</property>
-                                    <signal name="clicked" handler="on_codeur_prop_btn_clicked"/>
-                                  </widget>
-                                  <packing>
-                                    <property name="position">1</property>
-                                  </packing>
-                                </child>
+                                <property name="can_focus">True</property>
                                 <child>
-                                  <widget class="GtkButton" id="codeur_conv_btn">
+                                  <widget class="GtkScrolledWindow" id="scrolledwindow5">
                                     <property name="visible">True</property>
                                     <property name="can_focus">True</property>
-                                    <property name="receives_default">True</property>
                                     <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                    <property name="tooltip" translatable="yes">Voir le message chiffrà final</property>
-                                    <property name="label" translatable="yes">gtk-convert</property>
-                                    <property name="use_stock">True</property>
-                                    <property name="response_id">0</property>
-                                    <signal name="clicked" handler="on_codeur_conv_btn_clicked"/>
+                                    <property name="tooltip" translatable="yes">SÃlectionner une Ãtape du chiffrement et choisissez le chiffrement à appliquer</property>
+                                    <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
+                                    <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+                                    <property name="shadow_type">GTK_SHADOW_IN</property>
+                                    <child>
+                                      <widget class="GtkTreeView" id="substitutions_liste">
+                                        <property name="height_request">96</property>
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                        <property name="headers_clickable">True</property>
+                                        <property name="reorderable">True</property>
+                                      </widget>
+                                    </child>
                                   </widget>
-                                  <packing>
-                                    <property name="position">2</property>
-                                  </packing>
                                 </child>
                                 <child>
-                                  <widget class="GtkButton" id="codeur_suppr_btn">
+                                  <widget class="GtkLabel" id="label4">
                                     <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                    <property name="receives_default">True</property>
-                                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                    <property name="tooltip" translatable="yes">Supprimer l'Ãtape de chiffrement sÃlectionnÃe</property>
-                                    <property name="label" translatable="yes">gtk-remove</property>
-                                    <property name="use_stock">True</property>
-                                    <property name="response_id">0</property>
-                                    <signal name="clicked" handler="on_codeur_suppr_btn_clicked"/>
+                                    <property name="label" translatable="yes">&lt;b&gt;Substitutions&lt;/b&gt;</property>
+                                    <property name="use_markup">True</property>
                                   </widget>
                                   <packing>
-                                    <property name="position">3</property>
+                                    <property name="type">label_item</property>
                                   </packing>
                                 </child>
                               </widget>
@@ -827,7 +892,7 @@
                       </widget>
                       <packing>
                         <property name="resize">True</property>
-                        <property name="shrink">True</property>
+                        <property name="shrink">False</property>
                       </packing>
                     </child>
                   </widget>
@@ -1201,7 +1266,6 @@
         <property name="can_default">True</property>
         <property name="receives_default">True</property>
         <property name="label" translatable="yes">gtk-cancel</property>
-        <property name="use_underline">True</property>
         <property name="use_stock">True</property>
         <property name="response_id">0</property>
       </widget>
@@ -1212,7 +1276,6 @@
         <property name="can_default">True</property>
         <property name="receives_default">True</property>
         <property name="label" translatable="yes">gtk-apply</property>
-        <property name="use_underline">True</property>
         <property name="use_stock">True</property>
         <property name="response_id">0</property>
       </widget>
@@ -1225,7 +1288,6 @@
         <property name="has_default">True</property>
         <property name="receives_default">True</property>
         <property name="label" translatable="yes">gtk-ok</property>
-        <property name="use_underline">True</property>
         <property name="use_stock">True</property>
         <property name="response_id">0</property>
       </widget>

Modified: trunk/package/cifrado/cifrado.py
==============================================================================
--- trunk/package/cifrado/cifrado.py	(original)
+++ trunk/package/cifrado/cifrado.py	Fri Apr 18 09:44:50 2008
@@ -203,6 +203,7 @@
         liste.append_column(colonne)
 
 
+        # FenÃtre de conversion.
         d = self.glade.get_widget('conversion_dialog')
         d.add_buttons(gtk.STOCK_COPY, gtk.RESPONSE_APPLY,
                       gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE)
@@ -211,6 +212,30 @@
 
         
 
+        # SUBSTITUTIONS
+        self.substitutions = gtk.ListStore(gobject.TYPE_STRING,
+                                           gobject.TYPE_STRING)
+        
+        liste = self.glade.get_widget('substitutions_liste')
+        liste.set_model(self.substitutions)
+
+        # Variable
+        renderer = gtk.CellRendererText()
+        colonne = gtk.TreeViewColumn('Variable', renderer,
+                                     text=emission.COL_SUB_VAR)
+        colonne.set_expand(True)
+        liste.append_column(colonne)
+
+        # Valeur
+        renderer = gtk.CellRendererText()
+        renderer.set_property('editable', True)
+        renderer.connect('edited', self.on_substitution_edited)
+        colonne = gtk.TreeViewColumn('Valeur', renderer,
+                                     text=emission.COL_COD_PROP)
+        colonne.set_expand(True)
+        liste.append_column(colonne)
+
+
         # CHARGEMENT
 
         f = gtk.FileFilter()
@@ -619,8 +644,12 @@
         self.sync(False)
 
     def on_msg_changed(self, tampon):
-        self.get_msg_crt().message = tampon.get_text(tampon.get_start_iter(),
-                                                         tampon.get_end_iter())
+        msg = self.get_msg_crt()
+        msg.message = tampon.get_text(tampon.get_start_iter(),
+                                      tampon.get_end_iter())
+
+        self.actualiser_substitutions()
+
         self.sync(False)
 
     # ÃMISSIONS
@@ -651,14 +680,17 @@
             self.glade.get_widget('codeur_liste').set_model(None)
             envc.set_active(False)
 
+        self.actualiser_substitutions()
+
         envc.toggled()
         self.jeu.sync = sync
 
     def on_em_env_champ_toggled(self, bouton):
         em = self.get_em_crt()
         em.env = bouton.get_active()
-        wids = ['em_lieu_select', 'codeur_liste',
-                'codeur_nv_btn', 'codeur_prop_btn', 'codeur_conv_btn', 'codeur_suppr_btn']
+        wids = ['em_lieu_select', 'chiffrement_exp', 'subs_exp',
+                'codeur_nv_btn', 'codeur_prop_btn', 'codeur_conv_btn',
+                'codeur_suppr_btn']
         for wid in wids:
             self.glade.get_widget(wid).set_sensitive(em.env)
         self.sync(False)
@@ -746,7 +778,34 @@
             self.glade.get_widget('codeur_prop_cont').add(w)
 
         self.glade.get_widget('codeur_prop_btn').set_sensitive(w is not None)
-        
+
+
+    # SUBSTITUTIONS
+    def actualiser_substitutions(self):
+        em = self.get_em_crt()
+        if em is None:
+            pass
+
+        # substitutions
+        msg = self.get_msg_crt()
+        self.substitutions.clear()
+        variables = msg.lister_variables()
+        utile = len(variables) != 0
+        exp = self.glade.get_widget('subs_exp')
+        exp.set_expanded(utile)
+        exp.set_sensitive(utile)
+
+        if utile is True:
+            for var in variables:
+                self.substitutions.append([var, em.get_val(var)])
+        
+
+    def on_substitution_edited(self, renderer, path, valeur):
+        iter = self.substitutions.get_iter(path)
+        var = self.substitutions.get_value(iter, emission.COL_SUB_VAR)
+        self.get_em_crt().set_val(var, valeur)
+        self.substitutions.set_value(iter, emission.COL_SUB_VAL, valeur)
+        self.sync(False)
 
 
     # NOUVEAU

Modified: trunk/package/cifrado/emission.py
==============================================================================
--- trunk/package/cifrado/emission.py	(original)
+++ trunk/package/cifrado/emission.py	Fri Apr 18 09:44:50 2008
@@ -11,6 +11,7 @@
 from    .       import codeurs
 
 COL_COD_NOM, COL_COD_PROP, COL_COD = range(3)
+COL_SUB_VAR, COL_SUB_VAL = range(2)
 
 def charger(el, jeu):
     dest = jeu.get_force_depuis_nom(el.getAttribute('dest'))
@@ -21,14 +22,19 @@
     for e in el.getElementsByTagName('codeur'):
          codeurs.append(codeur.charger(e))
 
-    return Emission(env, dest, lieu, codeurs)
+    substitutions = {}
+    for e in el.getElementsByTagName('substitution'):
+        substitutions[e.getAttribute('variable')] = e.getAttribute('valeur')
+
+    return Emission(env, dest, lieu, codeurs, substitutions)
 
 
 class Emission:
-    def __init__(self, env, dest, lieu, cods=None):
+    def __init__(self, env, dest, lieu, cods=None, subs=None):
         self.env = env
         self.dest = dest
         self.lieu = lieu
+        self.subs = subs
         self.codeurs = gtk.ListStore(gobject.TYPE_STRING,
                                      gobject.TYPE_STRING,
                                      gobject.TYPE_PYOBJECT)
@@ -62,8 +68,17 @@
     def get_codeur_nom(self, iter):
         return self.codeurs.get_value(iter, COL_COD_NOM)
 
+    def get_val(self, var):
+        if not self.subs.has_key(var):
+            self.set_val(var, "")
+        return self.subs[var]
+
+    def set_val(self, var, val):
+        self.subs[var] = val
 
     def convertir(self, texte):
+        for var in self.subs:
+            texte = texte.replace(var, self.subs[var])
         iter = self.codeurs.get_iter_first()
         while iter is not None and self.codeurs.iter_is_valid(iter):
             codeur = self.codeurs.get_value(iter, COL_COD)
@@ -97,4 +112,10 @@
             e.appendChild(codeur.createXML(doc))
             iter = self.codeurs.iter_next(iter)
 
+        for var in self.subs:
+            s = doc.createElement('substitution')
+            s.setAttribute('variable', var)
+            s.setAttribute('valeur', self.subs[var])
+            e.appendChild(s)
+
         return e

Modified: trunk/package/cifrado/message.py
==============================================================================
--- trunk/package/cifrado/message.py	(original)
+++ trunk/package/cifrado/message.py	Fri Apr 18 09:44:50 2008
@@ -8,6 +8,7 @@
 import  jeu     as JEU
 import  emission
 import  codeurs
+import  re
 
 def charger(el, jeu):
     titre = el.getAttribute('titre')
@@ -30,6 +31,7 @@
         self.titre      = titre
         self.date       = date
         self.message    = message
+        self.capture_vars = re.compile('(\$[A-Z_]{2,})')
 
         if emissions is None:
             self.emissions = {}
@@ -46,7 +48,12 @@
         jeu.forces.connect('row-changed', self.forces_row_changed, jeu)
         jeu.forces.connect('row-deleted', self.forces_row_deleted)
 
-        
+
+    def lister_variables(self):
+        variables = self.capture_vars.findall(self.message)
+        variables = {}.fromkeys(variables).keys()
+        variables.sort()
+        return variables
 
     def forces_row_changed(self, forces, path, iter, jeu):
         force = forces.get_value(iter, JEU.COL_FORCE)



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]