beremiz

SVGHMI: keep track of order of selection in HMI tree, so that variable can be passed in same order to DnD widget
  • +19 -4
    svghmi/ui.py
  • --- a/svghmi/ui.py Wed Apr 14 09:21:18 2021 +0200
    +++ b/svghmi/ui.py Thu Apr 15 09:15:23 2021 +0200
    @@ -275,8 +275,8 @@
    self.Refresh()
    event.Skip()
    - def OnHMITreeNodeSelection(self, hmitree_node):
    - self.hmitree_node = hmitree_node
    + def OnHMITreeNodeSelection(self, hmitree_nodes):
    + self.hmitree_node = hmitree_nodes[0] if len(hmitree_nodes) else None
    self.ValidateWidget()
    self.Refresh()
    @@ -341,6 +341,8 @@
    wx.SplitterWindow.__init__(self, parent,
    style=wx.SUNKEN_BORDER | wx.SP_3D)
    + self.ordered_items = []
    +
    self.SelectionTree = HMITreeSelector(self)
    self.Staging = WidgetLibBrowser(self)
    self.SplitVertically(self.SelectionTree, self.Staging, 300)
    @@ -349,8 +351,21 @@
    self.OnHMITreeNodeSelection, self.SelectionTree)
    def OnHMITreeNodeSelection(self, event):
    - item_pydata = self.SelectionTree.GetPyData(event.GetItem())
    - self.Staging.OnHMITreeNodeSelection(item_pydata)
    + items = self.SelectionTree.GetSelections()
    + items_pydata = [self.SelectionTree.GetPyData(item) for item in items]
    +
    + # append new items to ordered item list
    + for item_pydata in items_pydata:
    + if item_pydata not in self.ordered_items:
    + self.ordered_items.append(item_pydata)
    +
    + # filter out vanished items
    + self.ordered_items = [
    + item_pydata
    + for item_pydata in self.ordered_items
    + if item_pydata in items_pydata]
    +
    + self.Staging.OnHMITreeNodeSelection(items_pydata)
    def HMITreeUpdate(self, hmi_tree_root):
    self.SelectionTree.MakeTree(hmi_tree_root)