81 main_sizer.AddWindow(splitter_window, flag=wx.GROW) |
81 main_sizer.AddWindow(splitter_window, flag=wx.GROW) |
82 |
82 |
83 # Add TreeCtrl for functions and function blocks library in splitter |
83 # Add TreeCtrl for functions and function blocks library in splitter |
84 # window |
84 # window |
85 self.Tree = wx.TreeCtrl(splitter_window, |
85 self.Tree = wx.TreeCtrl(splitter_window, |
86 size=wx.Size(0, 0), |
86 size=wx.Size(0, 0), |
87 style=wx.TR_HAS_BUTTONS | |
87 style=(wx.TR_HAS_BUTTONS | |
88 wx.TR_SINGLE | |
88 wx.TR_SINGLE | |
89 wx.SUNKEN_BORDER | |
89 wx.SUNKEN_BORDER | |
90 wx.TR_HIDE_ROOT | |
90 wx.TR_HIDE_ROOT | |
91 wx.TR_LINES_AT_ROOT) |
91 wx.TR_LINES_AT_ROOT)) |
92 self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnTreeItemSelected, self.Tree) |
92 self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnTreeItemSelected, self.Tree) |
93 self.Tree.Bind(wx.EVT_CHAR, self.OnKeyDown) |
93 self.Tree.Bind(wx.EVT_CHAR, self.OnKeyDown) |
94 # If drag'n drop is enabled, bind event generated when a drag begins on |
94 # If drag'n drop is enabled, bind event generated when a drag begins on |
95 # tree to start a drag'n drop |
95 # tree to start a drag'n drop |
96 if enable_drag: |
96 if enable_drag: |
97 self.Bind(wx.EVT_TREE_BEGIN_DRAG, self.OnTreeBeginDrag, self.Tree) |
97 self.Bind(wx.EVT_TREE_BEGIN_DRAG, self.OnTreeBeginDrag, self.Tree) |
98 |
98 |
99 # Add TextCtrl for function and function block informations |
99 # Add TextCtrl for function and function block informations |
100 self.Comment = wx.TextCtrl(splitter_window, size=wx.Size(0, 80), |
100 self.Comment = wx.TextCtrl(splitter_window, size=wx.Size(0, 80), |
101 style=wx.TE_READONLY | wx.TE_MULTILINE) |
101 style=wx.TE_READONLY | wx.TE_MULTILINE) |
102 |
102 |
103 splitter_window.SplitHorizontally(self.Tree, self.Comment, -80) |
103 splitter_window.SplitHorizontally(self.Tree, self.Comment, -80) |
104 |
104 |
105 self.SetSizer(main_sizer) |
105 self.SetSizer(main_sizer) |
106 |
106 |
174 selected_item != self.Tree.GetRootItem()) |
174 selected_item != self.Tree.GetRootItem()) |
175 else None) |
175 else None) |
176 # Don't save selected item if it is a category |
176 # Don't save selected item if it is a category |
177 selected_infos = ((self.Tree.GetItemText(selected_item), |
177 selected_infos = ((self.Tree.GetItemText(selected_item), |
178 selected_pydata["inputs"]) |
178 selected_pydata["inputs"]) |
179 if (selected_pydata is not None and |
179 if (selected_pydata is not None and |
180 selected_pydata["type"] == BLOCK) |
180 selected_pydata["type"] == BLOCK) |
181 else (None, None)) |
181 else (None, None)) |
182 |
182 |
183 # Get TreeCtrl root item (hidden) |
183 # Get TreeCtrl root item (hidden) |
184 root = self.Tree.GetRootItem() |
184 root = self.Tree.GetRootItem() |
185 if not root.IsOk(): |
185 if not root.IsOk(): |
186 # Create root if not present |
186 # Create root if not present |
244 "block_type": blocktype["type"], |
244 "block_type": blocktype["type"], |
245 "inputs": tuple([type |
245 "inputs": tuple([type |
246 for name, type, modifier |
246 for name, type, modifier |
247 in blocktype["inputs"]]), |
247 in blocktype["inputs"]]), |
248 "extension": (len(blocktype["inputs"]) |
248 "extension": (len(blocktype["inputs"]) |
249 if blocktype["extensible"] else None), |
249 if blocktype["extensible"] else None), |
250 "comment": _(comment) + blocktype.get("usage", "") |
250 "comment": _(comment) + blocktype.get("usage", "") |
251 } |
251 } |
252 self.Tree.SetPyData(blocktype_item, block_data) |
252 self.Tree.SetPyData(blocktype_item, block_data) |
253 |
253 |
254 # Select block tree item in tree if it corresponds to |
254 # Select block tree item in tree if it corresponds to |