--- 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()
-