merged with lolitech
authorb.taylor@willowglen.ca
Wed, 02 Sep 2009 08:30:34 -0600
changeset 414 8d9e7edc0195
parent 413 127d524a5f1d (current diff)
parent 404 d5a5eaea7844 (diff)
child 416 897ba122460e
merged with lolitech
PLCOpenEditor.py
--- a/PLCOpenEditor.py	Thu Aug 20 09:03:31 2009 -0600
+++ b/PLCOpenEditor.py	Wed Sep 02 08:30:34 2009 -0600
@@ -283,6 +283,7 @@
             self.ShowErrorMessage(_("\"%s\" is used by one or more POUs. It can't be removed!")%name)
     return DeleteElementFunction
 
+
 #-------------------------------------------------------------------------------
 #                            PLCOpenEditor Main Class
 #-------------------------------------------------------------------------------
@@ -372,6 +373,8 @@
               kind=wx.ITEM_NORMAL, text=_(u'Undo\tCTRL+Z'))
         AppendMenu(parent, help='', id=wx.ID_REDO,
               kind=wx.ITEM_NORMAL, text=_(u'Redo\tCTRL+Y'))
+        AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO,
+              kind=wx.ITEM_CHECK, text=_(u'Enable Undo/Redo'))
         parent.AppendSeparator()
         AppendMenu(parent, help='', id=wx.ID_CUT,
               kind=wx.ITEM_NORMAL, text=_(u'Cut\tCTRL+X'))
@@ -543,7 +546,7 @@
                   pos=wx.Point(0, 0), size=wx.Size(0, 0),
                   style=wx.TR_HAS_BUTTONS|wx.TR_SINGLE|wx.SUNKEN_BORDER)
         
-        self.TabsImageList = wx.ImageList(16, 31)
+        self.TabsImageList = wx.ImageList(31, 16)
         self.TabsImageListIndexes = {}
         
         if self.Debug:
@@ -815,19 +818,21 @@
 
     def GetCopyBuffer(self):
         data = None
-        if wx.TheClipboard.Open():
+        if wx.TheClipboard.IsOpened() or wx.TheClipboard.Open():
             dataobj = wx.TextDataObject()
             if wx.TheClipboard.GetData(dataobj):
                 data = dataobj.GetText()
+        if wx.TheClipboard.IsOpened():
             wx.TheClipboard.Close()
         return data
         
     def SetCopyBuffer(self, text):
-        if wx.TheClipboard.Open():
+        if wx.TheClipboard.IsOpened() or wx.TheClipboard.Open():
             data = wx.TextDataObject()
             data.SetText(text)
             wx.TheClipboard.SetData(data)
             wx.TheClipboard.Flush()
+        if wx.TheClipboard.IsOpened():
             wx.TheClipboard.Close()
         self.RefreshEditMenu()
 
@@ -890,27 +895,30 @@
                 return index
         if icon2_name is None:
             # Bitmap with only one icon
-            tmp_bitmap = wx.Bitmap(os.path.join(CWD, 'Images', '%s.png'%icon1_name))
+            bitmap = wx.Bitmap(os.path.join(CWD, 'Images', '%s.png'%icon1_name))
         else:
             # Bitmap with two icon
             icon1 = wx.Bitmap(os.path.join(CWD, 'Images', '%s.png'%icon1_name))
             icon2 = wx.Bitmap(os.path.join(CWD, 'Images', '%s.png'%icon2_name))
+            
             # Calculate bitmap size
             width = icon1.GetWidth() + icon2.GetWidth() - 1
             height = max(icon1.GetHeight(), icon2.GetHeight())
             # Create bitmap with both icons
-            tmp_bitmap = wx.EmptyBitmap(width, height)
+            bitmap = wx.EmptyBitmap(width, height)
             dc = wx.MemoryDC()
-            dc.SelectObject(tmp_bitmap)
+            dc.SelectObject(bitmap)
             dc.Clear()
             dc.DrawBitmap(icon1, 0, 0)
             dc.DrawBitmap(icon2, icon1.GetWidth() - 1, 0)
-        # Store bitmap in ImageList
-        index = self.TabsImageList.Add(tmp_bitmap)
-        # Save bitmap index in ImageList in dictionary
-        self.TabsImageListIndexes[(icon1_name, icon2_name)] = index
+            dc.Destroy()
+            
+            # Store bitmap in ImageList
+            index = self.TabsImageList.Add(bitmap)
+            # Save bitmap index in ImageList in dictionary
+            self.TabsImageListIndexes[(icon1_name, icon2_name)] = index
         if USE_AUI:
-            return tmp_bitmap
+            return bitmap
         else:
             return index
     
--- a/Viewer.py	Thu Aug 20 09:03:31 2009 -0600
+++ b/Viewer.py	Wed Sep 02 08:30:34 2009 -0600
@@ -907,6 +907,8 @@
             if isinstance(element, SFC_Step):
                 if len(instance["inputs"]) > 0:
                     element.AddInput()
+                else:
+                    element.RemoveInput()
                 if len(instance["outputs"]) > 0:
                     element.AddOutput()
             if isinstance(element, SFC_Transition) and specific_values["condition_type"] == "connection":
--- a/generate_IEC_std.py	Thu Aug 20 09:03:31 2009 -0600
+++ b/generate_IEC_std.py	Wed Sep 02 08:30:34 2009 -0600
@@ -500,11 +500,11 @@
 
 # Now, print that out, or write to files from sys.argv
 for path, name, ext in [
-        ('stage4/generate_c','function_type_decl','h'),
-        ('stage4/generate_c','get_function_type_decl','c'),
+        ('absyntax_utils','function_type_decl','h'),
+        ('absyntax_utils','get_function_type_decl','c'),
         ('stage4/generate_c','st_code_gen','c'),
         ('stage4/generate_c','il_code_gen','c'),
-        ('stage4/generate_c','search_type_code','c'),
+        ('absyntax_utils','search_type_code','c'),
         ('stage1_2','standard_function_names','c'),
         ('lib', 'iec_std_lib_generated','h')
         ]:
--- a/graphics/GraphicCommons.py	Thu Aug 20 09:03:31 2009 -0600
+++ b/graphics/GraphicCommons.py	Wed Sep 02 08:30:34 2009 -0600
@@ -812,24 +812,25 @@
     
     # Draws the handles of this element if it is selected
     def Draw(self, dc):
-        if self.Highlighted:
-            self.DrawHighlightment(dc)
-        if self.Selected:
-            dc.SetPen(wx.BLACK_PEN)
-            dc.SetBrush(wx.BLACK_BRUSH)
-            dc.DrawRectangle(self.BoundingBox.x - HANDLE_SIZE - 2, self.BoundingBox.y - HANDLE_SIZE - 2, HANDLE_SIZE, HANDLE_SIZE)
-            dc.DrawRectangle(self.BoundingBox.x + (self.BoundingBox.width - HANDLE_SIZE) / 2,
-                self.BoundingBox.y - HANDLE_SIZE - 2, HANDLE_SIZE, HANDLE_SIZE)
-            dc.DrawRectangle(self.BoundingBox.x + self.BoundingBox.width + 2, 
-                self.BoundingBox.y - HANDLE_SIZE - 2, HANDLE_SIZE, HANDLE_SIZE)
-            dc.DrawRectangle(self.BoundingBox.x + self.BoundingBox.width + 2, 
-                self.BoundingBox.y + (self.BoundingBox.height - HANDLE_SIZE) / 2, HANDLE_SIZE, HANDLE_SIZE)
-            dc.DrawRectangle(self.BoundingBox.x + self.BoundingBox.width + 2, 
-                self.BoundingBox.y + self.BoundingBox.height + 2, HANDLE_SIZE, HANDLE_SIZE)
-            dc.DrawRectangle(self.BoundingBox.x + (self.BoundingBox.width - HANDLE_SIZE) / 2, 
-                self.BoundingBox.y + self.BoundingBox.height + 2, HANDLE_SIZE, HANDLE_SIZE)
-            dc.DrawRectangle(self.BoundingBox.x - HANDLE_SIZE - 2, self.BoundingBox.y + self.BoundingBox.height + 2, HANDLE_SIZE, HANDLE_SIZE)
-            dc.DrawRectangle(self.BoundingBox.x - HANDLE_SIZE - 2, self.BoundingBox.y + (self.BoundingBox.height - HANDLE_SIZE) / 2, HANDLE_SIZE, HANDLE_SIZE)
+        if not getattr(dc, "printing", False):
+            if self.Highlighted:
+                self.DrawHighlightment(dc)
+            if self.Selected:
+                dc.SetPen(wx.BLACK_PEN)
+                dc.SetBrush(wx.BLACK_BRUSH)
+                dc.DrawRectangle(self.BoundingBox.x - HANDLE_SIZE - 2, self.BoundingBox.y - HANDLE_SIZE - 2, HANDLE_SIZE, HANDLE_SIZE)
+                dc.DrawRectangle(self.BoundingBox.x + (self.BoundingBox.width - HANDLE_SIZE) / 2,
+                    self.BoundingBox.y - HANDLE_SIZE - 2, HANDLE_SIZE, HANDLE_SIZE)
+                dc.DrawRectangle(self.BoundingBox.x + self.BoundingBox.width + 2, 
+                    self.BoundingBox.y - HANDLE_SIZE - 2, HANDLE_SIZE, HANDLE_SIZE)
+                dc.DrawRectangle(self.BoundingBox.x + self.BoundingBox.width + 2, 
+                    self.BoundingBox.y + (self.BoundingBox.height - HANDLE_SIZE) / 2, HANDLE_SIZE, HANDLE_SIZE)
+                dc.DrawRectangle(self.BoundingBox.x + self.BoundingBox.width + 2, 
+                    self.BoundingBox.y + self.BoundingBox.height + 2, HANDLE_SIZE, HANDLE_SIZE)
+                dc.DrawRectangle(self.BoundingBox.x + (self.BoundingBox.width - HANDLE_SIZE) / 2, 
+                    self.BoundingBox.y + self.BoundingBox.height + 2, HANDLE_SIZE, HANDLE_SIZE)
+                dc.DrawRectangle(self.BoundingBox.x - HANDLE_SIZE - 2, self.BoundingBox.y + self.BoundingBox.height + 2, HANDLE_SIZE, HANDLE_SIZE)
+                dc.DrawRectangle(self.BoundingBox.x - HANDLE_SIZE - 2, self.BoundingBox.y + (self.BoundingBox.height - HANDLE_SIZE) / 2, HANDLE_SIZE, HANDLE_SIZE)
 
 
 #-------------------------------------------------------------------------------
@@ -1930,15 +1931,21 @@
             self.Segments = []
             i = 0
             while i < len(self.Points) - 1:
-                segment = vector(self.Points[i], self.Points[i + 1])
-                if is_null_vector(segment) and i > 0:
-                    segment = (self.Segments[-1][1], self.Segments[-1][0])
-                if i < len(self.Points) - 2:
-                    next = vector(self.Points[i + 1], self.Points[i + 2])
-                    if next == segment or is_null_vector(add_vectors(segment, next)):
-                        self.Points.insert(i + 1, wx.Point(self.Points[i + 1].x, self.Points[i + 1].y))
-                self.Segments.append(segment)
-                i += 1
+                if 0 < i < len(self.Points) - 2 and \
+                   self.Points[i] == self.Points[i + 1] and \
+                   self.Segments[-1] == vector(self.Points[i + 1], self.Points[i + 2]):
+                    for j in xrange(2):
+                        self.Points.pop(i)
+                else:
+                    segment = vector(self.Points[i], self.Points[i + 1])
+                    if is_null_vector(segment) and i > 0:
+                        segment = (self.Segments[-1][1], self.Segments[-1][0])
+                    if i < len(self.Points) - 2:
+                        next = vector(self.Points[i + 1], self.Points[i + 2])
+                        if next == segment or is_null_vector(add_vectors(segment, next)):
+                            self.Points.insert(i + 1, wx.Point(self.Points[i + 1].x, self.Points[i + 1].y))
+                    self.Segments.append(segment)
+                    i += 1
             self.RefreshBoundingBox()
             self.RefreshRealPoints()
     
@@ -2604,7 +2611,7 @@
         dc.DrawLines(self.Points)
         dc.DrawPoint(self.Points[-1].x, self.Points[-1].y)
         # Draw the segment selected in red
-        if self.SelectedSegment is not None:
+        if not getattr(dc, "printing", False) and self.SelectedSegment is not None:
             dc.SetPen(wx.RED_PEN)
             dc.DrawLine(self.Points[self.SelectedSegment].x, self.Points[self.SelectedSegment].y,
                         self.Points[self.SelectedSegment + 1].x, self.Points[self.SelectedSegment + 1].y)
--- a/i18n/PLCOpenEditor_fr_FR.po	Thu Aug 20 09:03:31 2009 -0600
+++ b/i18n/PLCOpenEditor_fr_FR.po	Wed Sep 02 08:30:34 2009 -0600
@@ -7,15 +7,15 @@
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-07-24 16:55+0200\n"
-"PO-Revision-Date: 2009-07-24 17:02+0100\n"
+"POT-Creation-Date: 2009-08-26 19:19+0200\n"
+"PO-Revision-Date: 2009-08-26 19:25+0100\n"
 "Last-Translator: \n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: ../PLCOpenEditor.py:5044
+#: ../PLCOpenEditor.py:5046
 msgid ""
 "\n"
 "An error happens.\n"
@@ -41,41 +41,41 @@
 "\n"
 "Erreur:\n"
 
-#: ../PLCOpenEditor.py:3860
+#: ../PLCOpenEditor.py:3862
 msgid "   External"
 msgstr "  Externe"
 
-#: ../PLCOpenEditor.py:3859
+#: ../PLCOpenEditor.py:3861
 msgid "   InOut"
 msgstr "  Entrée-Sortie"
 
-#: ../PLCOpenEditor.py:3859
+#: ../PLCOpenEditor.py:3861
 msgid "   Input"
 msgstr "  Entrée"
 
-#: ../PLCOpenEditor.py:3860
+#: ../PLCOpenEditor.py:3862
 msgid "   Local"
 msgstr "  Locale"
 
-#: ../PLCOpenEditor.py:3859
+#: ../PLCOpenEditor.py:3861
 msgid "   Output"
 msgstr "  Sortie"
 
-#: ../PLCOpenEditor.py:3861
+#: ../PLCOpenEditor.py:3863
 msgid "   Temp"
 msgstr "  Temporaire"
 
-#: ../PLCOpenEditor.py:840
+#: ../PLCOpenEditor.py:842
 msgid " (Debug)"
 msgstr " (Debug)"
 
-#: ../PLCOpenEditor.py:5056
+#: ../PLCOpenEditor.py:5058
 msgid " : "
 msgstr " : "
 
-#: ../PLCOpenEditor.py:3283
-#: ../PLCOpenEditor.py:3446
-#: ../PLCOpenEditor.py:3590
+#: ../PLCOpenEditor.py:3285
+#: ../PLCOpenEditor.py:3448
+#: ../PLCOpenEditor.py:3592
 #: ../Dialogs.py:1800
 #, python-format
 msgid " and %s"
@@ -101,8 +101,8 @@
 msgid "\"%s\" can't use itself!"
 msgstr "\"%s\" ne peut pas s'utiliser lui-même !"
 
-#: ../PLCOpenEditor.py:1617
-#: ../PLCOpenEditor.py:1637
+#: ../PLCOpenEditor.py:1619
+#: ../PLCOpenEditor.py:1639
 #, python-format
 msgid "\"%s\" config already exists!"
 msgstr "La configuration \"%s\" existe déjà !"
@@ -112,8 +112,8 @@
 msgid "\"%s\" configuration already exists !!!"
 msgstr "La configuration \"%s\" existe déjà !!!"
 
-#: ../PLCOpenEditor.py:1571
-#: ../PLCOpenEditor.py:3145
+#: ../PLCOpenEditor.py:1573
+#: ../PLCOpenEditor.py:3147
 #, python-format
 msgid "\"%s\" data type already exists!"
 msgstr "Le type de données \"%s\" existe déjà !"
@@ -123,8 +123,8 @@
 msgid "\"%s\" element can't be paste here!!!"
 msgstr "L'élément \"%s\" ne peut être collé ici !!!"
 
-#: ../PLCOpenEditor.py:3465
-#: ../PLCOpenEditor.py:3609
+#: ../PLCOpenEditor.py:3467
+#: ../PLCOpenEditor.py:3611
 #: ../Viewer.py:248
 #: ../Dialogs.py:261
 #: ../Dialogs.py:898
@@ -137,14 +137,14 @@
 msgid "\"%s\" function cancelled in \"%s\" POU: No input connected"
 msgstr "L'appel à la fonction \"%s\" dans le POU \"%s\" a été abandonné : aucune entrée connectée"
 
-#: ../PLCOpenEditor.py:1562
-#: ../PLCOpenEditor.py:3141
-#: ../PLCOpenEditor.py:3294
-#: ../PLCOpenEditor.py:3457
-#: ../PLCOpenEditor.py:3601
-#: ../PLCOpenEditor.py:3672
-#: ../PLCOpenEditor.py:3735
-#: ../PLCOpenEditor.py:4449
+#: ../PLCOpenEditor.py:1564
+#: ../PLCOpenEditor.py:3143
+#: ../PLCOpenEditor.py:3296
+#: ../PLCOpenEditor.py:3459
+#: ../PLCOpenEditor.py:3603
+#: ../PLCOpenEditor.py:3674
+#: ../PLCOpenEditor.py:3737
+#: ../PLCOpenEditor.py:4451
 #: ../Dialogs.py:253
 #: ../Dialogs.py:652
 #: ../Dialogs.py:890
@@ -167,20 +167,20 @@
 msgid "\"%s\" is an invalid value!"
 msgstr "\"%s\" n'est pas une valeur valide !"
 
-#: ../PLCOpenEditor.py:1097
-#: ../PLCOpenEditor.py:1126
+#: ../PLCOpenEditor.py:1099
+#: ../PLCOpenEditor.py:1128
 #, python-format
 msgid "\"%s\" is not a valid folder!"
 msgstr "\"%s\" n'est pas un répertoire valide !"
 
-#: ../PLCOpenEditor.py:1560
-#: ../PLCOpenEditor.py:3137
-#: ../PLCOpenEditor.py:3290
-#: ../PLCOpenEditor.py:3453
-#: ../PLCOpenEditor.py:3597
-#: ../PLCOpenEditor.py:3668
-#: ../PLCOpenEditor.py:3731
-#: ../PLCOpenEditor.py:4444
+#: ../PLCOpenEditor.py:1562
+#: ../PLCOpenEditor.py:3139
+#: ../PLCOpenEditor.py:3292
+#: ../PLCOpenEditor.py:3455
+#: ../PLCOpenEditor.py:3599
+#: ../PLCOpenEditor.py:3670
+#: ../PLCOpenEditor.py:3733
+#: ../PLCOpenEditor.py:4446
 #: ../Dialogs.py:249
 #: ../Dialogs.py:886
 #: ../Dialogs.py:1529
@@ -192,14 +192,14 @@
 msgstr "\"%s\" n'est pas un identifiant valide !"
 
 #: ../PLCOpenEditor.py:283
-#: ../PLCOpenEditor.py:2491
-#: ../PLCOpenEditor.py:2520
+#: ../PLCOpenEditor.py:2493
+#: ../PLCOpenEditor.py:2522
 #, python-format
 msgid "\"%s\" is used by one or more POUs. It can't be removed!"
 msgstr "Le POU \"%s\" est utilisé par un ou plusieurs POUs. Il ne peut être supprimé !"
 
-#: ../PLCOpenEditor.py:1580
-#: ../PLCOpenEditor.py:3298
+#: ../PLCOpenEditor.py:1582
+#: ../PLCOpenEditor.py:3300
 #: ../Viewer.py:246
 #: ../Dialogs.py:257
 #: ../Dialogs.py:894
@@ -262,21 +262,21 @@
 msgid "%s body don't have text!"
 msgstr "Le code d'un %s n'a pas de texte !"
 
-#: ../PLCOpenEditor.py:5032
 #: ../PLCOpenEditor.py:5034
-#: ../PLCOpenEditor.py:5035
+#: ../PLCOpenEditor.py:5036
+#: ../PLCOpenEditor.py:5037
 msgid ",   "
 msgstr ",   "
 
-#: ../PLCOpenEditor.py:3285
-#: ../PLCOpenEditor.py:3448
-#: ../PLCOpenEditor.py:3592
+#: ../PLCOpenEditor.py:3287
+#: ../PLCOpenEditor.py:3450
+#: ../PLCOpenEditor.py:3594
 #: ../Dialogs.py:1802
 #, python-format
 msgid ", %s"
 msgstr ", %s"
 
-#: ../PLCOpenEditor.py:5030
+#: ../PLCOpenEditor.py:5032
 msgid ". "
 msgstr ". "
 
@@ -285,29 +285,29 @@
 msgid "A element with \"%s\" as name exists in this structure!"
 msgstr "Un élément nommé \"%s\" existe déjà dans la structure !"
 
-#: ../PLCOpenEditor.py:1583
-#: ../PLCOpenEditor.py:1625
-#: ../PLCOpenEditor.py:1645
-#: ../PLCOpenEditor.py:3302
-#: ../PLCOpenEditor.py:3680
-#: ../PLCOpenEditor.py:3743
+#: ../PLCOpenEditor.py:1585
+#: ../PLCOpenEditor.py:1627
+#: ../PLCOpenEditor.py:1647
+#: ../PLCOpenEditor.py:3304
+#: ../PLCOpenEditor.py:3682
+#: ../PLCOpenEditor.py:3745
 #, python-format
 msgid "A pou has an element with \"%s\" as name. It can generate a conflict. Do you wish to continue?"
 msgstr "Un POU a un élément nommé \"%s\". Cela peut générer des conflits. Voulez-vous continuer ?"
 
-#: ../PLCOpenEditor.py:1620
-#: ../PLCOpenEditor.py:1640
+#: ../PLCOpenEditor.py:1622
+#: ../PLCOpenEditor.py:1642
 #, python-format
 msgid "A pou is defined with \"%s\" as name. It can generate a conflict. Do you wish to continue?"
 msgstr "Un POU a pour nom \"%s\". Cela peut générer des conflits. Voulez-vous continuer ?"
 
-#: ../PLCOpenEditor.py:1596
-#: ../PLCOpenEditor.py:1607
-#: ../PLCOpenEditor.py:3461
-#: ../PLCOpenEditor.py:3605
-#: ../PLCOpenEditor.py:3676
-#: ../PLCOpenEditor.py:3739
-#: ../PLCOpenEditor.py:4454
+#: ../PLCOpenEditor.py:1598
+#: ../PLCOpenEditor.py:1609
+#: ../PLCOpenEditor.py:3463
+#: ../PLCOpenEditor.py:3607
+#: ../PLCOpenEditor.py:3678
+#: ../PLCOpenEditor.py:3741
+#: ../PLCOpenEditor.py:4456
 #: ../Dialogs.py:1537
 #: ../Dialogs.py:2520
 #: ../Dialogs.py:2587
@@ -315,20 +315,20 @@
 msgid "A pou with \"%s\" as name exists!"
 msgstr "Un POU nommé \"%s\" existe déjà !"
 
-#: ../PLCOpenEditor.py:1598
-#: ../PLCOpenEditor.py:1609
-#: ../PLCOpenEditor.py:4459
+#: ../PLCOpenEditor.py:1600
+#: ../PLCOpenEditor.py:1611
+#: ../PLCOpenEditor.py:4461
 #: ../Dialogs.py:1541
 #: ../Dialogs.py:2524
 #, python-format
 msgid "A variable with \"%s\" as name already exists in this pou!"
 msgstr "Une variable nommée \"%s\" existe déjà dans ce POU !"
 
-#: ../PLCOpenEditor.py:445
+#: ../PLCOpenEditor.py:447
 msgid "About"
 msgstr "A propos"
 
-#: ../PLCOpenEditor.py:2614
+#: ../PLCOpenEditor.py:2616
 msgid "About PLCOpenEditor"
 msgstr "A propos de PLCOpenEditor"
 
@@ -341,11 +341,11 @@
 msgid "Action"
 msgstr "Action"
 
-#: ../PLCOpenEditor.py:3581
+#: ../PLCOpenEditor.py:3583
 msgid "Action Name"
 msgstr "Nom de l'action"
 
-#: ../PLCOpenEditor.py:3548
+#: ../PLCOpenEditor.py:3550
 msgid "Action Name:"
 msgstr "Nom de l'action :"
 
@@ -362,22 +362,22 @@
 msgid "Actions:"
 msgstr "Actions :"
 
-#: ../PLCOpenEditor.py:4244
+#: ../PLCOpenEditor.py:4246
 #: ../Dialogs.py:2346
 #: ../DataTypeEditor.py:539
 msgid "Add"
 msgstr "Ajouter"
 
-#: ../PLCOpenEditor.py:1800
-#: ../PLCOpenEditor.py:1873
+#: ../PLCOpenEditor.py:1802
+#: ../PLCOpenEditor.py:1875
 msgid "Add Action"
 msgstr "Ajouter une action"
 
-#: ../PLCOpenEditor.py:1856
+#: ../PLCOpenEditor.py:1858
 msgid "Add Configuration"
 msgstr "Ajouter une configuration"
 
-#: ../PLCOpenEditor.py:1844
+#: ../PLCOpenEditor.py:1846
 msgid "Add DataType"
 msgstr "Ajouter un type de donnée"
 
@@ -385,7 +385,7 @@
 msgid "Add Divergence Branch"
 msgstr "Ajouter une branche à la divergence"
 
-#: ../PLCOpenEditor.py:384
+#: ../PLCOpenEditor.py:386
 msgid "Add Element"
 msgstr "Ajouter un élément"
 
@@ -393,12 +393,12 @@
 msgid "Add Instance"
 msgstr "Ajouter une instance"
 
-#: ../PLCOpenEditor.py:1850
+#: ../PLCOpenEditor.py:1852
 msgid "Add Pou"
 msgstr "Ajouter un POU"
 
-#: ../PLCOpenEditor.py:1827
-#: ../PLCOpenEditor.py:1884
+#: ../PLCOpenEditor.py:1829
+#: ../PLCOpenEditor.py:1886
 msgid "Add Resource"
 msgstr "Ajouter une resource"
 
@@ -406,8 +406,8 @@
 msgid "Add Task"
 msgstr "Ajouter une tâche"
 
-#: ../PLCOpenEditor.py:1797
-#: ../PLCOpenEditor.py:1862
+#: ../PLCOpenEditor.py:1799
+#: ../PLCOpenEditor.py:1864
 msgid "Add Transition"
 msgstr "Ajouter une transition"
 
@@ -415,7 +415,7 @@
 msgid "Add Wire Segment"
 msgstr "Ajouter un segment au fil"
 
-#: ../PLCOpenEditor.py:2359
+#: ../PLCOpenEditor.py:2361
 msgid "Add a new data type"
 msgstr "Ajouter un nouveau type de données"
 
@@ -432,11 +432,11 @@
 msgid "Add a new step"
 msgstr "Ajouter une nouvelle étape"
 
-#: ../PLCOpenEditor.py:2416
+#: ../PLCOpenEditor.py:2418
 msgid "Add new configuration"
 msgstr "Ajouter une nouvelle configuration"
 
-#: ../PLCOpenEditor.py:2431
+#: ../PLCOpenEditor.py:2433
 msgid "Add new resource"
 msgstr "Ajouter une nouvelle resource"
 
@@ -452,7 +452,7 @@
 msgid "Alignment"
 msgstr "Alignement"
 
-#: ../PLCOpenEditor.py:3858
+#: ../PLCOpenEditor.py:3860
 msgid "All"
 msgstr "Toutes"
 
@@ -484,11 +484,11 @@
 msgid "At least a variable or an expression must be selected!"
 msgstr "Au moins une variable ou une expression doit être sélectionné !"
 
-#: ../PLCOpenEditor.py:2941
+#: ../PLCOpenEditor.py:2943
 msgid "Author"
 msgstr "Auteur"
 
-#: ../PLCOpenEditor.py:2926
+#: ../PLCOpenEditor.py:2928
 msgid "Author Name (optional):"
 msgstr "Nom de l'auteur (optionel) :"
 
@@ -498,7 +498,7 @@
 msgid "Base Type:"
 msgstr "Type de base :"
 
-#: ../PLCOpenEditor.py:4491
+#: ../PLCOpenEditor.py:4493
 #: ../DataTypeEditor.py:798
 msgid "Base Types"
 msgstr "Types de base"
@@ -535,7 +535,7 @@
 msgid "Block Properties"
 msgstr "Propriétés du bloc"
 
-#: ../PLCOpenEditor.py:2077
+#: ../PLCOpenEditor.py:2079
 #: ../Dialogs.py:269
 msgid "Block Types"
 msgstr "Types de blocs"
@@ -544,11 +544,11 @@
 msgid "Bottom"
 msgstr "Bas"
 
-#: ../PLCOpenEditor.py:2031
+#: ../PLCOpenEditor.py:2033
 msgid "CSV Log"
 msgstr "Log CVS"
 
-#: ../PLCOpenEditor.py:4072
+#: ../PLCOpenEditor.py:4074
 msgid "Can affect a location only to local or global variables"
 msgstr "Une adresse ne peut être affecté qu'à des variables locales ou globales"
 
@@ -559,16 +559,16 @@
 msgid "Can only generate execution order on FBD networks!"
 msgstr "L'ordre d'exécution ne peut être généré que dans les FBD !"
 
-#: ../PLCOpenEditor.py:4070
+#: ../PLCOpenEditor.py:4072
 msgid "Can't affect a location to a function block instance"
 msgstr "Une adresse ne peut être affectée une instance de Function Block"
 
-#: ../PLCOpenEditor.py:1092
+#: ../PLCOpenEditor.py:1094
 #, python-format
 msgid "Can't generate program to file %s!"
 msgstr "Le programme n'a pu être généré dans le fichier \"%s\" !"
 
-#: ../PLCOpenEditor.py:1124
+#: ../PLCOpenEditor.py:1126
 #, python-format
 msgid "Can't save project to file %s!"
 msgstr "Le projet n'a pu être sauvé dans le fichier \"%s\" !"
@@ -577,7 +577,7 @@
 msgid "Center"
 msgstr "Centre"
 
-#: ../PLCOpenEditor.py:1816
+#: ../PLCOpenEditor.py:1818
 msgid "Change POU Type To"
 msgstr "Changer le type du POU pour"
 
@@ -585,18 +585,18 @@
 msgid "Character string"
 msgstr "Chaîne de caractères"
 
-#: ../PLCOpenEditor.py:1031
-#: ../PLCOpenEditor.py:1082
-#: ../PLCOpenEditor.py:1118
+#: ../PLCOpenEditor.py:1033
+#: ../PLCOpenEditor.py:1084
+#: ../PLCOpenEditor.py:1120
 msgid "Choose a file"
 msgstr "Choisissez un fichier"
 
-#: ../PLCOpenEditor.py:3848
-#: ../PLCOpenEditor.py:3849
+#: ../PLCOpenEditor.py:3850
+#: ../PLCOpenEditor.py:3851
 msgid "Class"
 msgstr "Classe"
 
-#: ../PLCOpenEditor.py:4236
+#: ../PLCOpenEditor.py:4238
 msgid "Class Filter:"
 msgstr "Filtre de classe :"
 
@@ -604,7 +604,7 @@
 msgid "Class:"
 msgstr "Classe :"
 
-#: ../PLCOpenEditor.py:423
+#: ../PLCOpenEditor.py:425
 msgid "Clear Errors\tCTRL+K"
 msgstr "Effacer les erreurs\tCTRL+K"
 
@@ -616,7 +616,7 @@
 msgid "Close\tCTRL+Q"
 msgstr "Fermer\tCTRL+Q"
 
-#: ../PLCOpenEditor.py:961
+#: ../PLCOpenEditor.py:963
 msgid "Close Application"
 msgstr "Fermer l'application"
 
@@ -632,11 +632,11 @@
 msgid "Comment"
 msgstr "Commentaire"
 
-#: ../PLCOpenEditor.py:2910
+#: ../PLCOpenEditor.py:2912
 msgid "Company Name (required):"
 msgstr "Nom de l'entreprise (obligatoire) :"
 
-#: ../PLCOpenEditor.py:2918
+#: ../PLCOpenEditor.py:2920
 msgid "Company URL (optional):"
 msgstr "URL de l'entreprise (optionel) :"
 
@@ -648,7 +648,7 @@
 msgid "Concatenation"
 msgstr "Concaténation"
 
-#: ../PLCOpenEditor.py:394
+#: ../PLCOpenEditor.py:396
 msgid "Configuration"
 msgstr "Configuration"
 
@@ -672,12 +672,12 @@
 msgid "Connectors:"
 msgstr "Connecteurs :"
 
-#: ../PLCOpenEditor.py:3848
-#: ../PLCOpenEditor.py:3849
+#: ../PLCOpenEditor.py:3850
+#: ../PLCOpenEditor.py:3851
 msgid "Constant"
 msgstr "Constante"
 
-#: ../PLCOpenEditor.py:3000
+#: ../PLCOpenEditor.py:3002
 msgid "Content Description (optional):"
 msgstr "Description du contenu (optionel) :"
 
@@ -701,7 +701,7 @@
 msgid "Conversion to time-of-day"
 msgstr "Conversion en heure de la journée"
 
-#: ../PLCOpenEditor.py:379
+#: ../PLCOpenEditor.py:381
 msgid "Copy\tCTRL+C"
 msgstr "Copier\tCtrl+C"
 
@@ -709,16 +709,16 @@
 msgid "Cosine"
 msgstr "Cosinus"
 
-#: ../PLCOpenEditor.py:3223
+#: ../PLCOpenEditor.py:3225
 msgid "Create a new POU"
 msgstr "Créer un nouveau POU"
 
-#: ../PLCOpenEditor.py:1804
-#: ../PLCOpenEditor.py:2461
+#: ../PLCOpenEditor.py:1806
+#: ../PLCOpenEditor.py:2463
 msgid "Create a new POU from"
 msgstr "Créer un nouveau POU à partir de"
 
-#: ../PLCOpenEditor.py:3544
+#: ../PLCOpenEditor.py:3546
 msgid "Create a new action"
 msgstr "Créer une nouvelle action"
 
@@ -787,7 +787,7 @@
 msgstr "Créer une nouvelle étape"
 
 #: ../PLCOpenEditor.py:211
-#: ../PLCOpenEditor.py:3400
+#: ../PLCOpenEditor.py:3402
 msgid "Create a new transition"
 msgstr "Créer une nouvelle transition"
 
@@ -797,11 +797,11 @@
 msgid "Create a new variable"
 msgstr "Créer une nouvelle variable"
 
-#: ../PLCOpenEditor.py:377
+#: ../PLCOpenEditor.py:379
 msgid "Cut\tCTRL+X"
 msgstr "Couper\tCTRL+X"
 
-#: ../PLCOpenEditor.py:386
+#: ../PLCOpenEditor.py:388
 msgid "Data Type"
 msgstr "Type de donnée"
 
@@ -826,12 +826,12 @@
 msgid "Date subtraction"
 msgstr "Soustraction de date"
 
-#: ../PLCOpenEditor.py:398
-#: ../PLCOpenEditor.py:1821
-#: ../PLCOpenEditor.py:1830
-#: ../PLCOpenEditor.py:1836
-#: ../PLCOpenEditor.py:4249
-#: ../PLCOpenEditor.py:4862
+#: ../PLCOpenEditor.py:400
+#: ../PLCOpenEditor.py:1823
+#: ../PLCOpenEditor.py:1832
+#: ../PLCOpenEditor.py:1838
+#: ../PLCOpenEditor.py:4251
+#: ../PLCOpenEditor.py:4864
 #: ../Viewer.py:416
 #: ../Dialogs.py:2351
 #: ../DataTypeEditor.py:544
@@ -891,7 +891,7 @@
 msgid "Division"
 msgstr "Division"
 
-#: ../PLCOpenEditor.py:1086
+#: ../PLCOpenEditor.py:1088
 msgid "Done"
 msgstr "Terminé"
 
@@ -959,6 +959,10 @@
 msgid "Elements :"
 msgstr "Eléments :"
 
+#: ../PLCOpenEditor.py:376
+msgid "Enable Undo/Redo"
+msgstr "Activer Défaire/Refaire"
+
 #: ../DataTypeEditor.py:236
 msgid "Enumerated"
 msgstr "Enumération"
@@ -967,51 +971,51 @@
 msgid "Equal to"
 msgstr "Egal à"
 
-#: ../PLCOpenEditor.py:953
-#: ../PLCOpenEditor.py:1093
-#: ../PLCOpenEditor.py:1098
-#: ../PLCOpenEditor.py:1583
-#: ../PLCOpenEditor.py:1620
-#: ../PLCOpenEditor.py:1625
-#: ../PLCOpenEditor.py:1640
-#: ../PLCOpenEditor.py:1645
-#: ../PLCOpenEditor.py:2491
-#: ../PLCOpenEditor.py:2520
-#: ../PLCOpenEditor.py:3041
-#: ../PLCOpenEditor.py:3133
-#: ../PLCOpenEditor.py:3137
-#: ../PLCOpenEditor.py:3141
-#: ../PLCOpenEditor.py:3145
-#: ../PLCOpenEditor.py:3286
-#: ../PLCOpenEditor.py:3290
-#: ../PLCOpenEditor.py:3294
-#: ../PLCOpenEditor.py:3298
-#: ../PLCOpenEditor.py:3449
-#: ../PLCOpenEditor.py:3453
-#: ../PLCOpenEditor.py:3457
-#: ../PLCOpenEditor.py:3461
-#: ../PLCOpenEditor.py:3465
-#: ../PLCOpenEditor.py:3593
-#: ../PLCOpenEditor.py:3597
-#: ../PLCOpenEditor.py:3601
-#: ../PLCOpenEditor.py:3605
-#: ../PLCOpenEditor.py:3609
-#: ../PLCOpenEditor.py:3664
-#: ../PLCOpenEditor.py:3668
-#: ../PLCOpenEditor.py:3672
-#: ../PLCOpenEditor.py:3676
-#: ../PLCOpenEditor.py:3727
-#: ../PLCOpenEditor.py:3731
-#: ../PLCOpenEditor.py:3735
-#: ../PLCOpenEditor.py:3739
-#: ../PLCOpenEditor.py:4119
-#: ../PLCOpenEditor.py:4444
-#: ../PLCOpenEditor.py:4449
-#: ../PLCOpenEditor.py:4454
-#: ../PLCOpenEditor.py:4459
-#: ../PLCOpenEditor.py:4795
-#: ../PLCOpenEditor.py:5057
-#: ../PLCOpenEditor.py:5067
+#: ../PLCOpenEditor.py:955
+#: ../PLCOpenEditor.py:1095
+#: ../PLCOpenEditor.py:1100
+#: ../PLCOpenEditor.py:1585
+#: ../PLCOpenEditor.py:1622
+#: ../PLCOpenEditor.py:1627
+#: ../PLCOpenEditor.py:1642
+#: ../PLCOpenEditor.py:1647
+#: ../PLCOpenEditor.py:2493
+#: ../PLCOpenEditor.py:2522
+#: ../PLCOpenEditor.py:3043
+#: ../PLCOpenEditor.py:3135
+#: ../PLCOpenEditor.py:3139
+#: ../PLCOpenEditor.py:3143
+#: ../PLCOpenEditor.py:3147
+#: ../PLCOpenEditor.py:3288
+#: ../PLCOpenEditor.py:3292
+#: ../PLCOpenEditor.py:3296
+#: ../PLCOpenEditor.py:3300
+#: ../PLCOpenEditor.py:3451
+#: ../PLCOpenEditor.py:3455
+#: ../PLCOpenEditor.py:3459
+#: ../PLCOpenEditor.py:3463
+#: ../PLCOpenEditor.py:3467
+#: ../PLCOpenEditor.py:3595
+#: ../PLCOpenEditor.py:3599
+#: ../PLCOpenEditor.py:3603
+#: ../PLCOpenEditor.py:3607
+#: ../PLCOpenEditor.py:3611
+#: ../PLCOpenEditor.py:3666
+#: ../PLCOpenEditor.py:3670
+#: ../PLCOpenEditor.py:3674
+#: ../PLCOpenEditor.py:3678
+#: ../PLCOpenEditor.py:3729
+#: ../PLCOpenEditor.py:3733
+#: ../PLCOpenEditor.py:3737
+#: ../PLCOpenEditor.py:3741
+#: ../PLCOpenEditor.py:4121
+#: ../PLCOpenEditor.py:4446
+#: ../PLCOpenEditor.py:4451
+#: ../PLCOpenEditor.py:4456
+#: ../PLCOpenEditor.py:4461
+#: ../PLCOpenEditor.py:4797
+#: ../PLCOpenEditor.py:5059
+#: ../PLCOpenEditor.py:5069
 #: ../Viewer.py:335
 #: ../TextViewer.py:224
 #: ../LDViewer.py:628
@@ -1078,15 +1082,15 @@
 msgid "Expression:"
 msgstr "Expression :"
 
-#: ../PLCOpenEditor.py:3860
+#: ../PLCOpenEditor.py:3862
 msgid "External"
 msgstr "Externe"
 
-#: ../PLCOpenEditor.py:2978
-#: ../PLCOpenEditor.py:3168
-#: ../PLCOpenEditor.py:3178
-#: ../PLCOpenEditor.py:3357
-#: ../PLCOpenEditor.py:3501
+#: ../PLCOpenEditor.py:2980
+#: ../PLCOpenEditor.py:3170
+#: ../PLCOpenEditor.py:3180
+#: ../PLCOpenEditor.py:3359
+#: ../PLCOpenEditor.py:3503
 msgid "FBD"
 msgstr "FBD"
 
@@ -1111,10 +1115,10 @@
 msgid "Find position"
 msgstr "Trouver la position"
 
-#: ../PLCOpenEditor.py:3041
-#: ../PLCOpenEditor.py:3286
-#: ../PLCOpenEditor.py:3449
-#: ../PLCOpenEditor.py:3593
+#: ../PLCOpenEditor.py:3043
+#: ../PLCOpenEditor.py:3288
+#: ../PLCOpenEditor.py:3451
+#: ../PLCOpenEditor.py:3595
 #: ../Dialogs.py:1803
 #, python-format
 msgid "Form isn't complete. %s must be filled!"
@@ -1129,16 +1133,16 @@
 msgid "Form isn't complete. Valid block type must be selected!"
 msgstr "Le formulaire est incomplet. Un type de bloc valide doit être sélectionné !"
 
-#: ../PLCOpenEditor.py:388
+#: ../PLCOpenEditor.py:390
 msgid "Function"
 msgstr "Fonction"
 
-#: ../PLCOpenEditor.py:390
-#: ../PLCOpenEditor.py:1811
+#: ../PLCOpenEditor.py:392
+#: ../PLCOpenEditor.py:1813
 msgid "Function Block"
 msgstr "Bloc fonctionnel"
 
-#: ../PLCOpenEditor.py:4506
+#: ../PLCOpenEditor.py:4508
 msgid "Function Block Types"
 msgstr "Types de blocs fonctionnels"
 
@@ -1167,15 +1171,15 @@
 msgid "Generate Program\tCTRL+G"
 msgstr "Générer le program\tCTRL+G"
 
-#: ../PLCOpenEditor.py:3861
+#: ../PLCOpenEditor.py:3863
 msgid "Global"
 msgstr "Globale"
 
-#: ../PLCOpenEditor.py:2028
+#: ../PLCOpenEditor.py:2030
 msgid "Graphic Panel"
 msgstr "Graphique"
 
-#: ../PLCOpenEditor.py:2983
+#: ../PLCOpenEditor.py:2985
 msgid "Graphics"
 msgstr "Graphiques"
 
@@ -1187,7 +1191,7 @@
 msgid "Greater than or equal to"
 msgstr "Supérieur ou égal à"
 
-#: ../PLCOpenEditor.py:2962
+#: ../PLCOpenEditor.py:2964
 msgid "Height:"
 msgstr "Hauteur :"
 
@@ -1201,29 +1205,29 @@
 "The hysteresis function block provides a hysteresis boolean output driven by the difference of two floating point (REAL) inputs XIN1 and XIN2."
 msgstr ""
 
-#: ../PLCOpenEditor.py:3168
-#: ../PLCOpenEditor.py:3178
-#: ../PLCOpenEditor.py:3357
-#: ../PLCOpenEditor.py:3501
+#: ../PLCOpenEditor.py:3170
+#: ../PLCOpenEditor.py:3180
+#: ../PLCOpenEditor.py:3359
+#: ../PLCOpenEditor.py:3503
 msgid "IL"
 msgstr "IL"
 
-#: ../PLCOpenEditor.py:3859
+#: ../PLCOpenEditor.py:3861
 #: ../Dialogs.py:426
 msgid "InOut"
 msgstr "Entrée-Sortie"
 
-#: ../PLCOpenEditor.py:4089
+#: ../PLCOpenEditor.py:4091
 #, python-format
 msgid "Incompatible data types between \"%s\" and \"%s\""
 msgstr "Types de donnée imcompatible entre \"%s\" et \"%s\""
 
-#: ../PLCOpenEditor.py:4100
+#: ../PLCOpenEditor.py:4102
 #, python-format
 msgid "Incompatible size of data between \"%s\" and \"%s\""
 msgstr "Taille de donnée incompatible entre \"%s\" et \"%s\""
 
-#: ../PLCOpenEditor.py:4096
+#: ../PLCOpenEditor.py:4098
 #, python-format
 msgid "Incompatible size of data between \"%s\" and \"BOOL\""
 msgstr "Taille de donnée incompatible entre \"%s\" et \"BOOL\""
@@ -1232,8 +1236,8 @@
 msgid "Indicator"
 msgstr "Indicateur"
 
-#: ../PLCOpenEditor.py:3848
-#: ../PLCOpenEditor.py:3849
+#: ../PLCOpenEditor.py:3850
+#: ../PLCOpenEditor.py:3851
 #: ../DataTypeEditor.py:46
 msgid "Initial Value"
 msgstr "Valeur initiale"
@@ -1251,7 +1255,7 @@
 msgid "Inline"
 msgstr "Inline"
 
-#: ../PLCOpenEditor.py:3859
+#: ../PLCOpenEditor.py:3861
 #: ../Dialogs.py:425
 #: ../Dialogs.py:1472
 msgid "Input"
@@ -1270,8 +1274,8 @@
 msgid "Instance with id %d doesn't exists!"
 msgstr "L'instance dont l'id est %d n'existe pas !"
 
-#: ../PLCOpenEditor.py:559
-#: ../PLCOpenEditor.py:597
+#: ../PLCOpenEditor.py:561
+#: ../PLCOpenEditor.py:599
 msgid "Instances"
 msgstr "Instances"
 
@@ -1287,7 +1291,7 @@
 "Intégrale\n"
 "Le bloc fonctionnel INTEGRAL intègre les valeurs de l'entrée XIN en fonction du temps."
 
-#: ../PLCOpenEditor.py:3858
+#: ../PLCOpenEditor.py:3860
 msgid "Interface"
 msgstr "Interface"
 
@@ -1300,14 +1304,14 @@
 msgid "Invalid plcopen element(s)!!!"
 msgstr "Les éléments plcopen ne sont pas valides !!! "
 
-#: ../PLCOpenEditor.py:4784
-#: ../PLCOpenEditor.py:4787
+#: ../PLCOpenEditor.py:4786
+#: ../PLCOpenEditor.py:4789
 #, python-format
 msgid "Invalid value \"%s\" for debug variable"
 msgstr "Chemin de variable à déboguer \"%s\" invalide"
 
-#: ../PLCOpenEditor.py:4077
-#: ../PLCOpenEditor.py:4080
+#: ../PLCOpenEditor.py:4079
+#: ../PLCOpenEditor.py:4082
 #, python-format
 msgid "Invalid value \"%s\" for location"
 msgstr "Adresse \"%s\" invalide "
@@ -1318,11 +1322,11 @@
 msgid "Invalid value \"%s\" for viewer block"
 msgstr "Valeur \"%s\" invalide pour un élément graphique"
 
-#: ../PLCOpenEditor.py:2978
-#: ../PLCOpenEditor.py:3168
-#: ../PLCOpenEditor.py:3178
-#: ../PLCOpenEditor.py:3357
-#: ../PLCOpenEditor.py:3501
+#: ../PLCOpenEditor.py:2980
+#: ../PLCOpenEditor.py:3170
+#: ../PLCOpenEditor.py:3180
+#: ../PLCOpenEditor.py:3359
+#: ../PLCOpenEditor.py:3503
 msgid "LD"
 msgstr "LD"
 
@@ -1332,19 +1336,19 @@
 msgid "Ladder element with id %d is on more than one rung."
 msgstr "L'élément de LD dont l'id est %d apparait dans plusieurs échelons. "
 
-#: ../PLCOpenEditor.py:3276
-#: ../PLCOpenEditor.py:3439
-#: ../PLCOpenEditor.py:3583
+#: ../PLCOpenEditor.py:3278
+#: ../PLCOpenEditor.py:3441
+#: ../PLCOpenEditor.py:3585
 msgid "Language"
 msgstr "Langue"
 
-#: ../PLCOpenEditor.py:2992
+#: ../PLCOpenEditor.py:2994
 msgid "Language (optional):"
 msgstr "Langue (optionnel) :"
 
-#: ../PLCOpenEditor.py:3244
-#: ../PLCOpenEditor.py:3412
-#: ../PLCOpenEditor.py:3556
+#: ../PLCOpenEditor.py:3246
+#: ../PLCOpenEditor.py:3414
+#: ../PLCOpenEditor.py:3558
 msgid "Language:"
 msgstr "Langue :"
 
@@ -1368,7 +1372,7 @@
 msgid "Less than or equal to"
 msgstr "Inférieur ou égal à"
 
-#: ../PLCOpenEditor.py:638
+#: ../PLCOpenEditor.py:640
 msgid "Library"
 msgstr "Librairie"
 
@@ -1376,11 +1380,11 @@
 msgid "Limitation"
 msgstr "Limitation"
 
-#: ../PLCOpenEditor.py:3860
+#: ../PLCOpenEditor.py:3862
 msgid "Local"
 msgstr "Locale"
 
-#: ../PLCOpenEditor.py:3848
+#: ../PLCOpenEditor.py:3850
 msgid "Location"
 msgstr "Adresse"
 
@@ -1408,7 +1412,7 @@
 msgid "Minimum:"
 msgstr "Minimum :"
 
-#: ../PLCOpenEditor.py:3007
+#: ../PLCOpenEditor.py:3009
 msgid "Miscellaneous"
 msgstr "Divers"
 
@@ -1440,8 +1444,8 @@
 msgid "Multiplication"
 msgstr "Multiplication"
 
-#: ../PLCOpenEditor.py:3848
-#: ../PLCOpenEditor.py:3849
+#: ../PLCOpenEditor.py:3850
+#: ../PLCOpenEditor.py:3851
 #: ../RessourceEditor.py:79
 #: ../RessourceEditor.py:83
 #: ../DataTypeEditor.py:46
@@ -1474,7 +1478,7 @@
 msgid "New item"
 msgstr "Nouvel élément"
 
-#: ../PLCOpenEditor.py:3853
+#: ../PLCOpenEditor.py:3855
 msgid "No"
 msgstr "Non"
 
@@ -1497,7 +1501,7 @@
 msgid "No connector found corresponding to \"%s\" continuation in \"%s\" POU"
 msgstr "Pas de connecteur trouvé pour le prolongement \"%s\" dans le POU \"%s\""
 
-#: ../PLCOpenEditor.py:2606
+#: ../PLCOpenEditor.py:2608
 msgid ""
 "No documentation available.\n"
 "Coming soon."
@@ -1551,11 +1555,11 @@
 msgid "Open\tCTRL+O"
 msgstr "Ouvrir\tCTRL+O"
 
-#: ../PLCOpenEditor.py:2934
+#: ../PLCOpenEditor.py:2936
 msgid "Organization (optional):"
 msgstr "Groupe (optionnel) :"
 
-#: ../PLCOpenEditor.py:3859
+#: ../PLCOpenEditor.py:3861
 #: ../Dialogs.py:427
 #: ../Dialogs.py:1477
 msgid "Output"
@@ -1569,33 +1573,33 @@
 "PID\n"
 "Le bloc fonctionnel PID (Proportionnel, Intégrale, Dérivée) fournit un controller de boucle fermé classique à trois paramètres."
 
-#: ../PLCOpenEditor.py:1031
-#: ../PLCOpenEditor.py:1118
+#: ../PLCOpenEditor.py:1033
+#: ../PLCOpenEditor.py:1120
 msgid "PLCOpen files (*.xml)|*.xml|All files|*.*"
 msgstr "Fichiers PLCOpen (*.xml)|*.xml|Tous les fichiers|*.*"
 
-#: ../PLCOpenEditor.py:485
-#: ../PLCOpenEditor.py:838
+#: ../PLCOpenEditor.py:487
+#: ../PLCOpenEditor.py:840
 msgid "PLCOpenEditor"
 msgstr "PLCOpenEditor"
 
-#: ../PLCOpenEditor.py:438
+#: ../PLCOpenEditor.py:440
 msgid "PLCOpenEditor\tF1"
 msgstr "PLCOpenEditor\tF1"
 
-#: ../PLCOpenEditor.py:3272
+#: ../PLCOpenEditor.py:3274
 msgid "POU Name"
 msgstr "Nom du POU"
 
-#: ../PLCOpenEditor.py:3227
+#: ../PLCOpenEditor.py:3229
 msgid "POU Name:"
 msgstr "Nom du POU :"
 
-#: ../PLCOpenEditor.py:3274
+#: ../PLCOpenEditor.py:3276
 msgid "POU Type"
 msgstr "Type du POU"
 
-#: ../PLCOpenEditor.py:3235
+#: ../PLCOpenEditor.py:3237
 msgid "POU Type:"
 msgstr "Type du POU :"
 
@@ -1603,16 +1607,16 @@
 msgid "Page Setup"
 msgstr "Mise en page..."
 
-#: ../PLCOpenEditor.py:2950
+#: ../PLCOpenEditor.py:2952
 msgid "Page Size (optional):"
 msgstr "Taille de la page (optionnel) :"
 
-#: ../PLCOpenEditor.py:5000
+#: ../PLCOpenEditor.py:5002
 #, python-format
 msgid "Page: %d"
 msgstr "Page: %d"
 
-#: ../PLCOpenEditor.py:381
+#: ../PLCOpenEditor.py:383
 msgid "Paste\tCTRL+V"
 msgstr "Coller\tCTRL+V"
 
@@ -1626,7 +1630,7 @@
 msgid "Please choose a target"
 msgstr "Choisissez une cible"
 
-#: ../PLCOpenEditor.py:2461
+#: ../PLCOpenEditor.py:2463
 msgid "Please enter POU name"
 msgstr "Saisissez le nom du POU"
 
@@ -1637,17 +1641,17 @@
 msgid "Please enter comment text"
 msgstr "Saisissez le texte du commentaire"
 
-#: ../PLCOpenEditor.py:2416
-#: ../PLCOpenEditor.py:3647
+#: ../PLCOpenEditor.py:2418
+#: ../PLCOpenEditor.py:3649
 msgid "Please enter configuration name"
 msgstr "Saisissez le nom de la configuration"
 
-#: ../PLCOpenEditor.py:2359
+#: ../PLCOpenEditor.py:2361
 msgid "Please enter data type name"
 msgstr "Saisissez le nom du type de donnée"
 
-#: ../PLCOpenEditor.py:2431
-#: ../PLCOpenEditor.py:3710
+#: ../PLCOpenEditor.py:2433
+#: ../PLCOpenEditor.py:3712
 msgid "Please enter resource name"
 msgstr "Saisissez le nom de la ressource"
 
@@ -1657,7 +1661,7 @@
 msgid "Please enter step name"
 msgstr "Saisissez le nom de l'étape"
 
-#: ../PLCOpenEditor.py:3118
+#: ../PLCOpenEditor.py:3120
 msgid "Please enter text"
 msgstr "Saisissez le texte"
 
@@ -1688,7 +1692,7 @@
 msgid "Print"
 msgstr "Imprimer"
 
-#: ../PLCOpenEditor.py:1150
+#: ../PLCOpenEditor.py:1152
 msgid "Print preview"
 msgstr "Aperçu avant impression"
 
@@ -1700,24 +1704,24 @@
 msgid "Priority:"
 msgstr "Priorité :"
 
-#: ../PLCOpenEditor.py:2878
+#: ../PLCOpenEditor.py:2880
 msgid "Product Name (required):"
 msgstr "Nom du produit (obligatoire) :"
 
-#: ../PLCOpenEditor.py:2894
+#: ../PLCOpenEditor.py:2896
 msgid "Product Release (optional):"
 msgstr "Publication du produit (optionnel) :"
 
-#: ../PLCOpenEditor.py:2886
+#: ../PLCOpenEditor.py:2888
 msgid "Product Version (required):"
 msgstr "Version du produit (obligatoire) :"
 
-#: ../PLCOpenEditor.py:392
-#: ../PLCOpenEditor.py:1814
+#: ../PLCOpenEditor.py:394
+#: ../PLCOpenEditor.py:1816
 msgid "Program"
 msgstr "Programme"
 
-#: ../PLCOpenEditor.py:1095
+#: ../PLCOpenEditor.py:1097
 msgid "Program was successfully generated!"
 msgstr "Le programme a été généré avec succès !"
 
@@ -1729,20 +1733,20 @@
 msgid "Programs can't be used by other POUs!"
 msgstr "Les programmes ne peuvent être utilisés par les autres POUs !"
 
-#: ../PLCOpenEditor.py:497
-#: ../PLCOpenEditor.py:2901
+#: ../PLCOpenEditor.py:499
+#: ../PLCOpenEditor.py:2903
 msgid "Project"
 msgstr "Projet"
 
-#: ../PLCOpenEditor.py:2862
+#: ../PLCOpenEditor.py:2864
 msgid "Project Name (required):"
 msgstr "Nom du projet (obligatoire) :"
 
-#: ../PLCOpenEditor.py:2870
+#: ../PLCOpenEditor.py:2872
 msgid "Project Version (optional):"
 msgstr "Version du projet (optionnel) :"
 
-#: ../PLCOpenEditor.py:2848
+#: ../PLCOpenEditor.py:2850
 msgid "Project properties"
 msgstr "Propriétés du projet"
 
@@ -1794,7 +1798,7 @@
 msgid "Reference"
 msgstr "Référence"
 
-#: ../PLCOpenEditor.py:420
+#: ../PLCOpenEditor.py:422
 msgid "Refresh\tF5"
 msgstr "Actualiser\tF5"
 
@@ -1802,7 +1806,7 @@
 msgid "Remainder (modulo)"
 msgstr "Modulo"
 
-#: ../PLCOpenEditor.py:1818
+#: ../PLCOpenEditor.py:1820
 msgid "Rename"
 msgstr "Renommer"
 
@@ -1822,12 +1826,12 @@
 msgid "Resources"
 msgstr "Ressources"
 
-#: ../PLCOpenEditor.py:3848
-#: ../PLCOpenEditor.py:3849
+#: ../PLCOpenEditor.py:3850
+#: ../PLCOpenEditor.py:3851
 msgid "Retain"
 msgstr "Persistante"
 
-#: ../PLCOpenEditor.py:4227
+#: ../PLCOpenEditor.py:4229
 msgid "Return Type:"
 msgstr "Type de retour :"
 
@@ -1864,8 +1868,8 @@
 msgid "Rounding up/down"
 msgstr "Arrondi"
 
-#: ../PLCOpenEditor.py:2978
-#: ../PLCOpenEditor.py:3178
+#: ../PLCOpenEditor.py:2980
+#: ../PLCOpenEditor.py:3180
 msgid "SFC"
 msgstr "SFC"
 
@@ -1877,14 +1881,14 @@
 "Bascule SR\n"
 "La bascule SR est une bascule où le Set est dominant."
 
-#: ../PLCOpenEditor.py:3168
-#: ../PLCOpenEditor.py:3178
-#: ../PLCOpenEditor.py:3357
-#: ../PLCOpenEditor.py:3501
+#: ../PLCOpenEditor.py:3170
+#: ../PLCOpenEditor.py:3180
+#: ../PLCOpenEditor.py:3359
+#: ../PLCOpenEditor.py:3503
 msgid "ST"
 msgstr "ST"
 
-#: ../PLCOpenEditor.py:1082
+#: ../PLCOpenEditor.py:1084
 msgid "ST files (*.st)|*.st|All files|*.*"
 msgstr "Fichiers ST (*.st)|*.st|Tous les fichiers|*.*"
 
@@ -1896,20 +1900,20 @@
 msgid "Save As...\tCTRL+SHIFT+S"
 msgstr "Enregistrer sous...\tCTRL+SHIFT+S"
 
-#: ../PLCOpenEditor.py:2970
+#: ../PLCOpenEditor.py:2972
 msgid "Scaling:"
 msgstr "Echelle :"
 
-#: ../PLCOpenEditor.py:396
+#: ../PLCOpenEditor.py:398
 msgid "Select All\tCTRL+A"
 msgstr "Tout sélectionner\tCTRL+A"
 
-#: ../PLCOpenEditor.py:4102
+#: ../PLCOpenEditor.py:4104
 msgid "Select a variable class:"
 msgstr "Sélectionner une direction pour la variable :"
 
-#: ../PLCOpenEditor.py:604
-#: ../PLCOpenEditor.py:616
+#: ../PLCOpenEditor.py:606
+#: ../PLCOpenEditor.py:618
 msgid "Select an object"
 msgstr "Sélectionner un objet"
 
@@ -1993,7 +1997,7 @@
 msgid "Tasks:"
 msgstr "Tâches :"
 
-#: ../PLCOpenEditor.py:3861
+#: ../PLCOpenEditor.py:3863
 msgid "Temp"
 msgstr "Temporaire"
 
@@ -2001,11 +2005,11 @@
 msgid "The group of block must be coherent!"
 msgstr "Le groupe de blocs doit être cohérent !"
 
-#: ../PLCOpenEditor.py:961
+#: ../PLCOpenEditor.py:963
 msgid "There are changes, do you want to save?"
 msgstr "Le projet a été modifié. Voulez-vous l'enregistrer ?"
 
-#: ../PLCOpenEditor.py:1169
+#: ../PLCOpenEditor.py:1171
 msgid ""
 "There was a problem printing.\n"
 "Perhaps your current printer is not set correctly?"
@@ -2050,7 +2054,7 @@
 msgid "Time-of-day subtraction"
 msgstr "Soustraction d'horodatage"
 
-#: ../PLCOpenEditor.py:608
+#: ../PLCOpenEditor.py:610
 msgid "Toolbar"
 msgstr "Barre d'outils"
 
@@ -2058,11 +2062,11 @@
 msgid "Top"
 msgstr "Haut"
 
-#: ../PLCOpenEditor.py:3437
+#: ../PLCOpenEditor.py:3439
 msgid "Transition Name"
 msgstr "Nom de la transition"
 
-#: ../PLCOpenEditor.py:3404
+#: ../PLCOpenEditor.py:3406
 msgid "Transition Name:"
 msgstr "Nom de la transition :"
 
@@ -2085,8 +2089,8 @@
 msgid "Transitions"
 msgstr "Transitions"
 
-#: ../PLCOpenEditor.py:3848
-#: ../PLCOpenEditor.py:3849
+#: ../PLCOpenEditor.py:3850
+#: ../PLCOpenEditor.py:3851
 #: ../RessourceEditor.py:83
 #: ../Dialogs.py:2105
 #: ../DataTypeEditor.py:46
@@ -2109,8 +2113,8 @@
 msgid "Type:"
 msgstr "Type :"
 
-#: ../PLCOpenEditor.py:560
-#: ../PLCOpenEditor.py:596
+#: ../PLCOpenEditor.py:562
+#: ../PLCOpenEditor.py:598
 msgid "Types"
 msgstr "Types"
 
@@ -2133,7 +2137,7 @@
 msgid "Unnamed%d"
 msgstr "Sansnom%d"
 
-#: ../PLCOpenEditor.py:4098
+#: ../PLCOpenEditor.py:4100
 #, python-format
 msgid "Unrecognized data size \"%s\""
 msgstr "Taille de donnée \"%s\" non identifié !"
@@ -2154,7 +2158,7 @@
 "Compteur bidirectionnel\n"
 "Le compteur bidirectionnel a deux entrées CU et CD. Il peut être utilisé pour compter de façon incrémentale ou décrémentale sur l'une ou l'autre des entrées."
 
-#: ../PLCOpenEditor.py:4497
+#: ../PLCOpenEditor.py:4499
 #: ../DataTypeEditor.py:804
 msgid "User Data Types"
 msgstr "Types de donnée du projet"
@@ -2163,7 +2167,7 @@
 msgid "User-defined POUs"
 msgstr "POUs du projet"
 
-#: ../PLCOpenEditor.py:4614
+#: ../PLCOpenEditor.py:4616
 #: ../Dialogs.py:2105
 msgid "Value"
 msgstr "Valeur"
@@ -2176,7 +2180,7 @@
 msgid "Values:"
 msgstr "Valeurs"
 
-#: ../PLCOpenEditor.py:4614
+#: ../PLCOpenEditor.py:4616
 #: ../Dialogs.py:2109
 msgid "Variable"
 msgstr "Variable"
@@ -2185,7 +2189,7 @@
 msgid "Variable Properties"
 msgstr "Propriétés de la variable"
 
-#: ../PLCOpenEditor.py:4102
+#: ../PLCOpenEditor.py:4104
 msgid "Variable class"
 msgstr "Direction de la variable"
 
@@ -2194,32 +2198,32 @@
 msgid "Variable don't belong to this POU!"
 msgstr "La variable n'appartient pas à ce POU !"
 
-#: ../PLCOpenEditor.py:573
-#: ../PLCOpenEditor.py:624
-#: ../PLCOpenEditor.py:3860
+#: ../PLCOpenEditor.py:575
+#: ../PLCOpenEditor.py:626
+#: ../PLCOpenEditor.py:3862
 msgid "Variables"
 msgstr "Variables"
 
-#: ../PLCOpenEditor.py:3302
-#: ../PLCOpenEditor.py:3680
-#: ../PLCOpenEditor.py:3743
+#: ../PLCOpenEditor.py:3304
+#: ../PLCOpenEditor.py:3682
+#: ../PLCOpenEditor.py:3745
 #: ../LDViewer.py:859
 msgid "Warning"
 msgstr "Attention"
 
-#: ../PLCOpenEditor.py:2954
+#: ../PLCOpenEditor.py:2956
 msgid "Width:"
 msgstr "Longueur :"
 
-#: ../PLCOpenEditor.py:2697
+#: ../PLCOpenEditor.py:2699
 msgid "X Scale:"
 msgstr "Echelle X :"
 
-#: ../PLCOpenEditor.py:2705
+#: ../PLCOpenEditor.py:2707
 msgid "Y Scale:"
 msgstr "Echelle Y :"
 
-#: ../PLCOpenEditor.py:3853
+#: ../PLCOpenEditor.py:3855
 msgid "Yes"
 msgstr "Oui"
 
@@ -2231,46 +2235,46 @@
 msgid "You must select the wire where a contact should be added!"
 msgstr "Vous devez sélectionner le fil sur lequel le contact doit être ajouté !"
 
-#: ../PLCOpenEditor.py:3133
-#: ../PLCOpenEditor.py:3664
-#: ../PLCOpenEditor.py:3727
+#: ../PLCOpenEditor.py:3135
+#: ../PLCOpenEditor.py:3666
+#: ../PLCOpenEditor.py:3729
 #: ../Dialogs.py:1525
 #: ../Dialogs.py:2508
 #: ../Dialogs.py:2575
 msgid "You must type a name!"
 msgstr "Vous devez saisir un nom !"
 
-#: ../PLCOpenEditor.py:426
+#: ../PLCOpenEditor.py:428
 msgid "Zoom"
 msgstr "Zoom"
 
-#: ../PLCOpenEditor.py:1091
+#: ../PLCOpenEditor.py:1093
 #, python-format
 msgid "error: %s\n"
 msgstr "erreur: %s\n"
 
-#: ../PLCOpenEditor.py:5032
 #: ../PLCOpenEditor.py:5034
+#: ../PLCOpenEditor.py:5036
 msgid "file : "
 msgstr "fichier :"
 
-#: ../PLCOpenEditor.py:3173
+#: ../PLCOpenEditor.py:3175
 msgid "function"
 msgstr "fonction"
 
-#: ../PLCOpenEditor.py:5035
+#: ../PLCOpenEditor.py:5037
 msgid "function : "
 msgstr "fonction :"
 
-#: ../PLCOpenEditor.py:3173
+#: ../PLCOpenEditor.py:3175
 msgid "functionBlock"
 msgstr "Bloc fonctionnel"
 
-#: ../PLCOpenEditor.py:5035
+#: ../PLCOpenEditor.py:5037
 msgid "line : "
 msgstr "ligne :"
 
-#: ../PLCOpenEditor.py:3173
+#: ../PLCOpenEditor.py:3175
 msgid "program"
 msgstr "programme"
 
@@ -2286,7 +2290,7 @@
 msgid "string right of"
 msgstr "Caractères à droite de"
 
-#: ../PLCOpenEditor.py:1089
+#: ../PLCOpenEditor.py:1091
 #, python-format
 msgid "warning: %s\n"
 msgstr "attention: %s\n"
--- a/i18n/messages.pot	Thu Aug 20 09:03:31 2009 -0600
+++ b/i18n/messages.pot	Wed Sep 02 08:30:34 2009 -0600
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-07-24 16:55+0200\n"
+"POT-Creation-Date: 2009-08-26 19:19+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -16,7 +16,7 @@
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: ../PLCOpenEditor.py:5044
+#: ../PLCOpenEditor.py:5046
 msgid ""
 "\n"
 "An error happens.\n"
@@ -31,39 +31,39 @@
 "Error:\n"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3860
+#: ../PLCOpenEditor.py:3862
 msgid "   External"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3859
+#: ../PLCOpenEditor.py:3861
 msgid "   InOut"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3859
+#: ../PLCOpenEditor.py:3861
 msgid "   Input"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3860
+#: ../PLCOpenEditor.py:3862
 msgid "   Local"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3859
+#: ../PLCOpenEditor.py:3861
 msgid "   Output"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3861
+#: ../PLCOpenEditor.py:3863
 msgid "   Temp"
 msgstr ""
 
-#: ../PLCOpenEditor.py:840
+#: ../PLCOpenEditor.py:842
 msgid " (Debug)"
 msgstr ""
 
-#: ../PLCOpenEditor.py:5056
+#: ../PLCOpenEditor.py:5058
 msgid " : "
 msgstr ""
 
-#: ../PLCOpenEditor.py:3283 ../PLCOpenEditor.py:3446 ../PLCOpenEditor.py:3590
+#: ../PLCOpenEditor.py:3285 ../PLCOpenEditor.py:3448 ../PLCOpenEditor.py:3592
 #: ../Dialogs.py:1800
 #, python-format
 msgid " and %s"
@@ -89,7 +89,7 @@
 msgid "\"%s\" can't use itself!"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1617 ../PLCOpenEditor.py:1637
+#: ../PLCOpenEditor.py:1619 ../PLCOpenEditor.py:1639
 #, python-format
 msgid "\"%s\" config already exists!"
 msgstr ""
@@ -99,7 +99,7 @@
 msgid "\"%s\" configuration already exists !!!"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1571 ../PLCOpenEditor.py:3145
+#: ../PLCOpenEditor.py:1573 ../PLCOpenEditor.py:3147
 #, python-format
 msgid "\"%s\" data type already exists!"
 msgstr ""
@@ -109,7 +109,7 @@
 msgid "\"%s\" element can't be paste here!!!"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3465 ../PLCOpenEditor.py:3609 ../Viewer.py:248
+#: ../PLCOpenEditor.py:3467 ../PLCOpenEditor.py:3611 ../Viewer.py:248
 #: ../Dialogs.py:261 ../Dialogs.py:898
 #, python-format
 msgid "\"%s\" element for this pou already exists!"
@@ -120,9 +120,9 @@
 msgid "\"%s\" function cancelled in \"%s\" POU: No input connected"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1562 ../PLCOpenEditor.py:3141 ../PLCOpenEditor.py:3294
-#: ../PLCOpenEditor.py:3457 ../PLCOpenEditor.py:3601 ../PLCOpenEditor.py:3672
-#: ../PLCOpenEditor.py:3735 ../PLCOpenEditor.py:4449 ../Dialogs.py:253
+#: ../PLCOpenEditor.py:1564 ../PLCOpenEditor.py:3143 ../PLCOpenEditor.py:3296
+#: ../PLCOpenEditor.py:3459 ../PLCOpenEditor.py:3603 ../PLCOpenEditor.py:3674
+#: ../PLCOpenEditor.py:3737 ../PLCOpenEditor.py:4451 ../Dialogs.py:253
 #: ../Dialogs.py:652 ../Dialogs.py:890 ../Dialogs.py:1533 ../Dialogs.py:2516
 #: ../Dialogs.py:2583 ../DataTypeEditor.py:702 ../DataTypeEditor.py:762
 #, python-format
@@ -139,26 +139,26 @@
 msgid "\"%s\" is an invalid value!"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1097 ../PLCOpenEditor.py:1126
+#: ../PLCOpenEditor.py:1099 ../PLCOpenEditor.py:1128
 #, python-format
 msgid "\"%s\" is not a valid folder!"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1560 ../PLCOpenEditor.py:3137 ../PLCOpenEditor.py:3290
-#: ../PLCOpenEditor.py:3453 ../PLCOpenEditor.py:3597 ../PLCOpenEditor.py:3668
-#: ../PLCOpenEditor.py:3731 ../PLCOpenEditor.py:4444 ../Dialogs.py:249
+#: ../PLCOpenEditor.py:1562 ../PLCOpenEditor.py:3139 ../PLCOpenEditor.py:3292
+#: ../PLCOpenEditor.py:3455 ../PLCOpenEditor.py:3599 ../PLCOpenEditor.py:3670
+#: ../PLCOpenEditor.py:3733 ../PLCOpenEditor.py:4446 ../Dialogs.py:249
 #: ../Dialogs.py:886 ../Dialogs.py:1529 ../Dialogs.py:2512 ../Dialogs.py:2579
 #: ../DataTypeEditor.py:757
 #, python-format
 msgid "\"%s\" is not a valid identifier!"
 msgstr ""
 
-#: ../PLCOpenEditor.py:283 ../PLCOpenEditor.py:2491 ../PLCOpenEditor.py:2520
+#: ../PLCOpenEditor.py:283 ../PLCOpenEditor.py:2493 ../PLCOpenEditor.py:2522
 #, python-format
 msgid "\"%s\" is used by one or more POUs. It can't be removed!"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1580 ../PLCOpenEditor.py:3298 ../Viewer.py:246
+#: ../PLCOpenEditor.py:1582 ../PLCOpenEditor.py:3300 ../Viewer.py:246
 #: ../Dialogs.py:257 ../Dialogs.py:894
 #, python-format
 msgid "\"%s\" pou already exists!"
@@ -213,17 +213,17 @@
 msgid "%s body don't have text!"
 msgstr ""
 
-#: ../PLCOpenEditor.py:5032 ../PLCOpenEditor.py:5034 ../PLCOpenEditor.py:5035
+#: ../PLCOpenEditor.py:5034 ../PLCOpenEditor.py:5036 ../PLCOpenEditor.py:5037
 msgid ",   "
 msgstr ""
 
-#: ../PLCOpenEditor.py:3285 ../PLCOpenEditor.py:3448 ../PLCOpenEditor.py:3592
+#: ../PLCOpenEditor.py:3287 ../PLCOpenEditor.py:3450 ../PLCOpenEditor.py:3594
 #: ../Dialogs.py:1802
 #, python-format
 msgid ", %s"
 msgstr ""
 
-#: ../PLCOpenEditor.py:5030
+#: ../PLCOpenEditor.py:5032
 msgid ". "
 msgstr ""
 
@@ -232,36 +232,36 @@
 msgid "A element with \"%s\" as name exists in this structure!"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1583 ../PLCOpenEditor.py:1625 ../PLCOpenEditor.py:1645
-#: ../PLCOpenEditor.py:3302 ../PLCOpenEditor.py:3680 ../PLCOpenEditor.py:3743
+#: ../PLCOpenEditor.py:1585 ../PLCOpenEditor.py:1627 ../PLCOpenEditor.py:1647
+#: ../PLCOpenEditor.py:3304 ../PLCOpenEditor.py:3682 ../PLCOpenEditor.py:3745
 #, python-format
 msgid "A pou has an element with \"%s\" as name. It can generate a conflict. Do you wish to continue?"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1620 ../PLCOpenEditor.py:1640
+#: ../PLCOpenEditor.py:1622 ../PLCOpenEditor.py:1642
 #, python-format
 msgid "A pou is defined with \"%s\" as name. It can generate a conflict. Do you wish to continue?"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1596 ../PLCOpenEditor.py:1607 ../PLCOpenEditor.py:3461
-#: ../PLCOpenEditor.py:3605 ../PLCOpenEditor.py:3676 ../PLCOpenEditor.py:3739
-#: ../PLCOpenEditor.py:4454 ../Dialogs.py:1537 ../Dialogs.py:2520
+#: ../PLCOpenEditor.py:1598 ../PLCOpenEditor.py:1609 ../PLCOpenEditor.py:3463
+#: ../PLCOpenEditor.py:3607 ../PLCOpenEditor.py:3678 ../PLCOpenEditor.py:3741
+#: ../PLCOpenEditor.py:4456 ../Dialogs.py:1537 ../Dialogs.py:2520
 #: ../Dialogs.py:2587
 #, python-format
 msgid "A pou with \"%s\" as name exists!"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1598 ../PLCOpenEditor.py:1609 ../PLCOpenEditor.py:4459
+#: ../PLCOpenEditor.py:1600 ../PLCOpenEditor.py:1611 ../PLCOpenEditor.py:4461
 #: ../Dialogs.py:1541 ../Dialogs.py:2524
 #, python-format
 msgid "A variable with \"%s\" as name already exists in this pou!"
 msgstr ""
 
-#: ../PLCOpenEditor.py:445
+#: ../PLCOpenEditor.py:447
 msgid "About"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2614
+#: ../PLCOpenEditor.py:2616
 msgid "About PLCOpenEditor"
 msgstr ""
 
@@ -273,11 +273,11 @@
 msgid "Action"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3581
+#: ../PLCOpenEditor.py:3583
 msgid "Action Name"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3548
+#: ../PLCOpenEditor.py:3550
 msgid "Action Name:"
 msgstr ""
 
@@ -294,19 +294,19 @@
 msgid "Actions:"
 msgstr ""
 
-#: ../PLCOpenEditor.py:4244 ../Dialogs.py:2346 ../DataTypeEditor.py:539
+#: ../PLCOpenEditor.py:4246 ../Dialogs.py:2346 ../DataTypeEditor.py:539
 msgid "Add"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1800 ../PLCOpenEditor.py:1873
+#: ../PLCOpenEditor.py:1802 ../PLCOpenEditor.py:1875
 msgid "Add Action"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1856
+#: ../PLCOpenEditor.py:1858
 msgid "Add Configuration"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1844
+#: ../PLCOpenEditor.py:1846
 msgid "Add DataType"
 msgstr ""
 
@@ -314,7 +314,7 @@
 msgid "Add Divergence Branch"
 msgstr ""
 
-#: ../PLCOpenEditor.py:384
+#: ../PLCOpenEditor.py:386
 msgid "Add Element"
 msgstr ""
 
@@ -322,11 +322,11 @@
 msgid "Add Instance"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1850
+#: ../PLCOpenEditor.py:1852
 msgid "Add Pou"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1827 ../PLCOpenEditor.py:1884
+#: ../PLCOpenEditor.py:1829 ../PLCOpenEditor.py:1886
 msgid "Add Resource"
 msgstr ""
 
@@ -334,7 +334,7 @@
 msgid "Add Task"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1797 ../PLCOpenEditor.py:1862
+#: ../PLCOpenEditor.py:1799 ../PLCOpenEditor.py:1864
 msgid "Add Transition"
 msgstr ""
 
@@ -342,7 +342,7 @@
 msgid "Add Wire Segment"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2359
+#: ../PLCOpenEditor.py:2361
 msgid "Add a new data type"
 msgstr ""
 
@@ -358,11 +358,11 @@
 msgid "Add a new step"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2416
+#: ../PLCOpenEditor.py:2418
 msgid "Add new configuration"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2431
+#: ../PLCOpenEditor.py:2433
 msgid "Add new resource"
 msgstr ""
 
@@ -378,7 +378,7 @@
 msgid "Alignment"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3858
+#: ../PLCOpenEditor.py:3860
 msgid "All"
 msgstr ""
 
@@ -410,11 +410,11 @@
 msgid "At least a variable or an expression must be selected!"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2941
+#: ../PLCOpenEditor.py:2943
 msgid "Author"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2926
+#: ../PLCOpenEditor.py:2928
 msgid "Author Name (optional):"
 msgstr ""
 
@@ -422,7 +422,7 @@
 msgid "Base Type:"
 msgstr ""
 
-#: ../PLCOpenEditor.py:4491 ../DataTypeEditor.py:798
+#: ../PLCOpenEditor.py:4493 ../DataTypeEditor.py:798
 msgid "Base Types"
 msgstr ""
 
@@ -458,7 +458,7 @@
 msgid "Block Properties"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2077 ../Dialogs.py:269
+#: ../PLCOpenEditor.py:2079 ../Dialogs.py:269
 msgid "Block Types"
 msgstr ""
 
@@ -466,11 +466,11 @@
 msgid "Bottom"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2031
+#: ../PLCOpenEditor.py:2033
 msgid "CSV Log"
 msgstr ""
 
-#: ../PLCOpenEditor.py:4072
+#: ../PLCOpenEditor.py:4074
 msgid "Can affect a location only to local or global variables"
 msgstr ""
 
@@ -479,16 +479,16 @@
 msgid "Can only generate execution order on FBD networks!"
 msgstr ""
 
-#: ../PLCOpenEditor.py:4070
+#: ../PLCOpenEditor.py:4072
 msgid "Can't affect a location to a function block instance"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1092
+#: ../PLCOpenEditor.py:1094
 #, python-format
 msgid "Can't generate program to file %s!"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1124
+#: ../PLCOpenEditor.py:1126
 #, python-format
 msgid "Can't save project to file %s!"
 msgstr ""
@@ -497,7 +497,7 @@
 msgid "Center"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1816
+#: ../PLCOpenEditor.py:1818
 msgid "Change POU Type To"
 msgstr ""
 
@@ -505,15 +505,15 @@
 msgid "Character string"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1031 ../PLCOpenEditor.py:1082 ../PLCOpenEditor.py:1118
+#: ../PLCOpenEditor.py:1033 ../PLCOpenEditor.py:1084 ../PLCOpenEditor.py:1120
 msgid "Choose a file"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3848 ../PLCOpenEditor.py:3849
+#: ../PLCOpenEditor.py:3850 ../PLCOpenEditor.py:3851
 msgid "Class"
 msgstr ""
 
-#: ../PLCOpenEditor.py:4236
+#: ../PLCOpenEditor.py:4238
 msgid "Class Filter:"
 msgstr ""
 
@@ -521,7 +521,7 @@
 msgid "Class:"
 msgstr ""
 
-#: ../PLCOpenEditor.py:423
+#: ../PLCOpenEditor.py:425
 msgid "Clear Errors\tCTRL+K"
 msgstr ""
 
@@ -533,7 +533,7 @@
 msgid "Close\tCTRL+Q"
 msgstr ""
 
-#: ../PLCOpenEditor.py:961
+#: ../PLCOpenEditor.py:963
 msgid "Close Application"
 msgstr ""
 
@@ -549,11 +549,11 @@
 msgid "Comment"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2910
+#: ../PLCOpenEditor.py:2912
 msgid "Company Name (required):"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2918
+#: ../PLCOpenEditor.py:2920
 msgid "Company URL (optional):"
 msgstr ""
 
@@ -565,7 +565,7 @@
 msgid "Concatenation"
 msgstr ""
 
-#: ../PLCOpenEditor.py:394
+#: ../PLCOpenEditor.py:396
 msgid "Configuration"
 msgstr ""
 
@@ -589,11 +589,11 @@
 msgid "Connectors:"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3848 ../PLCOpenEditor.py:3849
+#: ../PLCOpenEditor.py:3850 ../PLCOpenEditor.py:3851
 msgid "Constant"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3000
+#: ../PLCOpenEditor.py:3002
 msgid "Content Description (optional):"
 msgstr ""
 
@@ -617,7 +617,7 @@
 msgid "Conversion to time-of-day"
 msgstr ""
 
-#: ../PLCOpenEditor.py:379
+#: ../PLCOpenEditor.py:381
 msgid "Copy\tCTRL+C"
 msgstr ""
 
@@ -625,15 +625,15 @@
 msgid "Cosine"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3223
+#: ../PLCOpenEditor.py:3225
 msgid "Create a new POU"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1804 ../PLCOpenEditor.py:2461
+#: ../PLCOpenEditor.py:1806 ../PLCOpenEditor.py:2463
 msgid "Create a new POU from"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3544
+#: ../PLCOpenEditor.py:3546
 msgid "Create a new action"
 msgstr ""
 
@@ -693,7 +693,7 @@
 msgid "Create a new step"
 msgstr ""
 
-#: ../PLCOpenEditor.py:211 ../PLCOpenEditor.py:3400
+#: ../PLCOpenEditor.py:211 ../PLCOpenEditor.py:3402
 msgid "Create a new transition"
 msgstr ""
 
@@ -701,11 +701,11 @@
 msgid "Create a new variable"
 msgstr ""
 
-#: ../PLCOpenEditor.py:377
+#: ../PLCOpenEditor.py:379
 msgid "Cut\tCTRL+X"
 msgstr ""
 
-#: ../PLCOpenEditor.py:386
+#: ../PLCOpenEditor.py:388
 msgid "Data Type"
 msgstr ""
 
@@ -729,8 +729,8 @@
 msgid "Date subtraction"
 msgstr ""
 
-#: ../PLCOpenEditor.py:398 ../PLCOpenEditor.py:1821 ../PLCOpenEditor.py:1830
-#: ../PLCOpenEditor.py:1836 ../PLCOpenEditor.py:4249 ../PLCOpenEditor.py:4862
+#: ../PLCOpenEditor.py:400 ../PLCOpenEditor.py:1823 ../PLCOpenEditor.py:1832
+#: ../PLCOpenEditor.py:1838 ../PLCOpenEditor.py:4251 ../PLCOpenEditor.py:4864
 #: ../Viewer.py:416 ../Dialogs.py:2351 ../DataTypeEditor.py:544
 msgid "Delete"
 msgstr ""
@@ -785,7 +785,7 @@
 msgid "Division"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1086
+#: ../PLCOpenEditor.py:1088
 msgid "Done"
 msgstr ""
 
@@ -847,6 +847,10 @@
 msgid "Elements :"
 msgstr ""
 
+#: ../PLCOpenEditor.py:376
+msgid "Enable Undo/Redo"
+msgstr ""
+
 #: ../DataTypeEditor.py:236
 msgid "Enumerated"
 msgstr ""
@@ -855,21 +859,21 @@
 msgid "Equal to"
 msgstr ""
 
-#: ../PLCOpenEditor.py:953 ../PLCOpenEditor.py:1093 ../PLCOpenEditor.py:1098
-#: ../PLCOpenEditor.py:1583 ../PLCOpenEditor.py:1620 ../PLCOpenEditor.py:1625
-#: ../PLCOpenEditor.py:1640 ../PLCOpenEditor.py:1645 ../PLCOpenEditor.py:2491
-#: ../PLCOpenEditor.py:2520 ../PLCOpenEditor.py:3041 ../PLCOpenEditor.py:3133
-#: ../PLCOpenEditor.py:3137 ../PLCOpenEditor.py:3141 ../PLCOpenEditor.py:3145
-#: ../PLCOpenEditor.py:3286 ../PLCOpenEditor.py:3290 ../PLCOpenEditor.py:3294
-#: ../PLCOpenEditor.py:3298 ../PLCOpenEditor.py:3449 ../PLCOpenEditor.py:3453
-#: ../PLCOpenEditor.py:3457 ../PLCOpenEditor.py:3461 ../PLCOpenEditor.py:3465
-#: ../PLCOpenEditor.py:3593 ../PLCOpenEditor.py:3597 ../PLCOpenEditor.py:3601
-#: ../PLCOpenEditor.py:3605 ../PLCOpenEditor.py:3609 ../PLCOpenEditor.py:3664
-#: ../PLCOpenEditor.py:3668 ../PLCOpenEditor.py:3672 ../PLCOpenEditor.py:3676
-#: ../PLCOpenEditor.py:3727 ../PLCOpenEditor.py:3731 ../PLCOpenEditor.py:3735
-#: ../PLCOpenEditor.py:3739 ../PLCOpenEditor.py:4119 ../PLCOpenEditor.py:4444
-#: ../PLCOpenEditor.py:4449 ../PLCOpenEditor.py:4454 ../PLCOpenEditor.py:4459
-#: ../PLCOpenEditor.py:4795 ../PLCOpenEditor.py:5057 ../PLCOpenEditor.py:5067
+#: ../PLCOpenEditor.py:955 ../PLCOpenEditor.py:1095 ../PLCOpenEditor.py:1100
+#: ../PLCOpenEditor.py:1585 ../PLCOpenEditor.py:1622 ../PLCOpenEditor.py:1627
+#: ../PLCOpenEditor.py:1642 ../PLCOpenEditor.py:1647 ../PLCOpenEditor.py:2493
+#: ../PLCOpenEditor.py:2522 ../PLCOpenEditor.py:3043 ../PLCOpenEditor.py:3135
+#: ../PLCOpenEditor.py:3139 ../PLCOpenEditor.py:3143 ../PLCOpenEditor.py:3147
+#: ../PLCOpenEditor.py:3288 ../PLCOpenEditor.py:3292 ../PLCOpenEditor.py:3296
+#: ../PLCOpenEditor.py:3300 ../PLCOpenEditor.py:3451 ../PLCOpenEditor.py:3455
+#: ../PLCOpenEditor.py:3459 ../PLCOpenEditor.py:3463 ../PLCOpenEditor.py:3467
+#: ../PLCOpenEditor.py:3595 ../PLCOpenEditor.py:3599 ../PLCOpenEditor.py:3603
+#: ../PLCOpenEditor.py:3607 ../PLCOpenEditor.py:3611 ../PLCOpenEditor.py:3666
+#: ../PLCOpenEditor.py:3670 ../PLCOpenEditor.py:3674 ../PLCOpenEditor.py:3678
+#: ../PLCOpenEditor.py:3729 ../PLCOpenEditor.py:3733 ../PLCOpenEditor.py:3737
+#: ../PLCOpenEditor.py:3741 ../PLCOpenEditor.py:4121 ../PLCOpenEditor.py:4446
+#: ../PLCOpenEditor.py:4451 ../PLCOpenEditor.py:4456 ../PLCOpenEditor.py:4461
+#: ../PLCOpenEditor.py:4797 ../PLCOpenEditor.py:5059 ../PLCOpenEditor.py:5069
 #: ../Viewer.py:335 ../TextViewer.py:224 ../LDViewer.py:628 ../LDViewer.py:850
 #: ../LDViewer.py:854 ../Dialogs.py:241 ../Dialogs.py:245 ../Dialogs.py:249
 #: ../Dialogs.py:253 ../Dialogs.py:257 ../Dialogs.py:261 ../Dialogs.py:648
@@ -905,12 +909,12 @@
 msgid "Expression:"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3860
+#: ../PLCOpenEditor.py:3862
 msgid "External"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2978 ../PLCOpenEditor.py:3168 ../PLCOpenEditor.py:3178
-#: ../PLCOpenEditor.py:3357 ../PLCOpenEditor.py:3501
+#: ../PLCOpenEditor.py:2980 ../PLCOpenEditor.py:3170 ../PLCOpenEditor.py:3180
+#: ../PLCOpenEditor.py:3359 ../PLCOpenEditor.py:3503
 msgid "FBD"
 msgstr ""
 
@@ -932,8 +936,8 @@
 msgid "Find position"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3041 ../PLCOpenEditor.py:3286 ../PLCOpenEditor.py:3449
-#: ../PLCOpenEditor.py:3593 ../Dialogs.py:1803
+#: ../PLCOpenEditor.py:3043 ../PLCOpenEditor.py:3288 ../PLCOpenEditor.py:3451
+#: ../PLCOpenEditor.py:3595 ../Dialogs.py:1803
 #, python-format
 msgid "Form isn't complete. %s must be filled!"
 msgstr ""
@@ -946,15 +950,15 @@
 msgid "Form isn't complete. Valid block type must be selected!"
 msgstr ""
 
-#: ../PLCOpenEditor.py:388
+#: ../PLCOpenEditor.py:390
 msgid "Function"
 msgstr ""
 
-#: ../PLCOpenEditor.py:390 ../PLCOpenEditor.py:1811
+#: ../PLCOpenEditor.py:392 ../PLCOpenEditor.py:1813
 msgid "Function Block"
 msgstr ""
 
-#: ../PLCOpenEditor.py:4506
+#: ../PLCOpenEditor.py:4508
 msgid "Function Block Types"
 msgstr ""
 
@@ -983,15 +987,15 @@
 msgid "Generate Program\tCTRL+G"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3861
+#: ../PLCOpenEditor.py:3863
 msgid "Global"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2028
+#: ../PLCOpenEditor.py:2030
 msgid "Graphic Panel"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2983
+#: ../PLCOpenEditor.py:2985
 msgid "Graphics"
 msgstr ""
 
@@ -1003,7 +1007,7 @@
 msgid "Greater than or equal to"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2962
+#: ../PLCOpenEditor.py:2964
 msgid "Height:"
 msgstr ""
 
@@ -1017,26 +1021,26 @@
 "The hysteresis function block provides a hysteresis boolean output driven by the difference of two floating point (REAL) inputs XIN1 and XIN2."
 msgstr ""
 
-#: ../PLCOpenEditor.py:3168 ../PLCOpenEditor.py:3178 ../PLCOpenEditor.py:3357
-#: ../PLCOpenEditor.py:3501
+#: ../PLCOpenEditor.py:3170 ../PLCOpenEditor.py:3180 ../PLCOpenEditor.py:3359
+#: ../PLCOpenEditor.py:3503
 msgid "IL"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3859 ../Dialogs.py:426
+#: ../PLCOpenEditor.py:3861 ../Dialogs.py:426
 msgid "InOut"
 msgstr ""
 
-#: ../PLCOpenEditor.py:4089
+#: ../PLCOpenEditor.py:4091
 #, python-format
 msgid "Incompatible data types between \"%s\" and \"%s\""
 msgstr ""
 
-#: ../PLCOpenEditor.py:4100
+#: ../PLCOpenEditor.py:4102
 #, python-format
 msgid "Incompatible size of data between \"%s\" and \"%s\""
 msgstr ""
 
-#: ../PLCOpenEditor.py:4096
+#: ../PLCOpenEditor.py:4098
 #, python-format
 msgid "Incompatible size of data between \"%s\" and \"BOOL\""
 msgstr ""
@@ -1045,7 +1049,7 @@
 msgid "Indicator"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3848 ../PLCOpenEditor.py:3849 ../DataTypeEditor.py:46
+#: ../PLCOpenEditor.py:3850 ../PLCOpenEditor.py:3851 ../DataTypeEditor.py:46
 msgid "Initial Value"
 msgstr ""
 
@@ -1058,7 +1062,7 @@
 msgid "Inline"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3859 ../Dialogs.py:425 ../Dialogs.py:1472
+#: ../PLCOpenEditor.py:3861 ../Dialogs.py:425 ../Dialogs.py:1472
 msgid "Input"
 msgstr ""
 
@@ -1075,7 +1079,7 @@
 msgid "Instance with id %d doesn't exists!"
 msgstr ""
 
-#: ../PLCOpenEditor.py:559 ../PLCOpenEditor.py:597
+#: ../PLCOpenEditor.py:561 ../PLCOpenEditor.py:599
 msgid "Instances"
 msgstr ""
 
@@ -1089,7 +1093,7 @@
 "The integral function block integrates the value of input XIN over time."
 msgstr ""
 
-#: ../PLCOpenEditor.py:3858
+#: ../PLCOpenEditor.py:3860
 msgid "Interface"
 msgstr ""
 
@@ -1101,12 +1105,12 @@
 msgid "Invalid plcopen element(s)!!!"
 msgstr ""
 
-#: ../PLCOpenEditor.py:4784 ../PLCOpenEditor.py:4787
+#: ../PLCOpenEditor.py:4786 ../PLCOpenEditor.py:4789
 #, python-format
 msgid "Invalid value \"%s\" for debug variable"
 msgstr ""
 
-#: ../PLCOpenEditor.py:4077 ../PLCOpenEditor.py:4080
+#: ../PLCOpenEditor.py:4079 ../PLCOpenEditor.py:4082
 #, python-format
 msgid "Invalid value \"%s\" for location"
 msgstr ""
@@ -1116,8 +1120,8 @@
 msgid "Invalid value \"%s\" for viewer block"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2978 ../PLCOpenEditor.py:3168 ../PLCOpenEditor.py:3178
-#: ../PLCOpenEditor.py:3357 ../PLCOpenEditor.py:3501
+#: ../PLCOpenEditor.py:2980 ../PLCOpenEditor.py:3170 ../PLCOpenEditor.py:3180
+#: ../PLCOpenEditor.py:3359 ../PLCOpenEditor.py:3503
 msgid "LD"
 msgstr ""
 
@@ -1126,15 +1130,15 @@
 msgid "Ladder element with id %d is on more than one rung."
 msgstr ""
 
-#: ../PLCOpenEditor.py:3276 ../PLCOpenEditor.py:3439 ../PLCOpenEditor.py:3583
+#: ../PLCOpenEditor.py:3278 ../PLCOpenEditor.py:3441 ../PLCOpenEditor.py:3585
 msgid "Language"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2992
+#: ../PLCOpenEditor.py:2994
 msgid "Language (optional):"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3244 ../PLCOpenEditor.py:3412 ../PLCOpenEditor.py:3556
+#: ../PLCOpenEditor.py:3246 ../PLCOpenEditor.py:3414 ../PLCOpenEditor.py:3558
 msgid "Language:"
 msgstr ""
 
@@ -1158,7 +1162,7 @@
 msgid "Less than or equal to"
 msgstr ""
 
-#: ../PLCOpenEditor.py:638
+#: ../PLCOpenEditor.py:640
 msgid "Library"
 msgstr ""
 
@@ -1166,11 +1170,11 @@
 msgid "Limitation"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3860
+#: ../PLCOpenEditor.py:3862
 msgid "Local"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3848
+#: ../PLCOpenEditor.py:3850
 msgid "Location"
 msgstr ""
 
@@ -1198,7 +1202,7 @@
 msgid "Minimum:"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3007
+#: ../PLCOpenEditor.py:3009
 msgid "Miscellaneous"
 msgstr ""
 
@@ -1227,7 +1231,7 @@
 msgid "Multiplication"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3848 ../PLCOpenEditor.py:3849 ../RessourceEditor.py:79
+#: ../PLCOpenEditor.py:3850 ../PLCOpenEditor.py:3851 ../RessourceEditor.py:79
 #: ../RessourceEditor.py:83 ../DataTypeEditor.py:46
 msgid "Name"
 msgstr ""
@@ -1253,7 +1257,7 @@
 msgid "New item"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3853
+#: ../PLCOpenEditor.py:3855
 msgid "No"
 msgstr ""
 
@@ -1275,7 +1279,7 @@
 msgid "No connector found corresponding to \"%s\" continuation in \"%s\" POU"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2606
+#: ../PLCOpenEditor.py:2608
 msgid ""
 "No documentation available.\n"
 "Coming soon."
@@ -1327,11 +1331,11 @@
 msgid "Open\tCTRL+O"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2934
+#: ../PLCOpenEditor.py:2936
 msgid "Organization (optional):"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3859 ../Dialogs.py:427 ../Dialogs.py:1477
+#: ../PLCOpenEditor.py:3861 ../Dialogs.py:427 ../Dialogs.py:1477
 msgid "Output"
 msgstr ""
 
@@ -1341,31 +1345,31 @@
 "The PID (proportional, Integral, Derivative) function block provides the classical three term controller for closed loop control."
 msgstr ""
 
-#: ../PLCOpenEditor.py:1031 ../PLCOpenEditor.py:1118
+#: ../PLCOpenEditor.py:1033 ../PLCOpenEditor.py:1120
 msgid "PLCOpen files (*.xml)|*.xml|All files|*.*"
 msgstr ""
 
-#: ../PLCOpenEditor.py:485 ../PLCOpenEditor.py:838
+#: ../PLCOpenEditor.py:487 ../PLCOpenEditor.py:840
 msgid "PLCOpenEditor"
 msgstr ""
 
-#: ../PLCOpenEditor.py:438
+#: ../PLCOpenEditor.py:440
 msgid "PLCOpenEditor\tF1"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3272
+#: ../PLCOpenEditor.py:3274
 msgid "POU Name"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3227
+#: ../PLCOpenEditor.py:3229
 msgid "POU Name:"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3274
+#: ../PLCOpenEditor.py:3276
 msgid "POU Type"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3235
+#: ../PLCOpenEditor.py:3237
 msgid "POU Type:"
 msgstr ""
 
@@ -1373,16 +1377,16 @@
 msgid "Page Setup"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2950
+#: ../PLCOpenEditor.py:2952
 msgid "Page Size (optional):"
 msgstr ""
 
-#: ../PLCOpenEditor.py:5000
+#: ../PLCOpenEditor.py:5002
 #, python-format
 msgid "Page: %d"
 msgstr ""
 
-#: ../PLCOpenEditor.py:381
+#: ../PLCOpenEditor.py:383
 msgid "Paste\tCTRL+V"
 msgstr ""
 
@@ -1394,7 +1398,7 @@
 msgid "Please choose a target"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2461
+#: ../PLCOpenEditor.py:2463
 msgid "Please enter POU name"
 msgstr ""
 
@@ -1402,15 +1406,15 @@
 msgid "Please enter comment text"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2416 ../PLCOpenEditor.py:3647
+#: ../PLCOpenEditor.py:2418 ../PLCOpenEditor.py:3649
 msgid "Please enter configuration name"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2359
+#: ../PLCOpenEditor.py:2361
 msgid "Please enter data type name"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2431 ../PLCOpenEditor.py:3710
+#: ../PLCOpenEditor.py:2433 ../PLCOpenEditor.py:3712
 msgid "Please enter resource name"
 msgstr ""
 
@@ -1418,7 +1422,7 @@
 msgid "Please enter step name"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3118
+#: ../PLCOpenEditor.py:3120
 msgid "Please enter text"
 msgstr ""
 
@@ -1443,7 +1447,7 @@
 msgid "Print"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1150
+#: ../PLCOpenEditor.py:1152
 msgid "Print preview"
 msgstr ""
 
@@ -1455,23 +1459,23 @@
 msgid "Priority:"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2878
+#: ../PLCOpenEditor.py:2880
 msgid "Product Name (required):"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2894
+#: ../PLCOpenEditor.py:2896
 msgid "Product Release (optional):"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2886
+#: ../PLCOpenEditor.py:2888
 msgid "Product Version (required):"
 msgstr ""
 
-#: ../PLCOpenEditor.py:392 ../PLCOpenEditor.py:1814
+#: ../PLCOpenEditor.py:394 ../PLCOpenEditor.py:1816
 msgid "Program"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1095
+#: ../PLCOpenEditor.py:1097
 msgid "Program was successfully generated!"
 msgstr ""
 
@@ -1483,19 +1487,19 @@
 msgid "Programs can't be used by other POUs!"
 msgstr ""
 
-#: ../PLCOpenEditor.py:497 ../PLCOpenEditor.py:2901
+#: ../PLCOpenEditor.py:499 ../PLCOpenEditor.py:2903
 msgid "Project"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2862
+#: ../PLCOpenEditor.py:2864
 msgid "Project Name (required):"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2870
+#: ../PLCOpenEditor.py:2872
 msgid "Project Version (optional):"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2848
+#: ../PLCOpenEditor.py:2850
 msgid "Project properties"
 msgstr ""
 
@@ -1541,7 +1545,7 @@
 msgid "Reference"
 msgstr ""
 
-#: ../PLCOpenEditor.py:420
+#: ../PLCOpenEditor.py:422
 msgid "Refresh\tF5"
 msgstr ""
 
@@ -1549,7 +1553,7 @@
 msgid "Remainder (modulo)"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1818
+#: ../PLCOpenEditor.py:1820
 msgid "Rename"
 msgstr ""
 
@@ -1569,11 +1573,11 @@
 msgid "Resources"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3848 ../PLCOpenEditor.py:3849
+#: ../PLCOpenEditor.py:3850 ../PLCOpenEditor.py:3851
 msgid "Retain"
 msgstr ""
 
-#: ../PLCOpenEditor.py:4227
+#: ../PLCOpenEditor.py:4229
 msgid "Return Type:"
 msgstr ""
 
@@ -1607,7 +1611,7 @@
 msgid "Rounding up/down"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2978 ../PLCOpenEditor.py:3178
+#: ../PLCOpenEditor.py:2980 ../PLCOpenEditor.py:3180
 msgid "SFC"
 msgstr ""
 
@@ -1617,12 +1621,12 @@
 "The SR bistable is a latch where the Set dominates."
 msgstr ""
 
-#: ../PLCOpenEditor.py:3168 ../PLCOpenEditor.py:3178 ../PLCOpenEditor.py:3357
-#: ../PLCOpenEditor.py:3501
+#: ../PLCOpenEditor.py:3170 ../PLCOpenEditor.py:3180 ../PLCOpenEditor.py:3359
+#: ../PLCOpenEditor.py:3503
 msgid "ST"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1082
+#: ../PLCOpenEditor.py:1084
 msgid "ST files (*.st)|*.st|All files|*.*"
 msgstr ""
 
@@ -1634,19 +1638,19 @@
 msgid "Save As...\tCTRL+SHIFT+S"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2970
+#: ../PLCOpenEditor.py:2972
 msgid "Scaling:"
 msgstr ""
 
-#: ../PLCOpenEditor.py:396
+#: ../PLCOpenEditor.py:398
 msgid "Select All\tCTRL+A"
 msgstr ""
 
-#: ../PLCOpenEditor.py:4102
+#: ../PLCOpenEditor.py:4104
 msgid "Select a variable class:"
 msgstr ""
 
-#: ../PLCOpenEditor.py:604 ../PLCOpenEditor.py:616
+#: ../PLCOpenEditor.py:606 ../PLCOpenEditor.py:618
 msgid "Select an object"
 msgstr ""
 
@@ -1728,7 +1732,7 @@
 msgid "Tasks:"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3861
+#: ../PLCOpenEditor.py:3863
 msgid "Temp"
 msgstr ""
 
@@ -1736,11 +1740,11 @@
 msgid "The group of block must be coherent!"
 msgstr ""
 
-#: ../PLCOpenEditor.py:961
+#: ../PLCOpenEditor.py:963
 msgid "There are changes, do you want to save?"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1169
+#: ../PLCOpenEditor.py:1171
 msgid ""
 "There was a problem printing.\n"
 "Perhaps your current printer is not set correctly?"
@@ -1782,7 +1786,7 @@
 msgid "Time-of-day subtraction"
 msgstr ""
 
-#: ../PLCOpenEditor.py:608
+#: ../PLCOpenEditor.py:610
 msgid "Toolbar"
 msgstr ""
 
@@ -1790,11 +1794,11 @@
 msgid "Top"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3437
+#: ../PLCOpenEditor.py:3439
 msgid "Transition Name"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3404
+#: ../PLCOpenEditor.py:3406
 msgid "Transition Name:"
 msgstr ""
 
@@ -1817,7 +1821,7 @@
 msgid "Transitions"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3848 ../PLCOpenEditor.py:3849 ../RessourceEditor.py:83
+#: ../PLCOpenEditor.py:3850 ../PLCOpenEditor.py:3851 ../RessourceEditor.py:83
 #: ../Dialogs.py:2105 ../DataTypeEditor.py:46
 msgid "Type"
 msgstr ""
@@ -1835,7 +1839,7 @@
 msgid "Type:"
 msgstr ""
 
-#: ../PLCOpenEditor.py:560 ../PLCOpenEditor.py:596
+#: ../PLCOpenEditor.py:562 ../PLCOpenEditor.py:598
 msgid "Types"
 msgstr ""
 
@@ -1858,7 +1862,7 @@
 msgid "Unnamed%d"
 msgstr ""
 
-#: ../PLCOpenEditor.py:4098
+#: ../PLCOpenEditor.py:4100
 #, python-format
 msgid "Unrecognized data size \"%s\""
 msgstr ""
@@ -1875,7 +1879,7 @@
 "The up-down counter has two inputs CU and CD. It can be used to both count up on one input and down on the other."
 msgstr ""
 
-#: ../PLCOpenEditor.py:4497 ../DataTypeEditor.py:804
+#: ../PLCOpenEditor.py:4499 ../DataTypeEditor.py:804
 msgid "User Data Types"
 msgstr ""
 
@@ -1883,7 +1887,7 @@
 msgid "User-defined POUs"
 msgstr ""
 
-#: ../PLCOpenEditor.py:4614 ../Dialogs.py:2105
+#: ../PLCOpenEditor.py:4616 ../Dialogs.py:2105
 msgid "Value"
 msgstr ""
 
@@ -1895,7 +1899,7 @@
 msgid "Values:"
 msgstr ""
 
-#: ../PLCOpenEditor.py:4614 ../Dialogs.py:2109
+#: ../PLCOpenEditor.py:4616 ../Dialogs.py:2109
 msgid "Variable"
 msgstr ""
 
@@ -1903,7 +1907,7 @@
 msgid "Variable Properties"
 msgstr ""
 
-#: ../PLCOpenEditor.py:4102
+#: ../PLCOpenEditor.py:4104
 msgid "Variable class"
 msgstr ""
 
@@ -1911,28 +1915,28 @@
 msgid "Variable don't belong to this POU!"
 msgstr ""
 
-#: ../PLCOpenEditor.py:573 ../PLCOpenEditor.py:624 ../PLCOpenEditor.py:3860
+#: ../PLCOpenEditor.py:575 ../PLCOpenEditor.py:626 ../PLCOpenEditor.py:3862
 msgid "Variables"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3302 ../PLCOpenEditor.py:3680 ../PLCOpenEditor.py:3743
+#: ../PLCOpenEditor.py:3304 ../PLCOpenEditor.py:3682 ../PLCOpenEditor.py:3745
 #: ../LDViewer.py:859
 msgid "Warning"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2954
+#: ../PLCOpenEditor.py:2956
 msgid "Width:"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2697
+#: ../PLCOpenEditor.py:2699
 msgid "X Scale:"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2705
+#: ../PLCOpenEditor.py:2707
 msgid "Y Scale:"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3853
+#: ../PLCOpenEditor.py:3855
 msgid "Yes"
 msgstr ""
 
@@ -1944,41 +1948,41 @@
 msgid "You must select the wire where a contact should be added!"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3133 ../PLCOpenEditor.py:3664 ../PLCOpenEditor.py:3727
+#: ../PLCOpenEditor.py:3135 ../PLCOpenEditor.py:3666 ../PLCOpenEditor.py:3729
 #: ../Dialogs.py:1525 ../Dialogs.py:2508 ../Dialogs.py:2575
 msgid "You must type a name!"
 msgstr ""
 
-#: ../PLCOpenEditor.py:426
+#: ../PLCOpenEditor.py:428
 msgid "Zoom"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1091
+#: ../PLCOpenEditor.py:1093
 #, python-format
 msgid "error: %s\n"
 msgstr ""
 
-#: ../PLCOpenEditor.py:5032 ../PLCOpenEditor.py:5034
+#: ../PLCOpenEditor.py:5034 ../PLCOpenEditor.py:5036
 msgid "file : "
 msgstr ""
 
-#: ../PLCOpenEditor.py:3173
+#: ../PLCOpenEditor.py:3175
 msgid "function"
 msgstr ""
 
-#: ../PLCOpenEditor.py:5035
+#: ../PLCOpenEditor.py:5037
 msgid "function : "
 msgstr ""
 
-#: ../PLCOpenEditor.py:3173
+#: ../PLCOpenEditor.py:3175
 msgid "functionBlock"
 msgstr ""
 
-#: ../PLCOpenEditor.py:5035
+#: ../PLCOpenEditor.py:5037
 msgid "line : "
 msgstr ""
 
-#: ../PLCOpenEditor.py:3173
+#: ../PLCOpenEditor.py:3175
 msgid "program"
 msgstr ""
 
@@ -1994,7 +1998,7 @@
 msgid "string right of"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1089
+#: ../PLCOpenEditor.py:1091
 #, python-format
 msgid "warning: %s\n"
 msgstr ""
Binary file locale/fr_FR/LC_MESSAGES/PLCOpenEditor.mo has changed
--- a/plcopen/structures.py	Thu Aug 20 09:03:31 2009 -0600
+++ b/plcopen/structures.py	Wed Sep 02 08:30:34 2009 -0600
@@ -469,6 +469,8 @@
         outs = reduce(lambda a,b: a or b, map(lambda testtype : IsOfType(fdecl["outputs"][0][1],testtype), OutTypes))
         inps = reduce(lambda a,b: a or b, map(lambda testtype : IsOfType(fdecl["inputs"][0][1],testtype), InTypes))
         if inps and outs and fdecl["outputs"][0][1] != fdecl["inputs"][0][1]:
+             if Format[1] is None:
+                 return (Format[0], "__move_", "IN_type")
              return Format
     
     return None