Beremiz.py
changeset 93 d53a02609e5f
parent 90 f3205d5acdf4
child 94 c7fac98c9351
equal deleted inserted replaced
92:b4e25e5030d4 93:d53a02609e5f
   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):