editors/ResourceEditor.py
branchwxPython4
changeset 3303 0ffb41625592
parent 2737 38afed869ff6
child 3449 6279ec06df98
equal deleted inserted replaced
3302:c89fc366bebd 3303:0ffb41625592
    74 def GetTaskTriggeringOptions():
    74 def GetTaskTriggeringOptions():
    75     _ = NoTranslate
    75     _ = NoTranslate
    76     return [_("Interrupt"), _("Cyclic")]
    76     return [_("Interrupt"), _("Cyclic")]
    77 
    77 
    78 
    78 
    79 def SingleCellEditor(*x):
       
    80     return wx.grid.GridCellChoiceEditor()
       
    81 
       
    82 
       
    83 def CheckSingle(single, varlist):
    79 def CheckSingle(single, varlist):
    84     return single in varlist
    80     return single in varlist
    85 
    81 
    86 
    82 
    87 def GetInstancesTableColnames():
    83 def GetInstancesTableColnames():
   160                         grid.SetReadOnly(row, col, True)
   156                         grid.SetReadOnly(row, col, True)
   161                     interval = self.GetValueByName(row, colname)
   157                     interval = self.GetValueByName(row, colname)
   162                     if interval != "" and IEC_TIME_MODEL.match(interval.upper()) is None:
   158                     if interval != "" and IEC_TIME_MODEL.match(interval.upper()) is None:
   163                         error = True
   159                         error = True
   164                 elif colname == "Single":
   160                 elif colname == "Single":
   165                     editor = SingleCellEditor(self, colname)
   161                     editor = wx.grid.GridCellChoiceEditor(self.Parent.VariableList)
   166                     editor.SetParameters(self.Parent.VariableList)
       
   167                     if self.GetValueByName(row, "Triggering") != "Interrupt":
   162                     if self.GetValueByName(row, "Triggering") != "Interrupt":
   168                         grid.SetReadOnly(row, col, True)
   163                         grid.SetReadOnly(row, col, True)
   169                     single = self.GetValueByName(row, colname)
   164                     single = self.GetValueByName(row, colname)
   170                     if single != "" and not CheckSingle(single, self.Parent.VariableList):
   165                     if single != "" and not CheckSingle(single, self.Parent.VariableList):
   171                         error = True
   166                         error = True
   172                 elif colname == "Triggering":
   167                 elif colname == "Triggering":
   173                     editor = wx.grid.GridCellChoiceEditor()
   168                     editor = wx.grid.GridCellChoiceEditor(map(_, GetTaskTriggeringOptions()))
   174                     editor.SetParameters(",".join(map(_, GetTaskTriggeringOptions())))
       
   175                 elif colname == "Type":
   169                 elif colname == "Type":
   176                     editor = wx.grid.GridCellChoiceEditor()
   170                     editor = wx.grid.GridCellChoiceEditor(self.Parent.TypeList)
   177                     editor.SetParameters(self.Parent.TypeList)
       
   178                 elif colname == "Priority":
   171                 elif colname == "Priority":
   179                     editor = wx.grid.GridCellNumberEditor()
   172                     editor = wx.grid.GridCellNumberEditor()
   180                     editor.SetParameters("0,65535")
   173                     editor.SetParameters("0,65535")
   181                 elif colname == "Task":
   174                 elif colname == "Task":
   182                     editor = wx.grid.GridCellChoiceEditor()
   175                     editor = wx.grid.GridCellChoiceEditor(self.Parent.TaskList)
   183                     editor.SetParameters(self.Parent.TaskList)
       
   184 
   176 
   185                 grid.SetCellEditor(row, col, editor)
   177                 grid.SetCellEditor(row, col, editor)
   186                 grid.SetCellRenderer(row, col, renderer)
   178                 grid.SetCellRenderer(row, col, renderer)
   187 
   179 
   188                 if error:
   180                 if error:
   228         main_sizer.AddGrowableRow(1)
   220         main_sizer.AddGrowableRow(1)
   229 
   221 
   230         tasks_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=5)
   222         tasks_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=5)
   231         tasks_sizer.AddGrowableCol(0)
   223         tasks_sizer.AddGrowableCol(0)
   232         tasks_sizer.AddGrowableRow(1)
   224         tasks_sizer.AddGrowableRow(1)
   233         main_sizer.AddSizer(tasks_sizer, border=5,
   225         main_sizer.Add(tasks_sizer, border=5,
   234                             flag=wx.GROW | wx.TOP | wx.LEFT | wx.RIGHT)
   226                             flag=wx.GROW | wx.TOP | wx.LEFT | wx.RIGHT)
   235 
   227 
   236         tasks_buttons_sizer = wx.FlexGridSizer(cols=5, hgap=5, rows=1, vgap=0)
   228         tasks_buttons_sizer = wx.FlexGridSizer(cols=5, hgap=5, rows=1, vgap=0)
   237         tasks_buttons_sizer.AddGrowableCol(0)
   229         tasks_buttons_sizer.AddGrowableCol(0)
   238         tasks_buttons_sizer.AddGrowableRow(0)
   230         tasks_buttons_sizer.AddGrowableRow(0)
   239         tasks_sizer.AddSizer(tasks_buttons_sizer, flag=wx.GROW)
   231         tasks_sizer.Add(tasks_buttons_sizer, flag=wx.GROW)
   240 
   232 
   241         tasks_label = wx.StaticText(self.Editor, label=_(u'Tasks:'))
   233         tasks_label = wx.StaticText(self.Editor, label=_(u'Tasks:'))
   242         tasks_buttons_sizer.AddWindow(tasks_label, flag=wx.ALIGN_BOTTOM)
   234         tasks_buttons_sizer.Add(tasks_label, flag=wx.ALIGN_BOTTOM)
   243 
   235 
   244         for name, bitmap, help in [
   236         for name, bitmap, help in [
   245                 ("AddTaskButton", "add_element", _("Add task")),
   237                 ("AddTaskButton", "add_element", _("Add task")),
   246                 ("DeleteTaskButton", "remove_element", _("Remove task")),
   238                 ("DeleteTaskButton", "remove_element", _("Remove task")),
   247                 ("UpTaskButton", "up", _("Move task up")),
   239                 ("UpTaskButton", "up", _("Move task up")),
   248                 ("DownTaskButton", "down", _("Move task down"))]:
   240                 ("DownTaskButton", "down", _("Move task down"))]:
   249             button = wx.lib.buttons.GenBitmapButton(self.Editor,
   241             button = wx.lib.buttons.GenBitmapButton(self.Editor,
   250                                                     bitmap=GetBitmap(bitmap),
   242                                                     bitmap=GetBitmap(bitmap),
   251                                                     size=wx.Size(28, 28),
   243                                                     size=wx.Size(28, 28),
   252                                                     style=wx.NO_BORDER)
   244                                                     style=wx.NO_BORDER)
   253             button.SetToolTipString(help)
   245             button.SetToolTip(help)
   254             setattr(self, name, button)
   246             setattr(self, name, button)
   255             tasks_buttons_sizer.AddWindow(button)
   247             tasks_buttons_sizer.Add(button)
   256 
   248 
   257         self.TasksGrid = CustomGrid(self.Editor, style=wx.VSCROLL)
   249         self.TasksGrid = CustomGrid(self.Editor, style=wx.VSCROLL)
   258         self.TasksGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.OnTasksGridCellChange)
   250         self.TasksGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGING, self.OnTasksGridCellChange)
   259         tasks_sizer.AddWindow(self.TasksGrid, flag=wx.GROW)
   251         tasks_sizer.Add(self.TasksGrid, flag=wx.GROW)
   260 
   252 
   261         instances_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=5)
   253         instances_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=5)
   262         instances_sizer.AddGrowableCol(0)
   254         instances_sizer.AddGrowableCol(0)
   263         instances_sizer.AddGrowableRow(1)
   255         instances_sizer.AddGrowableRow(1)
   264         main_sizer.AddSizer(instances_sizer, border=5,
   256         main_sizer.Add(instances_sizer, border=5,
   265                             flag=wx.GROW | wx.BOTTOM | wx.LEFT | wx.RIGHT)
   257                             flag=wx.GROW | wx.BOTTOM | wx.LEFT | wx.RIGHT)
   266 
   258 
   267         instances_buttons_sizer = wx.FlexGridSizer(cols=5, hgap=5, rows=1, vgap=0)
   259         instances_buttons_sizer = wx.FlexGridSizer(cols=5, hgap=5, rows=1, vgap=0)
   268         instances_buttons_sizer.AddGrowableCol(0)
   260         instances_buttons_sizer.AddGrowableCol(0)
   269         instances_buttons_sizer.AddGrowableRow(0)
   261         instances_buttons_sizer.AddGrowableRow(0)
   270         instances_sizer.AddSizer(instances_buttons_sizer, flag=wx.GROW)
   262         instances_sizer.Add(instances_buttons_sizer, flag=wx.GROW)
   271 
   263 
   272         instances_label = wx.StaticText(self.Editor, label=_(u'Instances:'))
   264         instances_label = wx.StaticText(self.Editor, label=_(u'Instances:'))
   273         instances_buttons_sizer.AddWindow(instances_label, flag=wx.ALIGN_BOTTOM)
   265         instances_buttons_sizer.Add(instances_label, flag=wx.ALIGN_BOTTOM)
   274 
   266 
   275         for name, bitmap, help in [
   267         for name, bitmap, help in [
   276                 ("AddInstanceButton", "add_element", _("Add instance")),
   268                 ("AddInstanceButton", "add_element", _("Add instance")),
   277                 ("DeleteInstanceButton", "remove_element", _("Remove instance")),
   269                 ("DeleteInstanceButton", "remove_element", _("Remove instance")),
   278                 ("UpInstanceButton", "up", _("Move instance up")),
   270                 ("UpInstanceButton", "up", _("Move instance up")),
   279                 ("DownInstanceButton", "down", _("Move instance down"))]:
   271                 ("DownInstanceButton", "down", _("Move instance down"))]:
   280             button = wx.lib.buttons.GenBitmapButton(
   272             button = wx.lib.buttons.GenBitmapButton(
   281                 self.Editor, bitmap=GetBitmap(bitmap),
   273                 self.Editor, bitmap=GetBitmap(bitmap),
   282                 size=wx.Size(28, 28), style=wx.NO_BORDER)
   274                 size=wx.Size(28, 28), style=wx.NO_BORDER)
   283             button.SetToolTipString(help)
   275             button.SetToolTip(help)
   284             setattr(self, name, button)
   276             setattr(self, name, button)
   285             instances_buttons_sizer.AddWindow(button)
   277             instances_buttons_sizer.Add(button)
   286 
   278 
   287         self.InstancesGrid = CustomGrid(self.Editor, style=wx.VSCROLL)
   279         self.InstancesGrid = CustomGrid(self.Editor, style=wx.VSCROLL)
   288         self.InstancesGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.OnInstancesGridCellChange)
   280         self.InstancesGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGING, self.OnInstancesGridCellChange)
   289         instances_sizer.AddWindow(self.InstancesGrid, flag=wx.GROW)
   281         instances_sizer.Add(self.InstancesGrid, flag=wx.GROW)
   290 
   282 
   291         self.Editor.SetSizer(main_sizer)
   283         self.Editor.SetSizer(main_sizer)
   292 
   284 
   293     def __init__(self, parent, tagname, window, controler):
   285     def __init__(self, parent, tagname, window, controler):
   294         EditorPanel.__init__(self, parent, tagname, window, controler)
   286         EditorPanel.__init__(self, parent, tagname, window, controler)
   403 
   395 
   404     def __del__(self):
   396     def __del__(self):
   405         self.RefreshHighlightsTimer.Stop()
   397         self.RefreshHighlightsTimer.Stop()
   406 
   398 
   407     def RefreshTypeList(self):
   399     def RefreshTypeList(self):
   408         self.TypeList = ""
   400         self.TypeList = []
   409         blocktypes = self.Controler.GetBlockResource()
   401         blocktypes = self.Controler.GetBlockResource()
   410         for blocktype in blocktypes:
   402         for blocktype in blocktypes:
   411             self.TypeList += ",%s" % blocktype
   403             self.TypeList.append(blocktype)
   412 
   404 
   413     def RefreshTaskList(self):
   405     def RefreshTaskList(self):
   414         self.TaskList = ""
   406         self.TaskList = []
   415         for row in xrange(self.TasksTable.GetNumberRows()):
   407         for row in xrange(self.TasksTable.GetNumberRows()):
   416             self.TaskList += ",%s" % self.TasksTable.GetValueByName(row, "Name")
   408             self.TaskList.append(self.TasksTable.GetValueByName(row, "Name"))
   417 
   409 
   418     def RefreshVariableList(self):
   410     def RefreshVariableList(self):
   419         self.VariableList = ""
   411         self.VariableList = []
   420         for variable in self.Controler.GetEditedResourceVariables(self.TagName):
   412         for variable in self.Controler.GetEditedResourceVariables(self.TagName):
   421             self.VariableList += ",%s" % variable
   413             self.VariableList.append(variable)
   422 
   414 
   423     def RefreshModel(self):
   415     def RefreshModel(self):
   424         self.Controler.SetEditedResourceInfos(self.TagName, self.TasksTable.GetData(), self.InstancesTable.GetData())
   416         self.Controler.SetEditedResourceInfos(self.TagName, self.TasksTable.GetData(), self.InstancesTable.GetData())
   425         self.RefreshBuffer()
   417         self.RefreshBuffer()
   426 
   418 
   479             if message is not None:
   471             if message is not None:
   480                 event.Veto()
   472                 event.Veto()
   481                 wx.CallAfter(self.ShowErrorMessage, message)
   473                 wx.CallAfter(self.ShowErrorMessage, message)
   482                 return
   474                 return
   483 
   475 
   484             tasklist = [name for name in self.TaskList.split(",") if name != ""]
   476             tasklist = [name for name in self.TaskList if name != ""]
   485             for i in xrange(self.TasksTable.GetNumberRows()):
   477             for i in xrange(self.TasksTable.GetNumberRows()):
   486                 task = self.TasksTable.GetValueByName(i, "Name")
   478                 task = self.TasksTable.GetValueByName(i, "Name")
   487                 if task in tasklist:
   479                 if task in tasklist:
   488                     tasklist.remove(task)
   480                     tasklist.remove(task)
   489             if len(tasklist) > 0:
   481             if len(tasklist) > 0: