Adding column for selecting task triggering in Resource Editor
authorlaurent
Tue, 20 Sep 2011 23:58:31 +0200
changeset 560 3757f0de0d07
parent 559 984c51d1bf6b
child 561 5c8fa95eb834
Adding column for selecting task triggering in Resource Editor
PLCControler.py
PLCOpenEditor.py
RessourceEditor.py
i18n/PLCOpenEditor_fr_FR.po
i18n/messages.pot
locale/fr_FR/LC_MESSAGES/PLCOpenEditor.mo
--- a/PLCControler.py	Thu Sep 15 22:29:32 2011 +0200
+++ b/PLCControler.py	Tue Sep 20 23:58:31 2011 +0200
@@ -2562,7 +2562,7 @@
             for task in tasks:
                 new_task = plcopen.resource_task()
                 new_task.setname(task["Name"])
-                if task["Single"] != "":
+                if task["Triggering"] == "Interrupt":
                     new_task.setsingle(task["Single"])
 ##                result = duration_model.match(task["Interval"]).groups()
 ##                if reduce(lambda x, y: x or y != None, result):
@@ -2575,7 +2575,7 @@
 ##                    if result[-1] is not None:
 ##                        values.append(int(float(result[-1]) * 1000))
 ##                    new_task.setinterval(datetime.time(*values))
-                if task["Interval"] != "":
+                if task["Triggering"] == "Cyclic":
                     new_task.setinterval(task["Interval"])
                 new_task.setpriority(int(task["Priority"]))
                 if task["Name"] != "":
@@ -2598,12 +2598,12 @@
                 new_task = {}
                 new_task["Name"] = task.getname()
                 single = task.getsingle()
-                if single:
+                if single is not None:
                     new_task["Single"] = single
                 else:
                     new_task["Single"] = ""
                 interval = task.getinterval()
-                if interval:
+                if interval is not None:
 ##                    text = ""
 ##                    if interval.hour != 0:
 ##                        text += "%dh"%interval.hour
@@ -2620,6 +2620,12 @@
                     new_task["Interval"] = interval
                 else:
                     new_task["Interval"] = ""
+                if single is not None and interval is None:
+                    new_task["Triggering"] = "Interrupt"
+                elif interval is not None and single is None:
+                    new_task["Triggering"] = "Cyclic"
+                else:
+                    new_task["Triggering"] = ""
                 new_task["Priority"] = str(task.getpriority())
                 tasks_data.append(new_task)
                 for instance in task.getpouInstance():
--- a/PLCOpenEditor.py	Thu Sep 15 22:29:32 2011 +0200
+++ b/PLCOpenEditor.py	Tue Sep 20 23:58:31 2011 +0200
@@ -321,6 +321,7 @@
               kind=wx.ITEM_NORMAL, text=_(u'Redo\tCTRL+Y'))
         #AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO,
         #      kind=wx.ITEM_CHECK, text=_(u'Enable Undo/Redo'))
+        enable_undo_redo = _(u'Enable Undo/Redo') # Keeping text in translations for possible menu reactivation
         parent.AppendSeparator()
         AppendMenu(parent, help='', id=wx.ID_CUT,
               kind=wx.ITEM_NORMAL, text=_(u'Cut\tCTRL+X'))
--- a/RessourceEditor.py	Thu Sep 15 22:29:32 2011 +0200
+++ b/RessourceEditor.py	Tue Sep 20 23:58:31 2011 +0200
@@ -79,7 +79,12 @@
 
 def GetTasksTableColnames():
     _ = lambda x : x
-    return [_("Name"), _("Single"), _("Interval"), _("Priority")]
+    return [_("Name"), _("Triggering"), _("Single"), _("Interval"), _("Priority")]
+
+def GetTaskTriggeringOptions():
+    _ = lambda x : x
+    return [_("Interrupt"), _("Cyclic")]
+TASKTRIGGERINGOPTIONS_DICT = dict([(_(option), option) for option in GetTaskTriggeringOptions()])
 
 def GetInstancesTableColnames():
     _ = lambda x : x
@@ -135,15 +140,21 @@
 
     def GetValue(self, row, col):
         if row < self.GetNumberRows():
-            name = str(self.data[row].get(self.GetColLabelValue(col, False), ""))
-            return name
-    
+            colname = self.GetColLabelValue(col, False)
+            value = str(self.data[row].get(colname, ""))
+            if colname == "Triggering":
+                return _(value)
+            return value
+        
     def GetValueByName(self, row, colname):
         return self.data[row].get(colname)
 
     def SetValue(self, row, col, value):
         if col < len(self.colnames):
-            self.data[row][self.GetColLabelValue(col, False)] = value
+            colname = self.GetColLabelValue(col, False)
+            if colname == "Triggering":
+                value = TASKTRIGGERINGOPTIONS_DICT[value]
+            self.data[row][colname] = value
     
     def SetValueByName(self, row, colname, value):
         if colname in self.colnames:
@@ -203,16 +214,19 @@
                 renderer = None
                 colname = self.GetColLabelValue(col, False)
                 grid.SetReadOnly(row, col, False)
-                if colname in ["Name","Interval"]:
+                if colname in ["Name", "Interval"]:
                     editor = wx.grid.GridCellTextEditor()
                     renderer = wx.grid.GridCellStringRenderer()
-                    if colname == "Interval" and self.GetValueByName(row, "Single") != "":
+                    if colname == "Interval" and self.GetValueByName(row, "Triggering") != "Cyclic":
                         grid.SetReadOnly(row, col, True)
                 elif colname == "Single":
                     editor = wx.grid.GridCellChoiceEditor()
                     editor.SetParameters(self.Parent.VariableList)
-                    if self.GetValueByName(row, "Interval") != "":
+                    if self.GetValueByName(row, "Triggering") != "Interrupt":
                         grid.SetReadOnly(row, col, True)
+                elif colname == "Triggering":
+                    editor = wx.grid.GridCellChoiceEditor()
+                    editor.SetParameters(",".join([""] + GetTaskTriggeringOptions()))
                 elif colname == "Type":
                     editor = wx.grid.GridCellChoiceEditor()
                     editor.SetParameters(self.Parent.TypeList)
@@ -233,6 +247,11 @@
                 else:
                     grid.SetCellTextColour(row, col, wx.BLACK)
                     grid.SetCellBackgroundColour(row, col, wx.WHITE)
+            if wx.Platform == '__WXMSW__':
+                grid.SetRowMinimalHeight(row, 20)
+            else:
+                grid.SetRowMinimalHeight(row, 28)
+            grid.AutoSizeRow(row, False)
     
     def SetData(self, data):
         self.data = data
@@ -249,14 +268,18 @@
     def AppendRow(self, row_content):
         self.data.append(row_content)
 
+    def InsertRow(self, index, row_content):
+        self.data.insert(index, row_content)
+
     def RemoveRow(self, row_index):
         self.data.pop(row_index)
         
-    def MoveRow(self, row_index, move, grid):
+    def MoveRow(self, row_index, move):
         new_index = max(0, min(row_index + move, len(self.data) - 1))
         if new_index != row_index:
             self.data.insert(new_index, self.data.pop(row_index))
-            grid.SetGridCursor(new_index, grid.GetGridCursorCol())
+            return new_index
+        return None
 
     def Empty(self):
         self.data = []
@@ -438,10 +461,10 @@
         self.Controler = controler
         self.TagName = tagname
         
-        self.TasksDefaultValue = {"Name" : "", "Single" : "", "Interval" : "", "Priority" : 0}
+        self.TasksDefaultValue = {"Name" : "", "Triggering" : "", "Single" : "", "Interval" : "", "Priority" : 0}
         self.TasksTable = ResourceTable(self, [], GetTasksTableColnames())
-        self.TasksTable.SetColAlignements([wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_RIGHT, wx.ALIGN_RIGHT])
-        self.TasksTable.SetColSizes([200, 100, 100, 100])
+        self.TasksTable.SetColAlignements([wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_RIGHT, wx.ALIGN_RIGHT])
+        self.TasksTable.SetColSizes([200, 100, 100, 100, 100])
         self.TasksGrid.SetTable(self.TasksTable)
         self.TasksGrid.SetRowLabelSize(0)
         self.TasksTable.ResetView(self.TasksGrid)
@@ -499,74 +522,118 @@
         self.ParentWindow.RefreshFileMenu()
         self.ParentWindow.RefreshEditMenu()
 
-    def RefreshView(self):
+    def RefreshView(self, task_select=None, instance_select=None):
         tasks, instances = self.Controler.GetEditedResourceInfos(self.TagName)
         self.TasksTable.SetData(tasks)
         self.InstancesTable.SetData(instances)
         self.RefreshTypeList()
         self.RefreshTaskList()
         self.RefreshVariableList()
+        self.TasksTable.ResetView(self.TasksGrid)
         self.InstancesTable.ResetView(self.InstancesGrid)
-        self.TasksTable.ResetView(self.TasksGrid)
-
+        if task_select is not None and len(tasks) > 0:
+            if task_select == -1:
+                task_select = len(tasks) - 1
+            else:
+                task_select = min(task_select, len(tasks) - 1)
+            col = self.TasksGrid.GetGridCursorCol()
+            self.TasksGrid.SetGridCursor(task_select, col)
+            self.TasksGrid.MakeCellVisible(instance_select, col)
+            self.TasksGrid.SetFocus()
+        if instance_select is not None and len(instances) > 0:
+            if instance_select == -1:
+                instance_select = len(instances) - 1
+            else:
+                task_select = min(task_select, len(instances) - 1)
+            col = self.InstancesGrid.GetGridCursorCol()
+            self.InstancesGrid.SetGridCursor(instance_select, col)
+            self.InstancesGrid.MakeCellVisible(instance_select, col)
+            self.InstancesGrid.SetFocus()
+        
     def RefreshScaling(self, refresh=True):
         pass
 
+    def CloseTasksGridEditControl(self):
+        row = self.TasksGrid.GetGridCursorRow()
+        col = self.TasksGrid.GetGridCursorCol()
+        self.TasksGrid.SetGridCursor(row, col)
+
     def OnAddTaskButton(self, event):
-        self.TasksTable.AppendRow(self.TasksDefaultValue.copy())
-        self.RefreshModel()
-        self.RefreshView()
+        self.CloseTasksGridEditControl()
+        if len(self.TasksTable.data) > 0:
+            row = self.TasksGrid.GetGridCursorRow() + 1
+        else:
+            row = -1
+        self.TasksTable.InsertRow(row, self.TasksDefaultValue.copy())
+        self.RefreshModel()
+        self.RefreshView(task_select=row)
         event.Skip()
 
     def OnDeleteTaskButton(self, event):
+        self.CloseTasksGridEditControl()
         row = self.TasksGrid.GetGridCursorRow()
         self.TasksTable.RemoveRow(row)
         self.RefreshModel()
-        self.RefreshView()
+        self.RefreshView(task_select=row)
         event.Skip()
 
     def OnUpTaskButton(self, event):
+        self.CloseTasksGridEditControl()
         row = self.TasksGrid.GetGridCursorRow()
-        self.TasksTable.MoveRow(row, -1, self.TasksGrid)
-        self.RefreshModel()
-        self.RefreshView()
+        new_row = self.TasksTable.MoveRow(row, -1)
+        self.RefreshModel()
+        self.RefreshView(task_select=new_row)
         event.Skip()
 
     def OnDownTaskButton(self, event):
+        self.CloseTasksGridEditControl()
         row = self.TasksGrid.GetGridCursorRow()
-        self.TasksTable.MoveRow(row, 1, self.TasksGrid)
-        self.RefreshModel()
-        self.RefreshView()
-        event.Skip()
+        new_row = self.TasksTable.MoveRow(row, 1)
+        self.RefreshModel()
+        self.RefreshView(task_select=new_row)
+        event.Skip()
+
+    def CloseInstancesGridEditControl(self):
+        row = self.InstancesGrid.GetGridCursorRow()
+        col = self.InstancesGrid.GetGridCursorCol()
+        self.InstancesGrid.SetGridCursor(row, col)
 
     def OnAddInstanceButton(self, event):
-        self.InstancesTable.AppendRow(self.InstancesDefaultValue.copy())
-        self.RefreshModel()
-        self.RefreshView()
+        self.CloseInstancesGridEditControl()
+        if len(self.InstancesTable.data) > 0:
+            row = self.InstancesGrid.GetGridCursorRow() + 1
+        else:
+            row = -1
+        self.InstancesTable.InsertRow(row, self.InstancesDefaultValue.copy())
+        self.RefreshModel()
+        self.RefreshView(instance_select=row)
         self.ParentWindow.RefreshInstancesTree()
         event.Skip()
 
     def OnDeleteInstanceButton(self, event):
+        self.CloseInstancesGridEditControl()
         row = self.InstancesGrid.GetGridCursorRow()
         self.InstancesTable.RemoveRow(row)
         self.RefreshModel()
-        self.RefreshView()
+        self.RefreshView(instance_select=row)
         self.ParentWindow.RefreshInstancesTree()
         event.Skip()
 
     def OnUpInstanceButton(self, event):
+        self.CloseInstancesGridEditControl()
         row = self.InstancesGrid.GetGridCursorRow()
-        self.InstancesTable.MoveRow(row, -1, self.InstancesGrid)
-        self.RefreshModel()
-        self.RefreshView()
+        new_row = self.InstancesTable.MoveRow(row, -1)
+        self.RefreshModel()
+        self.RefreshView(instance_select=new_row)
         self.ParentWindow.RefreshInstancesTree()
         event.Skip()
 
     def OnDownInstanceButton(self, event):
+        self.CloseInstancesGridEditControl()
         row = self.InstancesGrid.GetGridCursorRow()
-        self.InstancesTable.MoveRow(row, 1, self.InstancesGrid)
-        self.RefreshModel()
-        self.RefreshView()
+        new_row = self.InstancesTable.MoveRow(row, 1)
+        self.RefreshModel()
+        self.RefreshView(instance_select=new_row)
         self.ParentWindow.RefreshInstancesTree()
         event.Skip()
 
@@ -586,12 +653,13 @@
                     if self.InstancesTable.GetValueByName(i, "Task") == old_name:
                         self.InstancesTable.SetValueByName(i, "Task", new_name)
         self.RefreshModel()
-        self.RefreshView()
+        colname = self.TasksTable.GetColLabelValue(col, False)
+        if colname == "Triggering":
+            wx.CallAfter(self.RefreshView)
         event.Skip()
 
     def OnInstancesGridCellChange(self, event):
         self.RefreshModel()
-        self.RefreshView()
         self.ParentWindow.RefreshInstancesTree()
         event.Skip()
 
--- a/i18n/PLCOpenEditor_fr_FR.po	Thu Sep 15 22:29:32 2011 +0200
+++ b/i18n/PLCOpenEditor_fr_FR.po	Tue Sep 20 23:58:31 2011 +0200
@@ -7,8 +7,8 @@
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-09-13 12:41+0200\n"
-"PO-Revision-Date: 2011-09-13 12:55+0100\n"
+"POT-Creation-Date: 2011-09-20 23:54+0200\n"
+"PO-Revision-Date: 2011-09-20 23:55+0100\n"
 "Last-Translator: Laurent BESSARD <laurent.bessard@gmail.com>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
 "Language: \n"
@@ -16,7 +16,7 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: ../PLCOpenEditor.py:4406
+#: ../PLCOpenEditor.py:4411
 msgid ""
 "\n"
 "An error has occurred.\n"
@@ -62,13 +62,13 @@
 msgid "   Temp"
 msgstr "  Temporaire"
 
-#: ../PLCOpenEditor.py:4416
+#: ../PLCOpenEditor.py:4421
 msgid " : "
 msgstr " : "
 
-#: ../PLCOpenEditor.py:3332
-#: ../PLCOpenEditor.py:3495
-#: ../PLCOpenEditor.py:3639
+#: ../PLCOpenEditor.py:3337
+#: ../PLCOpenEditor.py:3500
+#: ../PLCOpenEditor.py:3644
 #: ../dialogs/SFCTransitionDialog.py:206
 #, python-format
 msgid " and %s"
@@ -94,8 +94,8 @@
 msgid "\"%s\" can't use itself!"
 msgstr "\"%s\" ne peut pas s'utiliser lui-même !"
 
-#: ../PLCOpenEditor.py:1422
-#: ../PLCOpenEditor.py:1442
+#: ../PLCOpenEditor.py:1427
+#: ../PLCOpenEditor.py:1447
 #, python-format
 msgid "\"%s\" config already exists!"
 msgstr "La configuration \"%s\" existe déjà !"
@@ -105,8 +105,8 @@
 msgid "\"%s\" configuration already exists !!!"
 msgstr "La configuration \"%s\" existe déjà !!!"
 
-#: ../PLCOpenEditor.py:1376
-#: ../PLCOpenEditor.py:3194
+#: ../PLCOpenEditor.py:1381
+#: ../PLCOpenEditor.py:3199
 #, python-format
 msgid "\"%s\" data type already exists!"
 msgstr "Le type de données \"%s\" existe déjà !"
@@ -117,8 +117,8 @@
 msgid "\"%s\" element can't be pasted here!!!"
 msgstr "L'élément \"%s\" ne peut être collé ici !!!"
 
-#: ../PLCOpenEditor.py:3514
-#: ../PLCOpenEditor.py:3658
+#: ../PLCOpenEditor.py:3519
+#: ../PLCOpenEditor.py:3663
 #: ../Viewer.py:250
 #: ../TextViewer.py:245
 #: ../TextViewer.py:262
@@ -133,14 +133,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:1367
-#: ../PLCOpenEditor.py:3190
-#: ../PLCOpenEditor.py:3343
-#: ../PLCOpenEditor.py:3506
-#: ../PLCOpenEditor.py:3650
-#: ../PLCOpenEditor.py:3721
-#: ../PLCOpenEditor.py:3784
-#: ../VariablePanel.py:735
+#: ../PLCOpenEditor.py:1372
+#: ../PLCOpenEditor.py:3195
+#: ../PLCOpenEditor.py:3348
+#: ../PLCOpenEditor.py:3511
+#: ../PLCOpenEditor.py:3655
+#: ../PLCOpenEditor.py:3726
+#: ../PLCOpenEditor.py:3789
+#: ../VariablePanel.py:744
 #: ../dialogs/ConnectionDialog.py:207
 #: ../dialogs/FBDBlockDialog.py:252
 #: ../dialogs/FBDVariableDialog.py:268
@@ -163,20 +163,20 @@
 msgid "\"%s\" is an invalid value!"
 msgstr "\"%s\" n'est pas une valeur valide !"
 
-#: ../PLCOpenEditor.py:2673
-#: ../PLCOpenEditor.py:2702
+#: ../PLCOpenEditor.py:2678
+#: ../PLCOpenEditor.py:2707
 #, python-format
 msgid "\"%s\" is not a valid folder!"
 msgstr "\"%s\" n'est pas un répertoire valide !"
 
-#: ../PLCOpenEditor.py:1365
-#: ../PLCOpenEditor.py:3186
-#: ../PLCOpenEditor.py:3339
-#: ../PLCOpenEditor.py:3502
-#: ../PLCOpenEditor.py:3646
-#: ../PLCOpenEditor.py:3717
-#: ../PLCOpenEditor.py:3780
-#: ../VariablePanel.py:730
+#: ../PLCOpenEditor.py:1370
+#: ../PLCOpenEditor.py:3191
+#: ../PLCOpenEditor.py:3344
+#: ../PLCOpenEditor.py:3507
+#: ../PLCOpenEditor.py:3651
+#: ../PLCOpenEditor.py:3722
+#: ../PLCOpenEditor.py:3785
+#: ../VariablePanel.py:739
 #: ../dialogs/ConnectionDialog.py:203
 #: ../dialogs/FBDBlockDialog.py:248
 #: ../dialogs/PouNameDialog.py:59
@@ -188,14 +188,14 @@
 msgstr "\"%s\" n'est pas un identifiant valide !"
 
 #: ../PLCOpenEditor.py:288
-#: ../PLCOpenEditor.py:2322
-#: ../PLCOpenEditor.py:2342
+#: ../PLCOpenEditor.py:2327
+#: ../PLCOpenEditor.py:2347
 #, 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:1385
-#: ../PLCOpenEditor.py:3347
+#: ../PLCOpenEditor.py:1390
+#: ../PLCOpenEditor.py:3352
 #: ../Viewer.py:248
 #: ../Viewer.py:274
 #: ../TextViewer.py:243
@@ -266,41 +266,41 @@
 msgid "%s body don't have text!"
 msgstr "Le code d'un %s n'a pas de texte !"
 
-#: ../PLCOpenEditor.py:4394
-#: ../PLCOpenEditor.py:4396
-#: ../PLCOpenEditor.py:4397
+#: ../PLCOpenEditor.py:4399
+#: ../PLCOpenEditor.py:4401
+#: ../PLCOpenEditor.py:4402
 msgid ",   "
 msgstr ",   "
 
-#: ../PLCOpenEditor.py:3334
-#: ../PLCOpenEditor.py:3497
-#: ../PLCOpenEditor.py:3641
+#: ../PLCOpenEditor.py:3339
+#: ../PLCOpenEditor.py:3502
+#: ../PLCOpenEditor.py:3646
 #: ../dialogs/SFCTransitionDialog.py:208
 #, python-format
 msgid ", %s"
 msgstr ", %s"
 
-#: ../PLCOpenEditor.py:4392
+#: ../PLCOpenEditor.py:4397
 msgid ". "
 msgstr ". "
 
-#: ../PLCOpenEditor.py:1388
-#: ../PLCOpenEditor.py:1430
-#: ../PLCOpenEditor.py:1450
-#: ../PLCOpenEditor.py:3351
-#: ../PLCOpenEditor.py:3729
-#: ../PLCOpenEditor.py:3792
+#: ../PLCOpenEditor.py:1393
+#: ../PLCOpenEditor.py:1435
+#: ../PLCOpenEditor.py:1455
+#: ../PLCOpenEditor.py:3356
+#: ../PLCOpenEditor.py:3734
+#: ../PLCOpenEditor.py:3797
 #, python-format
 msgid "A POU has an element named \"%s\". This could cause 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:1401
-#: ../PLCOpenEditor.py:1412
-#: ../PLCOpenEditor.py:3510
-#: ../PLCOpenEditor.py:3654
-#: ../PLCOpenEditor.py:3725
-#: ../PLCOpenEditor.py:3788
-#: ../VariablePanel.py:740
+#: ../PLCOpenEditor.py:1406
+#: ../PLCOpenEditor.py:1417
+#: ../PLCOpenEditor.py:3515
+#: ../PLCOpenEditor.py:3659
+#: ../PLCOpenEditor.py:3730
+#: ../PLCOpenEditor.py:3793
+#: ../VariablePanel.py:749
 #: ../dialogs/PouNameDialog.py:67
 #: ../dialogs/SFCStepDialog.py:187
 #: ../dialogs/SFCStepNameDialog.py:69
@@ -308,24 +308,24 @@
 msgid "A POU named \"%s\" already exists!"
 msgstr "Un POU nommé \"%s\" existe déjà !"
 
-#: ../VariablePanel.py:1239
+#: ../VariablePanel.py:1250
 msgid "A location must be selected!"
 msgstr "Une adresse doit être sélectionné !"
 
-#: ../PLCOpenEditor.py:1403
-#: ../PLCOpenEditor.py:1414
-#: ../VariablePanel.py:745
+#: ../PLCOpenEditor.py:1408
+#: ../PLCOpenEditor.py:1419
+#: ../VariablePanel.py:754
 #: ../dialogs/SFCStepDialog.py:191
 #: ../dialogs/SFCStepNameDialog.py:73
 #, 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:2514
+#: ../PLCOpenEditor.py:2519
 msgid "About"
 msgstr "A propos"
 
-#: ../PLCOpenEditor.py:2417
+#: ../PLCOpenEditor.py:2422
 msgid "About PLCOpenEditor"
 msgstr "A propos de PLCOpenEditor"
 
@@ -338,11 +338,11 @@
 msgid "Action"
 msgstr "Action"
 
-#: ../PLCOpenEditor.py:3630
+#: ../PLCOpenEditor.py:3635
 msgid "Action Name"
 msgstr "Nom de l'action"
 
-#: ../PLCOpenEditor.py:3597
+#: ../PLCOpenEditor.py:3602
 msgid "Action Name:"
 msgstr "Nom de l'action :"
 
@@ -365,16 +365,16 @@
 msgid "Add"
 msgstr "Ajouter"
 
-#: ../PLCOpenEditor.py:1606
-#: ../PLCOpenEditor.py:1689
+#: ../PLCOpenEditor.py:1611
+#: ../PLCOpenEditor.py:1694
 msgid "Add Action"
 msgstr "Ajouter une action"
 
-#: ../PLCOpenEditor.py:1672
+#: ../PLCOpenEditor.py:1677
 msgid "Add Configuration"
 msgstr "Ajouter une configuration"
 
-#: ../PLCOpenEditor.py:1652
+#: ../PLCOpenEditor.py:1657
 msgid "Add DataType"
 msgstr "Ajouter un type de donnée"
 
@@ -382,29 +382,29 @@
 msgid "Add Divergence Branch"
 msgstr "Ajouter une branche à la divergence"
 
-#: ../PLCOpenEditor.py:333
+#: ../PLCOpenEditor.py:334
 msgid "Add Element"
 msgstr "Ajouter un élément"
 
-#: ../RessourceEditor.py:412
+#: ../RessourceEditor.py:435
 msgid "Add Instance"
 msgstr "Ajouter une instance"
 
-#: ../PLCOpenEditor.py:1659
+#: ../PLCOpenEditor.py:1664
 msgid "Add POU"
 msgstr "Ajouter un POU"
 
-#: ../PLCOpenEditor.py:1635
-#: ../PLCOpenEditor.py:1700
+#: ../PLCOpenEditor.py:1640
+#: ../PLCOpenEditor.py:1705
 msgid "Add Resource"
 msgstr "Ajouter une resource"
 
-#: ../RessourceEditor.py:376
+#: ../RessourceEditor.py:399
 msgid "Add Task"
 msgstr "Ajouter une tâche"
 
-#: ../PLCOpenEditor.py:1603
-#: ../PLCOpenEditor.py:1678
+#: ../PLCOpenEditor.py:1608
+#: ../PLCOpenEditor.py:1683
 msgid "Add Transition"
 msgstr "Ajouter une transition"
 
@@ -412,7 +412,7 @@
 msgid "Add Wire Segment"
 msgstr "Ajouter un segment au fil"
 
-#: ../PLCOpenEditor.py:2194
+#: ../PLCOpenEditor.py:2199
 msgid "Add a new data type"
 msgstr "Ajouter un nouveau type de données"
 
@@ -429,11 +429,11 @@
 msgid "Add a new step"
 msgstr "Ajouter une nouvelle étape"
 
-#: ../PLCOpenEditor.py:2246
+#: ../PLCOpenEditor.py:2251
 msgid "Add new configuration"
 msgstr "Ajouter une nouvelle configuration"
 
-#: ../PLCOpenEditor.py:2259
+#: ../PLCOpenEditor.py:2264
 msgid "Add new resource"
 msgstr "Ajouter une nouvelle resource"
 
@@ -450,8 +450,8 @@
 msgstr "Alignement"
 
 #: ../VariablePanel.py:70
-#: ../VariablePanel.py:1056
-#: ../VariablePanel.py:1173
+#: ../VariablePanel.py:1067
+#: ../VariablePanel.py:1184
 msgid "All"
 msgstr "Toutes"
 
@@ -476,7 +476,7 @@
 msgid "Arithmetic"
 msgstr "Arithmétique"
 
-#: ../VariablePanel.py:798
+#: ../VariablePanel.py:807
 #: ../DataTypeEditor.py:236
 msgid "Array"
 msgstr "Tableau"
@@ -489,11 +489,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:2985
+#: ../PLCOpenEditor.py:2990
 msgid "Author"
 msgstr "Auteur"
 
-#: ../PLCOpenEditor.py:2970
+#: ../PLCOpenEditor.py:2975
 msgid "Author Name (optional):"
 msgstr "Nom de l'auteur (optionel) :"
 
@@ -503,7 +503,7 @@
 msgid "Base Type:"
 msgstr "Type de base :"
 
-#: ../VariablePanel.py:778
+#: ../VariablePanel.py:787
 #: ../DataTypeEditor.py:801
 msgid "Base Types"
 msgstr "Types de base"
@@ -540,7 +540,7 @@
 msgid "Block Properties"
 msgstr "Propriétés du bloc"
 
-#: ../PLCOpenEditor.py:1913
+#: ../PLCOpenEditor.py:1918
 #: ../dialogs/FBDBlockDialog.py:268
 msgid "Block Types"
 msgstr "Types de blocs"
@@ -549,11 +549,11 @@
 msgid "Bottom"
 msgstr "Bas"
 
-#: ../VariablePanel.py:1115
+#: ../VariablePanel.py:1126
 msgid "Browse Locations"
 msgstr "Naviger dans les adresses"
 
-#: ../PLCOpenEditor.py:1854
+#: ../PLCOpenEditor.py:1859
 msgid "CSV Log"
 msgstr "Log CVS"
 
@@ -568,7 +568,7 @@
 msgid "Can only give a location to local or global variables"
 msgstr "Une adresse ne peut être affecté qu'à des variables locales ou globales"
 
-#: ../PLCOpenEditor.py:2668
+#: ../PLCOpenEditor.py:2673
 #, python-format
 msgid "Can't generate program to file %s!"
 msgstr "Le programme n'a pu être généré dans le fichier \"%s\" !"
@@ -577,7 +577,7 @@
 msgid "Can't give a location to a function block instance"
 msgstr "Une adresse ne peut être affectée une instance de Function Block"
 
-#: ../PLCOpenEditor.py:2700
+#: ../PLCOpenEditor.py:2705
 #, python-format
 msgid "Can't save project to file %s!"
 msgstr "Le projet n'a pu être sauvé dans le fichier \"%s\" !"
@@ -586,7 +586,7 @@
 msgid "Center"
 msgstr "Centre"
 
-#: ../PLCOpenEditor.py:1624
+#: ../PLCOpenEditor.py:1629
 msgid "Change POU Type To"
 msgstr "Changer le type du POU pour"
 
@@ -594,9 +594,9 @@
 msgid "Character string"
 msgstr "Chaîne de caractères"
 
-#: ../PLCOpenEditor.py:2630
-#: ../PLCOpenEditor.py:2658
-#: ../PLCOpenEditor.py:2694
+#: ../PLCOpenEditor.py:2635
+#: ../PLCOpenEditor.py:2663
+#: ../PLCOpenEditor.py:2699
 msgid "Choose a file"
 msgstr "Choisissez un fichier"
 
@@ -613,7 +613,7 @@
 msgid "Class:"
 msgstr "Classe :"
 
-#: ../PLCOpenEditor.py:372
+#: ../PLCOpenEditor.py:373
 msgid "Clear Errors\tCTRL+K"
 msgstr "Effacer les erreurs\tCTRL+K"
 
@@ -621,16 +621,16 @@
 msgid "Clear Execution Order"
 msgstr "Effacer l'ordre d'exécution"
 
-#: ../PLCOpenEditor.py:2548
+#: ../PLCOpenEditor.py:2553
 msgid "Close Application"
 msgstr "Fermer l'application"
 
-#: ../PLCOpenEditor.py:887
-#: ../PLCOpenEditor.py:2470
+#: ../PLCOpenEditor.py:888
+#: ../PLCOpenEditor.py:2475
 msgid "Close Project"
 msgstr "Fermer le projet"
 
-#: ../PLCOpenEditor.py:2468
+#: ../PLCOpenEditor.py:2473
 msgid "Close Tab\tCTRL+W"
 msgstr "Fermer l'onglet\tCTRL+W"
 
@@ -638,11 +638,11 @@
 msgid "Comment"
 msgstr "Commentaire"
 
-#: ../PLCOpenEditor.py:2954
+#: ../PLCOpenEditor.py:2959
 msgid "Company Name (required):"
 msgstr "Nom de l'entreprise (obligatoire) :"
 
-#: ../PLCOpenEditor.py:2962
+#: ../PLCOpenEditor.py:2967
 msgid "Company URL (optional):"
 msgstr "URL de l'entreprise (optionel) :"
 
@@ -654,7 +654,7 @@
 msgid "Concatenation"
 msgstr "Concaténation"
 
-#: ../PLCOpenEditor.py:343
+#: ../PLCOpenEditor.py:344
 msgid "Configuration"
 msgstr "Configuration"
 
@@ -682,7 +682,7 @@
 msgid "Constant"
 msgstr "Constante"
 
-#: ../PLCOpenEditor.py:3044
+#: ../PLCOpenEditor.py:3049
 msgid "Content Description (optional):"
 msgstr "Description du contenu (optionel) :"
 
@@ -706,11 +706,11 @@
 msgid "Conversion to time-of-day"
 msgstr "Conversion en heure de la journée"
 
-#: ../PLCOpenEditor.py:328
+#: ../PLCOpenEditor.py:329
 msgid "Copy\tCTRL+C"
 msgstr "Copier\tCtrl+C"
 
-#: ../PLCOpenEditor.py:1611
+#: ../PLCOpenEditor.py:1616
 msgid "Copy POU"
 msgstr "Copier ce POU"
 
@@ -723,11 +723,11 @@
 msgid "Couldn't paste non-POU object."
 msgstr "Impossible de coller autre chose qu'un POU."
 
-#: ../PLCOpenEditor.py:3272
+#: ../PLCOpenEditor.py:3277
 msgid "Create a new POU"
 msgstr "Créer un nouveau POU"
 
-#: ../PLCOpenEditor.py:3593
+#: ../PLCOpenEditor.py:3598
 msgid "Create a new action"
 msgstr "Créer une nouvelle action"
 
@@ -796,7 +796,7 @@
 msgstr "Créer une nouvelle étape"
 
 #: ../PLCOpenEditor.py:217
-#: ../PLCOpenEditor.py:3449
+#: ../PLCOpenEditor.py:3454
 msgid "Create a new transition"
 msgstr "Créer une nouvelle transition"
 
@@ -806,10 +806,14 @@
 msgid "Create a new variable"
 msgstr "Créer une nouvelle variable"
 
-#: ../PLCOpenEditor.py:326
+#: ../PLCOpenEditor.py:327
 msgid "Cut\tCTRL+X"
 msgstr "Couper\tCTRL+X"
 
+#: ../RessourceEditor.py:86
+msgid "Cyclic"
+msgstr "Périodique"
+
 #: ../plcopen/iec_std.csv:42
 #: ../plcopen/iec_std.csv:44
 #: ../plcopen/iec_std.csv:46
@@ -822,7 +826,7 @@
 msgid "DEPRECATED"
 msgstr ""
 
-#: ../PLCOpenEditor.py:335
+#: ../PLCOpenEditor.py:336
 msgid "Data Type"
 msgstr "Type de donnée"
 
@@ -856,15 +860,15 @@
 msgid "Debug: %s"
 msgstr "Déboggage : %s"
 
-#: ../PLCOpenEditor.py:623
+#: ../PLCOpenEditor.py:624
 msgid "Debugger"
 msgstr "Déboggueur"
 
-#: ../PLCOpenEditor.py:347
-#: ../PLCOpenEditor.py:1629
-#: ../PLCOpenEditor.py:1638
-#: ../PLCOpenEditor.py:1644
-#: ../PLCOpenEditor.py:4164
+#: ../PLCOpenEditor.py:348
+#: ../PLCOpenEditor.py:1634
+#: ../PLCOpenEditor.py:1643
+#: ../PLCOpenEditor.py:1649
+#: ../PLCOpenEditor.py:4169
 #: ../Viewer.py:415
 #: ../VariablePanel.py:504
 #: ../dialogs/ActionBlockDialog.py:279
@@ -876,11 +880,11 @@
 msgid "Delete Divergence Branch"
 msgstr "Supprimer une branche de divergence"
 
-#: ../RessourceEditor.py:417
+#: ../RessourceEditor.py:440
 msgid "Delete Instance"
 msgstr "Supprimer une instance"
 
-#: ../RessourceEditor.py:381
+#: ../RessourceEditor.py:404
 msgid "Delete Task"
 msgstr "Supprimer une tâche"
 
@@ -913,7 +917,7 @@
 msgid "Dimensions:"
 msgstr "Dimensions :"
 
-#: ../VariablePanel.py:1132
+#: ../VariablePanel.py:1143
 msgid "Direction:"
 msgstr "Direction :"
 
@@ -934,7 +938,7 @@
 msgid "Documentation"
 msgstr "Documentation"
 
-#: ../PLCOpenEditor.py:2662
+#: ../PLCOpenEditor.py:2667
 msgid "Done"
 msgstr "Terminé"
 
@@ -1002,7 +1006,7 @@
 msgid "Elements :"
 msgstr "Eléments :"
 
-#: ../PLCOpenEditor.py:323
+#: ../PLCOpenEditor.py:324
 msgid "Enable Undo/Redo"
 msgstr "Activer Défaire/Refaire"
 
@@ -1014,56 +1018,56 @@
 msgid "Equal to"
 msgstr "Egal à"
 
-#: ../PLCOpenEditor.py:881
-#: ../PLCOpenEditor.py:1388
-#: ../PLCOpenEditor.py:1425
+#: ../PLCOpenEditor.py:882
+#: ../PLCOpenEditor.py:1393
 #: ../PLCOpenEditor.py:1430
-#: ../PLCOpenEditor.py:1445
+#: ../PLCOpenEditor.py:1435
 #: ../PLCOpenEditor.py:1450
-#: ../PLCOpenEditor.py:2300
-#: ../PLCOpenEditor.py:2669
+#: ../PLCOpenEditor.py:1455
+#: ../PLCOpenEditor.py:2305
 #: ../PLCOpenEditor.py:2674
-#: ../PLCOpenEditor.py:3090
-#: ../PLCOpenEditor.py:3182
-#: ../PLCOpenEditor.py:3186
-#: ../PLCOpenEditor.py:3190
-#: ../PLCOpenEditor.py:3194
-#: ../PLCOpenEditor.py:3335
-#: ../PLCOpenEditor.py:3339
-#: ../PLCOpenEditor.py:3343
-#: ../PLCOpenEditor.py:3347
-#: ../PLCOpenEditor.py:3498
-#: ../PLCOpenEditor.py:3502
-#: ../PLCOpenEditor.py:3506
-#: ../PLCOpenEditor.py:3510
-#: ../PLCOpenEditor.py:3514
-#: ../PLCOpenEditor.py:3642
-#: ../PLCOpenEditor.py:3646
-#: ../PLCOpenEditor.py:3650
-#: ../PLCOpenEditor.py:3654
-#: ../PLCOpenEditor.py:3658
-#: ../PLCOpenEditor.py:3713
-#: ../PLCOpenEditor.py:3717
-#: ../PLCOpenEditor.py:3721
-#: ../PLCOpenEditor.py:3725
-#: ../PLCOpenEditor.py:3776
-#: ../PLCOpenEditor.py:3780
-#: ../PLCOpenEditor.py:3784
-#: ../PLCOpenEditor.py:3788
-#: ../PLCOpenEditor.py:4091
-#: ../PLCOpenEditor.py:4417
-#: ../PLCOpenEditor.py:4427
+#: ../PLCOpenEditor.py:2679
+#: ../PLCOpenEditor.py:3095
+#: ../PLCOpenEditor.py:3187
+#: ../PLCOpenEditor.py:3191
+#: ../PLCOpenEditor.py:3195
+#: ../PLCOpenEditor.py:3199
+#: ../PLCOpenEditor.py:3340
+#: ../PLCOpenEditor.py:3344
+#: ../PLCOpenEditor.py:3348
+#: ../PLCOpenEditor.py:3352
+#: ../PLCOpenEditor.py:3503
+#: ../PLCOpenEditor.py:3507
+#: ../PLCOpenEditor.py:3511
+#: ../PLCOpenEditor.py:3515
+#: ../PLCOpenEditor.py:3519
+#: ../PLCOpenEditor.py:3647
+#: ../PLCOpenEditor.py:3651
+#: ../PLCOpenEditor.py:3655
+#: ../PLCOpenEditor.py:3659
+#: ../PLCOpenEditor.py:3663
+#: ../PLCOpenEditor.py:3718
+#: ../PLCOpenEditor.py:3722
+#: ../PLCOpenEditor.py:3726
+#: ../PLCOpenEditor.py:3730
+#: ../PLCOpenEditor.py:3781
+#: ../PLCOpenEditor.py:3785
+#: ../PLCOpenEditor.py:3789
+#: ../PLCOpenEditor.py:3793
+#: ../PLCOpenEditor.py:4096
+#: ../PLCOpenEditor.py:4422
+#: ../PLCOpenEditor.py:4432
 #: ../Viewer.py:334
 #: ../TextViewer.py:281
 #: ../LDViewer.py:665
 #: ../LDViewer.py:881
 #: ../LDViewer.py:885
 #: ../VariablePanel.py:374
-#: ../VariablePanel.py:730
-#: ../VariablePanel.py:735
-#: ../VariablePanel.py:740
-#: ../VariablePanel.py:745
-#: ../VariablePanel.py:1239
+#: ../VariablePanel.py:739
+#: ../VariablePanel.py:744
+#: ../VariablePanel.py:749
+#: ../VariablePanel.py:754
+#: ../VariablePanel.py:1250
 #: ../dialogs/ConnectionDialog.py:199
 #: ../dialogs/ConnectionDialog.py:203
 #: ../dialogs/ConnectionDialog.py:207
@@ -1131,11 +1135,11 @@
 msgid "External"
 msgstr "Externe"
 
-#: ../PLCOpenEditor.py:3022
-#: ../PLCOpenEditor.py:3217
-#: ../PLCOpenEditor.py:3227
-#: ../PLCOpenEditor.py:3406
-#: ../PLCOpenEditor.py:3550
+#: ../PLCOpenEditor.py:3027
+#: ../PLCOpenEditor.py:3222
+#: ../PLCOpenEditor.py:3232
+#: ../PLCOpenEditor.py:3411
+#: ../PLCOpenEditor.py:3555
 msgid "FBD"
 msgstr "FBD"
 
@@ -1160,7 +1164,7 @@
 msgid "Find position"
 msgstr "Trouver la position"
 
-#: ../PLCOpenEditor.py:4232
+#: ../PLCOpenEditor.py:4237
 #: ../Viewer.py:1095
 msgid "Force value"
 msgstr "Forcer la valeur"
@@ -1169,10 +1173,10 @@
 msgid "Forcing Variable Value"
 msgstr "Forcer la valeur de la variable"
 
-#: ../PLCOpenEditor.py:3090
-#: ../PLCOpenEditor.py:3335
-#: ../PLCOpenEditor.py:3498
-#: ../PLCOpenEditor.py:3642
+#: ../PLCOpenEditor.py:3095
+#: ../PLCOpenEditor.py:3340
+#: ../PLCOpenEditor.py:3503
+#: ../PLCOpenEditor.py:3647
 #: ../dialogs/SFCTransitionDialog.py:209
 #, python-format
 msgid "Form isn't complete. %s must be filled!"
@@ -1187,16 +1191,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:337
+#: ../PLCOpenEditor.py:338
 msgid "Function"
 msgstr "Fonction"
 
-#: ../PLCOpenEditor.py:339
-#: ../PLCOpenEditor.py:1619
+#: ../PLCOpenEditor.py:340
+#: ../PLCOpenEditor.py:1624
 msgid "Function Block"
 msgstr "Bloc fonctionnel"
 
-#: ../VariablePanel.py:810
+#: ../VariablePanel.py:819
 msgid "Function Block Types"
 msgstr "Types de blocs fonctionnels"
 
@@ -1221,7 +1225,7 @@
 msgid "Functions"
 msgstr "Fonctions"
 
-#: ../PLCOpenEditor.py:2477
+#: ../PLCOpenEditor.py:2482
 msgid "Generate Program\tCTRL+G"
 msgstr "Générer le program\tCTRL+G"
 
@@ -1229,11 +1233,11 @@
 msgid "Global"
 msgstr "Globale"
 
-#: ../PLCOpenEditor.py:1851
+#: ../PLCOpenEditor.py:1856
 msgid "Graphic Panel"
 msgstr "Graphique"
 
-#: ../PLCOpenEditor.py:3027
+#: ../PLCOpenEditor.py:3032
 msgid "Graphics"
 msgstr "Graphiques"
 
@@ -1245,11 +1249,11 @@
 msgid "Greater than or equal to"
 msgstr "Supérieur ou égal à"
 
-#: ../PLCOpenEditor.py:3014
+#: ../PLCOpenEditor.py:3019
 msgid "Grid Resolution:"
 msgstr "Résolution de la grille :"
 
-#: ../PLCOpenEditor.py:3006
+#: ../PLCOpenEditor.py:3011
 msgid "Height:"
 msgstr "Hauteur :"
 
@@ -1257,7 +1261,7 @@
 msgid "Help"
 msgstr "Aide"
 
-#: ../PLCOpenEditor.py:2741
+#: ../PLCOpenEditor.py:2746
 msgid "Horizontal:"
 msgstr "Horizontal :"
 
@@ -1267,10 +1271,10 @@
 "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:3217
-#: ../PLCOpenEditor.py:3227
-#: ../PLCOpenEditor.py:3406
-#: ../PLCOpenEditor.py:3550
+#: ../PLCOpenEditor.py:3222
+#: ../PLCOpenEditor.py:3232
+#: ../PLCOpenEditor.py:3411
+#: ../PLCOpenEditor.py:3555
 msgid "IL"
 msgstr "IL"
 
@@ -1318,7 +1322,7 @@
 msgstr "Inline"
 
 #: ../VariablePanel.py:71
-#: ../VariablePanel.py:1057
+#: ../VariablePanel.py:1068
 #: ../dialogs/FBDVariableDialog.py:41
 #: ../dialogs/SFCStepDialog.py:122
 msgid "Input"
@@ -1337,11 +1341,11 @@
 msgid "Instance with id %d doesn't exist!"
 msgstr "L'instance dont l'id est %d n'existe pas !"
 
-#: ../PLCOpenEditor.py:564
+#: ../PLCOpenEditor.py:565
 msgid "Instances"
 msgstr "Instances"
 
-#: ../RessourceEditor.py:397
+#: ../RessourceEditor.py:420
 msgid "Instances:"
 msgstr "Instances :"
 
@@ -1357,6 +1361,10 @@
 msgid "Interface"
 msgstr "Interface"
 
+#: ../RessourceEditor.py:86
+msgid "Interrupt"
+msgstr "Interruption"
+
 #: ../RessourceEditor.py:82
 msgid "Interval"
 msgstr "Interval"
@@ -1371,8 +1379,8 @@
 msgid "Invalid value \"%s\" for \"%s\" variable!"
 msgstr "Valeur \"%s\" invalide pour une variable de type \"%s\" !"
 
-#: ../PLCOpenEditor.py:4080
-#: ../PLCOpenEditor.py:4083
+#: ../PLCOpenEditor.py:4085
+#: ../PLCOpenEditor.py:4088
 #, python-format
 msgid "Invalid value \"%s\" for debug variable"
 msgstr "Chemin de variable à déboguer \"%s\" invalide"
@@ -1389,11 +1397,11 @@
 msgid "Invalid value \"%s\" for viewer block"
 msgstr "Valeur \"%s\" invalide pour un élément graphique"
 
-#: ../PLCOpenEditor.py:3022
-#: ../PLCOpenEditor.py:3217
-#: ../PLCOpenEditor.py:3227
-#: ../PLCOpenEditor.py:3406
-#: ../PLCOpenEditor.py:3550
+#: ../PLCOpenEditor.py:3027
+#: ../PLCOpenEditor.py:3222
+#: ../PLCOpenEditor.py:3232
+#: ../PLCOpenEditor.py:3411
+#: ../PLCOpenEditor.py:3555
 msgid "LD"
 msgstr "LD"
 
@@ -1403,19 +1411,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:3325
-#: ../PLCOpenEditor.py:3488
-#: ../PLCOpenEditor.py:3632
+#: ../PLCOpenEditor.py:3330
+#: ../PLCOpenEditor.py:3493
+#: ../PLCOpenEditor.py:3637
 msgid "Language"
 msgstr "Langue"
 
-#: ../PLCOpenEditor.py:3036
+#: ../PLCOpenEditor.py:3041
 msgid "Language (optional):"
 msgstr "Langue (optionnel) :"
 
-#: ../PLCOpenEditor.py:3293
-#: ../PLCOpenEditor.py:3461
-#: ../PLCOpenEditor.py:3605
+#: ../PLCOpenEditor.py:3298
+#: ../PLCOpenEditor.py:3466
+#: ../PLCOpenEditor.py:3610
 msgid "Language:"
 msgstr "Langue :"
 
@@ -1439,7 +1447,7 @@
 msgid "Less than or equal to"
 msgstr "Inférieur ou égal à"
 
-#: ../PLCOpenEditor.py:599
+#: ../PLCOpenEditor.py:600
 msgid "Library"
 msgstr "Librairie"
 
@@ -1455,7 +1463,7 @@
 msgid "Location"
 msgstr "Adresse"
 
-#: ../VariablePanel.py:1118
+#: ../VariablePanel.py:1129
 msgid "Locations available:"
 msgstr "Adresses disponibles :"
 
@@ -1471,7 +1479,7 @@
 msgid "Maximum:"
 msgstr "Maximum :"
 
-#: ../VariablePanel.py:1059
+#: ../VariablePanel.py:1070
 msgid "Memory"
 msgstr "Mémoire"
 
@@ -1487,7 +1495,7 @@
 msgid "Minimum:"
 msgstr "Minimum :"
 
-#: ../PLCOpenEditor.py:3051
+#: ../PLCOpenEditor.py:3056
 msgid "Miscellaneous"
 msgstr "Divers"
 
@@ -1520,7 +1528,7 @@
 msgstr "Multiplication"
 
 #: ../RessourceEditor.py:82
-#: ../RessourceEditor.py:86
+#: ../RessourceEditor.py:91
 #: ../VariablePanel.py:53
 #: ../VariablePanel.py:54
 #: ../DataTypeEditor.py:46
@@ -1544,7 +1552,7 @@
 msgid "Negated"
 msgstr "Inversé"
 
-#: ../PLCOpenEditor.py:2464
+#: ../PLCOpenEditor.py:2469
 msgid "New\tCTRL+N"
 msgstr "Nouveau\tCTRL+N"
 
@@ -1557,7 +1565,7 @@
 msgid "No Modifier"
 msgstr "Pas de modificateur"
 
-#: ../PLCControler.py:2663
+#: ../PLCControler.py:2669
 msgid "No PLC project found"
 msgstr "Pas de projet d'automate trouvé"
 
@@ -1572,7 +1580,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:2411
+#: ../PLCOpenEditor.py:2416
 msgid ""
 "No documentation available.\n"
 "Coming soon."
@@ -1626,7 +1634,7 @@
 "The on-delay timer can be used to delay setting an output true, for fixed period after an input becomes true."
 msgstr ""
 
-#: ../PLCOpenEditor.py:2466
+#: ../PLCOpenEditor.py:2471
 msgid "Open\tCTRL+O"
 msgstr "Ouvrir\tCTRL+O"
 
@@ -1635,12 +1643,12 @@
 msgid "Option"
 msgstr "Option"
 
-#: ../PLCOpenEditor.py:2978
+#: ../PLCOpenEditor.py:2983
 msgid "Organization (optional):"
 msgstr "Groupe (optionnel) :"
 
 #: ../VariablePanel.py:71
-#: ../VariablePanel.py:1058
+#: ../VariablePanel.py:1069
 #: ../dialogs/FBDVariableDialog.py:43
 #: ../dialogs/SFCStepDialog.py:127
 msgid "Output"
@@ -1654,53 +1662,53 @@
 "PID\n"
 "Le bloc fonctionnel PID (Proportionnel, Intégrale, Dérivée) fournit un controller de boucle fermé classique à trois paramètres."
 
-#: ../PLCOpenEditor.py:2630
-#: ../PLCOpenEditor.py:2694
+#: ../PLCOpenEditor.py:2635
+#: ../PLCOpenEditor.py:2699
 msgid "PLCOpen files (*.xml)|*.xml|All files|*.*"
 msgstr "Fichiers PLCOpen (*.xml)|*.xml|Tous les fichiers|*.*"
 
-#: ../PLCOpenEditor.py:2559
+#: ../PLCOpenEditor.py:2564
 msgid "PLCOpenEditor"
 msgstr "PLCOpenEditor"
 
-#: ../PLCOpenEditor.py:2508
+#: ../PLCOpenEditor.py:2513
 msgid "PLCOpenEditor\tF1"
 msgstr "PLCOpenEditor\tF1"
 
-#: ../PLCOpenEditor.py:3321
+#: ../PLCOpenEditor.py:3326
 msgid "POU Name"
 msgstr "Nom du POU"
 
-#: ../PLCOpenEditor.py:3276
+#: ../PLCOpenEditor.py:3281
 msgid "POU Name:"
 msgstr "Nom du POU :"
 
-#: ../PLCOpenEditor.py:3323
+#: ../PLCOpenEditor.py:3328
 msgid "POU Type"
 msgstr "Type du POU"
 
-#: ../PLCOpenEditor.py:3284
+#: ../PLCOpenEditor.py:3289
 msgid "POU Type:"
 msgstr "Type du POU :"
 
-#: ../PLCOpenEditor.py:2480
+#: ../PLCOpenEditor.py:2485
 msgid "Page Setup"
 msgstr "Mise en page..."
 
-#: ../PLCOpenEditor.py:2994
+#: ../PLCOpenEditor.py:2999
 msgid "Page Size (optional):"
 msgstr "Taille de la page (optionnel) :"
 
-#: ../PLCOpenEditor.py:4362
+#: ../PLCOpenEditor.py:4367
 #, python-format
 msgid "Page: %d"
 msgstr "Page: %d"
 
-#: ../PLCOpenEditor.py:330
+#: ../PLCOpenEditor.py:331
 msgid "Paste\tCTRL+V"
 msgstr "Coller\tCTRL+V"
 
-#: ../PLCOpenEditor.py:1663
+#: ../PLCOpenEditor.py:1668
 msgid "Paste POU"
 msgstr "Coller un POU"
 
@@ -1721,17 +1729,17 @@
 msgid "Please enter comment text"
 msgstr "Saisissez le texte du commentaire"
 
-#: ../PLCOpenEditor.py:2246
-#: ../PLCOpenEditor.py:3696
+#: ../PLCOpenEditor.py:2251
+#: ../PLCOpenEditor.py:3701
 msgid "Please enter configuration name"
 msgstr "Saisissez le nom de la configuration"
 
-#: ../PLCOpenEditor.py:2194
+#: ../PLCOpenEditor.py:2199
 msgid "Please enter data type name"
 msgstr "Saisissez le nom du type de donnée"
 
-#: ../PLCOpenEditor.py:2259
-#: ../PLCOpenEditor.py:3759
+#: ../PLCOpenEditor.py:2264
+#: ../PLCOpenEditor.py:3764
 msgid "Please enter resource name"
 msgstr "Saisissez le nom de la ressource"
 
@@ -1741,7 +1749,7 @@
 msgid "Please enter step name"
 msgstr "Saisissez le nom de l'étape"
 
-#: ../PLCOpenEditor.py:3167
+#: ../PLCOpenEditor.py:3172
 msgid "Please enter text"
 msgstr "Saisissez le texte"
 
@@ -1750,7 +1758,7 @@
 msgid "Please enter value for a \"%s\" variable:"
 msgstr "Veuillez entrer la valeur pour une variable de type \"%s\" :"
 
-#: ../VariablePanel.py:1185
+#: ../VariablePanel.py:1196
 msgid "Plugins"
 msgstr "Plugins"
 
@@ -1762,7 +1770,7 @@
 msgid "Power Rail Properties"
 msgstr "Propriétés de la barre d'alimentation"
 
-#: ../PLCOpenEditor.py:2482
+#: ../PLCOpenEditor.py:2487
 msgid "Preview"
 msgstr "Aperçu avant impression"
 
@@ -1777,11 +1785,11 @@
 msgid "Preview:"
 msgstr "Aperçu :"
 
-#: ../PLCOpenEditor.py:2484
+#: ../PLCOpenEditor.py:2489
 msgid "Print"
 msgstr "Imprimer"
 
-#: ../PLCOpenEditor.py:950
+#: ../PLCOpenEditor.py:951
 msgid "Print preview"
 msgstr "Aperçu avant impression"
 
@@ -1793,24 +1801,24 @@
 msgid "Priority:"
 msgstr "Priorité :"
 
-#: ../PLCOpenEditor.py:2922
+#: ../PLCOpenEditor.py:2927
 msgid "Product Name (required):"
 msgstr "Nom du produit (obligatoire) :"
 
-#: ../PLCOpenEditor.py:2938
+#: ../PLCOpenEditor.py:2943
 msgid "Product Release (optional):"
 msgstr "Publication du produit (optionnel) :"
 
-#: ../PLCOpenEditor.py:2930
+#: ../PLCOpenEditor.py:2935
 msgid "Product Version (required):"
 msgstr "Version du produit (obligatoire) :"
 
-#: ../PLCOpenEditor.py:341
-#: ../PLCOpenEditor.py:1622
+#: ../PLCOpenEditor.py:342
+#: ../PLCOpenEditor.py:1627
 msgid "Program"
 msgstr "Programme"
 
-#: ../PLCOpenEditor.py:2671
+#: ../PLCOpenEditor.py:2676
 msgid "Program was successfully generated!"
 msgstr "Le programme a été généré avec succès !"
 
@@ -1822,20 +1830,20 @@
 msgid "Programs can't be used by other POUs!"
 msgstr "Les programmes ne peuvent être utilisés par les autres POUs !"
 
-#: ../PLCOpenEditor.py:442
-#: ../PLCOpenEditor.py:2945
+#: ../PLCOpenEditor.py:443
+#: ../PLCOpenEditor.py:2950
 msgid "Project"
 msgstr "Projet"
 
-#: ../PLCOpenEditor.py:2906
+#: ../PLCOpenEditor.py:2911
 msgid "Project Name (required):"
 msgstr "Nom du projet (obligatoire) :"
 
-#: ../PLCOpenEditor.py:2914
+#: ../PLCOpenEditor.py:2919
 msgid "Project Version (optional):"
 msgstr "Version du projet (optionnel) :"
 
-#: ../PLCControler.py:2650
+#: ../PLCControler.py:2656
 msgid ""
 "Project file syntax error:\n"
 "\n"
@@ -1843,11 +1851,11 @@
 "Erreur de syntaxe dans le fichier du projet :\n"
 "\n"
 
-#: ../PLCOpenEditor.py:2892
+#: ../PLCOpenEditor.py:2897
 msgid "Project properties"
 msgstr "Propriétés du projet"
 
-#: ../PLCOpenEditor.py:2487
+#: ../PLCOpenEditor.py:2492
 #: ../PLCControler.py:91
 msgid "Properties"
 msgstr "Propriétés"
@@ -1862,7 +1870,7 @@
 msgid "Qualifier"
 msgstr "Qualificatif"
 
-#: ../PLCOpenEditor.py:2490
+#: ../PLCOpenEditor.py:2495
 msgid "Quit\tCTRL+Q"
 msgstr "Quitter\tCTRL+Q"
 
@@ -1895,11 +1903,11 @@
 msgid "Reference"
 msgstr "Référence"
 
-#: ../PLCOpenEditor.py:369
+#: ../PLCOpenEditor.py:370
 msgid "Refresh\tF5"
 msgstr "Actualiser\tF5"
 
-#: ../PLCOpenEditor.py:4235
+#: ../PLCOpenEditor.py:4240
 #: ../Viewer.py:1098
 msgid "Release value"
 msgstr "Relacher la valeur"
@@ -1908,7 +1916,7 @@
 msgid "Remainder (modulo)"
 msgstr "Modulo"
 
-#: ../PLCOpenEditor.py:1626
+#: ../PLCOpenEditor.py:1631
 msgid "Rename"
 msgstr "Renommer"
 
@@ -1969,8 +1977,8 @@
 msgid "Rounding up/down"
 msgstr "Arrondi"
 
-#: ../PLCOpenEditor.py:3022
-#: ../PLCOpenEditor.py:3227
+#: ../PLCOpenEditor.py:3027
+#: ../PLCOpenEditor.py:3232
 msgid "SFC"
 msgstr "SFC"
 
@@ -1982,26 +1990,26 @@
 "Bascule SR\n"
 "La bascule SR est une bascule où le Set est dominant."
 
-#: ../PLCOpenEditor.py:3217
-#: ../PLCOpenEditor.py:3227
-#: ../PLCOpenEditor.py:3406
-#: ../PLCOpenEditor.py:3550
+#: ../PLCOpenEditor.py:3222
+#: ../PLCOpenEditor.py:3232
+#: ../PLCOpenEditor.py:3411
+#: ../PLCOpenEditor.py:3555
 msgid "ST"
 msgstr "ST"
 
-#: ../PLCOpenEditor.py:2658
+#: ../PLCOpenEditor.py:2663
 msgid "ST files (*.st)|*.st|All files|*.*"
 msgstr "Fichiers ST (*.st)|*.st|Tous les fichiers|*.*"
 
-#: ../PLCOpenEditor.py:2473
+#: ../PLCOpenEditor.py:2478
 msgid "Save\tCTRL+S"
 msgstr "Enregistrer\tCTRL+S"
 
-#: ../PLCOpenEditor.py:2475
+#: ../PLCOpenEditor.py:2480
 msgid "Save As...\tCTRL+SHIFT+S"
 msgstr "Enregistrer sous...\tCTRL+SHIFT+S"
 
-#: ../PLCOpenEditor.py:345
+#: ../PLCOpenEditor.py:346
 msgid "Select All\tCTRL+A"
 msgstr "Tout sélectionner\tCTRL+A"
 
@@ -2009,8 +2017,8 @@
 msgid "Select a variable class:"
 msgstr "Sélectionner une direction pour la variable :"
 
-#: ../PLCOpenEditor.py:575
-#: ../PLCOpenEditor.py:587
+#: ../PLCOpenEditor.py:576
+#: ../PLCOpenEditor.py:588
 msgid "Select an object"
 msgstr "Sélectionner un objet"
 
@@ -2086,11 +2094,11 @@
 msgid "Tangent"
 msgstr "Tangente"
 
-#: ../RessourceEditor.py:86
+#: ../RessourceEditor.py:91
 msgid "Task"
 msgstr "Tâche"
 
-#: ../RessourceEditor.py:361
+#: ../RessourceEditor.py:384
 msgid "Tasks:"
 msgstr "Tâches :"
 
@@ -2102,17 +2110,17 @@
 msgid "The group of block must be coherent!"
 msgstr "Le groupe de blocs doit être cohérent !"
 
-#: ../PLCOpenEditor.py:889
+#: ../PLCOpenEditor.py:890
 msgid "There are changes, do you want to save?"
 msgstr "Le projet a été modifié. Voulez-vous l'enregistrer ?"
 
-#: ../PLCOpenEditor.py:1425
-#: ../PLCOpenEditor.py:1445
+#: ../PLCOpenEditor.py:1430
+#: ../PLCOpenEditor.py:1450
 #, python-format
 msgid "There is a POU named \"%s\". This could cause 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:969
+#: ../PLCOpenEditor.py:974
 msgid ""
 "There was a problem printing.\n"
 "Perhaps your current printer is not set correctly?"
@@ -2168,7 +2176,7 @@
 msgid "Time-of-day subtraction"
 msgstr "Soustraction d'horodatage"
 
-#: ../PLCOpenEditor.py:579
+#: ../PLCOpenEditor.py:580
 msgid "Toolbar"
 msgstr "Barre d'outils"
 
@@ -2176,11 +2184,11 @@
 msgid "Top"
 msgstr "Haut"
 
-#: ../PLCOpenEditor.py:3486
+#: ../PLCOpenEditor.py:3491
 msgid "Transition Name"
 msgstr "Nom de la transition"
 
-#: ../PLCOpenEditor.py:3453
+#: ../PLCOpenEditor.py:3458
 msgid "Transition Name:"
 msgstr "Nom de la transition :"
 
@@ -2203,7 +2211,11 @@
 msgid "Transitions"
 msgstr "Transitions"
 
-#: ../RessourceEditor.py:86
+#: ../RessourceEditor.py:82
+msgid "Triggering"
+msgstr "Activation"
+
+#: ../RessourceEditor.py:91
 #: ../VariablePanel.py:53
 #: ../VariablePanel.py:54
 #: ../dialogs/ActionBlockDialog.py:33
@@ -2227,7 +2239,7 @@
 msgid "Type:"
 msgstr "Type :"
 
-#: ../PLCOpenEditor.py:545
+#: ../PLCOpenEditor.py:546
 msgid "Types"
 msgstr "Types"
 
@@ -2271,7 +2283,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."
 
-#: ../VariablePanel.py:790
+#: ../VariablePanel.py:799
 #: ../DataTypeEditor.py:807
 msgid "User Data Types"
 msgstr "Types de donnée du projet"
@@ -2280,7 +2292,7 @@
 msgid "User-defined POUs"
 msgstr "POUs du projet"
 
-#: ../PLCOpenEditor.py:3895
+#: ../PLCOpenEditor.py:3900
 #: ../dialogs/ActionBlockDialog.py:33
 msgid "Value"
 msgstr "Valeur"
@@ -2293,7 +2305,7 @@
 msgid "Values:"
 msgstr "Valeurs"
 
-#: ../PLCOpenEditor.py:3895
+#: ../PLCOpenEditor.py:3900
 #: ../dialogs/ActionBlockDialog.py:37
 msgid "Variable"
 msgstr "Variable"
@@ -2311,23 +2323,23 @@
 msgid "Variable don't belong to this POU!"
 msgstr "La variable n'appartient pas à ce POU !"
 
-#: ../PLCOpenEditor.py:594
+#: ../PLCOpenEditor.py:595
 #: ../VariablePanel.py:72
 msgid "Variables"
 msgstr "Variables"
 
-#: ../PLCOpenEditor.py:2749
+#: ../PLCOpenEditor.py:2754
 msgid "Vertical:"
 msgstr "Vertical :"
 
-#: ../PLCOpenEditor.py:3351
-#: ../PLCOpenEditor.py:3729
-#: ../PLCOpenEditor.py:3792
+#: ../PLCOpenEditor.py:3356
+#: ../PLCOpenEditor.py:3734
+#: ../PLCOpenEditor.py:3797
 #: ../LDViewer.py:890
 msgid "Warning"
 msgstr "Attention"
 
-#: ../PLCOpenEditor.py:2998
+#: ../PLCOpenEditor.py:3003
 msgid "Width:"
 msgstr "Longueur :"
 
@@ -2339,9 +2351,9 @@
 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:3182
-#: ../PLCOpenEditor.py:3713
-#: ../PLCOpenEditor.py:3776
+#: ../PLCOpenEditor.py:3187
+#: ../PLCOpenEditor.py:3718
+#: ../PLCOpenEditor.py:3781
 #: ../dialogs/PouNameDialog.py:55
 #: ../dialogs/SFCStepDialog.py:175
 #: ../dialogs/SFCStepNameDialog.py:57
@@ -2352,37 +2364,37 @@
 msgid "You must type a value!"
 msgstr "Vous devez saisir une valeur !"
 
-#: ../PLCOpenEditor.py:375
+#: ../PLCOpenEditor.py:376
 msgid "Zoom"
 msgstr "Zoom"
 
-#: ../PLCOpenEditor.py:2667
+#: ../PLCOpenEditor.py:2672
 #, python-format
 msgid "error: %s\n"
 msgstr "erreur: %s\n"
 
-#: ../PLCOpenEditor.py:4394
-#: ../PLCOpenEditor.py:4396
+#: ../PLCOpenEditor.py:4399
+#: ../PLCOpenEditor.py:4401
 msgid "file : "
 msgstr "fichier :"
 
-#: ../PLCOpenEditor.py:3222
+#: ../PLCOpenEditor.py:3227
 msgid "function"
 msgstr "fonction"
 
-#: ../PLCOpenEditor.py:4397
+#: ../PLCOpenEditor.py:4402
 msgid "function : "
 msgstr "fonction :"
 
-#: ../PLCOpenEditor.py:3222
+#: ../PLCOpenEditor.py:3227
 msgid "functionBlock"
 msgstr "Bloc fonctionnel"
 
-#: ../PLCOpenEditor.py:4397
+#: ../PLCOpenEditor.py:4402
 msgid "line : "
 msgstr "ligne :"
 
-#: ../PLCOpenEditor.py:3222
+#: ../PLCOpenEditor.py:3227
 msgid "program"
 msgstr "programme"
 
@@ -2398,7 +2410,7 @@
 msgid "string right of"
 msgstr "Caractères à droite de"
 
-#: ../PLCOpenEditor.py:2665
+#: ../PLCOpenEditor.py:2670
 #, python-format
 msgid "warning: %s\n"
 msgstr "attention: %s\n"
--- a/i18n/messages.pot	Thu Sep 15 22:29:32 2011 +0200
+++ b/i18n/messages.pot	Tue Sep 20 23:58:31 2011 +0200
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-09-13 12:41+0200\n"
+"POT-Creation-Date: 2011-09-20 23:54+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"
@@ -17,7 +17,7 @@
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: ../PLCOpenEditor.py:4406
+#: ../PLCOpenEditor.py:4411
 msgid ""
 "\n"
 "An error has occurred.\n"
@@ -54,11 +54,11 @@
 msgid "   Temp"
 msgstr ""
 
-#: ../PLCOpenEditor.py:4416
+#: ../PLCOpenEditor.py:4421
 msgid " : "
 msgstr ""
 
-#: ../PLCOpenEditor.py:3332 ../PLCOpenEditor.py:3495 ../PLCOpenEditor.py:3639
+#: ../PLCOpenEditor.py:3337 ../PLCOpenEditor.py:3500 ../PLCOpenEditor.py:3644
 #: ../dialogs/SFCTransitionDialog.py:206
 #, python-format
 msgid " and %s"
@@ -84,7 +84,7 @@
 msgid "\"%s\" can't use itself!"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1422 ../PLCOpenEditor.py:1442
+#: ../PLCOpenEditor.py:1427 ../PLCOpenEditor.py:1447
 #, python-format
 msgid "\"%s\" config already exists!"
 msgstr ""
@@ -94,7 +94,7 @@
 msgid "\"%s\" configuration already exists !!!"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1376 ../PLCOpenEditor.py:3194
+#: ../PLCOpenEditor.py:1381 ../PLCOpenEditor.py:3199
 #, python-format
 msgid "\"%s\" data type already exists!"
 msgstr ""
@@ -104,7 +104,7 @@
 msgid "\"%s\" element can't be pasted here!!!"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3514 ../PLCOpenEditor.py:3658 ../Viewer.py:250
+#: ../PLCOpenEditor.py:3519 ../PLCOpenEditor.py:3663 ../Viewer.py:250
 #: ../TextViewer.py:245 ../TextViewer.py:262
 #: ../dialogs/ConnectionDialog.py:215 ../dialogs/FBDBlockDialog.py:260
 #, python-format
@@ -116,9 +116,9 @@
 msgid "\"%s\" function cancelled in \"%s\" POU: No input connected"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1367 ../PLCOpenEditor.py:3190 ../PLCOpenEditor.py:3343
-#: ../PLCOpenEditor.py:3506 ../PLCOpenEditor.py:3650 ../PLCOpenEditor.py:3721
-#: ../PLCOpenEditor.py:3784 ../VariablePanel.py:735
+#: ../PLCOpenEditor.py:1372 ../PLCOpenEditor.py:3195 ../PLCOpenEditor.py:3348
+#: ../PLCOpenEditor.py:3511 ../PLCOpenEditor.py:3655 ../PLCOpenEditor.py:3726
+#: ../PLCOpenEditor.py:3789 ../VariablePanel.py:744
 #: ../dialogs/ConnectionDialog.py:207 ../dialogs/FBDBlockDialog.py:252
 #: ../dialogs/FBDVariableDialog.py:268 ../dialogs/PouNameDialog.py:63
 #: ../dialogs/SFCStepDialog.py:183 ../dialogs/SFCStepNameDialog.py:65
@@ -137,14 +137,14 @@
 msgid "\"%s\" is an invalid value!"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2673 ../PLCOpenEditor.py:2702
+#: ../PLCOpenEditor.py:2678 ../PLCOpenEditor.py:2707
 #, python-format
 msgid "\"%s\" is not a valid folder!"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1365 ../PLCOpenEditor.py:3186 ../PLCOpenEditor.py:3339
-#: ../PLCOpenEditor.py:3502 ../PLCOpenEditor.py:3646 ../PLCOpenEditor.py:3717
-#: ../PLCOpenEditor.py:3780 ../VariablePanel.py:730
+#: ../PLCOpenEditor.py:1370 ../PLCOpenEditor.py:3191 ../PLCOpenEditor.py:3344
+#: ../PLCOpenEditor.py:3507 ../PLCOpenEditor.py:3651 ../PLCOpenEditor.py:3722
+#: ../PLCOpenEditor.py:3785 ../VariablePanel.py:739
 #: ../dialogs/ConnectionDialog.py:203 ../dialogs/FBDBlockDialog.py:248
 #: ../dialogs/PouNameDialog.py:59 ../dialogs/SFCStepDialog.py:179
 #: ../dialogs/SFCStepNameDialog.py:61 ../DataTypeEditor.py:760
@@ -152,12 +152,12 @@
 msgid "\"%s\" is not a valid identifier!"
 msgstr ""
 
-#: ../PLCOpenEditor.py:288 ../PLCOpenEditor.py:2322 ../PLCOpenEditor.py:2342
+#: ../PLCOpenEditor.py:288 ../PLCOpenEditor.py:2327 ../PLCOpenEditor.py:2347
 #, python-format
 msgid "\"%s\" is used by one or more POUs. It can't be removed!"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1385 ../PLCOpenEditor.py:3347 ../Viewer.py:248
+#: ../PLCOpenEditor.py:1390 ../PLCOpenEditor.py:3352 ../Viewer.py:248
 #: ../Viewer.py:274 ../TextViewer.py:243 ../TextViewer.py:260
 #: ../dialogs/ConnectionDialog.py:211 ../dialogs/FBDBlockDialog.py:256
 #, python-format
@@ -218,49 +218,49 @@
 msgid "%s body don't have text!"
 msgstr ""
 
-#: ../PLCOpenEditor.py:4394 ../PLCOpenEditor.py:4396 ../PLCOpenEditor.py:4397
+#: ../PLCOpenEditor.py:4399 ../PLCOpenEditor.py:4401 ../PLCOpenEditor.py:4402
 msgid ",   "
 msgstr ""
 
-#: ../PLCOpenEditor.py:3334 ../PLCOpenEditor.py:3497 ../PLCOpenEditor.py:3641
+#: ../PLCOpenEditor.py:3339 ../PLCOpenEditor.py:3502 ../PLCOpenEditor.py:3646
 #: ../dialogs/SFCTransitionDialog.py:208
 #, python-format
 msgid ", %s"
 msgstr ""
 
-#: ../PLCOpenEditor.py:4392
+#: ../PLCOpenEditor.py:4397
 msgid ". "
 msgstr ""
 
-#: ../PLCOpenEditor.py:1388 ../PLCOpenEditor.py:1430 ../PLCOpenEditor.py:1450
-#: ../PLCOpenEditor.py:3351 ../PLCOpenEditor.py:3729 ../PLCOpenEditor.py:3792
+#: ../PLCOpenEditor.py:1393 ../PLCOpenEditor.py:1435 ../PLCOpenEditor.py:1455
+#: ../PLCOpenEditor.py:3356 ../PLCOpenEditor.py:3734 ../PLCOpenEditor.py:3797
 #, python-format
 msgid "A POU has an element named \"%s\". This could cause a conflict. Do you wish to continue?"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1401 ../PLCOpenEditor.py:1412 ../PLCOpenEditor.py:3510
-#: ../PLCOpenEditor.py:3654 ../PLCOpenEditor.py:3725 ../PLCOpenEditor.py:3788
-#: ../VariablePanel.py:740 ../dialogs/PouNameDialog.py:67
+#: ../PLCOpenEditor.py:1406 ../PLCOpenEditor.py:1417 ../PLCOpenEditor.py:3515
+#: ../PLCOpenEditor.py:3659 ../PLCOpenEditor.py:3730 ../PLCOpenEditor.py:3793
+#: ../VariablePanel.py:749 ../dialogs/PouNameDialog.py:67
 #: ../dialogs/SFCStepDialog.py:187 ../dialogs/SFCStepNameDialog.py:69
 #, python-format
 msgid "A POU named \"%s\" already exists!"
 msgstr ""
 
-#: ../VariablePanel.py:1239
+#: ../VariablePanel.py:1250
 msgid "A location must be selected!"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1403 ../PLCOpenEditor.py:1414 ../VariablePanel.py:745
+#: ../PLCOpenEditor.py:1408 ../PLCOpenEditor.py:1419 ../VariablePanel.py:754
 #: ../dialogs/SFCStepDialog.py:191 ../dialogs/SFCStepNameDialog.py:73
 #, python-format
 msgid "A variable with \"%s\" as name already exists in this pou!"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2514
+#: ../PLCOpenEditor.py:2519
 msgid "About"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2417
+#: ../PLCOpenEditor.py:2422
 msgid "About PLCOpenEditor"
 msgstr ""
 
@@ -272,11 +272,11 @@
 msgid "Action"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3630
+#: ../PLCOpenEditor.py:3635
 msgid "Action Name"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3597
+#: ../PLCOpenEditor.py:3602
 msgid "Action Name:"
 msgstr ""
 
@@ -298,15 +298,15 @@
 msgid "Add"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1606 ../PLCOpenEditor.py:1689
+#: ../PLCOpenEditor.py:1611 ../PLCOpenEditor.py:1694
 msgid "Add Action"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1672
+#: ../PLCOpenEditor.py:1677
 msgid "Add Configuration"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1652
+#: ../PLCOpenEditor.py:1657
 msgid "Add DataType"
 msgstr ""
 
@@ -314,27 +314,27 @@
 msgid "Add Divergence Branch"
 msgstr ""
 
-#: ../PLCOpenEditor.py:333
+#: ../PLCOpenEditor.py:334
 msgid "Add Element"
 msgstr ""
 
-#: ../RessourceEditor.py:412
+#: ../RessourceEditor.py:435
 msgid "Add Instance"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1659
+#: ../PLCOpenEditor.py:1664
 msgid "Add POU"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1635 ../PLCOpenEditor.py:1700
+#: ../PLCOpenEditor.py:1640 ../PLCOpenEditor.py:1705
 msgid "Add Resource"
 msgstr ""
 
-#: ../RessourceEditor.py:376
+#: ../RessourceEditor.py:399
 msgid "Add Task"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1603 ../PLCOpenEditor.py:1678
+#: ../PLCOpenEditor.py:1608 ../PLCOpenEditor.py:1683
 msgid "Add Transition"
 msgstr ""
 
@@ -342,7 +342,7 @@
 msgid "Add Wire Segment"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2194
+#: ../PLCOpenEditor.py:2199
 msgid "Add a new data type"
 msgstr ""
 
@@ -358,11 +358,11 @@
 msgid "Add a new step"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2246
+#: ../PLCOpenEditor.py:2251
 msgid "Add new configuration"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2259
+#: ../PLCOpenEditor.py:2264
 msgid "Add new resource"
 msgstr ""
 
@@ -378,7 +378,7 @@
 msgid "Alignment"
 msgstr ""
 
-#: ../VariablePanel.py:70 ../VariablePanel.py:1056 ../VariablePanel.py:1173
+#: ../VariablePanel.py:70 ../VariablePanel.py:1067 ../VariablePanel.py:1184
 msgid "All"
 msgstr ""
 
@@ -403,7 +403,7 @@
 msgid "Arithmetic"
 msgstr ""
 
-#: ../VariablePanel.py:798 ../DataTypeEditor.py:236
+#: ../VariablePanel.py:807 ../DataTypeEditor.py:236
 msgid "Array"
 msgstr ""
 
@@ -415,11 +415,11 @@
 msgid "At least a variable or an expression must be selected!"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2985
+#: ../PLCOpenEditor.py:2990
 msgid "Author"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2970
+#: ../PLCOpenEditor.py:2975
 msgid "Author Name (optional):"
 msgstr ""
 
@@ -427,7 +427,7 @@
 msgid "Base Type:"
 msgstr ""
 
-#: ../VariablePanel.py:778 ../DataTypeEditor.py:801
+#: ../VariablePanel.py:787 ../DataTypeEditor.py:801
 msgid "Base Types"
 msgstr ""
 
@@ -463,7 +463,7 @@
 msgid "Block Properties"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1913 ../dialogs/FBDBlockDialog.py:268
+#: ../PLCOpenEditor.py:1918 ../dialogs/FBDBlockDialog.py:268
 msgid "Block Types"
 msgstr ""
 
@@ -471,11 +471,11 @@
 msgid "Bottom"
 msgstr ""
 
-#: ../VariablePanel.py:1115
+#: ../VariablePanel.py:1126
 msgid "Browse Locations"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1854
+#: ../PLCOpenEditor.py:1859
 msgid "CSV Log"
 msgstr ""
 
@@ -488,7 +488,7 @@
 msgid "Can only give a location to local or global variables"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2668
+#: ../PLCOpenEditor.py:2673
 #, python-format
 msgid "Can't generate program to file %s!"
 msgstr ""
@@ -497,7 +497,7 @@
 msgid "Can't give a location to a function block instance"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2700
+#: ../PLCOpenEditor.py:2705
 #, python-format
 msgid "Can't save project to file %s!"
 msgstr ""
@@ -506,7 +506,7 @@
 msgid "Center"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1624
+#: ../PLCOpenEditor.py:1629
 msgid "Change POU Type To"
 msgstr ""
 
@@ -514,7 +514,7 @@
 msgid "Character string"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2630 ../PLCOpenEditor.py:2658 ../PLCOpenEditor.py:2694
+#: ../PLCOpenEditor.py:2635 ../PLCOpenEditor.py:2663 ../PLCOpenEditor.py:2699
 msgid "Choose a file"
 msgstr ""
 
@@ -530,7 +530,7 @@
 msgid "Class:"
 msgstr ""
 
-#: ../PLCOpenEditor.py:372
+#: ../PLCOpenEditor.py:373
 msgid "Clear Errors\tCTRL+K"
 msgstr ""
 
@@ -538,15 +538,15 @@
 msgid "Clear Execution Order"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2548
+#: ../PLCOpenEditor.py:2553
 msgid "Close Application"
 msgstr ""
 
-#: ../PLCOpenEditor.py:887 ../PLCOpenEditor.py:2470
+#: ../PLCOpenEditor.py:888 ../PLCOpenEditor.py:2475
 msgid "Close Project"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2468
+#: ../PLCOpenEditor.py:2473
 msgid "Close Tab\tCTRL+W"
 msgstr ""
 
@@ -554,11 +554,11 @@
 msgid "Comment"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2954
+#: ../PLCOpenEditor.py:2959
 msgid "Company Name (required):"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2962
+#: ../PLCOpenEditor.py:2967
 msgid "Company URL (optional):"
 msgstr ""
 
@@ -570,7 +570,7 @@
 msgid "Concatenation"
 msgstr ""
 
-#: ../PLCOpenEditor.py:343
+#: ../PLCOpenEditor.py:344
 msgid "Configuration"
 msgstr ""
 
@@ -598,7 +598,7 @@
 msgid "Constant"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3044
+#: ../PLCOpenEditor.py:3049
 msgid "Content Description (optional):"
 msgstr ""
 
@@ -622,11 +622,11 @@
 msgid "Conversion to time-of-day"
 msgstr ""
 
-#: ../PLCOpenEditor.py:328
+#: ../PLCOpenEditor.py:329
 msgid "Copy\tCTRL+C"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1611
+#: ../PLCOpenEditor.py:1616
 msgid "Copy POU"
 msgstr ""
 
@@ -638,11 +638,11 @@
 msgid "Couldn't paste non-POU object."
 msgstr ""
 
-#: ../PLCOpenEditor.py:3272
+#: ../PLCOpenEditor.py:3277
 msgid "Create a new POU"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3593
+#: ../PLCOpenEditor.py:3598
 msgid "Create a new action"
 msgstr ""
 
@@ -702,7 +702,7 @@
 msgid "Create a new step"
 msgstr ""
 
-#: ../PLCOpenEditor.py:217 ../PLCOpenEditor.py:3449
+#: ../PLCOpenEditor.py:217 ../PLCOpenEditor.py:3454
 msgid "Create a new transition"
 msgstr ""
 
@@ -710,10 +710,14 @@
 msgid "Create a new variable"
 msgstr ""
 
-#: ../PLCOpenEditor.py:326
+#: ../PLCOpenEditor.py:327
 msgid "Cut\tCTRL+X"
 msgstr ""
 
+#: ../RessourceEditor.py:86
+msgid "Cyclic"
+msgstr ""
+
 #: ../plcopen/iec_std.csv:42 ../plcopen/iec_std.csv:44
 #: ../plcopen/iec_std.csv:46 ../plcopen/iec_std.csv:50
 #: ../plcopen/iec_std.csv:52 ../plcopen/iec_std.csv:54
@@ -722,7 +726,7 @@
 msgid "DEPRECATED"
 msgstr ""
 
-#: ../PLCOpenEditor.py:335
+#: ../PLCOpenEditor.py:336
 msgid "Data Type"
 msgstr ""
 
@@ -752,12 +756,12 @@
 msgid "Debug: %s"
 msgstr ""
 
-#: ../PLCOpenEditor.py:623
+#: ../PLCOpenEditor.py:624
 msgid "Debugger"
 msgstr ""
 
-#: ../PLCOpenEditor.py:347 ../PLCOpenEditor.py:1629 ../PLCOpenEditor.py:1638
-#: ../PLCOpenEditor.py:1644 ../PLCOpenEditor.py:4164 ../Viewer.py:415
+#: ../PLCOpenEditor.py:348 ../PLCOpenEditor.py:1634 ../PLCOpenEditor.py:1643
+#: ../PLCOpenEditor.py:1649 ../PLCOpenEditor.py:4169 ../Viewer.py:415
 #: ../VariablePanel.py:504 ../dialogs/ActionBlockDialog.py:279
 #: ../DataTypeEditor.py:544
 msgid "Delete"
@@ -767,11 +771,11 @@
 msgid "Delete Divergence Branch"
 msgstr ""
 
-#: ../RessourceEditor.py:417
+#: ../RessourceEditor.py:440
 msgid "Delete Instance"
 msgstr ""
 
-#: ../RessourceEditor.py:381
+#: ../RessourceEditor.py:404
 msgid "Delete Task"
 msgstr ""
 
@@ -801,7 +805,7 @@
 msgid "Dimensions:"
 msgstr ""
 
-#: ../VariablePanel.py:1132
+#: ../VariablePanel.py:1143
 msgid "Direction:"
 msgstr ""
 
@@ -821,7 +825,7 @@
 msgid "Documentation"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2662
+#: ../PLCOpenEditor.py:2667
 msgid "Done"
 msgstr ""
 
@@ -883,7 +887,7 @@
 msgid "Elements :"
 msgstr ""
 
-#: ../PLCOpenEditor.py:323
+#: ../PLCOpenEditor.py:324
 msgid "Enable Undo/Redo"
 msgstr ""
 
@@ -895,23 +899,23 @@
 msgid "Equal to"
 msgstr ""
 
-#: ../PLCOpenEditor.py:881 ../PLCOpenEditor.py:1388 ../PLCOpenEditor.py:1425
-#: ../PLCOpenEditor.py:1430 ../PLCOpenEditor.py:1445 ../PLCOpenEditor.py:1450
-#: ../PLCOpenEditor.py:2300 ../PLCOpenEditor.py:2669 ../PLCOpenEditor.py:2674
-#: ../PLCOpenEditor.py:3090 ../PLCOpenEditor.py:3182 ../PLCOpenEditor.py:3186
-#: ../PLCOpenEditor.py:3190 ../PLCOpenEditor.py:3194 ../PLCOpenEditor.py:3335
-#: ../PLCOpenEditor.py:3339 ../PLCOpenEditor.py:3343 ../PLCOpenEditor.py:3347
-#: ../PLCOpenEditor.py:3498 ../PLCOpenEditor.py:3502 ../PLCOpenEditor.py:3506
-#: ../PLCOpenEditor.py:3510 ../PLCOpenEditor.py:3514 ../PLCOpenEditor.py:3642
-#: ../PLCOpenEditor.py:3646 ../PLCOpenEditor.py:3650 ../PLCOpenEditor.py:3654
-#: ../PLCOpenEditor.py:3658 ../PLCOpenEditor.py:3713 ../PLCOpenEditor.py:3717
-#: ../PLCOpenEditor.py:3721 ../PLCOpenEditor.py:3725 ../PLCOpenEditor.py:3776
-#: ../PLCOpenEditor.py:3780 ../PLCOpenEditor.py:3784 ../PLCOpenEditor.py:3788
-#: ../PLCOpenEditor.py:4091 ../PLCOpenEditor.py:4417 ../PLCOpenEditor.py:4427
+#: ../PLCOpenEditor.py:882 ../PLCOpenEditor.py:1393 ../PLCOpenEditor.py:1430
+#: ../PLCOpenEditor.py:1435 ../PLCOpenEditor.py:1450 ../PLCOpenEditor.py:1455
+#: ../PLCOpenEditor.py:2305 ../PLCOpenEditor.py:2674 ../PLCOpenEditor.py:2679
+#: ../PLCOpenEditor.py:3095 ../PLCOpenEditor.py:3187 ../PLCOpenEditor.py:3191
+#: ../PLCOpenEditor.py:3195 ../PLCOpenEditor.py:3199 ../PLCOpenEditor.py:3340
+#: ../PLCOpenEditor.py:3344 ../PLCOpenEditor.py:3348 ../PLCOpenEditor.py:3352
+#: ../PLCOpenEditor.py:3503 ../PLCOpenEditor.py:3507 ../PLCOpenEditor.py:3511
+#: ../PLCOpenEditor.py:3515 ../PLCOpenEditor.py:3519 ../PLCOpenEditor.py:3647
+#: ../PLCOpenEditor.py:3651 ../PLCOpenEditor.py:3655 ../PLCOpenEditor.py:3659
+#: ../PLCOpenEditor.py:3663 ../PLCOpenEditor.py:3718 ../PLCOpenEditor.py:3722
+#: ../PLCOpenEditor.py:3726 ../PLCOpenEditor.py:3730 ../PLCOpenEditor.py:3781
+#: ../PLCOpenEditor.py:3785 ../PLCOpenEditor.py:3789 ../PLCOpenEditor.py:3793
+#: ../PLCOpenEditor.py:4096 ../PLCOpenEditor.py:4422 ../PLCOpenEditor.py:4432
 #: ../Viewer.py:334 ../TextViewer.py:281 ../LDViewer.py:665 ../LDViewer.py:881
-#: ../LDViewer.py:885 ../VariablePanel.py:374 ../VariablePanel.py:730
-#: ../VariablePanel.py:735 ../VariablePanel.py:740 ../VariablePanel.py:745
-#: ../VariablePanel.py:1239 ../dialogs/ConnectionDialog.py:199
+#: ../LDViewer.py:885 ../VariablePanel.py:374 ../VariablePanel.py:739
+#: ../VariablePanel.py:744 ../VariablePanel.py:749 ../VariablePanel.py:754
+#: ../VariablePanel.py:1250 ../dialogs/ConnectionDialog.py:199
 #: ../dialogs/ConnectionDialog.py:203 ../dialogs/ConnectionDialog.py:207
 #: ../dialogs/ConnectionDialog.py:211 ../dialogs/ConnectionDialog.py:215
 #: ../dialogs/FBDBlockDialog.py:240 ../dialogs/FBDBlockDialog.py:244
@@ -957,8 +961,8 @@
 msgid "External"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3022 ../PLCOpenEditor.py:3217 ../PLCOpenEditor.py:3227
-#: ../PLCOpenEditor.py:3406 ../PLCOpenEditor.py:3550
+#: ../PLCOpenEditor.py:3027 ../PLCOpenEditor.py:3222 ../PLCOpenEditor.py:3232
+#: ../PLCOpenEditor.py:3411 ../PLCOpenEditor.py:3555
 msgid "FBD"
 msgstr ""
 
@@ -980,7 +984,7 @@
 msgid "Find position"
 msgstr ""
 
-#: ../PLCOpenEditor.py:4232 ../Viewer.py:1095
+#: ../PLCOpenEditor.py:4237 ../Viewer.py:1095
 msgid "Force value"
 msgstr ""
 
@@ -988,8 +992,8 @@
 msgid "Forcing Variable Value"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3090 ../PLCOpenEditor.py:3335 ../PLCOpenEditor.py:3498
-#: ../PLCOpenEditor.py:3642 ../dialogs/SFCTransitionDialog.py:209
+#: ../PLCOpenEditor.py:3095 ../PLCOpenEditor.py:3340 ../PLCOpenEditor.py:3503
+#: ../PLCOpenEditor.py:3647 ../dialogs/SFCTransitionDialog.py:209
 #, python-format
 msgid "Form isn't complete. %s must be filled!"
 msgstr ""
@@ -1002,15 +1006,15 @@
 msgid "Form isn't complete. Valid block type must be selected!"
 msgstr ""
 
-#: ../PLCOpenEditor.py:337
+#: ../PLCOpenEditor.py:338
 msgid "Function"
 msgstr ""
 
-#: ../PLCOpenEditor.py:339 ../PLCOpenEditor.py:1619
+#: ../PLCOpenEditor.py:340 ../PLCOpenEditor.py:1624
 msgid "Function Block"
 msgstr ""
 
-#: ../VariablePanel.py:810
+#: ../VariablePanel.py:819
 msgid "Function Block Types"
 msgstr ""
 
@@ -1035,7 +1039,7 @@
 msgid "Functions"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2477
+#: ../PLCOpenEditor.py:2482
 msgid "Generate Program\tCTRL+G"
 msgstr ""
 
@@ -1043,11 +1047,11 @@
 msgid "Global"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1851
+#: ../PLCOpenEditor.py:1856
 msgid "Graphic Panel"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3027
+#: ../PLCOpenEditor.py:3032
 msgid "Graphics"
 msgstr ""
 
@@ -1059,11 +1063,11 @@
 msgid "Greater than or equal to"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3014
+#: ../PLCOpenEditor.py:3019
 msgid "Grid Resolution:"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3006
+#: ../PLCOpenEditor.py:3011
 msgid "Height:"
 msgstr ""
 
@@ -1071,7 +1075,7 @@
 msgid "Help"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2741
+#: ../PLCOpenEditor.py:2746
 msgid "Horizontal:"
 msgstr ""
 
@@ -1081,8 +1085,8 @@
 "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:3217 ../PLCOpenEditor.py:3227 ../PLCOpenEditor.py:3406
-#: ../PLCOpenEditor.py:3550
+#: ../PLCOpenEditor.py:3222 ../PLCOpenEditor.py:3232 ../PLCOpenEditor.py:3411
+#: ../PLCOpenEditor.py:3555
 msgid "IL"
 msgstr ""
 
@@ -1123,7 +1127,7 @@
 msgid "Inline"
 msgstr ""
 
-#: ../VariablePanel.py:71 ../VariablePanel.py:1057
+#: ../VariablePanel.py:71 ../VariablePanel.py:1068
 #: ../dialogs/FBDVariableDialog.py:41 ../dialogs/SFCStepDialog.py:122
 msgid "Input"
 msgstr ""
@@ -1141,11 +1145,11 @@
 msgid "Instance with id %d doesn't exist!"
 msgstr ""
 
-#: ../PLCOpenEditor.py:564
+#: ../PLCOpenEditor.py:565
 msgid "Instances"
 msgstr ""
 
-#: ../RessourceEditor.py:397
+#: ../RessourceEditor.py:420
 msgid "Instances:"
 msgstr ""
 
@@ -1159,6 +1163,10 @@
 msgid "Interface"
 msgstr ""
 
+#: ../RessourceEditor.py:86
+msgid "Interrupt"
+msgstr ""
+
 #: ../RessourceEditor.py:82
 msgid "Interval"
 msgstr ""
@@ -1172,7 +1180,7 @@
 msgid "Invalid value \"%s\" for \"%s\" variable!"
 msgstr ""
 
-#: ../PLCOpenEditor.py:4080 ../PLCOpenEditor.py:4083
+#: ../PLCOpenEditor.py:4085 ../PLCOpenEditor.py:4088
 #, python-format
 msgid "Invalid value \"%s\" for debug variable"
 msgstr ""
@@ -1187,8 +1195,8 @@
 msgid "Invalid value \"%s\" for viewer block"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3022 ../PLCOpenEditor.py:3217 ../PLCOpenEditor.py:3227
-#: ../PLCOpenEditor.py:3406 ../PLCOpenEditor.py:3550
+#: ../PLCOpenEditor.py:3027 ../PLCOpenEditor.py:3222 ../PLCOpenEditor.py:3232
+#: ../PLCOpenEditor.py:3411 ../PLCOpenEditor.py:3555
 msgid "LD"
 msgstr ""
 
@@ -1197,15 +1205,15 @@
 msgid "Ladder element with id %d is on more than one rung."
 msgstr ""
 
-#: ../PLCOpenEditor.py:3325 ../PLCOpenEditor.py:3488 ../PLCOpenEditor.py:3632
+#: ../PLCOpenEditor.py:3330 ../PLCOpenEditor.py:3493 ../PLCOpenEditor.py:3637
 msgid "Language"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3036
+#: ../PLCOpenEditor.py:3041
 msgid "Language (optional):"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3293 ../PLCOpenEditor.py:3461 ../PLCOpenEditor.py:3605
+#: ../PLCOpenEditor.py:3298 ../PLCOpenEditor.py:3466 ../PLCOpenEditor.py:3610
 msgid "Language:"
 msgstr ""
 
@@ -1229,7 +1237,7 @@
 msgid "Less than or equal to"
 msgstr ""
 
-#: ../PLCOpenEditor.py:599
+#: ../PLCOpenEditor.py:600
 msgid "Library"
 msgstr ""
 
@@ -1245,7 +1253,7 @@
 msgid "Location"
 msgstr ""
 
-#: ../VariablePanel.py:1118
+#: ../VariablePanel.py:1129
 msgid "Locations available:"
 msgstr ""
 
@@ -1261,7 +1269,7 @@
 msgid "Maximum:"
 msgstr ""
 
-#: ../VariablePanel.py:1059
+#: ../VariablePanel.py:1070
 msgid "Memory"
 msgstr ""
 
@@ -1277,7 +1285,7 @@
 msgid "Minimum:"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3051
+#: ../PLCOpenEditor.py:3056
 msgid "Miscellaneous"
 msgstr ""
 
@@ -1306,7 +1314,7 @@
 msgid "Multiplication"
 msgstr ""
 
-#: ../RessourceEditor.py:82 ../RessourceEditor.py:86 ../VariablePanel.py:53
+#: ../RessourceEditor.py:82 ../RessourceEditor.py:91 ../VariablePanel.py:53
 #: ../VariablePanel.py:54 ../DataTypeEditor.py:46
 msgid "Name"
 msgstr ""
@@ -1325,7 +1333,7 @@
 msgid "Negated"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2464
+#: ../PLCOpenEditor.py:2469
 msgid "New\tCTRL+N"
 msgstr ""
 
@@ -1337,7 +1345,7 @@
 msgid "No Modifier"
 msgstr ""
 
-#: ../PLCControler.py:2663
+#: ../PLCControler.py:2669
 msgid "No PLC project found"
 msgstr ""
 
@@ -1351,7 +1359,7 @@
 msgid "No connector found corresponding to \"%s\" continuation in \"%s\" POU"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2411
+#: ../PLCOpenEditor.py:2416
 msgid ""
 "No documentation available.\n"
 "Coming soon."
@@ -1403,7 +1411,7 @@
 "The on-delay timer can be used to delay setting an output true, for fixed period after an input becomes true."
 msgstr ""
 
-#: ../PLCOpenEditor.py:2466
+#: ../PLCOpenEditor.py:2471
 msgid "Open\tCTRL+O"
 msgstr ""
 
@@ -1411,11 +1419,11 @@
 msgid "Option"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2978
+#: ../PLCOpenEditor.py:2983
 msgid "Organization (optional):"
 msgstr ""
 
-#: ../VariablePanel.py:71 ../VariablePanel.py:1058
+#: ../VariablePanel.py:71 ../VariablePanel.py:1069
 #: ../dialogs/FBDVariableDialog.py:43 ../dialogs/SFCStepDialog.py:127
 msgid "Output"
 msgstr ""
@@ -1426,52 +1434,52 @@
 "The PID (proportional, Integral, Derivative) function block provides the classical three term controller for closed loop control."
 msgstr ""
 
-#: ../PLCOpenEditor.py:2630 ../PLCOpenEditor.py:2694
+#: ../PLCOpenEditor.py:2635 ../PLCOpenEditor.py:2699
 msgid "PLCOpen files (*.xml)|*.xml|All files|*.*"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2559
+#: ../PLCOpenEditor.py:2564
 msgid "PLCOpenEditor"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2508
+#: ../PLCOpenEditor.py:2513
 msgid "PLCOpenEditor\tF1"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3321
+#: ../PLCOpenEditor.py:3326
 msgid "POU Name"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3276
+#: ../PLCOpenEditor.py:3281
 msgid "POU Name:"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3323
+#: ../PLCOpenEditor.py:3328
 msgid "POU Type"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3284
+#: ../PLCOpenEditor.py:3289
 msgid "POU Type:"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2480
+#: ../PLCOpenEditor.py:2485
 msgid "Page Setup"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2994
+#: ../PLCOpenEditor.py:2999
 msgid "Page Size (optional):"
 msgstr ""
 
-#: ../PLCOpenEditor.py:4362
+#: ../PLCOpenEditor.py:4367
 #, python-format
 msgid "Page: %d"
 msgstr ""
 
-#: ../PLCOpenEditor.py:330
+#: ../PLCOpenEditor.py:331
 msgid "Paste\tCTRL+V"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1663
+#: ../PLCOpenEditor.py:1668
 msgid "Paste POU"
 msgstr ""
 
@@ -1487,15 +1495,15 @@
 msgid "Please enter comment text"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2246 ../PLCOpenEditor.py:3696
+#: ../PLCOpenEditor.py:2251 ../PLCOpenEditor.py:3701
 msgid "Please enter configuration name"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2194
+#: ../PLCOpenEditor.py:2199
 msgid "Please enter data type name"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2259 ../PLCOpenEditor.py:3759
+#: ../PLCOpenEditor.py:2264 ../PLCOpenEditor.py:3764
 msgid "Please enter resource name"
 msgstr ""
 
@@ -1503,7 +1511,7 @@
 msgid "Please enter step name"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3167
+#: ../PLCOpenEditor.py:3172
 msgid "Please enter text"
 msgstr ""
 
@@ -1512,7 +1520,7 @@
 msgid "Please enter value for a \"%s\" variable:"
 msgstr ""
 
-#: ../VariablePanel.py:1185
+#: ../VariablePanel.py:1196
 msgid "Plugins"
 msgstr ""
 
@@ -1524,7 +1532,7 @@
 msgid "Power Rail Properties"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2482
+#: ../PLCOpenEditor.py:2487
 msgid "Preview"
 msgstr ""
 
@@ -1535,11 +1543,11 @@
 msgid "Preview:"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2484
+#: ../PLCOpenEditor.py:2489
 msgid "Print"
 msgstr ""
 
-#: ../PLCOpenEditor.py:950
+#: ../PLCOpenEditor.py:951
 msgid "Print preview"
 msgstr ""
 
@@ -1551,23 +1559,23 @@
 msgid "Priority:"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2922
+#: ../PLCOpenEditor.py:2927
 msgid "Product Name (required):"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2938
+#: ../PLCOpenEditor.py:2943
 msgid "Product Release (optional):"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2930
+#: ../PLCOpenEditor.py:2935
 msgid "Product Version (required):"
 msgstr ""
 
-#: ../PLCOpenEditor.py:341 ../PLCOpenEditor.py:1622
+#: ../PLCOpenEditor.py:342 ../PLCOpenEditor.py:1627
 msgid "Program"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2671
+#: ../PLCOpenEditor.py:2676
 msgid "Program was successfully generated!"
 msgstr ""
 
@@ -1579,29 +1587,29 @@
 msgid "Programs can't be used by other POUs!"
 msgstr ""
 
-#: ../PLCOpenEditor.py:442 ../PLCOpenEditor.py:2945
+#: ../PLCOpenEditor.py:443 ../PLCOpenEditor.py:2950
 msgid "Project"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2906
+#: ../PLCOpenEditor.py:2911
 msgid "Project Name (required):"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2914
+#: ../PLCOpenEditor.py:2919
 msgid "Project Version (optional):"
 msgstr ""
 
-#: ../PLCControler.py:2650
+#: ../PLCControler.py:2656
 msgid ""
 "Project file syntax error:\n"
 "\n"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2892
+#: ../PLCOpenEditor.py:2897
 msgid "Project properties"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2487 ../PLCControler.py:91
+#: ../PLCOpenEditor.py:2492 ../PLCControler.py:91
 msgid "Properties"
 msgstr ""
 
@@ -1615,7 +1623,7 @@
 msgid "Qualifier"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2490
+#: ../PLCOpenEditor.py:2495
 msgid "Quit\tCTRL+Q"
 msgstr ""
 
@@ -1643,11 +1651,11 @@
 msgid "Reference"
 msgstr ""
 
-#: ../PLCOpenEditor.py:369
+#: ../PLCOpenEditor.py:370
 msgid "Refresh\tF5"
 msgstr ""
 
-#: ../PLCOpenEditor.py:4235 ../Viewer.py:1098
+#: ../PLCOpenEditor.py:4240 ../Viewer.py:1098
 msgid "Release value"
 msgstr ""
 
@@ -1655,7 +1663,7 @@
 msgid "Remainder (modulo)"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1626
+#: ../PLCOpenEditor.py:1631
 msgid "Rename"
 msgstr ""
 
@@ -1713,7 +1721,7 @@
 msgid "Rounding up/down"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3022 ../PLCOpenEditor.py:3227
+#: ../PLCOpenEditor.py:3027 ../PLCOpenEditor.py:3232
 msgid "SFC"
 msgstr ""
 
@@ -1723,24 +1731,24 @@
 "The SR bistable is a latch where the Set dominates."
 msgstr ""
 
-#: ../PLCOpenEditor.py:3217 ../PLCOpenEditor.py:3227 ../PLCOpenEditor.py:3406
-#: ../PLCOpenEditor.py:3550
+#: ../PLCOpenEditor.py:3222 ../PLCOpenEditor.py:3232 ../PLCOpenEditor.py:3411
+#: ../PLCOpenEditor.py:3555
 msgid "ST"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2658
+#: ../PLCOpenEditor.py:2663
 msgid "ST files (*.st)|*.st|All files|*.*"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2473
+#: ../PLCOpenEditor.py:2478
 msgid "Save\tCTRL+S"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2475
+#: ../PLCOpenEditor.py:2480
 msgid "Save As...\tCTRL+SHIFT+S"
 msgstr ""
 
-#: ../PLCOpenEditor.py:345
+#: ../PLCOpenEditor.py:346
 msgid "Select All\tCTRL+A"
 msgstr ""
 
@@ -1748,7 +1756,7 @@
 msgid "Select a variable class:"
 msgstr ""
 
-#: ../PLCOpenEditor.py:575 ../PLCOpenEditor.py:587
+#: ../PLCOpenEditor.py:576 ../PLCOpenEditor.py:588
 msgid "Select an object"
 msgstr ""
 
@@ -1822,11 +1830,11 @@
 msgid "Tangent"
 msgstr ""
 
-#: ../RessourceEditor.py:86
+#: ../RessourceEditor.py:91
 msgid "Task"
 msgstr ""
 
-#: ../RessourceEditor.py:361
+#: ../RessourceEditor.py:384
 msgid "Tasks:"
 msgstr ""
 
@@ -1838,16 +1846,16 @@
 msgid "The group of block must be coherent!"
 msgstr ""
 
-#: ../PLCOpenEditor.py:889
+#: ../PLCOpenEditor.py:890
 msgid "There are changes, do you want to save?"
 msgstr ""
 
-#: ../PLCOpenEditor.py:1425 ../PLCOpenEditor.py:1445
+#: ../PLCOpenEditor.py:1430 ../PLCOpenEditor.py:1450
 #, python-format
 msgid "There is a POU named \"%s\". This could cause a conflict. Do you wish to continue?"
 msgstr ""
 
-#: ../PLCOpenEditor.py:969
+#: ../PLCOpenEditor.py:974
 msgid ""
 "There was a problem printing.\n"
 "Perhaps your current printer is not set correctly?"
@@ -1894,7 +1902,7 @@
 msgid "Time-of-day subtraction"
 msgstr ""
 
-#: ../PLCOpenEditor.py:579
+#: ../PLCOpenEditor.py:580
 msgid "Toolbar"
 msgstr ""
 
@@ -1902,11 +1910,11 @@
 msgid "Top"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3486
+#: ../PLCOpenEditor.py:3491
 msgid "Transition Name"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3453
+#: ../PLCOpenEditor.py:3458
 msgid "Transition Name:"
 msgstr ""
 
@@ -1929,7 +1937,11 @@
 msgid "Transitions"
 msgstr ""
 
-#: ../RessourceEditor.py:86 ../VariablePanel.py:53 ../VariablePanel.py:54
+#: ../RessourceEditor.py:82
+msgid "Triggering"
+msgstr ""
+
+#: ../RessourceEditor.py:91 ../VariablePanel.py:53 ../VariablePanel.py:54
 #: ../dialogs/ActionBlockDialog.py:33 ../DataTypeEditor.py:46
 msgid "Type"
 msgstr ""
@@ -1948,7 +1960,7 @@
 msgid "Type:"
 msgstr ""
 
-#: ../PLCOpenEditor.py:545
+#: ../PLCOpenEditor.py:546
 msgid "Types"
 msgstr ""
 
@@ -1988,7 +2000,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 ""
 
-#: ../VariablePanel.py:790 ../DataTypeEditor.py:807
+#: ../VariablePanel.py:799 ../DataTypeEditor.py:807
 msgid "User Data Types"
 msgstr ""
 
@@ -1996,7 +2008,7 @@
 msgid "User-defined POUs"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3895 ../dialogs/ActionBlockDialog.py:33
+#: ../PLCOpenEditor.py:3900 ../dialogs/ActionBlockDialog.py:33
 msgid "Value"
 msgstr ""
 
@@ -2008,7 +2020,7 @@
 msgid "Values:"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3895 ../dialogs/ActionBlockDialog.py:37
+#: ../PLCOpenEditor.py:3900 ../dialogs/ActionBlockDialog.py:37
 msgid "Variable"
 msgstr ""
 
@@ -2024,20 +2036,20 @@
 msgid "Variable don't belong to this POU!"
 msgstr ""
 
-#: ../PLCOpenEditor.py:594 ../VariablePanel.py:72
+#: ../PLCOpenEditor.py:595 ../VariablePanel.py:72
 msgid "Variables"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2749
+#: ../PLCOpenEditor.py:2754
 msgid "Vertical:"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3351 ../PLCOpenEditor.py:3729 ../PLCOpenEditor.py:3792
+#: ../PLCOpenEditor.py:3356 ../PLCOpenEditor.py:3734 ../PLCOpenEditor.py:3797
 #: ../LDViewer.py:890
 msgid "Warning"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2998
+#: ../PLCOpenEditor.py:3003
 msgid "Width:"
 msgstr ""
 
@@ -2049,7 +2061,7 @@
 msgid "You must select the wire where a contact should be added!"
 msgstr ""
 
-#: ../PLCOpenEditor.py:3182 ../PLCOpenEditor.py:3713 ../PLCOpenEditor.py:3776
+#: ../PLCOpenEditor.py:3187 ../PLCOpenEditor.py:3718 ../PLCOpenEditor.py:3781
 #: ../dialogs/PouNameDialog.py:55 ../dialogs/SFCStepDialog.py:175
 #: ../dialogs/SFCStepNameDialog.py:57
 msgid "You must type a name!"
@@ -2059,36 +2071,36 @@
 msgid "You must type a value!"
 msgstr ""
 
-#: ../PLCOpenEditor.py:375
+#: ../PLCOpenEditor.py:376
 msgid "Zoom"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2667
+#: ../PLCOpenEditor.py:2672
 #, python-format
 msgid "error: %s\n"
 msgstr ""
 
-#: ../PLCOpenEditor.py:4394 ../PLCOpenEditor.py:4396
+#: ../PLCOpenEditor.py:4399 ../PLCOpenEditor.py:4401
 msgid "file : "
 msgstr ""
 
-#: ../PLCOpenEditor.py:3222
+#: ../PLCOpenEditor.py:3227
 msgid "function"
 msgstr ""
 
-#: ../PLCOpenEditor.py:4397
+#: ../PLCOpenEditor.py:4402
 msgid "function : "
 msgstr ""
 
-#: ../PLCOpenEditor.py:3222
+#: ../PLCOpenEditor.py:3227
 msgid "functionBlock"
 msgstr ""
 
-#: ../PLCOpenEditor.py:4397
+#: ../PLCOpenEditor.py:4402
 msgid "line : "
 msgstr ""
 
-#: ../PLCOpenEditor.py:3222
+#: ../PLCOpenEditor.py:3227
 msgid "program"
 msgstr ""
 
@@ -2104,7 +2116,7 @@
 msgid "string right of"
 msgstr ""
 
-#: ../PLCOpenEditor.py:2665
+#: ../PLCOpenEditor.py:2670
 #, python-format
 msgid "warning: %s\n"
 msgstr ""
Binary file locale/fr_FR/LC_MESSAGES/PLCOpenEditor.mo has changed