350 self.AUIManager.SetDockSizeConstraint(0.5, 0.5) |
350 self.AUIManager.SetDockSizeConstraint(0.5, 0.5) |
351 self.Panes = {} |
351 self.Panes = {} |
352 |
352 |
353 self.PluginTree = CT.CustomTreeCtrl(id=ID_BEREMIZPLUGINTREE, |
353 self.PluginTree = CT.CustomTreeCtrl(id=ID_BEREMIZPLUGINTREE, |
354 name='PluginTree', parent=self, pos=wx.Point(0, 0), |
354 name='PluginTree', parent=self, pos=wx.Point(0, 0), |
355 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) |
355 size=wx.Size(-1, -1), style=CT.TR_HAS_BUTTONS|CT.TR_EDIT_LABELS|CT.TR_HAS_VARIABLE_ROW_HEIGHT|wx.TR_SINGLE|wx.SUNKEN_BORDER) |
356 self.PluginTree.Bind(wx.EVT_RIGHT_UP, self.OnPluginTreeRightUp) |
356 self.PluginTree.Bind(wx.EVT_RIGHT_UP, self.OnPluginTreeRightUp) |
357 self.PluginTree.Bind(wx.EVT_SIZE, self.OnPluginTreeResize) |
|
358 self.PluginTree.Bind(wx.EVT_IDLE, self.OnPluginTreeIdle) |
357 self.PluginTree.Bind(wx.EVT_IDLE, self.OnPluginTreeIdle) |
359 self.Bind(CT.EVT_TREE_SEL_CHANGED, self.OnPluginTreeItemSelected, |
358 self.Bind(CT.EVT_TREE_SEL_CHANGED, self.OnPluginTreeItemSelected, |
360 id=ID_BEREMIZPLUGINTREE) |
359 id=ID_BEREMIZPLUGINTREE) |
361 self.Bind(CT.EVT_TREE_ITEM_CHECKED, self.OnPluginTreeItemChecked, |
360 self.Bind(CT.EVT_TREE_ITEM_CHECKED, self.OnPluginTreeItemChecked, |
362 id=ID_BEREMIZPLUGINTREE) |
361 id=ID_BEREMIZPLUGINTREE) |
473 old_window.Destroy() |
472 old_window.Destroy() |
474 |
473 |
475 outside = wx.Panel(self.PluginTree, -1, size=wx.Size(-1, -1)) |
474 outside = wx.Panel(self.PluginTree, -1, size=wx.Size(-1, -1)) |
476 outside.SetBackgroundColour(wx.WHITE) |
475 outside.SetBackgroundColour(wx.WHITE) |
477 |
476 |
478 insidesizer = wx.FlexGridSizer(cols=1,rows=1) |
477 insidesizer = wx.FlexGridSizer(cols=2,rows=1) |
479 insidesizer.AddGrowableCol(0) |
478 insidesizer.AddGrowableCol(1) |
480 |
479 |
481 outside.SetSizer(insidesizer) |
480 outside.SetSizer(insidesizer) |
|
481 |
|
482 insidesizer.AddSpacer(-1) |
482 |
483 |
483 window = wx.Panel(outside, -1, size=wx.Size(-1, -1)) |
484 window = wx.Panel(outside, -1, size=wx.Size(-1, -1)) |
484 window.SetBackgroundColour(wx.Colour(250,250,255)) |
485 window.SetBackgroundColour(wx.Colour(250,250,255)) |
485 insidesizer.AddWindow(window, border=1, flag=wx.GROW|wx.ALL) |
486 insidesizer.AddWindow(window, border=1, flag=wx.GROW|wx.ALL) |
486 |
487 |
522 if len(plugin.PluginMethods) > 0: #and plugin != self.PluginRoot |
523 if len(plugin.PluginMethods) > 0: #and plugin != self.PluginRoot |
523 for plugin_method in plugin.PluginMethods: |
524 for plugin_method in plugin.PluginMethods: |
524 if "method" in plugin_method: |
525 if "method" in plugin_method: |
525 id = wx.NewId() |
526 id = wx.NewId() |
526 button = wx.lib.buttons.GenBitmapTextButton(id=id, parent=window, |
527 button = wx.lib.buttons.GenBitmapTextButton(id=id, parent=window, |
527 bitmap=wx.Bitmap(os.path.join(CWD, "%s24x24.png"%plugin_method.get("bitmap", os.path.join("images", "RunMethod")))), label=plugin_method["name"], |
528 bitmap=wx.Bitmap(os.path.join(CWD, "%s24x24.png"%plugin_method.get("bitmap", os.path.join("images", "Unknown")))), label=plugin_method["name"], |
528 name=plugin_method["name"], pos=wx.DefaultPosition, style=wx.NO_BORDER) |
529 name=plugin_method["name"], pos=wx.DefaultPosition, style=wx.NO_BORDER) |
529 button.SetToolTipString(plugin_method["tooltip"]) |
530 button.SetToolTipString(plugin_method["tooltip"]) |
530 button.Bind(wx.EVT_BUTTON, self.GetButtonCallBackFunction(plugin, plugin_method["method"]), id=id) |
531 button.Bind(wx.EVT_BUTTON, self.GetButtonCallBackFunction(plugin, plugin_method["method"]), id=id) |
531 #hack to force size to mini |
532 #hack to force size to mini |
532 gen_mini_GetLabelSize = lambda obj:lambda:(wx.lib.buttons.GenBitmapTextButton._GetLabelSize(obj)[:-1] + (False,)) |
533 gen_mini_GetLabelSize = lambda obj:lambda:(wx.lib.buttons.GenBitmapTextButton._GetLabelSize(obj)[:-1] + (False,)) |
561 item, root_cookie = self.PluginTree.GetNextChild(root, root_cookie) |
562 item, root_cookie = self.PluginTree.GetNextChild(root, root_cookie) |
562 for item in to_delete: |
563 for item in to_delete: |
563 self.PluginTree.Delete(item) |
564 self.PluginTree.Delete(item) |
564 |
565 |
565 MustRecalTreeSizes = False |
566 MustRecalTreeSizes = False |
566 def OnPluginTreeResize(self,event): |
|
567 self.ResizePluginTreeWindow() |
|
568 event.Skip() |
|
569 |
|
570 def OnPluginTreeIdle(self,event): |
567 def OnPluginTreeIdle(self,event): |
571 if self.MustRecalTreeSizes: |
568 if self.MustRecalTreeSizes: |
|
569 self.ResizePluginTreeWindow() |
572 event.RequestMore() |
570 event.RequestMore() |
573 self.ResizePluginTreeWindow() |
|
574 event.Skip() |
571 event.Skip() |
575 |
572 |
576 def ResizePluginTreeWindow(self): |
573 def ResizePluginTreeWindow(self): |
577 if getattr(self, "PluginRoot", None): |
574 if getattr(self, "PluginRoot", None): |
578 root = self.PluginTree.GetRootItem() |
575 root = self.PluginTree.GetRootItem() |
579 if root is not None and root.IsOk(): |
576 if root is not None and root.IsOk(): |
580 #sz = self.PluginTree.GetClientSize() |
|
581 #sz = self.PluginTree.GetBestSize() |
|
582 minimalsz = wx.Size(-1,-1) |
577 minimalsz = wx.Size(-1,-1) |
583 itemswindows = self.ResizePluginTreeWindow_r(root, minimalsz) |
578 minimalpos = wx.Point(-1,-1) |
|
579 itemswindows = self.ResizePluginTreeWindow_r(root, minimalsz, minimalpos) |
584 for window, posx in itemswindows: |
580 for window, posx in itemswindows: |
585 window.SetSize(wx.Size(minimalsz.x - posx, -1)) |
581 spacer_width = minimalpos.x - posx |
586 |
582 window.GetSizer().GetItem(0).SetSpacer(wx.Size(spacer_width,-1)) |
587 self.MustRecalTreeSizes = False |
583 window.SetSize(wx.Size(spacer_width + minimalsz.x, -1)) |
588 |
584 window.GetSizer().Layout() |
589 def ResizePluginTreeWindow_r(self, root, sz): |
585 #wx.MessageBox(str(itemswindows) + "\n" + str(minimalpos) + "\n" + str(minimalsz) + "\n" + str(window.GetSizer().GetItem(0).GetSpacer())) |
|
586 self.MustRecalTreeSizes = False |
|
587 |
|
588 def ResizePluginTreeWindow_r(self, root, sz, pt): |
590 window = self.PluginTree.GetItemWindow(root) |
589 window = self.PluginTree.GetItemWindow(root) |
591 posx = window.GetPosition().x |
590 posx = window.GetPosition().x |
592 res = [(window,posx)] |
591 res = [(window,posx)] |
|
592 window.GetSizer().GetItem(0).SetSpacer(wx.Size(0,0)) |
593 bestsz = window.GetBestSize() |
593 bestsz = window.GetBestSize() |
594 sz.x = max(sz.x, bestsz.x + posx) |
594 pt.x = max(pt.x, posx) |
595 item, root_cookie = self.PluginTree.GetFirstChild(root) |
595 sz.x = max(sz.x, bestsz.x) |
596 while item is not None and item.IsOk(): |
596 if root.IsExpanded(): |
597 res.extend(self.ResizePluginTreeWindow_r(item, sz)) |
597 item, root_cookie = self.PluginTree.GetFirstChild(root) |
598 item, root_cookie = self.PluginTree.GetNextChild(root, root_cookie) |
598 while item is not None and item.IsOk() : |
|
599 res.extend(self.ResizePluginTreeWindow_r(item, sz, pt)) |
|
600 item, root_cookie = self.PluginTree.GetNextChild(root, root_cookie) |
599 return res |
601 return res |
600 |
602 |
601 |
603 |
602 def GetSelectedPluginName(self, selected = None): |
604 def GetSelectedPluginName(self, selected = None): |
603 if selected is None: |
605 if selected is None: |
1140 for name, XSDClass in plugin.PlugChildsTypes: |
1142 for name, XSDClass in plugin.PlugChildsTypes: |
1141 new_id = wx.NewId() |
1143 new_id = wx.NewId() |
1142 plugin_menu.Append(help='', id=new_id, kind=wx.ITEM_NORMAL, text=name) |
1144 plugin_menu.Append(help='', id=new_id, kind=wx.ITEM_NORMAL, text=name) |
1143 self.Bind(wx.EVT_MENU, self._GetAddPluginFunction(name, item), id=new_id) |
1145 self.Bind(wx.EVT_MENU, self._GetAddPluginFunction(name, item), id=new_id) |
1144 window_pos = window.GetPosition() |
1146 window_pos = window.GetPosition() |
1145 button = event.GetButtonObj() |
1147 wx.CallAfter(self.PluginTree.PopupMenu, plugin_menu) |
1146 button_pos, button_size = button.GetPosition(), button.GetSize() |
|
1147 wx.CallAfter(self.PluginTree.PopupMenuXY, plugin_menu, |
|
1148 window_pos.x + button_pos.x + button_size.width, |
|
1149 window_pos.y + button_pos.y) |
|
1150 event.Skip() |
1148 event.Skip() |
1151 return AddButtonFunction |
1149 return AddButtonFunction |
1152 |
1150 |
1153 def GetDeleteButtonFunction(self, item): |
1151 def GetDeleteButtonFunction(self, item): |
1154 def DeleteButtonFunction(event): |
1152 def DeleteButtonFunction(event): |