diff -r d51af006fa6b -r 64d8f52bc8c8 controls/PouInstanceVariablesPanel.py --- a/controls/PouInstanceVariablesPanel.py Fri Aug 11 15:18:19 2017 +0300 +++ b/controls/PouInstanceVariablesPanel.py Mon Aug 14 19:13:01 2017 +0300 @@ -59,14 +59,14 @@ w, h = self.GetClientSize() total_h = self.GetLineHeight(item) r_image_w, r_image_h = self._imageListRight.GetSize(rightimages[0]) - + bbox_width = (r_image_w + 4) * len(rightimages) + 4 bbox_height = r_image_h + 8 bbox_x = w - bbox_width bbox_y = item.GetY() + ((total_h > r_image_h) and [(total_h-r_image_h)/2] or [0])[0] - + return wx.Rect(bbox_x, bbox_y, bbox_width, bbox_height) - + return None def IsOverItemRightImage(self, item, point): @@ -75,30 +75,30 @@ point = self.CalcUnscrolledPosition(point) r_image_w, r_image_h = self._imageListRight.GetSize(rightimages[0]) images_bbx = self.GetItemRightImagesBBox(item) - + rect = wx.Rect(images_bbx.x + 4, images_bbx.y + 4, r_image_w, r_image_h) for r_image in rightimages: if rect.Inside(point): return r_image rect.x += r_image_w + 4 - + return None - + def PaintItem(self, item, dc, level, align): CT.CustomTreeCtrl.PaintItem(self, item, dc, level, align) - + rightimages = item.GetRightImages() if len(rightimages) > 0: images_bbx = self.GetItemRightImagesBBox(item) r_image_w, r_image_h = self._imageListRight.GetSize(rightimages[0]) - + dc.SetBrush(wx.TRANSPARENT_BRUSH) dc.SetPen(wx.TRANSPARENT_PEN) - + bg_width = (r_image_w + 4) * len(rightimages) + 4 bg_height = r_image_h + 8 - dc.DrawRectangle(images_bbx.x, images_bbx.y, + dc.DrawRectangle(images_bbx.x, images_bbx.y, images_bbx.width, images_bbx.height) x_pos = images_bbx.x + 4 for r_image in rightimages: @@ -106,7 +106,7 @@ r_image, dc, x_pos, images_bbx.y + 4, wx.IMAGELIST_DRAW_TRANSPARENT) x_pos += r_image_w + 4 - + _ButtonCallbacks = namedtuple("ButtonCallbacks", ["leftdown", "dclick"]) from PLCControler import ITEMS_VARIABLE, ITEM_CONFIGURATION, ITEM_RESOURCE, ITEM_POU, ITEM_TRANSITION, ITEM_ACTION @@ -115,26 +115,26 @@ class PouInstanceVariablesPanel(wx.Panel): def __init__(self, parent, window, controller, debug): - wx.Panel.__init__(self, name='PouInstanceTreePanel', - parent=parent, pos=wx.Point(0, 0), + wx.Panel.__init__(self, name='PouInstanceTreePanel', + parent=parent, pos=wx.Point(0, 0), size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL) - + self.ParentButton = wx.lib.buttons.GenBitmapButton(self, bitmap=GetBitmap("top"), size=wx.Size(28, 28), style=wx.NO_BORDER) self.ParentButton.SetToolTipString(_("Parent instance")) - self.Bind(wx.EVT_BUTTON, self.OnParentButtonClick, + self.Bind(wx.EVT_BUTTON, self.OnParentButtonClick, self.ParentButton) - + self.InstanceChoice = wx.ComboBox(self, size=wx.Size(0, 0), style=wx.CB_READONLY) self.Bind(wx.EVT_COMBOBOX, self.OnInstanceChoiceChanged, self.InstanceChoice) - - self.DebugButton = wx.lib.buttons.GenBitmapButton(self, + + self.DebugButton = wx.lib.buttons.GenBitmapButton(self, bitmap=GetBitmap("debug_instance"), size=wx.Size(28, 28), style=wx.NO_BORDER) self.DebugButton.SetToolTipString(_("Debug instance")) - self.Bind(wx.EVT_BUTTON, self.OnDebugButtonClick, + self.Bind(wx.EVT_BUTTON, self.OnDebugButtonClick, self.DebugButton) - + self.VariablesList = CustomTreeCtrlWithRightImage(self, style=wx.SUNKEN_BORDER, agwStyle=CT.TR_NO_BUTTONS| @@ -150,54 +150,54 @@ self.OnVariablesListItemActivated) self.VariablesList.Bind(wx.EVT_LEFT_DOWN, self.OnVariablesListLeftDown) self.VariablesList.Bind(wx.EVT_KEY_DOWN, self.OnVariablesListKeyDown) - + self.TreeRightImageList = wx.ImageList(24, 24) self.EditImage = self.TreeRightImageList.Add(GetBitmap("edit")) self.DebugInstanceImage = self.TreeRightImageList.Add(GetBitmap("debug_instance")) self.VariablesList.SetRightImageList(self.TreeRightImageList) - + self.ButtonCallBacks = { self.EditImage: _ButtonCallbacks( self.EditButtonCallback, None), self.DebugInstanceImage: _ButtonCallbacks( self.DebugButtonCallback, self.DebugButtonDClickCallback)} - + buttons_sizer = wx.FlexGridSizer(cols=3, hgap=0, rows=1, vgap=0) buttons_sizer.AddWindow(self.ParentButton) buttons_sizer.AddWindow(self.InstanceChoice, flag=wx.GROW) buttons_sizer.AddWindow(self.DebugButton) buttons_sizer.AddGrowableCol(1) buttons_sizer.AddGrowableRow(0) - + main_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=0) main_sizer.AddSizer(buttons_sizer, flag=wx.GROW) main_sizer.AddWindow(self.VariablesList, flag=wx.GROW) main_sizer.AddGrowableCol(0) main_sizer.AddGrowableRow(1) - + self.SetSizer(main_sizer) - + self.ParentWindow = window self.Controller = controller self.Debug = debug if not self.Debug: self.DebugButton.Hide() - + self.PouTagName = None self.PouInfos = None self.PouInstance = None - + def __del__(self): self.Controller = None - + def SetTreeImageList(self, tree_image_list): self.VariablesList.SetImageList(tree_image_list) - + def SetController(self, controller): self.Controller = controller - + self.RefreshView() - + def SetPouType(self, tagname, pou_instance=None): if self.Controller is not None: if tagname == "Project": @@ -206,7 +206,7 @@ tagname = self.Controller.ComputeConfigurationName(config_name) if pou_instance is not None: self.PouInstance = pou_instance - + if self.PouTagName != tagname: self.PouTagName = tagname self.RefreshView() @@ -214,20 +214,20 @@ self.RefreshInstanceChoice() else: self.RefreshView() - + def ResetView(self): self.Controller = None - + self.PouTagName = None self.PouInfos = None self.PouInstance = None - + self.RefreshView() - + def RefreshView(self): self.Freeze() self.VariablesList.DeleteAllItems() - + if self.Controller is not None and self.PouTagName is not None: if self.PouTagName.split('::')[0] in ['A', 'T']: self.PouInfos = self.Controller.GetPouVariables('P::%s' % self.PouTagName.split('::')[1], self.Debug) @@ -244,24 +244,24 @@ text = "%s (%s)" % (var_infos.name, var_infos.type) else: text = var_infos.name - + right_images = [] if var_infos.edit: right_images.append(self.EditImage) - + if var_infos.debug and self.Debug: right_images.append(self.DebugInstanceImage) - + item = self.VariablesList.AppendItem(root, text) item.SetRightImages(right_images) self.VariablesList.SetItemImage(item, self.ParentWindow.GetTreeImage(var_infos.var_class)) self.VariablesList.SetPyData(item, var_infos) - + self.RefreshInstanceChoice() self.RefreshButtons() - + self.Thaw() - + def RefreshInstanceChoice(self): self.InstanceChoice.Clear() self.InstanceChoice.SetValue("") @@ -279,12 +279,12 @@ else: self.PouInstance = None self.InstanceChoice.SetValue(_("Select an instance")) - + def RefreshButtons(self): enabled = self.InstanceChoice.GetSelection() != -1 self.ParentButton.Enable(enabled and self.PouInfos.var_class != ITEM_CONFIGURATION) self.DebugButton.Enable(enabled and self.PouInfos.debug and self.Debug) - + root = self.VariablesList.GetRootItem() if root is not None and root.IsOk(): item, item_cookie = self.VariablesList.GetFirstChild(root) @@ -295,12 +295,12 @@ if child.GetName() != "edit": child.Enable(enabled) item, item_cookie = self.VariablesList.GetNextChild(root, item_cookie) - + def EditButtonCallback(self, infos): var_class = infos.var_class if var_class == ITEM_RESOURCE: tagname = self.Controller.ComputeConfigurationResourceName( - self.InstanceChoice.GetStringSelection(), + self.InstanceChoice.GetStringSelection(), infos.name) elif var_class == ITEM_TRANSITION: tagname = self.Controller.ComputePouTransitionName( @@ -314,7 +314,7 @@ var_class = ITEM_POU tagname = self.Controller.ComputePouName(infos.type) self.ParentWindow.EditProjectElement(var_class, tagname) - + def DebugButtonCallback(self, infos): if self.InstanceChoice.GetSelection() != -1: var_class = infos.var_class @@ -344,16 +344,16 @@ var_class, var_path, self.Controller.ComputePouName(infos.type)) - + def DebugButtonDClickCallback(self, infos): if self.InstanceChoice.GetSelection() != -1: if infos.var_class in ITEMS_VARIABLE: self.ParentWindow.AddDebugVariable( - "%s.%s" % (self.InstanceChoice.GetStringSelection(), - infos.name), + "%s.%s" % (self.InstanceChoice.GetStringSelection(), + infos.name), force=True, graph=True) - + def ShowInstanceChoicePopup(self): self.InstanceChoice.SetFocusFromKbd() size = self.InstanceChoice.GetSize() @@ -364,7 +364,7 @@ #event = wx.KeyEvent(wx.EVT_KEY_DOWN._getEvtType()) #event.m_keyCode = wx.WXK_SPACE self.InstanceChoice.GetEventHandler().ProcessEvent(event) - + def OnParentButtonClick(self, event): if self.InstanceChoice.GetSelection() != -1: parent_path = self.InstanceChoice.GetStringSelection().rsplit(".", 1)[0] @@ -373,11 +373,11 @@ wx.CallAfter(self.SetPouType, tagname, parent_path) wx.CallAfter(self.ParentWindow.SelectProjectTreeItem, tagname) event.Skip() - + def OnInstanceChoiceChanged(self, event): self.RefreshButtons() event.Skip() - + def OnDebugButtonClick(self, event): if self.InstanceChoice.GetSelection() != -1: self.ParentWindow.OpenDebugViewer( @@ -385,26 +385,26 @@ self.InstanceChoice.GetStringSelection(), self.PouTagName) event.Skip() - + def OnVariablesListItemActivated(self, event): selected_item = event.GetItem() if selected_item is not None and selected_item.IsOk(): item_infos = self.VariablesList.GetPyData(selected_item) if item_infos is not None: - + item_button = self.VariablesList.IsOverItemRightImage( selected_item, event.GetPoint()) if item_button is not None: callback = self.ButtonCallBacks[item_button].dclick if callback is not None: callback(item_infos) - + elif item_infos.var_class not in ITEMS_VARIABLE: instance_path = self.InstanceChoice.GetStringSelection() if item_infos.var_class == ITEM_RESOURCE: if instance_path != "": tagname = self.Controller.ComputeConfigurationResourceName( - instance_path, + instance_path, item_infos.name) else: tagname = None @@ -424,7 +424,7 @@ self.SetPouType(tagname, item_path) self.ParentWindow.SelectProjectTreeItem(tagname) event.Skip() - + def OnVariablesListLeftDown(self, event): if self.InstanceChoice.GetSelection() == -1: wx.CallAfter(self.ShowInstanceChoicePopup) @@ -434,15 +434,15 @@ if item is not None: item_infos = self.VariablesList.GetPyData(item) if item_infos is not None: - + item_button = self.VariablesList.IsOverItemRightImage( item, event.GetPosition()) if item_button is not None: callback = self.ButtonCallBacks[item_button].leftdown if callback is not None: callback(item_infos) - - elif (flags & CT.TREE_HITTEST_ONITEMLABEL and + + elif (flags & CT.TREE_HITTEST_ONITEMLABEL and item_infos.var_class in ITEMS_VARIABLE): self.ParentWindow.EnsureTabVisible( self.ParentWindow.DebugVariablePanel) @@ -457,4 +457,3 @@ keycode = event.GetKeyCode() if keycode != wx.WXK_LEFT: event.Skip() -