# HG changeset patch # User laurent # Date 1326129523 -3600 # Node ID 037d2beecfb950936b87f5f364cf78e47acf343f # Parent 5d3da49e8029f86ddc03fce2e6d7b725f98c4caf Fixing bug in scrollbars and content position in Topology panel when expand and collapse elements in treectrls diff -r 5d3da49e8029 -r 037d2beecfb9 Beremiz.py --- a/Beremiz.py Sun Jan 08 19:10:12 2012 +0100 +++ b/Beremiz.py Mon Jan 09 18:18:43 2012 +0100 @@ -649,10 +649,11 @@ sizer = self.PLCConfig.GetSizer() if sizer: maxx, maxy = sizer.GetMinSize() + posx = max(0, min(xstart, (maxx - window_size[0]) / SCROLLBAR_UNIT)) + posy = max(0, min(ystart, (maxy - window_size[1]) / SCROLLBAR_UNIT)) + self.PLCConfig.Scroll(posx, posy) self.PLCConfig.SetScrollbars(SCROLLBAR_UNIT, SCROLLBAR_UNIT, - maxx / SCROLLBAR_UNIT, maxy / SCROLLBAR_UNIT, - max(0, min(xstart, (maxx - window_size[0]) / SCROLLBAR_UNIT)), - max(0, min(ystart, (maxy - window_size[1]) / SCROLLBAR_UNIT))) + maxx / SCROLLBAR_UNIT, maxy / SCROLLBAR_UNIT, posx, posy) def RefreshPLCParams(self): self.Freeze() @@ -815,7 +816,6 @@ self.ExpandLocation(locations_infos, "root", force) if force: locations_infos["root"]["expanded"] = True - def CollapsePlugin(self, plugin, force = False): for child in self.PluginInfos[plugin]["children"]: @@ -1085,6 +1085,7 @@ treectrl.Bind(wx.EVT_TREE_BEGIN_DRAG, self.GenerateLocationBeginDragFunction(locations_infos)) treectrl.Bind(wx.EVT_TREE_ITEM_EXPANDED, self.GenerateLocationExpandCollapseFunction(locations_infos, True)) treectrl.Bind(wx.EVT_TREE_ITEM_COLLAPSED, self.GenerateLocationExpandCollapseFunction(locations_infos, False)) + treectrl.Bind(wx.EVT_MOUSEWHEEL, self.OnMouseWheelTreeCtrl) treectrl.AddRoot("") self.PluginTreeSizer.AddWindow(treectrl, 0, border=0, flag=0) @@ -1100,6 +1101,7 @@ self.GenerateLocationTreeBranch(treectrl, treectrl.GetRootItem(), locations_infos, "root", location) treectrl.Expand(treectrl.GetRootItem()) if locations_infos["root"]["expanded"]: + self.PluginTreeSizer.Layout() self.ExpandLocation(locations_infos, "root") else: self.RefreshTreeCtrlSize(treectrl) @@ -1138,7 +1140,7 @@ if location_name is not None: infos = locations_infos[location_name]["infos"] if infos["type"] in [LOCATION_VAR_INPUT, LOCATION_VAR_OUTPUT, LOCATION_VAR_MEMORY]: - data = wx.TextDataObject(str((infos["location"], "location", infos["IEC_type"], infos["name"], infos["description"]))) + data = wx.TextDataObject(str((infos["location"], "location", infos["IEC_type"], infos["var_name"], infos["description"]))) dragSource = wx.DropSource(self) dragSource.SetData(data) dragSource.DoDragDrop() @@ -1146,9 +1148,18 @@ def RefreshTreeCtrlSize(self, treectrl): rect = self.GetTreeCtrlItemRect(treectrl, treectrl.GetRootItem()) - treectrl.SetMinSize(wx.Size(max(rect.width, rect.x + rect.width) + 20, max(rect.height, rect.y + rect.height) + 10)) + treectrl.SetMinSize(wx.Size(max(rect.width, rect.x + rect.width) + 20, max(rect.height, rect.y + rect.height) + 20)) self.PLCConfigMainSizer.Layout() self.PLCConfig.Refresh() + wx.CallAfter(self.RefreshScrollBars) + + def OnMouseWheelTreeCtrl(self, event): + x, y = self.PLCConfig.GetViewStart() + rotation = - (event.GetWheelRotation() / event.GetWheelDelta()) * 3 + if event.ShiftDown(): + self.PLCConfig.Scroll(x + rotation, y) + else: + self.PLCConfig.Scroll(x, y + rotation) def GetTreeCtrlItemRect(self, treectrl, item): item_rect = treectrl.GetBoundingRect(item, True)