# HG changeset patch # User Surkov Sergey # Date 1517405461 -10800 # Node ID 64827679f3f10dc15c81af76f5164b6afd3afafc # Parent 92796bb8d4fefffb29fe64167d05b7fab5832d3f add fields autocomplete when adding task or instance in resources values will be copied from previous row, first row fills with the default values diff -r 92796bb8d4fe -r 64827679f3f1 PLCControler.py --- a/PLCControler.py Thu Jan 18 14:24:44 2018 +0300 +++ b/PLCControler.py Wed Jan 31 16:31:01 2018 +0300 @@ -42,6 +42,7 @@ from PLCGenerator import * duration_model = re.compile("(?:([0-9]{1,2})h)?(?:([0-9]{1,2})m(?!s))?(?:([0-9]{1,2})s)?(?:([0-9]{1,3}(?:\.[0-9]*)?)ms)?") +VARIABLE_NAME_SUFFIX_MODEL = re.compile('(\d+)$') ITEMS_EDITABLE = [ ITEM_PROJECT, @@ -2332,6 +2333,14 @@ return text def GenerateNewName(self, tagname, name, format, start_idx=0, exclude=None, debug=False): + if name is not None: + result = re.search(VARIABLE_NAME_SUFFIX_MODEL, name) + if result is not None: + format = name[:result.start(1)] + '%d' + start_idx = int(result.group(1)) + else: + format = name + '%d' + names = {} if exclude is None else exclude.copy() if tagname is not None: names.update(dict([(varname.upper(), True) @@ -2347,6 +2356,14 @@ PLCOpenParser.GetElementClass("connector", "commonObjects"), PLCOpenParser.GetElementClass("continuation", "commonObjects"))): names[instance.getname().upper()] = True + elif words[0] == 'R': + element = self.GetEditedElement(tagname, debug) + for task in element.gettask(): + names[task.getname().upper()] = True + for instance in task.getpouInstance(): + names[instance.getname().upper()] = True + for instance in element.getpouInstance(): + names[instance.getname().upper()] = True else: project = self.GetProject(debug) if project is not None: diff -r 92796bb8d4fe -r 64827679f3f1 editors/ResourceEditor.py --- a/editors/ResourceEditor.py Thu Jan 18 14:24:44 2018 +0300 +++ b/editors/ResourceEditor.py Wed Jan 31 16:31:01 2018 +0300 @@ -303,7 +303,8 @@ self.RefreshHighlightsTimer = wx.Timer(self, -1) self.Bind(wx.EVT_TIMER, self.OnRefreshHighlightsTimer, self.RefreshHighlightsTimer) - self.TasksDefaultValue = {"Name": "", "Triggering": "", "Single": "", "Interval": "", "Priority": 0} + self.TasksDefaultValue = {"Name": "task0", "Triggering": "Cyclic", + "Single": "", "Interval": "T#20ms", "Priority": 0} self.TasksTable = ResourceTable(self, [], GetTasksTableColnames()) self.TasksTable.SetColAlignements([wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_RIGHT, wx.ALIGN_RIGHT]) self.TasksTable.SetColSizes([200, 100, 100, 150, 100]) @@ -314,7 +315,15 @@ "Down": self.DownTaskButton}) def _AddTask(new_row): - self.TasksTable.InsertRow(new_row, self.TasksDefaultValue.copy()) + if new_row > 0: + row_content = self.TasksTable.data[new_row-1].copy() + old_name = row_content['Name'] + row_content['Name'] =\ + self.Controler.GenerateNewName(self.TagName, old_name, old_name+'%d') + else: + row_content = self.TasksDefaultValue.copy() + + self.TasksTable.InsertRow(new_row, row_content) self.RefreshModel() self.RefreshView() return new_row @@ -338,7 +347,7 @@ self.TasksTable.ResetView(self.TasksGrid) self.TasksGrid.RefreshButtons() - self.InstancesDefaultValue = {"Name": "", "Type": "", "Task": ""} + self.InstancesDefaultValue = {"Name": "instance0", "Type": "", "Task": ""} self.InstancesTable = ResourceTable(self, [], GetInstancesTableColnames()) self.InstancesTable.SetColAlignements([wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT]) self.InstancesTable.SetColSizes([200, 150, 150]) @@ -349,7 +358,15 @@ "Down": self.DownInstanceButton}) def _AddInstance(new_row): - self.InstancesTable.InsertRow(new_row, self.InstancesDefaultValue.copy()) + if new_row > 0: + row_content = self.InstancesTable.data[new_row - 1].copy() + old_name = row_content['Name'] + row_content['Name'] =\ + self.Controler.GenerateNewName(self.TagName, old_name, old_name+'%d') + else: + row_content = self.InstancesDefaultValue.copy() + + self.InstancesTable.InsertRow(new_row, row_content) self.RefreshModel() self.RefreshView() return new_row