245 parent.AddGrowableCol(0) |
247 parent.AddGrowableCol(0) |
246 parent.AddGrowableRow(1) |
248 parent.AddGrowableRow(1) |
247 |
249 |
248 def _init_coll_ButtonGridSizer_Items(self, parent): |
250 def _init_coll_ButtonGridSizer_Items(self, parent): |
249 parent.AddWindow(self.PluginChilds, 0, border=0, flag=wx.GROW) |
251 parent.AddWindow(self.PluginChilds, 0, border=0, flag=wx.GROW) |
250 parent.AddWindow(self.AddButton, 0, border=0, flag=0) |
252 parent.AddWindow(self.AddButton, 0, border=0, flag=0) |
251 parent.AddWindow(self.DeleteButton, 0, border=0, flag=0) |
253 parent.AddWindow(self.DeleteButton, 0, border=0, flag=0) |
252 |
254 |
253 def _init_coll_ButtonGridSizer_Growables(self, parent): |
255 def _init_coll_ButtonGridSizer_Growables(self, parent): |
254 parent.AddGrowableCol(0) |
256 parent.AddGrowableCol(0) |
255 parent.AddGrowableRow(0) |
257 parent.AddGrowableRow(0) |
256 |
258 |
257 def _init_sizers(self): |
259 def _init_sizers(self): |
258 self.LeftGridSizer = wx.FlexGridSizer(cols=1, hgap=2, rows=2, vgap=2) |
260 self.LeftGridSizer = wx.FlexGridSizer(cols=1, hgap=2, rows=1, vgap=2) |
|
261 self.ButtonGridSizer = wx.FlexGridSizer(cols=3, hgap=2, rows=1, vgap=2) |
259 self.RightGridSizer = wx.FlexGridSizer(cols=1, hgap=2, rows=2, vgap=2) |
262 self.RightGridSizer = wx.FlexGridSizer(cols=1, hgap=2, rows=2, vgap=2) |
260 self.ButtonGridSizer = wx.FlexGridSizer(cols=3, hgap=2, rows=1, vgap=2) |
|
261 self.MenuSizer = wx.BoxSizer(wx.VERTICAL) |
263 self.MenuSizer = wx.BoxSizer(wx.VERTICAL) |
262 self.ParamsPanelMainSizer = wx.BoxSizer(wx.VERTICAL) |
264 self.ParamsPanelMainSizer = wx.BoxSizer(wx.VERTICAL) |
263 |
265 |
264 self._init_coll_LeftGridSizer_Growables(self.LeftGridSizer) |
266 self._init_coll_LeftGridSizer_Growables(self.LeftGridSizer) |
265 self._init_coll_LeftGridSizer_Items(self.LeftGridSizer) |
267 self._init_coll_LeftGridSizer_Items(self.LeftGridSizer) |
|
268 self._init_coll_ButtonGridSizer_Growables(self.ButtonGridSizer) |
|
269 self._init_coll_ButtonGridSizer_Items(self.ButtonGridSizer) |
266 self._init_coll_RightGridSizer_Growables(self.RightGridSizer) |
270 self._init_coll_RightGridSizer_Growables(self.RightGridSizer) |
267 self._init_coll_RightGridSizer_Items(self.RightGridSizer) |
271 self._init_coll_RightGridSizer_Items(self.RightGridSizer) |
268 self._init_coll_ButtonGridSizer_Growables(self.ButtonGridSizer) |
|
269 self._init_coll_ButtonGridSizer_Items(self.ButtonGridSizer) |
|
270 |
272 |
271 self.LeftPanel.SetSizer(self.LeftGridSizer) |
273 self.LeftPanel.SetSizer(self.LeftGridSizer) |
272 self.RightPanel.SetSizer(self.RightGridSizer) |
274 self.RightPanel.SetSizer(self.RightGridSizer) |
273 self.ParamsPanel.SetSizer(self.ParamsPanelMainSizer) |
275 self.ParamsPanel.SetSizer(self.ParamsPanelMainSizer) |
274 |
276 |
279 self._init_utils() |
281 self._init_utils() |
280 self.SetClientSize(wx.Size(1000, 600)) |
282 self.SetClientSize(wx.Size(1000, 600)) |
281 self.SetMenuBar(self.menuBar1) |
283 self.SetMenuBar(self.menuBar1) |
282 self.Bind(wx.EVT_ACTIVATE, self.OnFrameActivated) |
284 self.Bind(wx.EVT_ACTIVATE, self.OnFrameActivated) |
283 |
285 |
284 if wx.VERSION >= (2, 8, 0): |
|
285 self.AUIManager = wx.aui.AuiManager(self) |
|
286 self.AUIManager.SetDockSizeConstraint(0.5, 0.5) |
|
287 |
|
288 if wx.VERSION < (2, 8, 0): |
286 if wx.VERSION < (2, 8, 0): |
289 self.MainSplitter = wx.SplitterWindow(id=ID_BEREMIZMAINSPLITTER, |
287 self.MainSplitter = wx.SplitterWindow(id=ID_BEREMIZMAINSPLITTER, |
290 name='MainSplitter', parent=self, point=wx.Point(0, 0), |
288 name='MainSplitter', parent=self, point=wx.Point(0, 0), |
291 size=wx.Size(0, 0), style=wx.SP_3D) |
289 size=wx.Size(0, 0), style=wx.SP_3D) |
292 self.MainSplitter.SetNeedUpdating(True) |
290 self.MainSplitter.SetNeedUpdating(True) |
293 self.MainSplitter.SetMinimumPaneSize(1) |
291 self.MainSplitter.SetMinimumPaneSize(1) |
294 |
292 |
295 self.LeftPanel = wx.Panel(id=ID_BEREMIZLEFTPANEL, |
293 self.LeftPanel = wx.Panel(id=ID_BEREMIZLEFTPANEL, |
296 name='LeftPanel', parent=self.MainSplitter, pos=wx.Point(0, 0), |
294 name='LeftPanel', parent=self.MainSplitter, pos=wx.Point(0, 0), |
297 size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL) |
295 size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL) |
298 else: |
296 |
299 self.LeftPanel = wx.Panel(id=ID_BEREMIZLEFTPANEL, |
297 self.PluginTree = wx.TreeCtrl(id=ID_BEREMIZPLUGINTREE, |
300 name='LeftPanel', parent=self, pos=wx.Point(0, 0), |
298 name='PluginTree', parent=self.LeftPanel, pos=wx.Point(0, 0), |
301 size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL) |
299 size=wx.Size(-1, -1), style=wx.TR_HAS_BUTTONS|wx.TR_SINGLE|wx.SUNKEN_BORDER) |
302 self.AUIManager.AddPane(self.LeftPanel, wx.aui.AuiPaneInfo().Caption("Plugin Tree").Left().Layer(1).BestSize(wx.Size(300, 500)).CloseButton(False)) |
300 self.PluginTree.Bind(wx.EVT_RIGHT_UP, self.OnPluginTreeRightUp) |
303 |
301 self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnPluginTreeItemSelected, |
304 self.PluginTree = wx.TreeCtrl(id=ID_BEREMIZPLUGINTREE, |
302 id=ID_BEREMIZPLUGINTREE) |
305 name='PluginTree', parent=self.LeftPanel, pos=wx.Point(0, 0), |
303 |
306 size=wx.Size(-1, -1), style=wx.TR_HAS_BUTTONS|wx.TR_SINGLE|wx.SUNKEN_BORDER) |
304 self.PluginChilds = wx.Choice(id=ID_BEREMIZPLUGINCHILDS, |
307 self.PluginTree.Bind(wx.EVT_RIGHT_UP, self.OnPluginTreeRightUp) |
305 name='PluginChilds', parent=self.LeftPanel, pos=wx.Point(0, 0), |
308 self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnPluginTreeItemSelected, |
306 size=wx.Size(-1, -1), style=0) |
309 id=ID_BEREMIZPLUGINTREE) |
307 |
310 |
308 self.AddButton = wx.lib.buttons.GenBitmapButton(ID=ID_BEREMIZADDBUTTON, bitmap=wx.Bitmap(os.path.join(CWD, 'images', 'Add32x32.png')), |
311 self.PluginChilds = wx.Choice(id=ID_BEREMIZPLUGINCHILDS, |
|
312 name='PluginChilds', parent=self.LeftPanel, pos=wx.Point(0, 0), |
|
313 size=wx.Size(-1, -1), style=0) |
|
314 |
|
315 if wx.VERSION < (2, 8, 0): |
|
316 self.AddButton = wx.lib.buttons.GenBitmapButton(ID=ID_BEREMIZADDBUTTON, bitmap=wx.Bitmap(os.path.join(CWD, 'images', 'Add.png')), |
|
317 name='AddBusButton', parent=self.LeftPanel, pos=wx.Point(0, 0), |
309 name='AddBusButton', parent=self.LeftPanel, pos=wx.Point(0, 0), |
318 size=wx.Size(32, 32), style=wx.NO_BORDER) |
310 size=wx.Size(32, 32), style=wx.NO_BORDER) |
319 else: |
311 self.AddButton.SetToolTipString("Add a plugin of the type selected") |
320 self.AddButton = wx.lib.buttons.GenBitmapButton(id=ID_BEREMIZADDBUTTON, bitmap=wx.Bitmap(os.path.join(CWD, 'images', 'Add.png')), |
312 self.AddButton.Bind(wx.EVT_BUTTON, self.OnAddButton, |
321 name='AddBusButton', parent=self.LeftPanel, pos=wx.Point(0, 0), |
313 id=ID_BEREMIZADDBUTTON) |
322 size=wx.Size(32, 32), style=wx.NO_BORDER) |
314 self.DeleteButton = wx.lib.buttons.GenBitmapButton(ID=ID_BEREMIZDELETEBUTTON, bitmap=wx.Bitmap(os.path.join(CWD, 'images', 'Delete32x32.png')), |
323 |
|
324 self.AddButton.SetToolTipString("Add a plugin of the type selected") |
|
325 self.AddButton.Bind(wx.EVT_BUTTON, self.OnAddButton, |
|
326 id=ID_BEREMIZADDBUTTON) |
|
327 |
|
328 if wx.VERSION < (2, 8, 0): |
|
329 self.DeleteButton = wx.lib.buttons.GenBitmapButton(ID=ID_BEREMIZDELETEBUTTON, bitmap=wx.Bitmap(os.path.join(CWD, 'images', 'Delete.png')), |
|
330 name='DeleteBusButton', parent=self.LeftPanel, pos=wx.Point(0, 0), |
315 name='DeleteBusButton', parent=self.LeftPanel, pos=wx.Point(0, 0), |
331 size=wx.Size(32, 32), style=wx.NO_BORDER) |
316 size=wx.Size(32, 32), style=wx.NO_BORDER) |
332 else: |
317 self.DeleteButton.SetToolTipString("Delete the current selected plugin") |
333 self.DeleteButton = wx.lib.buttons.GenBitmapButton(id=ID_BEREMIZDELETEBUTTON, bitmap=wx.Bitmap(os.path.join(CWD, 'images', 'Delete.png')), |
318 self.DeleteButton.Bind(wx.EVT_BUTTON, self.OnDeleteButton, |
334 name='DeleteBusButton', parent=self.LeftPanel, pos=wx.Point(0, 0), |
319 id=ID_BEREMIZDELETEBUTTON) |
335 size=wx.Size(32, 32), style=wx.NO_BORDER) |
320 |
336 self.DeleteButton.SetToolTipString("Delete the current selected plugin") |
|
337 self.DeleteButton.Bind(wx.EVT_BUTTON, self.OnDeleteButton, |
|
338 id=ID_BEREMIZDELETEBUTTON) |
|
339 |
|
340 if wx.VERSION < (2, 8, 0): |
|
341 self.RightPanel = wx.Panel(id=ID_BEREMIZLEFTPANEL, |
321 self.RightPanel = wx.Panel(id=ID_BEREMIZLEFTPANEL, |
342 name='RightPanel', parent=self.MainSplitter, pos=wx.Point(0, 0), |
322 name='RightPanel', parent=self.MainSplitter, pos=wx.Point(0, 0), |
343 size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL) |
323 size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL) |
344 |
324 |
345 self.SecondSplitter = wx.SplitterWindow(id=ID_BEREMIZSECONDSPLITTER, |
325 self.SecondSplitter = wx.SplitterWindow(id=ID_BEREMIZSECONDSPLITTER, |
360 name='LogConsole', parent=self.SecondSplitter, pos=wx.Point(0, 0), |
340 name='LogConsole', parent=self.SecondSplitter, pos=wx.Point(0, 0), |
361 size=wx.Size(0, 0), style=wx.TE_MULTILINE|wx.TE_RICH2) |
341 size=wx.Size(0, 0), style=wx.TE_MULTILINE|wx.TE_RICH2) |
362 |
342 |
363 self.SecondSplitter.SplitHorizontally(self.ParamsPanel, self.LogConsole, |
343 self.SecondSplitter.SplitHorizontally(self.ParamsPanel, self.LogConsole, |
364 -250) |
344 -250) |
|
345 |
|
346 self._init_sizers() |
365 else: |
347 else: |
366 self.RightPanel = wx.Panel(id=ID_BEREMIZLEFTPANEL, |
348 self.AUIManager = wx.aui.AuiManager(self) |
367 name='RightPanel', parent=self, pos=wx.Point(0, 0), |
349 self.AUIManager.SetDockSizeConstraint(0.5, 0.5) |
368 size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL) |
350 |
369 self.AUIManager.AddPane(self.RightPanel, wx.aui.AuiPaneInfo().CenterPane()) |
351 self.PluginTree = CT.CustomTreeCtrl(id=ID_BEREMIZPLUGINTREE, |
370 |
352 name='PluginTree', parent=self, pos=wx.Point(0, 0), |
371 self.ParamsPanel = wx.ScrolledWindow(id=ID_BEREMIZPARAMSPANEL, |
353 size=wx.Size(-1, -1), style=CT.TR_HAS_BUTTONS|CT.TR_EDIT_LABELS|CT.TR_HAS_VARIABLE_ROW_HEIGHT|CT.TR_NO_LINES|wx.TR_SINGLE|wx.SUNKEN_BORDER) |
372 name='ParamsPanel', parent=self.RightPanel, pos=wx.Point(0, 0), |
354 self.PluginTree.Bind(wx.EVT_RIGHT_UP, self.OnPluginTreeRightUp) |
373 size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL) |
355 self.Bind(CT.EVT_TREE_SEL_CHANGED, self.OnPluginTreeItemSelected, |
374 self.ParamsPanel.SetScrollbars(10, 10, 0, 0, 0, 0) |
356 id=ID_BEREMIZPLUGINTREE) |
|
357 self.Bind(CT.EVT_TREE_ITEM_CHECKED, self.OnPluginTreeItemChecked, |
|
358 id=ID_BEREMIZPLUGINTREE) |
|
359 self.Bind(CT.EVT_TREE_END_LABEL_EDIT, self.OnPluginTreeItemEndEdit, |
|
360 id=ID_BEREMIZPLUGINTREE) |
|
361 self.Bind(CT.EVT_TREE_ITEM_EXPANDED, self.OnPluginTreeItemExpanded, |
|
362 id=ID_BEREMIZPLUGINTREE) |
|
363 self.Bind(CT.EVT_TREE_ITEM_COLLAPSED, self.OnPluginTreeItemCollapsed, |
|
364 id=ID_BEREMIZPLUGINTREE) |
|
365 |
|
366 self.AUIManager.AddPane(self.PluginTree, wx.aui.AuiPaneInfo().CenterPane()) |
375 |
367 |
376 self.LogConsole = wx.TextCtrl(id=ID_BEREMIZLOGCONSOLE, value='', |
368 self.LogConsole = wx.TextCtrl(id=ID_BEREMIZLOGCONSOLE, value='', |
377 name='LogConsole', parent=self, pos=wx.Point(0, 0), |
369 name='LogConsole', parent=self, pos=wx.Point(0, 0), |
378 size=wx.Size(0, 0), style=wx.TE_MULTILINE|wx.TE_RICH2) |
370 size=wx.Size(0, 0), style=wx.TE_MULTILINE|wx.TE_RICH2) |
379 self.AUIManager.AddPane(self.LogConsole, wx.aui.AuiPaneInfo().Caption("Log Console").Bottom().Layer(0).BestSize(wx.Size(800, 200)).CloseButton(False)) |
371 self.AUIManager.AddPane(self.LogConsole, wx.aui.AuiPaneInfo().Caption("Log Console").Bottom().Layer(1).BestSize(wx.Size(800, 200)).CloseButton(False)) |
380 |
372 |
381 self._init_sizers() |
|
382 |
|
383 if wx.VERSION >= (2, 8, 0): |
|
384 self.AUIManager.Update() |
373 self.AUIManager.Update() |
|
374 |
|
375 def ShowChildrenWindows(self, root, show = True): |
|
376 item, root_cookie = self.PluginTree.GetFirstChild(root) |
|
377 while item is not None and item.IsOk(): |
|
378 window = self.PluginTree.GetItemWindow(item) |
|
379 if show: |
|
380 window.Show() |
|
381 else: |
|
382 window.Hide() |
|
383 if self.PluginTree.IsExpanded(item): |
|
384 self.ShowChildrenWindows(item, show) |
|
385 item, root_cookie = self.PluginTree.GetNextChild(root, root_cookie) |
|
386 |
|
387 def OnPluginTreeItemExpanded(self, event): |
|
388 self.ShowChildrenWindows(event.GetItem(), True) |
|
389 event.Skip() |
|
390 |
|
391 def OnPluginTreeItemCollapsed(self, event): |
|
392 self.ShowChildrenWindows(event.GetItem(), False) |
|
393 event.Skip() |
385 |
394 |
386 def __init__(self, parent, projectOpen): |
395 def __init__(self, parent, projectOpen): |
387 self._init_ctrls(parent) |
396 self._init_ctrls(parent) |
388 |
397 |
389 self.Log = LogPseudoFile(self.LogConsole) |
398 self.Log = LogPseudoFile(self.LogConsole) |
390 |
399 |
391 self.PluginRoot = PluginsRoot(self) |
400 self.PluginRoot = PluginsRoot(self) |
|
401 self.DisableEvents = False |
392 |
402 |
393 if projectOpen: |
403 if projectOpen: |
394 self.PluginRoot.LoadProject(projectOpen, self.Log) |
404 self.PluginRoot.LoadProject(projectOpen, self.Log) |
395 self.RefreshPluginTree() |
405 self.RefreshPluginTree() |
396 self.PluginTree.SelectItem(self.PluginTree.GetRootItem()) |
406 self.PluginTree.SelectItem(self.PluginTree.GetRootItem()) |
397 |
407 |
398 self.RefreshPluginParams() |
408 if wx.VERSION < (2, 8, 0): |
399 self.RefreshButtons() |
409 self.RefreshPluginParams() |
|
410 self.RefreshButtons() |
|
411 |
400 self.RefreshMainMenu() |
412 self.RefreshMainMenu() |
401 |
413 |
402 def OnFrameActivated(self, event): |
414 def OnFrameActivated(self, event): |
403 if not event.GetActive(): |
415 if not event.GetActive(): |
404 self.PluginRoot.RefreshPluginsBlockLists() |
416 self.PluginRoot.RefreshPluginsBlockLists() |
405 |
417 |
406 def RefreshButtons(self): |
418 def RefreshButtons(self): |
407 if self.PluginRoot.HasProjectOpened(): |
419 if wx.VERSION < (2, 8, 0): |
408 self.PluginChilds.Enable(True) |
420 if self.PluginRoot.HasProjectOpened(): |
409 self.AddButton.Enable(True) |
421 self.PluginChilds.Enable(True) |
410 self.DeleteButton.Enable(True) |
422 self.AddButton.Enable(True) |
411 else: |
423 self.DeleteButton.Enable(True) |
412 self.PluginChilds.Enable(False) |
424 else: |
413 self.AddButton.Enable(False) |
425 self.PluginChilds.Enable(False) |
414 self.DeleteButton.Enable(False) |
426 self.AddButton.Enable(False) |
|
427 self.DeleteButton.Enable(False) |
415 |
428 |
416 def RefreshMainMenu(self): |
429 def RefreshMainMenu(self): |
417 if self.menuBar1: |
430 if self.menuBar1: |
418 if self.PluginRoot.HasProjectOpened(): |
431 if self.PluginRoot.HasProjectOpened(): |
419 ## self.menuBar1.EnableTop(1, True) |
432 ## self.menuBar1.EnableTop(1, True) |
427 self.FileMenu.Enable(ID_BEREMIZFILEMENUITEMS2, False) |
440 self.FileMenu.Enable(ID_BEREMIZFILEMENUITEMS2, False) |
428 self.FileMenu.Enable(ID_BEREMIZFILEMENUITEMS3, False) |
441 self.FileMenu.Enable(ID_BEREMIZFILEMENUITEMS3, False) |
429 self.FileMenu.Enable(ID_BEREMIZFILEMENUITEMS5, False) |
442 self.FileMenu.Enable(ID_BEREMIZFILEMENUITEMS5, False) |
430 |
443 |
431 def RefreshPluginTree(self): |
444 def RefreshPluginTree(self): |
|
445 self.DisableEvents = True |
432 infos = self.PluginRoot.GetPlugInfos() |
446 infos = self.PluginRoot.GetPlugInfos() |
433 root = self.PluginTree.GetRootItem() |
447 root = self.PluginTree.GetRootItem() |
434 if not root.IsOk(): |
448 if root is None or not root.IsOk(): |
435 root = self.PluginTree.AddRoot(infos["name"]) |
449 root = self.PluginTree.AddRoot(infos["name"]) |
436 last_selected = self.GetSelectedPluginName() |
450 last_selected = self.GetSelectedPluginName() |
437 self.GenerateTreeBranch(root, infos, True) |
451 self.GenerateTreeBranch(root, infos, True) |
438 self.PluginTree.Expand(self.PluginTree.GetRootItem()) |
452 self.PluginTree.Expand(self.PluginTree.GetRootItem()) |
439 self.SelectedPluginByName(root, last_selected) |
453 self.SelectedPluginByName(root, last_selected) |
440 self.RefreshPluginParams() |
454 |
|
455 if wx.VERSION < (2, 8, 0): |
|
456 self.RefreshPluginParams() |
|
457 |
|
458 self.DisableEvents = False |
441 |
459 |
442 def SelectedPluginByName(self, root, name): |
460 def SelectedPluginByName(self, root, name): |
443 if name: |
461 if name: |
444 toks = name.split('.',1) |
462 toks = name.split('.', 1) |
445 item, root_cookie = self.PluginTree.GetFirstChild(root) |
463 item, root_cookie = self.PluginTree.GetFirstChild(root) |
446 while item.IsOk(): |
464 while item is not None and item.IsOk(): |
447 if self.PluginTree.GetPyData(item) == toks[0]: |
465 if self.PluginTree.GetPyData(item) == toks[0]: |
448 if len(toks)>1: |
466 if len(toks)>1: |
449 return self.SelectedPluginByName(item, toks[1]) |
467 return self.SelectedPluginByName(item, toks[1]) |
450 else: |
468 else: |
451 self.PluginTree.SelectItem(item, True) |
469 self.PluginTree.SelectItem(item, True) |
455 |
473 |
456 def GenerateTreeBranch(self, root, infos, first = False): |
474 def GenerateTreeBranch(self, root, infos, first = False): |
457 to_delete = [] |
475 to_delete = [] |
458 self.PluginTree.SetItemText(root, infos["name"]) |
476 self.PluginTree.SetItemText(root, infos["name"]) |
459 self.PluginTree.SetPyData(root, infos["type"]) |
477 self.PluginTree.SetPyData(root, infos["type"]) |
|
478 |
|
479 if wx.VERSION >= (2, 8, 0): |
|
480 plugin = self.GetSelectedPlugin(root) |
|
481 if plugin is not None: |
|
482 old_window = self.PluginTree.GetItemWindow(root) |
|
483 if old_window is not None: |
|
484 old_window.GetSizer().Clear(True) |
|
485 old_window.Destroy() |
|
486 |
|
487 window = wx.Panel(self.PluginTree, -1, size=wx.Size(-1, -1)) |
|
488 window.SetBackgroundColour(wx.WHITE) |
|
489 tcsizer = wx.BoxSizer(wx.HORIZONTAL) |
|
490 |
|
491 if "channel" in infos: |
|
492 sc = wx.SpinCtrl(window, -1, size=wx.Size(50, 25)) |
|
493 sc.SetValue(infos["channel"]) |
|
494 sc.Bind(wx.EVT_SPINCTRL, self.GetItemChannelChangedFunction(root)) |
|
495 tcsizer.AddWindow(sc, 0, border=5, flag=wx.LEFT|wx.TOP|wx.BOTTOM|wx.ALIGN_CENTER) |
|
496 |
|
497 if "parent" in infos or plugin == self.PluginRoot: |
|
498 addbutton_id = wx.NewId() |
|
499 addbutton = wx.lib.buttons.GenBitmapButton(id=addbutton_id, bitmap=wx.Bitmap(os.path.join(CWD, 'images', 'Add24x24.png')), |
|
500 name='AddBusButton', parent=window, pos=wx.Point(0, 0), |
|
501 size=wx.Size(24, 24), style=wx.NO_BORDER) |
|
502 addbutton.SetToolTipString("Add a plugin to this one") |
|
503 addbutton.Bind(wx.EVT_BUTTON, self.GetAddButtonFunction(root), id=addbutton_id) |
|
504 tcsizer.AddWindow(addbutton, 0, border=5, flag=wx.LEFT|wx.RIGHT|wx.TOP|wx.BOTTOM|wx.ALIGN_CENTER) |
|
505 |
|
506 if plugin != self.PluginRoot: |
|
507 deletebutton_id = wx.NewId() |
|
508 deletebutton = wx.lib.buttons.GenBitmapButton(id=deletebutton_id, bitmap=wx.Bitmap(os.path.join(CWD, 'images', 'Delete24x24.png')), |
|
509 name='DeleteBusButton', parent=window, pos=wx.Point(0, 0), |
|
510 size=wx.Size(24, 24), style=wx.NO_BORDER) |
|
511 deletebutton.SetToolTipString("Delete this plugin") |
|
512 deletebutton.Bind(wx.EVT_BUTTON, self.GetDeleteButtonFunction(root), id=deletebutton_id) |
|
513 tcsizer.AddWindow(deletebutton, 0, border=5, flag=wx.RIGHT|wx.TOP|wx.BOTTOM|wx.ALIGN_CENTER) |
|
514 |
|
515 psizer = wx.BoxSizer(wx.HORIZONTAL) |
|
516 plugin_infos = plugin.GetParamsAttributes() |
|
517 |
|
518 sizer = wx.BoxSizer(wx.HORIZONTAL) |
|
519 self.RefreshSizerElement(window, sizer, plugin_infos, None, True, root) |
|
520 if plugin != self.PluginRoot and len(plugin.PluginMethods) > 0: |
|
521 for plugin_method in plugin.PluginMethods: |
|
522 if "method" in plugin_method: |
|
523 id = wx.NewId() |
|
524 if "bitmap" in plugin_method: |
|
525 button = wx.lib.buttons.GenBitmapTextButton(id=id, parent=window, |
|
526 bitmap=wx.Bitmap(os.path.join(CWD, "%s24x24.png"%plugin_method["bitmap"])), label=plugin_method["name"], |
|
527 name=plugin_method["name"], pos=wx.Point(0, 0), style=wx.BU_EXACTFIT|wx.NO_BORDER) |
|
528 else: |
|
529 button = wx.Button(id=id, label=plugin_method["name"], |
|
530 name=plugin_method["name"], parent=window, |
|
531 pos=wx.Point(0, 0), style=wx.BU_EXACTFIT) |
|
532 button.SetToolTipString(plugin_method["tooltip"]) |
|
533 button.Bind(wx.EVT_BUTTON, self.GetButtonCallBackFunction(plugin, plugin_method["method"]), id=id) |
|
534 sizer.AddWindow(button, 0, border=5, flag=wx.RIGHT|wx.ALIGN_CENTER) |
|
535 tcsizer.AddSizer(sizer, 0, border=0, flag=wx.GROW) |
|
536 window.SetSizer(tcsizer) |
|
537 tcsizer.Fit(window) |
|
538 self.PluginTree.SetItemWindow(root, window) |
|
539 if "enabled" in infos: |
|
540 self.PluginTree.CheckItem(root, infos["enabled"]) |
|
541 self.PluginTree.SetItemWindowEnabled(root, infos["enabled"]) |
|
542 |
460 item, root_cookie = self.PluginTree.GetFirstChild(root) |
543 item, root_cookie = self.PluginTree.GetFirstChild(root) |
461 for values in infos["values"]: |
544 for values in infos["values"]: |
462 if not item.IsOk(): |
545 if item is None or not item.IsOk(): |
463 item = self.PluginTree.AppendItem(root, "") |
546 if wx.VERSION >= (2, 8, 0): |
|
547 item = self.PluginTree.AppendItem(root, "", ct_type=1) |
|
548 else: |
|
549 item = self.PluginTree.AppendItem(root, "") |
|
550 |
464 if wx.Platform != '__WXMSW__': |
551 if wx.Platform != '__WXMSW__': |
465 item, root_cookie = self.PluginTree.GetNextChild(root, root_cookie) |
552 item, root_cookie = self.PluginTree.GetNextChild(root, root_cookie) |
466 self.GenerateTreeBranch(item, values) |
553 self.GenerateTreeBranch(item, values) |
467 item, root_cookie = self.PluginTree.GetNextChild(root, root_cookie) |
554 item, root_cookie = self.PluginTree.GetNextChild(root, root_cookie) |
468 while item.IsOk(): |
555 while item is not None and item.IsOk(): |
469 to_delete.append(item) |
556 to_delete.append(item) |
470 item, root_cookie = self.PluginTree.GetNextChild(root, root_cookie) |
557 item, root_cookie = self.PluginTree.GetNextChild(root, root_cookie) |
471 for item in to_delete: |
558 for item in to_delete: |
472 self.PluginTree.Delete(item) |
559 self.PluginTree.Delete(item) |
473 |
560 |
474 def GetSelectedPluginName(self): |
561 def GetSelectedPluginName(self, selected = None): |
475 selected = self.PluginTree.GetSelection() |
562 if selected is None: |
476 if not selected.IsOk(): |
563 selected = self.PluginTree.GetSelection() |
|
564 if selected is None or not selected.IsOk(): |
477 return None |
565 return None |
478 if selected == self.PluginTree.GetRootItem(): |
566 if selected == self.PluginTree.GetRootItem(): |
479 return "" |
567 return "" |
480 else: |
568 else: |
481 name = self.PluginTree.GetPyData(selected) |
569 name = self.PluginTree.GetPyData(selected) |
483 while item.IsOk() and item != self.PluginTree.GetRootItem(): |
571 while item.IsOk() and item != self.PluginTree.GetRootItem(): |
484 name = "%s.%s"%(self.PluginTree.GetPyData(item), name) |
572 name = "%s.%s"%(self.PluginTree.GetPyData(item), name) |
485 item = self.PluginTree.GetItemParent(item) |
573 item = self.PluginTree.GetItemParent(item) |
486 return name |
574 return name |
487 |
575 |
488 def GetSelectedPlugin(self): |
576 def GetSelectedPlugin(self, selected = None): |
489 name = self.GetSelectedPluginName() |
577 name = self.GetSelectedPluginName(selected) |
490 if name is None: |
578 if name is None: |
491 return None |
579 return None |
492 elif name == "": |
580 elif name == "": |
493 return self.PluginRoot |
581 return self.PluginRoot |
494 else: |
582 else: |
495 return self.PluginRoot.GetChildByName(name) |
583 return self.PluginRoot.GetChildByName(name) |
496 |
584 |
497 def OnPluginTreeItemSelected(self, event): |
585 def OnPluginTreeItemSelected(self, event): |
498 wx.CallAfter(self.RefreshPluginParams) |
586 if wx.VERSION < (2, 8, 0): |
499 event.Skip() |
587 wx.CallAfter(self.RefreshPluginParams) |
500 |
588 event.Skip() |
501 def _GetAddPluginFunction(self, name): |
589 |
|
590 def OnPluginTreeItemChecked(self, event): |
|
591 if not self.DisableEvents: |
|
592 item = event.GetItem() |
|
593 plugin = self.GetSelectedPlugin(item) |
|
594 if plugin: |
|
595 res, StructChanged = plugin.SetParamsAttribute("BaseParams.Enabled", self.PluginTree.IsItemChecked(item), self.Log) |
|
596 wx.CallAfter(self.RefreshPluginTree) |
|
597 event.Skip() |
|
598 |
|
599 def OnPluginTreeItemEndEdit(self, event): |
|
600 if event.GetLabel() == "": |
|
601 event.Veto() |
|
602 elif not self.DisableEvents: |
|
603 plugin = self.GetSelectedPlugin() |
|
604 if plugin: |
|
605 res, StructChanged = plugin.SetParamsAttribute("BaseParams.Name", event.GetLabel(), self.Log) |
|
606 wx.CallAfter(self.RefreshPluginTree) |
|
607 event.Skip() |
|
608 |
|
609 def GetItemChannelChangedFunction(self, item): |
|
610 def OnPluginTreeItemChannelChanged(event): |
|
611 if not self.DisableEvents: |
|
612 plugin = self.GetSelectedPlugin(item) |
|
613 if plugin: |
|
614 res, StructChanged = plugin.SetParamsAttribute("BaseParams.IEC_Channel", event.GetInt(), self.Log) |
|
615 wx.CallAfter(self.RefreshPluginTree) |
|
616 event.Skip() |
|
617 return OnPluginTreeItemChannelChanged |
|
618 |
|
619 def _GetAddPluginFunction(self, name, selected = None): |
502 def OnPluginMenu(event): |
620 def OnPluginMenu(event): |
503 self.AddPlugin(name) |
621 self.AddPlugin(name, selected) |
504 event.Skip() |
622 event.Skip() |
505 return OnPluginMenu |
623 return OnPluginMenu |
506 |
624 |
507 def OnPluginTreeRightUp(self, event): |
625 def OnPluginTreeRightUp(self, event): |
508 plugin = self.GetSelectedPlugin() |
626 plugin = self.GetSelectedPlugin() |
509 if plugin: |
627 if plugin: |
510 main_menu = wx.Menu(title='') |
628 main_menu = wx.Menu(title='') |
511 if len(plugin.PlugChildsTypes) > 0: |
629 if len(plugin.PlugChildsTypes) > 0: |
512 plugin_menu = wx.Menu(title='') |
630 plugin_menu = wx.Menu(title='') |
513 for name, XSDClass in self.GetSelectedPlugin().PlugChildsTypes: |
631 for name, XSDClass in plugin.PlugChildsTypes: |
514 new_id = wx.NewId() |
632 new_id = wx.NewId() |
515 plugin_menu.Append(help='', id=new_id, kind=wx.ITEM_NORMAL, text=name) |
633 plugin_menu.Append(help='', id=new_id, kind=wx.ITEM_NORMAL, text=name) |
516 self.Bind(wx.EVT_MENU, self._GetAddPluginFunction(name), id=new_id) |
634 self.Bind(wx.EVT_MENU, self._GetAddPluginFunction(name), id=new_id) |
517 main_menu.AppendMenu(-1, "Add", plugin_menu, '') |
635 main_menu.AppendMenu(-1, "Add", plugin_menu, '') |
518 new_id = wx.NewId() |
636 new_id = wx.NewId() |
519 main_menu.Append(help='', id=new_id, kind=wx.ITEM_NORMAL, text="Delete") |
637 main_menu.Append(help='', id=new_id, kind=wx.ITEM_NORMAL, text="Delete") |
520 self.Bind(wx.EVT_MENU, self.OnDeleteButton, id=new_id) |
638 self.Bind(wx.EVT_MENU, self.OnDeleteButton, id=new_id) |
521 rect = self.PluginTree.GetBoundingRect(self.PluginTree.GetSelection()) |
639 pos_x, pos_y = event.GetPosition() |
522 self.PluginTree.PopupMenuXY(main_menu, rect.x + rect.width, rect.y) |
640 self.PluginTree.PopupMenuXY(main_menu, pos_x, pos_y) |
523 event.Skip() |
641 event.Skip() |
|
642 |
|
643 def RefreshPluginToolBar(self): |
|
644 if wx.VERSION < (2, 8, 0): |
|
645 self.ClearSizer(self.MenuSizer) |
|
646 if self.PluginRoot.HasOpenedProject() and len(self.PluginRoot.PluginMethods) > 0: |
|
647 if wx.VERSION > (2, 8, 0): |
|
648 toolbar = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize, |
|
649 wx.TB_FLAT | wx.TB_NODIVIDER | wx.NO_BORDER | wx.TB_TEXT) |
|
650 else: |
|
651 boxsizer = wx.BoxSizer(wx.HORIZONTAL) |
|
652 for plugin_infos in self.PluginRoot.PluginMethods: |
|
653 if "method" in plugin_infos: |
|
654 id = wx.NewId() |
|
655 if "bitmap" in plugin_infos: |
|
656 if wx.VERSION < (2, 8, 0): |
|
657 button = wx.lib.buttons.GenBitmapTextButton(ID=id, parent=self.RightPanel, |
|
658 bitmap=wx.Bitmap(os.path.join(CWD, "%s32x32.png"%plugin_infos["bitmap"])), label=plugin_infos["name"], |
|
659 name=plugin_infos["name"], pos=wx.Point(0, 0), style=wx.BU_EXACTFIT|wx.NO_BORDER) |
|
660 else: |
|
661 button = wx.lib.buttons.GenBitmapTextButton(id=id, parent=toolbar, |
|
662 bitmap=wx.Bitmap(os.path.join(CWD, "%s32x32.png"%plugin_infos["bitmap"])), label=plugin_infos["name"], |
|
663 name=plugin_infos["name"], pos=wx.Point(0, 0), style=wx.BU_EXACTFIT|wx.NO_BORDER) |
|
664 button.SetSize(button.GetBestSize()) |
|
665 else: |
|
666 if wx.VERSION < (2, 8, 0): |
|
667 button = wx.Button(id=id, label=plugin_infos["name"], |
|
668 name=plugin_infos["name"], parent=self.RightPanel, |
|
669 pos=wx.Point(0, 0), style=wx.BU_EXACTFIT) |
|
670 else: |
|
671 button = wx.Button(id=id, label=plugin_infos["name"], |
|
672 name=plugin_infos["name"], parent=toolbar, |
|
673 pos=wx.Point(0, 0), size=(-1, 48), style=wx.BU_EXACTFIT) |
|
674 button.SetToolTipString(plugin_infos["tooltip"]) |
|
675 button.Bind(wx.EVT_BUTTON, self.GetButtonCallBackFunction(self.PluginRoot, plugin_infos["method"]), id=id) |
|
676 if wx.VERSION < (2, 8, 0): |
|
677 boxsizer.AddWindow(button, 0, border=5, flag=wx.GROW|wx.RIGHT) |
|
678 else: |
|
679 toolbar.AddControl(button) |
|
680 if wx.VERSION < (2, 8, 0): |
|
681 self.MenuSizer.AddSizer(boxsizer, 0, border=5, flag=wx.GROW|wx.ALL) |
|
682 self.RightGridSizer.Layout() |
|
683 else: |
|
684 toolbar.Realize() |
|
685 self.AUIManager.AddPane(toolbar, wx.aui.AuiPaneInfo(). |
|
686 Name("ToolBar").Caption("Toolbar"). |
|
687 ToolbarPane().Top(). |
|
688 LeftDockable(False).RightDockable(False)) |
|
689 self.AUIManager.Update() |
524 |
690 |
525 def RefreshPluginParams(self): |
691 def RefreshPluginParams(self): |
526 plugin = self.GetSelectedPlugin() |
692 plugin = self.GetSelectedPlugin() |
527 if not plugin: |
693 if not plugin: |
528 # Refresh ParamsPanel |
694 # Refresh ParamsPanel |
535 self.DeleteButton.Enable(False) |
701 self.DeleteButton.Enable(False) |
536 else: |
702 else: |
537 # Refresh ParamsPanel |
703 # Refresh ParamsPanel |
538 self.ParamsPanel.Show() |
704 self.ParamsPanel.Show() |
539 infos = plugin.GetParamsAttributes() |
705 infos = plugin.GetParamsAttributes() |
540 if wx.VERSION >= (2, 7, 0): |
706 if len(self.MenuSizer.GetChildren()) > 1: |
541 self.MenuSizer.Clear(True) |
707 self.ClearSizer(self.MenuSizer.GetChildren()[1].GetSizer()) |
542 self.ParamsPanelMainSizer.Clear(True) |
708 self.MenuSizer.Remove(1) |
543 else: |
709 self.ClearSizer(self.ParamsPanelMainSizer) |
544 self.ClearSizer(self.MenuSizer) |
710 self.RefreshSizerElement(self.ParamsPanel, self.ParamsPanelMainSizer, infos, None, False) |
545 self.ClearSizer(self.ParamsPanelMainSizer) |
|
546 if len(self.PluginRoot.PluginMethods) > 0: |
|
547 boxsizer = wx.BoxSizer(wx.HORIZONTAL) |
|
548 self.MenuSizer.AddSizer(boxsizer, 0, border=5, flag=wx.GROW|wx.ALL) |
|
549 for plugin_infos in self.PluginRoot.PluginMethods: |
|
550 if "method" in plugin_infos: |
|
551 id = wx.NewId() |
|
552 if "bitmap" in plugin_infos: |
|
553 if wx.VERSION < (2, 8, 0): |
|
554 button = wx.lib.buttons.GenBitmapTextButton(ID=id, parent=self.RightPanel, |
|
555 bitmap=wx.Bitmap(os.path.join(CWD, plugin_infos["bitmap"])), label=plugin_infos["name"], |
|
556 name=plugin_infos["name"], pos=wx.Point(0, 0), style=wx.BU_EXACTFIT|wx.NO_BORDER) |
|
557 else: |
|
558 button = wx.lib.buttons.GenBitmapTextButton(id=id, parent=self.RightPanel, |
|
559 bitmap=wx.Bitmap(os.path.join(CWD, plugin_infos["bitmap"])), label=plugin_infos["name"], |
|
560 name=plugin_infos["name"], pos=wx.Point(0, 0), style=wx.BU_EXACTFIT|wx.NO_BORDER) |
|
561 |
|
562 else: |
|
563 button = wx.Button(id=id, label=plugin_infos["name"], |
|
564 name=plugin_infos["name"], parent=self.RightPanel, |
|
565 pos=wx.Point(0, 0), style=wx.BU_EXACTFIT) |
|
566 button.SetToolTipString(plugin_infos["tooltip"]) |
|
567 button.Bind(wx.EVT_BUTTON, self.GetButtonCallBackFunction(self.PluginRoot, plugin_infos["method"]), id=id) |
|
568 boxsizer.AddWindow(button, 0, border=5, flag=wx.GROW|wx.RIGHT) |
|
569 self.RightGridSizer.Layout() |
|
570 self.RefreshSizerElement(self.ParamsPanelMainSizer, infos, None, False) |
|
571 if plugin != self.PluginRoot and len(plugin.PluginMethods) > 0: |
711 if plugin != self.PluginRoot and len(plugin.PluginMethods) > 0: |
572 boxsizer = wx.BoxSizer(wx.HORIZONTAL) |
712 boxsizer = wx.BoxSizer(wx.HORIZONTAL) |
573 self.MenuSizer.AddSizer(boxsizer, 0, border=5, flag=wx.GROW|wx.ALL) |
713 self.MenuSizer.AddSizer(boxsizer, 0, border=5, flag=wx.GROW|wx.ALL) |
574 for plugin_infos in plugin.PluginMethods: |
714 for plugin_infos in plugin.PluginMethods: |
575 if "method" in plugin_infos: |
715 if "method" in plugin_infos: |
576 id = wx.NewId() |
716 id = wx.NewId() |
577 if "bitmap" in plugin_infos: |
717 if "bitmap" in plugin_infos: |
578 if wx.VERSION < (2, 8, 0): |
718 button = wx.lib.buttons.GenBitmapTextButton(ID=id, parent=self.RightPanel, |
579 button = wx.lib.buttons.GenBitmapTextButton(ID=id, parent=self.RightPanel, |
719 bitmap=wx.Bitmap(os.path.join(CWD, "%s32x32.png"%plugin_infos["bitmap"])), label=plugin_infos["name"], |
580 bitmap=wx.Bitmap(os.path.join(CWD, plugin_infos["bitmap"])), label=plugin_infos["name"], |
720 name=plugin_infos["name"], pos=wx.Point(0, 0), style=wx.BU_EXACTFIT|wx.NO_BORDER) |
581 name=plugin_infos["name"], pos=wx.Point(0, 0), style=wx.BU_EXACTFIT|wx.NO_BORDER) |
|
582 else: |
|
583 button = wx.lib.buttons.GenBitmapTextButton(id=id, parent=self.RightPanel, |
|
584 bitmap=wx.Bitmap(os.path.join(CWD, plugin_infos["bitmap"])), label=plugin_infos["name"], |
|
585 name=plugin_infos["name"], pos=wx.Point(0, 0), style=wx.BU_EXACTFIT|wx.NO_BORDER) |
|
586 else: |
721 else: |
587 button = wx.Button(id=id, label=plugin_infos["name"], |
722 button = wx.Button(id=id, label=plugin_infos["name"], |
588 name=plugin_infos["name"], parent=self.RightPanel, |
723 name=plugin_infos["name"], parent=self.RightPanel, |
589 pos=wx.Point(0, 0), style=wx.BU_EXACTFIT) |
724 pos=wx.Point(0, 0), style=wx.BU_EXACTFIT) |
590 button.SetToolTipString(plugin_infos["tooltip"]) |
725 button.SetToolTipString(plugin_infos["tooltip"]) |
591 button.Bind(wx.EVT_BUTTON, self.GetButtonCallBackFunction(plugin, plugin_infos["method"]), id=id) |
726 button.Bind(wx.EVT_BUTTON, self.GetButtonCallBackFunction(plugin, plugin_infos["method"]), id=id) |
592 boxsizer.AddWindow(button, 0, border=5, flag=wx.GROW|wx.RIGHT) |
727 boxsizer.AddWindow(button, 0, border=5, flag=wx.GROW|wx.RIGHT) |
593 self.RightGridSizer.Layout() |
728 self.RightGridSizer.Layout() |
594 self.ParamsPanelMainSizer.Layout() |
729 self.ParamsPanelMainSizer.Layout() |
595 self.ParamsPanel.SetClientSize(self.ParamsPanel.GetClientSize()) |
730 self.ParamsPanel.SetClientSize(self.ParamsPanel.GetClientSize()) |
596 |
731 |
597 # Refresh PluginChilds |
732 # Refresh PluginChilds |
598 self.PluginChilds.Clear() |
733 self.PluginChilds.Clear() |
611 def OnButtonClick(event): |
746 def OnButtonClick(event): |
612 method(plugin, self.Log) |
747 method(plugin, self.Log) |
613 event.Skip() |
748 event.Skip() |
614 return OnButtonClick |
749 return OnButtonClick |
615 |
750 |
616 def GetChoiceCallBackFunction(self, choicectrl, path): |
751 def GetChoiceCallBackFunction(self, choicectrl, path, selected=None): |
617 def OnChoiceChanged(event): |
752 def OnChoiceChanged(event): |
618 plugin = self.GetSelectedPlugin() |
753 plugin = self.GetSelectedPlugin(selected) |
619 if plugin: |
754 if plugin: |
620 res, StructChanged = plugin.SetParamsAttribute(path, choicectrl.GetStringSelection(), self.Log) |
755 res, StructChanged = plugin.SetParamsAttribute(path, choicectrl.GetStringSelection(), self.Log) |
621 if StructChanged: wx.CallAfter(self.RefreshPluginTree) |
756 if StructChanged: wx.CallAfter(self.RefreshPluginTree) |
622 choicectrl.SetStringSelection(res) |
757 choicectrl.SetStringSelection(res) |
623 event.Skip() |
758 event.Skip() |
624 return OnChoiceChanged |
759 return OnChoiceChanged |
625 |
760 |
626 def GetChoiceContentCallBackFunction(self, choicectrl, staticboxsizer, path): |
761 def GetChoiceContentCallBackFunction(self, choicectrl, staticboxsizer, path, selected=None): |
627 def OnChoiceContentChanged(event): |
762 def OnChoiceContentChanged(event): |
628 plugin = self.GetSelectedPlugin() |
763 plugin = self.GetSelectedPlugin(selected) |
629 if plugin: |
764 if plugin: |
630 res, StructChanged = plugin.SetParamsAttribute(path, choicectrl.GetStringSelection(), self.Log) |
765 res, StructChanged = plugin.SetParamsAttribute(path, choicectrl.GetStringSelection(), self.Log) |
631 if StructChanged: wx.CallAfter(self.RefreshPluginTree) |
766 if StructChanged: wx.CallAfter(self.RefreshPluginTree) |
632 choicectrl.SetStringSelection(res) |
767 choicectrl.SetStringSelection(res) |
633 infos = self.PluginRoot.GetParamsAttributes(path) |
768 infos = self.PluginRoot.GetParamsAttributes(path) |
634 staticbox = staticboxsizer.GetStaticBox() |
769 staticbox = staticboxsizer.GetStaticBox() |
635 staticbox.SetLabel("%(name)s - %(value)s"%infos) |
770 staticbox.SetLabel("%(name)s - %(value)s"%infos) |
636 self.ParamsPanel.Freeze() |
771 if wx.VERSION < (2, 8, 0): |
637 self.RefreshSizerElement(staticboxsizer, infos["children"], "%s.%s"%(path, infos["name"])) |
772 self.ParamsPanel.Freeze() |
638 self.ParamsPanelMainSizer.Layout() |
773 self.RefreshSizerElement(self.ParamsPanel, staticboxsizer, infos["children"], "%s.%s"%(path, infos["name"]), selected=selected) |
639 self.ParamsPanel.Thaw() |
774 self.ParamsPanelMainSizer.Layout() |
640 self.ParamsPanel.Refresh() |
775 self.ParamsPanel.Thaw() |
|
776 self.ParamsPanel.Refresh() |
|
777 else: |
|
778 wx.CallAfter(self.RefreshPluginTree) |
641 event.Skip() |
779 event.Skip() |
642 return OnChoiceContentChanged |
780 return OnChoiceContentChanged |
643 |
781 |
644 def GetTextCtrlCallBackFunction(self, textctrl, path): |
782 def GetTextCtrlCallBackFunction(self, textctrl, path, selected=None): |
645 def OnTextCtrlChanged(event): |
783 def OnTextCtrlChanged(event): |
646 plugin = self.GetSelectedPlugin() |
784 plugin = self.GetSelectedPlugin(selected) |
647 if plugin: |
785 if plugin: |
648 res, StructChanged = plugin.SetParamsAttribute(path, textctrl.GetValue(), self.Log) |
786 res, StructChanged = plugin.SetParamsAttribute(path, textctrl.GetValue(), self.Log) |
649 if StructChanged: wx.CallAfter(self.RefreshPluginTree) |
787 if StructChanged: wx.CallAfter(self.RefreshPluginTree) |
650 textctrl.SetValue(res) |
788 textctrl.SetValue(res) |
651 event.Skip() |
789 event.Skip() |
652 return OnTextCtrlChanged |
790 return OnTextCtrlChanged |
653 |
791 |
654 def GetCheckBoxCallBackFunction(self, chkbx, path): |
792 def GetCheckBoxCallBackFunction(self, chkbx, path, selected=None): |
655 def OnCheckBoxChanged(event): |
793 def OnCheckBoxChanged(event): |
656 plugin = self.GetSelectedPlugin() |
794 plugin = self.GetSelectedPlugin(selected) |
657 if plugin: |
795 if plugin: |
658 res, StructChanged = plugin.SetParamsAttribute(path, chkbx.IsChecked(), self.Log) |
796 res, StructChanged = plugin.SetParamsAttribute(path, chkbx.IsChecked(), self.Log) |
659 if StructChanged: wx.CallAfter(self.RefreshPluginTree) |
797 if StructChanged: wx.CallAfter(self.RefreshPluginTree) |
660 chkbx.SetValue(res) |
798 chkbx.SetValue(res) |
661 event.Skip() |
799 event.Skip() |
689 else: |
827 else: |
690 sizer.AddSizer(boxsizer, 0, border=5, flag=wx.GROW|wx.LEFT|wx.RIGHT|wx.BOTTOM) |
828 sizer.AddSizer(boxsizer, 0, border=5, flag=wx.GROW|wx.LEFT|wx.RIGHT|wx.BOTTOM) |
691 bitmappath = os.path.join("images", "%s.png"%element_infos["name"]) |
829 bitmappath = os.path.join("images", "%s.png"%element_infos["name"]) |
692 if os.path.isfile(bitmappath): |
830 if os.path.isfile(bitmappath): |
693 staticbitmap = wx.StaticBitmap(id=-1, bitmap=wx.Bitmap(bitmappath), |
831 staticbitmap = wx.StaticBitmap(id=-1, bitmap=wx.Bitmap(bitmappath), |
694 name="%s_bitmap"%element_infos["name"], parent=self.ParamsPanel, |
832 name="%s_bitmap"%element_infos["name"], parent=parent, |
695 pos=wx.Point(0, 0), size=wx.Size(24, 24), style=0) |
833 pos=wx.Point(0, 0), size=wx.Size(24, 24), style=0) |
696 boxsizer.AddWindow(staticbitmap, 0, border=5, flag=wx.RIGHT) |
834 boxsizer.AddWindow(staticbitmap, 0, border=5, flag=wx.RIGHT) |
697 statictext = wx.StaticText(id=-1, label="%s:"%element_infos["name"], |
835 statictext = wx.StaticText(id=-1, label="%s:"%element_infos["name"], |
698 name="%s_label"%element_infos["name"], parent=self.ParamsPanel, |
836 name="%s_label"%element_infos["name"], parent=parent, |
699 pos=wx.Point(0, 0), size=wx.Size(100, 17), style=0) |
837 pos=wx.Point(0, 0), size=wx.Size(100, 17), style=0) |
700 boxsizer.AddWindow(statictext, 0, border=4, flag=wx.TOP) |
838 boxsizer.AddWindow(statictext, 0, border=4, flag=wx.TOP) |
701 id = wx.NewId() |
839 id = wx.NewId() |
702 choicectrl = wx.Choice(id=id, name=element_infos["name"], parent=self.ParamsPanel, |
840 choicectrl = wx.Choice(id=id, name=element_infos["name"], parent=parent, |
703 pos=wx.Point(0, 0), size=wx.Size(150, 25), style=0) |
841 pos=wx.Point(0, 0), size=wx.Size(150, 25), style=0) |
704 boxsizer.AddWindow(choicectrl, 0, border=0, flag=0) |
842 boxsizer.AddWindow(choicectrl, 0, border=0, flag=0) |
705 choicectrl.Append("") |
843 choicectrl.Append("") |
706 if len(element_infos["type"]) > 0 and isinstance(element_infos["type"][0], types.TupleType): |
844 if len(element_infos["type"]) > 0 and isinstance(element_infos["type"][0], types.TupleType): |
707 for choice, xsdclass in element_infos["type"]: |
845 for choice, xsdclass in element_infos["type"]: |
708 choicectrl.Append(choice) |
846 choicectrl.Append(choice) |
709 staticbox = wx.StaticBox(id=-1, label="%(name)s - %(value)s"%element_infos, |
847 staticbox = wx.StaticBox(id=-1, label="%(name)s - %(value)s"%element_infos, |
710 name='%s_staticbox'%element_infos["name"], parent=self.ParamsPanel, |
848 name='%s_staticbox'%element_infos["name"], parent=parent, |
711 pos=wx.Point(0, 0), size=wx.Size(0, 0), style=0) |
849 pos=wx.Point(0, 0), size=wx.Size(0, 0), style=0) |
712 staticboxsizer = wx.StaticBoxSizer(staticbox, wx.VERTICAL) |
850 staticboxsizer = wx.StaticBoxSizer(staticbox, wx.VERTICAL) |
713 sizer.AddSizer(staticboxsizer, 0, border=0, flag=wx.GROW) |
851 sizer.AddSizer(staticboxsizer, 0, border=5, flag=wx.GROW|wx.BOTTOM) |
714 self.RefreshSizerElement(staticboxsizer, element_infos["children"], element_path) |
852 self.RefreshSizerElement(parent, staticboxsizer, element_infos["children"], element_path, selected) |
715 callback = self.GetChoiceContentCallBackFunction(choicectrl, staticboxsizer, element_path) |
853 callback = self.GetChoiceContentCallBackFunction(choicectrl, staticboxsizer, element_path, selected) |
716 else: |
854 else: |
717 for choice in element_infos["type"]: |
855 for choice in element_infos["type"]: |
718 choicectrl.Append(choice) |
856 choicectrl.Append(choice) |
719 callback = self.GetChoiceCallBackFunction(choicectrl, element_path) |
857 callback = self.GetChoiceCallBackFunction(choicectrl, element_path, selected) |
720 if element_infos["value"]: |
858 if element_infos["value"]: |
721 choicectrl.SetStringSelection(element_infos["value"]) |
859 choicectrl.SetStringSelection(element_infos["value"]) |
722 choicectrl.Bind(wx.EVT_CHOICE, callback, id=id) |
860 choicectrl.Bind(wx.EVT_CHOICE, callback, id=id) |
723 elif isinstance(element_infos["type"], types.DictType): |
861 elif isinstance(element_infos["type"], types.DictType): |
724 boxsizer = wx.BoxSizer(wx.HORIZONTAL) |
862 boxsizer = wx.BoxSizer(wx.HORIZONTAL) |
727 else: |
865 else: |
728 sizer.AddSizer(boxsizer, 0, border=5, flag=wx.GROW|wx.LEFT|wx.RIGHT|wx.BOTTOM) |
866 sizer.AddSizer(boxsizer, 0, border=5, flag=wx.GROW|wx.LEFT|wx.RIGHT|wx.BOTTOM) |
729 bitmappath = os.path.join("images", "%s.png"%element_infos["name"]) |
867 bitmappath = os.path.join("images", "%s.png"%element_infos["name"]) |
730 if os.path.isfile(bitmappath): |
868 if os.path.isfile(bitmappath): |
731 staticbitmap = wx.StaticBitmap(id=-1, bitmap=wx.Bitmap(bitmappath), |
869 staticbitmap = wx.StaticBitmap(id=-1, bitmap=wx.Bitmap(bitmappath), |
732 name="%s_bitmap"%element_infos["name"], parent=self.ParamsPanel, |
870 name="%s_bitmap"%element_infos["name"], parent=parent, |
733 pos=wx.Point(0, 0), size=wx.Size(24, 24), style=0) |
871 pos=wx.Point(0, 0), size=wx.Size(24, 24), style=0) |
734 boxsizer.AddWindow(staticbitmap, 0, border=5, flag=wx.RIGHT) |
872 boxsizer.AddWindow(staticbitmap, 0, border=5, flag=wx.RIGHT) |
735 statictext = wx.StaticText(id=-1, label="%s:"%element_infos["name"], |
873 statictext = wx.StaticText(id=-1, label="%s:"%element_infos["name"], |
736 name="%s_label"%element_infos["name"], parent=self.ParamsPanel, |
874 name="%s_label"%element_infos["name"], parent=parent, |
737 pos=wx.Point(0, 0), size=wx.Size(100, 17), style=0) |
875 pos=wx.Point(0, 0), size=wx.Size(100, 17), style=0) |
738 boxsizer.AddWindow(statictext, 0, border=4, flag=wx.TOP) |
876 boxsizer.AddWindow(statictext, 0, border=4, flag=wx.TOP) |
739 id = wx.NewId() |
877 id = wx.NewId() |
740 scmin = -(2**31) |
878 scmin = -(2**31) |
741 scmax = 2**31-1 |
879 scmax = 2**31-1 |
742 if "min" in element_infos["type"]: |
880 if "min" in element_infos["type"]: |
743 scmin = element_infos["type"]["min"] |
881 scmin = element_infos["type"]["min"] |
744 if "max" in element_infos["type"]: |
882 if "max" in element_infos["type"]: |
745 scmax = element_infos["type"]["max"] |
883 scmax = element_infos["type"]["max"] |
746 spinctrl = wx.SpinCtrl(id=id, name=element_infos["name"], parent=self.ParamsPanel, |
884 spinctrl = wx.SpinCtrl(id=id, name=element_infos["name"], parent=parent, |
747 pos=wx.Point(0, 0), size=wx.Size(150, 25), style=wx.SP_ARROW_KEYS|wx.ALIGN_RIGHT) |
885 pos=wx.Point(0, 0), size=wx.Size(150, 25), style=wx.SP_ARROW_KEYS|wx.ALIGN_RIGHT) |
748 spinctrl.SetRange(scmin,scmax) |
886 spinctrl.SetRange(scmin,scmax) |
749 boxsizer.AddWindow(spinctrl, 0, border=0, flag=0) |
887 boxsizer.AddWindow(spinctrl, 0, border=0, flag=0) |
750 spinctrl.SetValue(element_infos["value"]) |
888 spinctrl.SetValue(element_infos["value"]) |
751 spinctrl.Bind(wx.EVT_SPINCTRL, self.GetTextCtrlCallBackFunction(spinctrl, element_path), id=id) |
889 spinctrl.Bind(wx.EVT_SPINCTRL, self.GetTextCtrlCallBackFunction(spinctrl, element_path, selected), id=id) |
752 elif element_infos["type"] == "element": |
890 elif element_infos["type"] == "element": |
753 staticbox = wx.StaticBox(id=-1, label=element_infos["name"], |
891 staticbox = wx.StaticBox(id=-1, label=element_infos["name"], |
754 name='%s_staticbox'%element_infos["name"], parent=self.ParamsPanel, |
892 name='%s_staticbox'%element_infos["name"], parent=parent, |
755 pos=wx.Point(0, 0), size=wx.Size(0, 0), style=0) |
893 pos=wx.Point(0, 0), size=wx.Size(0, 0), style=0) |
756 staticboxsizer = wx.StaticBoxSizer(staticbox, wx.VERTICAL) |
894 staticboxsizer = wx.StaticBoxSizer(staticbox, wx.VERTICAL) |
757 if first: |
895 if first: |
758 sizer.AddSizer(staticboxsizer, 0, border=0, flag=wx.GROW|wx.TOP) |
896 sizer.AddSizer(staticboxsizer, 0, border=0, flag=wx.GROW|wx.TOP) |
759 else: |
897 else: |
760 sizer.AddSizer(staticboxsizer, 0, border=0, flag=wx.GROW) |
898 sizer.AddSizer(staticboxsizer, 0, border=0, flag=wx.GROW) |
761 self.RefreshSizerElement(staticboxsizer, element_infos["children"], element_path) |
899 self.RefreshSizerElement(parent, staticboxsizer, element_infos["children"], element_path, selected) |
762 else: |
900 else: |
763 boxsizer = wx.BoxSizer(wx.HORIZONTAL) |
901 boxsizer = wx.BoxSizer(wx.HORIZONTAL) |
764 if first: |
902 if first: |
765 sizer.AddSizer(boxsizer, 0, border=5, flag=wx.GROW|wx.ALL) |
903 sizer.AddSizer(boxsizer, 0, border=5, flag=wx.GROW|wx.ALL) |
766 else: |
904 else: |
767 sizer.AddSizer(boxsizer, 0, border=5, flag=wx.GROW|wx.LEFT|wx.RIGHT|wx.BOTTOM) |
905 sizer.AddSizer(boxsizer, 0, border=5, flag=wx.GROW|wx.LEFT|wx.RIGHT|wx.BOTTOM) |
768 bitmappath = os.path.join("images", "%s.png"%element_infos["name"]) |
906 bitmappath = os.path.join("images", "%s.png"%element_infos["name"]) |
769 if os.path.isfile(bitmappath): |
907 if os.path.isfile(bitmappath): |
770 staticbitmap = wx.StaticBitmap(id=-1, bitmap=wx.Bitmap(bitmappath), |
908 staticbitmap = wx.StaticBitmap(id=-1, bitmap=wx.Bitmap(bitmappath), |
771 name="%s_bitmap"%element_infos["name"], parent=self.ParamsPanel, |
909 name="%s_bitmap"%element_infos["name"], parent=parent, |
772 pos=wx.Point(0, 0), size=wx.Size(24, 24), style=0) |
910 pos=wx.Point(0, 0), size=wx.Size(24, 24), style=0) |
773 boxsizer.AddWindow(staticbitmap, 0, border=5, flag=wx.RIGHT) |
911 boxsizer.AddWindow(staticbitmap, 0, border=5, flag=wx.RIGHT) |
774 statictext = wx.StaticText(id=-1, label="%s:"%element_infos["name"], |
912 statictext = wx.StaticText(id=-1, label="%s:"%element_infos["name"], |
775 name="%s_label"%element_infos["name"], parent=self.ParamsPanel, |
913 name="%s_label"%element_infos["name"], parent=parent, |
776 pos=wx.Point(0, 0), size=wx.Size(100, 17), style=0) |
914 pos=wx.Point(0, 0), size=wx.Size(100, 17), style=0) |
777 boxsizer.AddWindow(statictext, 0, border=4, flag=wx.TOP) |
915 boxsizer.AddWindow(statictext, 0, border=4, flag=wx.TOP) |
778 id = wx.NewId() |
916 id = wx.NewId() |
779 if element_infos["type"] == "boolean": |
917 if element_infos["type"] == "boolean": |
780 checkbox = wx.CheckBox(id=id, name=element_infos["name"], parent=self.ParamsPanel, |
918 checkbox = wx.CheckBox(id=id, name=element_infos["name"], parent=parent, |
781 pos=wx.Point(0, 0), size=wx.Size(17, 25), style=0) |
919 pos=wx.Point(0, 0), size=wx.Size(17, 25), style=0) |
782 boxsizer.AddWindow(checkbox, 0, border=0, flag=0) |
920 boxsizer.AddWindow(checkbox, 0, border=0, flag=0) |
783 checkbox.SetValue(element_infos["value"]) |
921 checkbox.SetValue(element_infos["value"]) |
784 checkbox.Bind(wx.EVT_CHECKBOX, self.GetCheckBoxCallBackFunction(checkbox, element_path), id=id) |
922 checkbox.Bind(wx.EVT_CHECKBOX, self.GetCheckBoxCallBackFunction(checkbox, element_path, selected), id=id) |
785 elif element_infos["type"] in ["unsignedLong", "long","integer"]: |
923 elif element_infos["type"] in ["unsignedLong", "long","integer"]: |
786 if element_infos["type"].startswith("unsigned"): |
924 if element_infos["type"].startswith("unsigned"): |
787 scmin = 0 |
925 scmin = 0 |
788 else: |
926 else: |
789 scmin = -(2**31) |
927 scmin = -(2**31) |
790 scmax = 2**31-1 |
928 scmax = 2**31-1 |
791 spinctrl = wx.SpinCtrl(id=id, name=element_infos["name"], parent=self.ParamsPanel, |
929 spinctrl = wx.SpinCtrl(id=id, name=element_infos["name"], parent=parent, |
792 pos=wx.Point(0, 0), size=wx.Size(150, 25), style=wx.SP_ARROW_KEYS|wx.ALIGN_RIGHT) |
930 pos=wx.Point(0, 0), size=wx.Size(150, 25), style=wx.SP_ARROW_KEYS|wx.ALIGN_RIGHT) |
793 spinctrl.SetRange(scmin, scmax) |
931 spinctrl.SetRange(scmin, scmax) |
794 boxsizer.AddWindow(spinctrl, 0, border=0, flag=0) |
932 boxsizer.AddWindow(spinctrl, 0, border=0, flag=0) |
795 spinctrl.SetValue(element_infos["value"]) |
933 spinctrl.SetValue(element_infos["value"]) |
796 spinctrl.Bind(wx.EVT_SPINCTRL, self.GetTextCtrlCallBackFunction(spinctrl, element_path), id=id) |
934 spinctrl.Bind(wx.EVT_SPINCTRL, self.GetTextCtrlCallBackFunction(spinctrl, element_path, selected), id=id) |
797 else: |
935 else: |
798 textctrl = wx.TextCtrl(id=id, name=element_infos["name"], parent=self.ParamsPanel, |
936 textctrl = wx.TextCtrl(id=id, name=element_infos["name"], parent=parent, |
799 pos=wx.Point(0, 0), size=wx.Size(150, 25), style=wx.TE_PROCESS_ENTER) |
937 pos=wx.Point(0, 0), size=wx.Size(150, 25), style=wx.TE_PROCESS_ENTER) |
800 boxsizer.AddWindow(textctrl, 0, border=0, flag=0) |
938 boxsizer.AddWindow(textctrl, 0, border=0, flag=0) |
801 textctrl.SetValue(str(element_infos["value"])) |
939 textctrl.SetValue(str(element_infos["value"])) |
802 textctrl.Bind(wx.EVT_TEXT_ENTER, self.GetTextCtrlCallBackFunction(textctrl, element_path), id=id) |
940 textctrl.Bind(wx.EVT_TEXT_ENTER, self.GetTextCtrlCallBackFunction(textctrl, element_path, selected), id=id) |
803 textctrl.Bind(wx.EVT_KILL_FOCUS, self.GetTextCtrlCallBackFunction(textctrl, element_path)) |
941 textctrl.Bind(wx.EVT_KILL_FOCUS, self.GetTextCtrlCallBackFunction(textctrl, element_path, selected)) |
804 first = False |
942 first = False |
805 |
943 |
806 def OnNewProjectMenu(self, event): |
944 def OnNewProjectMenu(self, event): |
807 defaultpath = self.PluginRoot.GetProjectPath() |
945 defaultpath = self.PluginRoot.GetProjectPath() |
808 if not defaultpath: |
946 if not defaultpath: |
908 |
1049 |
909 def CloseEditor(self, bus_id): |
1050 def CloseEditor(self, bus_id): |
910 if self.BusManagers.get(bus_id, None) != None: |
1051 if self.BusManagers.get(bus_id, None) != None: |
911 self.BusManagers[bus_id]["Editor"] = None |
1052 self.BusManagers[bus_id]["Editor"] = None |
912 |
1053 |
913 def AddPlugin(self, PluginType): |
1054 def GetAddButtonFunction(self, item): |
|
1055 def AddButtonFunction(event): |
|
1056 plugin = self.GetSelectedPlugin(item) |
|
1057 if plugin and len(plugin.PlugChildsTypes) > 0: |
|
1058 plugin_menu = wx.Menu(title='') |
|
1059 for name, XSDClass in plugin.PlugChildsTypes: |
|
1060 new_id = wx.NewId() |
|
1061 plugin_menu.Append(help='', id=new_id, kind=wx.ITEM_NORMAL, text=name) |
|
1062 self.Bind(wx.EVT_MENU, self._GetAddPluginFunction(name, item), id=new_id) |
|
1063 rect = self.PluginTree.GetBoundingRect(item, True) |
|
1064 wx.CallAfter(self.PluginTree.PopupMenuXY, plugin_menu, rect.x + rect.width, rect.y) |
|
1065 event.Skip() |
|
1066 return AddButtonFunction |
|
1067 |
|
1068 def GetDeleteButtonFunction(self, item): |
|
1069 def DeleteButtonFunction(event): |
|
1070 wx.CallAfter(self.DeletePlugin, item) |
|
1071 event.Skip() |
|
1072 return DeleteButtonFunction |
|
1073 |
|
1074 def AddPlugin(self, PluginType, selected = None): |
914 dialog = wx.TextEntryDialog(self, "Please enter a name for plugin:", "Add Plugin", "", wx.OK|wx.CANCEL) |
1075 dialog = wx.TextEntryDialog(self, "Please enter a name for plugin:", "Add Plugin", "", wx.OK|wx.CANCEL) |
915 if dialog.ShowModal() == wx.ID_OK: |
1076 if dialog.ShowModal() == wx.ID_OK: |
916 PluginName = dialog.GetValue() |
1077 PluginName = dialog.GetValue() |
917 plugin = self.GetSelectedPlugin() |
1078 plugin = self.GetSelectedPlugin(selected) |
918 plugin.PlugAddChild(PluginName, PluginType, self.Log) |
1079 plugin.PlugAddChild(PluginName, PluginType, self.Log) |
919 self.RefreshPluginTree() |
1080 self.RefreshPluginTree() |
920 dialog.Destroy() |
1081 dialog.Destroy() |
921 |
1082 |
922 def DeletePlugin(self): |
1083 def DeletePlugin(self, selected = None): |
923 dialog = wx.MessageDialog(self, "Really delete plugin ?", "Remove plugin", wx.YES_NO|wx.NO_DEFAULT) |
1084 dialog = wx.MessageDialog(self, "Really delete plugin ?", "Remove plugin", wx.YES_NO|wx.NO_DEFAULT) |
924 if dialog.ShowModal() == wx.ID_YES: |
1085 if dialog.ShowModal() == wx.ID_YES: |
925 plugin = self.GetSelectedPlugin() |
1086 plugin = self.GetSelectedPlugin(selected) |
926 plugin.PlugRemove() |
1087 plugin.PlugRemove() |
927 del plugin |
1088 del plugin |
928 self.RefreshPluginTree() |
1089 self.RefreshPluginTree() |
929 dialog.Destroy() |
1090 dialog.Destroy() |
930 |
1091 |