Beremiz.py
changeset 106 9810689febb0
parent 105 434aed8dc58d
child 109 f27ca37b6e7a
equal deleted inserted replaced
105:434aed8dc58d 106:9810689febb0
    24 
    24 
    25 __version__ = "$Revision$"
    25 __version__ = "$Revision$"
    26 
    26 
    27 import wx
    27 import wx
    28 import wx.lib.buttons
    28 import wx.lib.buttons
       
    29 import wx.lib.statbmp
    29 
    30 
    30 import types
    31 import types
    31 
    32 
    32 import time
    33 import time
    33 
    34 
    37 
    38 
    38 from wxPopen import wxPopen3
    39 from wxPopen import wxPopen3
    39 
    40 
    40 SCROLLBAR_UNIT = 10
    41 SCROLLBAR_UNIT = 10
    41 WINDOW_COLOUR = wx.Colour(240,240,240)
    42 WINDOW_COLOUR = wx.Colour(240,240,240)
       
    43 TITLE_COLOUR = wx.Colour(200,200,220)
    42 
    44 
    43 if wx.Platform == '__WXMSW__':
    45 if wx.Platform == '__WXMSW__':
    44     faces = { 'times': 'Times New Roman',
    46     faces = { 'times': 'Times New Roman',
    45               'mono' : 'Courier New',
    47               'mono' : 'Courier New',
    46               'helv' : 'Arial',
    48               'helv' : 'Arial',
    55               'size' : 18,
    57               'size' : 18,
    56              }
    58              }
    57 
    59 
    58 CWD = os.path.split(os.path.realpath(__file__))[0]
    60 CWD = os.path.split(os.path.realpath(__file__))[0]
    59 
    61 
    60 gen_mini_GetBackgroundBrush = lambda obj:lambda dc: wx.Brush(obj.faceDnClr, wx.SOLID)
    62 gen_mini_GetBackgroundBrush = lambda obj:lambda dc: wx.Brush(obj.GetParent().GetBackgroundColour(), wx.SOLID)
    61 gen_mini_GetLabelSize = lambda obj:lambda:(wx.lib.buttons.GenBitmapTextButton._GetLabelSize(obj)[:-1] + (False,))
    63 gen_mini_GetLabelSize = lambda obj:lambda:(wx.lib.buttons.GenBitmapTextButton._GetLabelSize(obj)[:-1] + (False,))
    62 gen_textbutton_GetLabelSize = lambda obj:lambda:(wx.lib.buttons.GenButton._GetLabelSize(obj)[:-1] + (False,))
    64 gen_textbutton_GetLabelSize = lambda obj:lambda:(wx.lib.buttons.GenButton._GetLabelSize(obj)[:-1] + (False,))
    63 
    65 
    64 def GenerateEmptyBitmap(width, height):
    66 def make_genbitmaptogglebutton_flat(button):
    65     bitmap = wx.EmptyBitmap(width, height)
    67     button.GetBackgroundBrush = gen_mini_GetBackgroundBrush(button)
    66     dc = wx.MemoryDC(bitmap)
    68     button.labelDelta = 0
    67     dc.SetPen(wx.Pen(WINDOW_COLOUR))
    69     button.SetBezelWidth(0)
    68     dc.SetBrush(wx.Brush(WINDOW_COLOUR))
    70     button.SetUseFocusIndicator(False)
    69     dc.DrawRectangle(0, 0, width, height)
    71 
    70     return bitmap
    72 def GenerateEmptyBitmap(width, height, color):
       
    73 #    bitmap = wx.EmptyBitmap(width, height)
       
    74 #    dc = wx.MemoryDC(bitmap)
       
    75 #    dc.SetPen(wx.Pen(color))
       
    76 #    dc.SetBrush(wx.Brush(color))
       
    77 #    dc.DrawRectangle(0, 0, width, height)
       
    78 #    return bitmap
       
    79     return wx.Bitmap(os.path.join(CWD, "images", "empty.png"))
       
    80 
       
    81 class GenStaticBitmap(wx.lib.statbmp.GenStaticBitmap):
       
    82     def __init__(self, parent, ID, bitmapname,
       
    83                  pos = wx.DefaultPosition, size = wx.DefaultSize,
       
    84                  style = 0,
       
    85                  name = "genstatbmp"):
       
    86         
       
    87         bitmappath = os.path.join(CWD, "images", bitmapname)
       
    88         if os.path.isfile(bitmappath):
       
    89             bitmap = wx.Bitmap(bitmappath)
       
    90         else:
       
    91             bitmap = None
       
    92         wx.lib.statbmp.GenStaticBitmap.__init__(self, parent, ID, bitmap,
       
    93                  pos, size,
       
    94                  style,
       
    95                  name)
       
    96         
       
    97     def OnPaint(self, event):
       
    98         dc = wx.PaintDC(self)
       
    99         colour = self.GetParent().GetBackgroundColour()
       
   100         dc.SetPen(wx.Pen(colour))
       
   101         dc.SetBrush(wx.Brush(colour ))
       
   102         dc.DrawRectangle(0, 0, *dc.GetSizeTuple())
       
   103         if self._bitmap:
       
   104             dc.DrawBitmap(self._bitmap, 0, 0, True)
       
   105 
    71                         
   106                         
    72 class LogPseudoFile:
   107 class LogPseudoFile:
    73     """ Base class for file like objects to facilitate StdOut for the Shell."""
   108     """ Base class for file like objects to facilitate StdOut for the Shell."""
    74     def __init__(self, output = None):
   109     def __init__(self, output = None):
    75         self.red_white = wx.TextAttr("RED", "WHITE")
   110         self.red_white = wx.TextAttr("RED", "WHITE")
   263         parent.AddGrowableCol(1)
   298         parent.AddGrowableCol(1)
   264         
   299         
   265     def _init_sizers(self):
   300     def _init_sizers(self):
   266         self.PLCConfigMainSizer = wx.FlexGridSizer(cols=1, hgap=2, rows=2, vgap=2)
   301         self.PLCConfigMainSizer = wx.FlexGridSizer(cols=1, hgap=2, rows=2, vgap=2)
   267         self.PLCParamsSizer = wx.BoxSizer(wx.VERTICAL)
   302         self.PLCParamsSizer = wx.BoxSizer(wx.VERTICAL)
   268         self.PluginTreeSizer = wx.FlexGridSizer(cols=3, hgap=0, rows=0, vgap=2)
   303         #self.PluginTreeSizer = wx.FlexGridSizer(cols=3, hgap=0, rows=0, vgap=2)
       
   304         self.PluginTreeSizer = wx.FlexGridSizer(cols=2, hgap=0, rows=0, vgap=2)
   269         
   305         
   270         self._init_coll_PLCConfigMainSizer_Items(self.PLCConfigMainSizer)
   306         self._init_coll_PLCConfigMainSizer_Items(self.PLCConfigMainSizer)
   271         self._init_coll_PLCConfigMainSizer_Growables(self.PLCConfigMainSizer)
   307         self._init_coll_PLCConfigMainSizer_Growables(self.PLCConfigMainSizer)
   272         self._init_coll_PluginTreeSizer_Growables(self.PluginTreeSizer)
   308         self._init_coll_PluginTreeSizer_Growables(self.PluginTreeSizer)
   273         
   309         
   373     def RefreshPLCParams(self):
   409     def RefreshPLCParams(self):
   374         self.ClearSizer(self.PLCParamsSizer)
   410         self.ClearSizer(self.PLCParamsSizer)
   375         
   411         
   376         if self.PluginRoot.HasProjectOpened():
   412         if self.PluginRoot.HasProjectOpened():
   377             plcwindow = wx.Panel(self.PLCConfig, -1, size=wx.Size(-1, -1))
   413             plcwindow = wx.Panel(self.PLCConfig, -1, size=wx.Size(-1, -1))
   378             plcwindow.SetBackgroundColour(WINDOW_COLOUR)
   414             plcwindow.SetBackgroundColour(TITLE_COLOUR)
   379             self.PLCParamsSizer.AddWindow(plcwindow, 0, border=0, flag=wx.GROW)
   415             self.PLCParamsSizer.AddWindow(plcwindow, 0, border=0, flag=wx.GROW)
   380             
   416             
   381             plcwindowsizer = wx.BoxSizer(wx.HORIZONTAL)
   417             plcwindowsizer = wx.BoxSizer(wx.HORIZONTAL)
   382             plcwindow.SetSizer(plcwindowsizer)
   418             plcwindow.SetSizer(plcwindowsizer)
   383             
   419             
   384             st = wx.StaticText(plcwindow, -1)
   420             st = wx.StaticText(plcwindow, -1)
   385             st.SetFont(wx.Font(faces["size"], wx.DEFAULT, wx.NORMAL, wx.BOLD, faceName = faces["helv"]))
   421             st.SetFont(wx.Font(faces["size"], wx.DEFAULT, wx.NORMAL, wx.BOLD, faceName = faces["helv"]))
   386             st.SetLabel(self.PluginRoot.GetProjectName())
   422             st.SetLabel(self.PluginRoot.GetProjectName())
   387             plcwindowsizer.AddWindow(st, 0, border=5, flag=wx.ALL|wx.ALIGN_CENTER)
   423             plcwindowsizer.AddWindow(st, 0, border=5, flag=wx.ALL|wx.ALIGN_CENTER)
   388             
   424             
       
   425             addbutton_id = wx.NewId()
       
   426             addbutton = wx.lib.buttons.GenBitmapButton(id=addbutton_id, bitmap=wx.Bitmap(os.path.join(CWD, 'images', 'Add16x16.png')),
       
   427                   name='AddBusButton', parent=plcwindow, pos=wx.Point(0, 0),
       
   428                   size=wx.Size(16, 16), style=wx.NO_BORDER)
       
   429             addbutton.SetToolTipString("Add a sub plugin")
       
   430             addbutton.Bind(wx.EVT_BUTTON, self.Gen_AddPluginMenu(self.PluginRoot), id=addbutton_id)
       
   431             plcwindowsizer.AddWindow(addbutton, 0, border=5, flag=wx.RIGHT|wx.ALIGN_CENTER)
       
   432     
   389             plcwindowmainsizer = wx.BoxSizer(wx.VERTICAL)
   433             plcwindowmainsizer = wx.BoxSizer(wx.VERTICAL)
   390             plcwindowsizer.AddSizer(plcwindowmainsizer, 0, border=5, flag=wx.ALL)
   434             plcwindowsizer.AddSizer(plcwindowmainsizer, 0, border=5, flag=wx.ALL)
   391             
   435             
   392             plcwindowbuttonsizer = wx.BoxSizer(wx.HORIZONTAL)
   436             plcwindowbuttonsizer = wx.BoxSizer(wx.HORIZONTAL)
   393             plcwindowmainsizer.AddSizer(plcwindowbuttonsizer, 0, border=0, flag=wx.ALIGN_CENTER)
   437             plcwindowmainsizer.AddSizer(plcwindowbuttonsizer, 0, border=0, flag=wx.ALIGN_CENTER)
   394             
   438             
   395             msizer = self.GenerateMethodButtonSizer(self.PluginRoot, plcwindow)
   439             msizer = self.GenerateMethodButtonSizer(self.PluginRoot, plcwindow)
   396             plcwindowbuttonsizer.AddSizer(msizer, 0, border=0, flag=wx.GROW)
   440             plcwindowbuttonsizer.AddSizer(msizer, 0, border=0, flag=wx.GROW)
   397             
   441             
   398             paramswindow = wx.Panel(plcwindow, -1, size=wx.Size(-1, -1))
   442             paramswindow = wx.Panel(plcwindow, -1, size=wx.Size(-1, -1))
   399             paramswindow.SetBackgroundColour(WINDOW_COLOUR)
   443             paramswindow.SetBackgroundColour(TITLE_COLOUR)
   400             plcwindowbuttonsizer.AddWindow(paramswindow, 0, border=0, flag=0)
   444             plcwindowbuttonsizer.AddWindow(paramswindow, 0, border=0, flag=0)
   401             
   445             
   402             psizer = wx.BoxSizer(wx.HORIZONTAL)
   446             psizer = wx.BoxSizer(wx.HORIZONTAL)
   403             paramswindow.SetSizer(psizer)
   447             paramswindow.SetSizer(psizer)
   404             
   448             
   409             
   453             
   410             minimizebutton_id = wx.NewId()
   454             minimizebutton_id = wx.NewId()
   411             minimizebutton = wx.lib.buttons.GenBitmapToggleButton(id=minimizebutton_id, bitmap=wx.Bitmap(os.path.join(CWD, 'images', 'Maximize.png')),
   455             minimizebutton = wx.lib.buttons.GenBitmapToggleButton(id=minimizebutton_id, bitmap=wx.Bitmap(os.path.join(CWD, 'images', 'Maximize.png')),
   412                   name='MinimizeButton', parent=plcwindow, pos=wx.Point(0, 0),
   456                   name='MinimizeButton', parent=plcwindow, pos=wx.Point(0, 0),
   413                   size=wx.Size(24, 24), style=wx.NO_BORDER)
   457                   size=wx.Size(24, 24), style=wx.NO_BORDER)
   414             minimizebutton.GetBackgroundBrush = gen_mini_GetBackgroundBrush(minimizebutton)
   458             make_genbitmaptogglebutton_flat(minimizebutton)
   415             minimizebutton.SetBackgroundColour(wx.Colour(208, 208, 208))
       
   416             minimizebutton.labelDelta = 0
       
   417             minimizebutton.SetBezelWidth(0)
       
   418             minimizebutton.SetUseFocusIndicator(False)
       
   419             minimizebutton.SetBitmapSelected(wx.Bitmap(os.path.join(CWD, 'images', 'Minimize.png')))
   459             minimizebutton.SetBitmapSelected(wx.Bitmap(os.path.join(CWD, 'images', 'Minimize.png')))
   420             plcwindowbuttonsizer.AddWindow(minimizebutton, 0, border=5, flag=wx.ALL)
   460             plcwindowbuttonsizer.AddWindow(minimizebutton, 0, border=5, flag=wx.ALL)
   421             
   461             
   422             if len(self.PluginRoot.PlugChildsTypes) > 0:
   462 #            if len(self.PluginRoot.PlugChildsTypes) > 0:
   423                 addsizer = self.GenerateAddButtonSizer(self.PluginRoot, plcwindow)
   463 #                addsizer = self.GenerateAddButtonSizer(self.PluginRoot, plcwindow)
   424                 plcwindowbuttonsizer.AddSizer(addsizer, 0, border=0, flag=0)
   464 #                plcwindowbuttonsizer.AddSizer(addsizer, 0, border=0, flag=0)
   425             else:
   465 #            else:
   426                 addsizer = None
   466 #                addsizer = None
   427 
   467 
   428             def togglewindow(event):
   468             def togglewindow(event):
   429                 if minimizebutton.GetToggle():
   469                 if minimizebutton.GetToggle():
   430                     paramswindow.Show()
   470                     paramswindow.Show()
   431                     msizer.SetCols(1)
   471                     msizer.SetCols(1)
   432                     if addsizer is not None:
   472 #                    if addsizer is not None:
   433                         addsizer.SetCols(1)
   473 #                        addsizer.SetCols(1)
   434                 else:
   474                 else:
   435                     paramswindow.Hide()
   475                     paramswindow.Hide()
   436                     msizer.SetCols(len(self.PluginRoot.PluginMethods))
   476                     msizer.SetCols(len(self.PluginRoot.PluginMethods))
   437                     if addsizer is not None:
   477 #                    if addsizer is not None:
   438                         addsizer.SetCols(len(self.PluginRoot.PlugChildsTypes))
   478 #                        addsizer.SetCols(len(self.PluginRoot.PlugChildsTypes))
   439                 self.PLCConfigMainSizer.Layout()
   479                 self.PLCConfigMainSizer.Layout()
   440                 self.RefreshScrollBars()
   480                 self.RefreshScrollBars()
   441                 event.Skip()
   481                 event.Skip()
   442             minimizebutton.Bind(wx.EVT_BUTTON, togglewindow, id=minimizebutton_id)
   482             minimizebutton.Bind(wx.EVT_BUTTON, togglewindow, id=minimizebutton_id)
   443         
   483         
   444         self.PLCConfigMainSizer.Layout()
   484         self.PLCConfigMainSizer.Layout()
   445         self.RefreshScrollBars()
   485         self.RefreshScrollBars()
   446 
   486 
   447     def GenerateAddButtonSizer(self, plugin, parent, horizontal = True):
   487 #    def GenerateAddButtonSizer(self, plugin, parent, horizontal = True):
   448         if horizontal:
   488 #        if horizontal:
   449             addsizer = wx.FlexGridSizer(cols=len(plugin.PluginMethods))
   489 #            addsizer = wx.FlexGridSizer(cols=len(plugin.PluginMethods))
   450         else:
   490 #        else:
   451             addsizer = wx.FlexGridSizer(cols=1)
   491 #            addsizer = wx.FlexGridSizer(cols=1)
   452         for name, XSDClass in plugin.PlugChildsTypes:
   492 #        for name, XSDClass, help in plugin.PlugChildsTypes:
   453             addbutton_id = wx.NewId()
   493 #            addbutton_id = wx.NewId()
   454             addbutton = wx.lib.buttons.GenButton(id=addbutton_id, label="Add %s"%name,
   494 #            addbutton = wx.lib.buttons.GenButton(id=addbutton_id, label="Add %s"%help,
   455                   name='AddBusButton', parent=parent, pos=wx.Point(0, 0),
   495 #                  name='AddBusButton', parent=parent, pos=wx.Point(0, 0),
   456                   style=wx.NO_BORDER)
   496 #                  style=wx.NO_BORDER)
   457             font = addbutton.GetFont()
   497 #            font = addbutton.GetFont()
   458             font.SetUnderlined(True)
   498 #            font.SetUnderlined(True)
   459             addbutton.SetFont(font)
   499 #            addbutton.SetFont(font)
   460             addbutton._GetLabelSize = gen_textbutton_GetLabelSize(addbutton)
   500 #            addbutton._GetLabelSize = gen_textbutton_GetLabelSize(addbutton)
   461             addbutton.SetForegroundColour(wx.BLUE)
   501 #            addbutton.SetForegroundColour(wx.BLUE)
   462             addbutton.SetToolTipString("Add a %s plugin to this one"%name)
   502 #            addbutton.SetToolTipString("Add a \"%s\" plugin to this one"%name)
   463             addbutton.Bind(wx.EVT_BUTTON, self._GetAddPluginFunction(name, plugin), id=addbutton_id)
   503 #            addbutton.Bind(wx.EVT_BUTTON, self._GetAddPluginFunction(name, plugin), id=addbutton_id)
   464             addsizer.AddWindow(addbutton, 0, border=0, flag=0)
   504 #            addsizer.AddWindow(addbutton, 0, border=0, flag=0)
   465         return addsizer
   505 #        return addsizer
   466 
   506 
   467     def GenerateMethodButtonSizer(self, plugin, parent, horizontal = True):
   507     def GenerateMethodButtonSizer(self, plugin, parent, horizontal = True):
   468         if horizontal:
   508         if horizontal:
   469             msizer = wx.FlexGridSizer(cols=len(plugin.PluginMethods))
   509             msizer = wx.FlexGridSizer(cols=len(plugin.PluginMethods))
   470         else:
   510         else:
   496 
   536 
   497     def ExpandPlugin(self, plugin, force = False):
   537     def ExpandPlugin(self, plugin, force = False):
   498         for child in self.PluginInfos[plugin]["children"]:
   538         for child in self.PluginInfos[plugin]["children"]:
   499             self.PluginTreeSizer.Show(self.PluginInfos[child]["left"])
   539             self.PluginTreeSizer.Show(self.PluginInfos[child]["left"])
   500             self.PluginTreeSizer.Show(self.PluginInfos[child]["middle"])
   540             self.PluginTreeSizer.Show(self.PluginInfos[child]["middle"])
   501             self.PluginTreeSizer.Show(self.PluginInfos[child]["right"])
   541 #            self.PluginTreeSizer.Show(self.PluginInfos[child]["right"])
   502             if force or not self.PluginInfos[child]["expanded"]:
   542             if force or not self.PluginInfos[child]["expanded"]:
   503                 self.ExpandPlugin(child, force)
   543                 self.ExpandPlugin(child, force)
   504                 if force:
   544                 if force:
   505                     self.PluginInfos[child]["expanded"] = True
   545                     self.PluginInfos[child]["expanded"] = True
   506     
   546     
   507     def CollapsePlugin(self, plugin, force = False):
   547     def CollapsePlugin(self, plugin, force = False):
   508         for child in self.PluginInfos[plugin]["children"]:
   548         for child in self.PluginInfos[plugin]["children"]:
   509             self.PluginTreeSizer.Hide(self.PluginInfos[child]["left"])
   549             self.PluginTreeSizer.Hide(self.PluginInfos[child]["left"])
   510             self.PluginTreeSizer.Hide(self.PluginInfos[child]["middle"])
   550             self.PluginTreeSizer.Hide(self.PluginInfos[child]["middle"])
   511             self.PluginTreeSizer.Hide(self.PluginInfos[child]["right"])
   551 #            self.PluginTreeSizer.Hide(self.PluginInfos[child]["right"])
   512             if force or self.PluginInfos[child]["expanded"]:
   552             if force or self.PluginInfos[child]["expanded"]:
   513                 self.CollapsePlugin(child, force)
   553                 self.CollapsePlugin(child, force)
   514                 if force:
   554                 if force:
   515                     self.PluginInfos[child]["expanded"] = False
   555                     self.PluginInfos[child]["expanded"] = False
   516 
   556 
   523             
   563             
   524         self.PluginInfos[plugin]["children"] = plugin.IECSortedChilds()
   564         self.PluginInfos[plugin]["children"] = plugin.IECSortedChilds()
   525         
   565         
   526         self.PluginTreeSizer.AddWindow(leftwindow, 0, border=0, flag=wx.GROW)
   566         self.PluginTreeSizer.AddWindow(leftwindow, 0, border=0, flag=wx.GROW)
   527         
   567         
   528         leftwindowsizer = wx.FlexGridSizer(cols=1, rows=2)
   568         leftwindowsizer = wx.FlexGridSizer(cols=1, rows=3)
   529         leftwindowsizer.AddGrowableCol(0)
   569         leftwindowsizer.AddGrowableCol(0)
   530         leftwindowsizer.AddGrowableRow(1)
   570         leftwindowsizer.AddGrowableRow(2)
   531         leftwindow.SetSizer(leftwindowsizer)
   571         leftwindow.SetSizer(leftwindowsizer)
   532         
   572         
   533         leftbuttonmainsizer = wx.FlexGridSizer(cols=3, rows=1)
   573         leftbuttonmainsizer = wx.FlexGridSizer(cols=3, rows=1)
   534         leftbuttonmainsizer.AddGrowableCol(0)
   574         leftbuttonmainsizer.AddGrowableCol(0)
   535         leftwindowsizer.AddSizer(leftbuttonmainsizer, 0, border=5, flag=wx.GROW|wx.LEFT|wx.RIGHT|wx.TOP)
   575         leftwindowsizer.AddSizer(leftbuttonmainsizer, 0, border=5, flag=wx.GROW|wx.LEFT|wx.RIGHT) #|wx.TOP
   536         
   576         
   537         leftbuttonsizer = wx.BoxSizer(wx.HORIZONTAL)
   577         leftbuttonsizer = wx.BoxSizer(wx.HORIZONTAL)
   538         leftbuttonmainsizer.AddSizer(leftbuttonsizer, 0, border=15, flag=wx.GROW|wx.RIGHT)
   578         leftbuttonmainsizer.AddSizer(leftbuttonsizer, 0, border=5, flag=wx.GROW|wx.RIGHT)
   539         
   579         
   540         ieccsizer = wx.BoxSizer(wx.VERTICAL)
   580         leftsizer = wx.BoxSizer(wx.VERTICAL)
   541         leftbuttonsizer.AddSizer(ieccsizer, 0, border=15, flag=wx.RIGHT|wx.ALIGN_CENTER_VERTICAL)
   581         leftbuttonsizer.AddSizer(leftsizer, 0, border=5, flag=wx.RIGHT|wx.ALIGN_CENTER_VERTICAL)
       
   582 
       
   583         rolesizer = wx.BoxSizer(wx.HORIZONTAL)
       
   584         leftsizer.AddSizer(rolesizer, 0, border=0, flag=wx.GROW|wx.RIGHT)
       
   585 
       
   586         roletext = wx.StaticText(leftwindow, -1)
       
   587         roletext.SetLabel(plugin.PlugHelp)
       
   588         rolesizer.AddWindow(roletext, 0, border=5, flag=wx.RIGHT|wx.ALIGN_LEFT)
       
   589 
       
   590         enablebutton_id = wx.NewId()
       
   591         enablebutton = wx.lib.buttons.GenBitmapToggleButton(id=enablebutton_id, bitmap=wx.Bitmap(os.path.join(CWD, 'images', 'Disabled.png')),
       
   592               name='EnableButton', parent=leftwindow, size=wx.Size(16, 16), pos=wx.Point(0, 0), style=0)#wx.NO_BORDER)
       
   593         enablebutton.SetToolTipString("Enable/Disable this plugin")
       
   594         make_genbitmaptogglebutton_flat(enablebutton)
       
   595         enablebutton.SetBitmapSelected(wx.Bitmap(os.path.join(CWD, 'images', 'Enabled.png')))
       
   596         enablebutton.SetToggle(plugin.MandatoryParams[1].getEnabled())
       
   597         def toggleenablebutton(event):
       
   598             res, StructChanged = plugin.SetParamsAttribute("BaseParams.Enabled", enablebutton.GetToggle(), self.Log)
       
   599             if StructChanged: wx.CallAfter(self.RefreshPluginTree)
       
   600             enablebutton.SetToggle(res)
       
   601             event.Skip()
       
   602         enablebutton.Bind(wx.EVT_BUTTON, toggleenablebutton, id=enablebutton_id)
       
   603         rolesizer.AddWindow(enablebutton, 0, border=0, flag=wx.RIGHT|wx.ALIGN_CENTER_VERTICAL)
       
   604 
   542         
   605         
   543         plugin_IECChannel = plugin.BaseParams.getIEC_Channel()
   606         plugin_IECChannel = plugin.BaseParams.getIEC_Channel()
   544         
   607         
       
   608         iecsizer = wx.BoxSizer(wx.HORIZONTAL)
       
   609         leftsizer.AddSizer(iecsizer, 0, border=5, flag=wx.RIGHT|wx.ALIGN_CENTER_VERTICAL)
       
   610 
       
   611         st = wx.StaticText(leftwindow, -1)
       
   612         st.SetFont(wx.Font(faces["size"], wx.DEFAULT, wx.NORMAL, wx.BOLD, faceName = faces["helv"]))
       
   613         st.SetLabel(plugin.GetFullIEC_Channel())
       
   614         iecsizer.AddWindow(st, 0, border=0, flag=0)
       
   615 
       
   616         updownsizer = wx.BoxSizer(wx.VERTICAL)
       
   617         iecsizer.AddSizer(updownsizer, 0, border=5, flag=wx.LEFT|wx.ALIGN_CENTER_VERTICAL)
       
   618 
   545         if plugin_IECChannel > 0:
   619         if plugin_IECChannel > 0:
   546             ieccdownbutton_id = wx.NewId()
   620             ieccdownbutton_id = wx.NewId()
   547             ieccdownbutton = wx.lib.buttons.GenBitmapButton(id=ieccdownbutton_id, bitmap=wx.Bitmap(os.path.join(CWD, 'images', 'IECCDown.png')),
   621             ieccdownbutton = wx.lib.buttons.GenBitmapButton(id=ieccdownbutton_id, bitmap=wx.Bitmap(os.path.join(CWD, 'images', 'IECCDown.png')),
   548                   name='IECCDownButton', parent=leftwindow, pos=wx.Point(0, 0),
   622                   name='IECCDownButton', parent=leftwindow, pos=wx.Point(0, 0),
   549                   size=wx.Size(16, 16), style=wx.NO_BORDER)
   623                   size=wx.Size(16, 16), style=wx.NO_BORDER)
   550             ieccdownbutton.Bind(wx.EVT_BUTTON, self.GetItemChannelChangedFunction(plugin, plugin_IECChannel - 1), id=ieccdownbutton_id)
   624             ieccdownbutton.Bind(wx.EVT_BUTTON, self.GetItemChannelChangedFunction(plugin, plugin_IECChannel - 1), id=ieccdownbutton_id)
   551             ieccsizer.AddWindow(ieccdownbutton, 0, border=0, flag=wx.ALIGN_CENTER)
   625             updownsizer.AddWindow(ieccdownbutton, 0, border=0, flag=wx.ALIGN_LEFT)
   552         else:
   626 
   553             staticbitmap = wx.StaticBitmap(id=-1, bitmap=GenerateEmptyBitmap(16, 16),
       
   554                   name="staticBitmap", parent=leftwindow,
       
   555                   pos=wx.Point(0, 0), size=wx.Size(16, 16), style=0)
       
   556             ieccsizer.AddWindow(staticbitmap, 0, border=0, flag=wx.ALIGN_CENTER)
       
   557         
       
   558         st = wx.StaticText(leftwindow, -1)
       
   559         st.SetFont(wx.Font(faces["size"], wx.DEFAULT, wx.NORMAL, wx.BOLD, faceName = faces["helv"]))
       
   560         st.SetLabel(plugin.GetFullIEC_Channel())
       
   561         ieccsizer.AddWindow(st, 0, border=0, flag=0)
       
   562         
       
   563         ieccupbutton_id = wx.NewId()
   627         ieccupbutton_id = wx.NewId()
   564         ieccupbutton = wx.lib.buttons.GenBitmapTextButton(id=ieccupbutton_id, bitmap=wx.Bitmap(os.path.join(CWD, 'images', 'IECCUp.png')),
   628         ieccupbutton = wx.lib.buttons.GenBitmapTextButton(id=ieccupbutton_id, bitmap=wx.Bitmap(os.path.join(CWD, 'images', 'IECCUp.png')),
   565               name='IECCUpButton', parent=leftwindow, pos=wx.Point(0, 0),
   629               name='IECCUpButton', parent=leftwindow, pos=wx.Point(0, 0),
   566               size=wx.Size(16, 16), style=wx.NO_BORDER)
   630               size=wx.Size(16, 16), style=wx.NO_BORDER)
   567         ieccupbutton.Bind(wx.EVT_BUTTON, self.GetItemChannelChangedFunction(plugin, plugin_IECChannel + 1), id=ieccupbutton_id)
   631         ieccupbutton.Bind(wx.EVT_BUTTON, self.GetItemChannelChangedFunction(plugin, plugin_IECChannel + 1), id=ieccupbutton_id)
   568         ieccsizer.AddWindow(ieccupbutton, 0, border=0, flag=wx.ALIGN_CENTER)
   632         updownsizer.AddWindow(ieccupbutton, 0, border=0, flag=wx.ALIGN_LEFT)
       
   633 
       
   634         adddeletesizer = wx.BoxSizer(wx.VERTICAL)
       
   635         iecsizer.AddSizer(adddeletesizer, 0, border=5, flag=wx.LEFT|wx.ALIGN_CENTER_VERTICAL)
       
   636 
       
   637         deletebutton_id = wx.NewId()
       
   638         deletebutton = wx.lib.buttons.GenBitmapButton(id=deletebutton_id, bitmap=wx.Bitmap(os.path.join(CWD, 'images', 'Delete16x16.png')),
       
   639               name='DeleteBusButton', parent=leftwindow, pos=wx.Point(0, 0),
       
   640               size=wx.Size(16, 16), style=wx.NO_BORDER)
       
   641         deletebutton.SetToolTipString("Delete this plugin")
       
   642         deletebutton.Bind(wx.EVT_BUTTON, self.GetDeleteButtonFunction(plugin), id=deletebutton_id)
       
   643         adddeletesizer.AddWindow(deletebutton, 0, border=5, flag=wx.RIGHT|wx.ALIGN_CENTER)
       
   644 
       
   645         if len(plugin.PlugChildsTypes) > 0:
       
   646             addbutton_id = wx.NewId()
       
   647             addbutton = wx.lib.buttons.GenBitmapButton(id=addbutton_id, bitmap=wx.Bitmap(os.path.join(CWD, 'images', 'Add16x16.png')),
       
   648                   name='AddBusButton', parent=leftwindow, pos=wx.Point(0, 0),
       
   649                   size=wx.Size(16, 16), style=wx.NO_BORDER)
       
   650             addbutton.SetToolTipString("Add a sub plugin")
       
   651             addbutton.Bind(wx.EVT_BUTTON, self.Gen_AddPluginMenu(plugin), id=addbutton_id)
       
   652             adddeletesizer.AddWindow(addbutton, 0, border=5, flag=wx.RIGHT|wx.ALIGN_CENTER)
   569         
   653         
   570         if len(self.PluginInfos[plugin]["children"]) > 0:
   654         if len(self.PluginInfos[plugin]["children"]) > 0:
   571             expandbutton_id = wx.NewId()
   655             expandbutton_id = wx.NewId()
   572             expandbutton = wx.lib.buttons.GenBitmapToggleButton(id=expandbutton_id, bitmap=wx.Bitmap(os.path.join(CWD, 'images', 'plus.png')),
   656             expandbutton = wx.lib.buttons.GenBitmapToggleButton(id=expandbutton_id, bitmap=wx.Bitmap(os.path.join(CWD, 'images', 'plus.png')),
   573                   name='ExpandButton', parent=leftwindow, pos=wx.Point(0, 0),
   657                   name='ExpandButton', parent=leftwindow, pos=wx.Point(0, 0),
   594         tc = wx.TextCtrl(leftwindow, tc_id, size=wx.Size(150, 35), style=wx.TE_PROCESS_ENTER|wx.NO_BORDER)
   678         tc = wx.TextCtrl(leftwindow, tc_id, size=wx.Size(150, 35), style=wx.TE_PROCESS_ENTER|wx.NO_BORDER)
   595         tc.SetFont(wx.Font(faces["size"] * 0.75, wx.DEFAULT, wx.NORMAL, wx.BOLD, faceName = faces["helv"]))
   679         tc.SetFont(wx.Font(faces["size"] * 0.75, wx.DEFAULT, wx.NORMAL, wx.BOLD, faceName = faces["helv"]))
   596         tc.SetValue(plugin.MandatoryParams[1].getName())
   680         tc.SetValue(plugin.MandatoryParams[1].getName())
   597         tc.Bind(wx.EVT_TEXT_ENTER, self.GetTextCtrlCallBackFunction(tc, plugin, "BaseParams.Name"), id=tc_id)
   681         tc.Bind(wx.EVT_TEXT_ENTER, self.GetTextCtrlCallBackFunction(tc, plugin, "BaseParams.Name"), id=tc_id)
   598         leftbuttonsizer.AddWindow(tc, 0, border=5, flag=wx.RIGHT|wx.ALIGN_CENTER_VERTICAL)
   682         leftbuttonsizer.AddWindow(tc, 0, border=5, flag=wx.RIGHT|wx.ALIGN_CENTER_VERTICAL)
   599         
   683        
   600         enablebutton_id = wx.NewId()
       
   601         enablebutton = wx.lib.buttons.GenBitmapToggleButton(id=enablebutton_id, bitmap=wx.Bitmap(os.path.join(CWD, 'images', 'Disabled.png')),
       
   602               name='EnableButton', parent=leftwindow, pos=wx.Point(0, 0), style=wx.NO_BORDER)
       
   603         enablebutton.SetToolTipString("Enable/Disable this plugin")
       
   604         enablebutton.GetBackgroundBrush = gen_mini_GetBackgroundBrush(enablebutton)
       
   605         enablebutton.SetBackgroundColour(wx.Colour(208, 208, 208))
       
   606         enablebutton.labelDelta = 0
       
   607         enablebutton.SetBezelWidth(0)
       
   608         enablebutton.SetUseFocusIndicator(False)
       
   609         enablebutton.SetBitmapSelected(wx.Bitmap(os.path.join(CWD, 'images', 'Enabled.png')))
       
   610         enablebutton.SetToggle(plugin.MandatoryParams[1].getEnabled())
       
   611         def toggleenablebutton(event):
       
   612             res, StructChanged = plugin.SetParamsAttribute("BaseParams.Enabled", enablebutton.GetToggle(), self.Log)
       
   613             if StructChanged: wx.CallAfter(self.RefreshPluginTree)
       
   614             enablebutton.SetToggle(res)
       
   615             event.Skip()
       
   616         enablebutton.Bind(wx.EVT_BUTTON, toggleenablebutton, id=enablebutton_id)
       
   617         leftbuttonsizer.AddWindow(enablebutton, 0, border=5, flag=wx.RIGHT|wx.ALIGN_CENTER_VERTICAL)
       
   618 
   684 
   619         leftminimizebutton_id = wx.NewId()
   685         leftminimizebutton_id = wx.NewId()
   620         leftminimizebutton = wx.lib.buttons.GenBitmapToggleButton(id=leftminimizebutton_id, bitmap=wx.Bitmap(os.path.join(CWD, 'images', 'Maximize.png')),
   686         leftminimizebutton = wx.lib.buttons.GenBitmapToggleButton(id=leftminimizebutton_id, bitmap=wx.Bitmap(os.path.join(CWD, 'images', 'ShowVars.png')),
   621               name='MinimizeButton', parent=leftwindow, pos=wx.Point(0, 0),
   687               name='MinimizeButton', parent=leftwindow, pos=wx.Point(0, 0),
   622               size=wx.Size(24, 24), style=wx.NO_BORDER)
   688               size=wx.Size(24, 24), style=wx.NO_BORDER)
   623         leftminimizebutton.GetBackgroundBrush = gen_mini_GetBackgroundBrush(leftminimizebutton)
   689         make_genbitmaptogglebutton_flat(leftminimizebutton)
   624         leftminimizebutton.SetBackgroundColour(wx.Colour(208, 208, 208))
   690         leftminimizebutton.SetBitmapSelected(wx.Bitmap(os.path.join(CWD, 'images', 'HideVars.png')))
   625         leftminimizebutton.labelDelta = 0
       
   626         leftminimizebutton.SetBezelWidth(0)
       
   627         leftminimizebutton.SetUseFocusIndicator(False)
       
   628         leftminimizebutton.SetBitmapSelected(wx.Bitmap(os.path.join(CWD, 'images', 'Minimize.png')))
       
   629         leftminimizebutton.SetToggle(self.PluginInfos[plugin]["left_visible"])
   691         leftminimizebutton.SetToggle(self.PluginInfos[plugin]["left_visible"])
   630         def toggleleftwindow(event):
   692         def toggleleftwindow(event):
   631             if leftminimizebutton.GetToggle():
   693             if leftminimizebutton.GetToggle():
   632                 leftwindowsizer.Show(1)
   694                 leftwindowsizer.Show(1)
   633             else:
   695             else:
   637             self.RefreshScrollBars()
   699             self.RefreshScrollBars()
   638             event.Skip()
   700             event.Skip()
   639         leftminimizebutton.Bind(wx.EVT_BUTTON, toggleleftwindow, id=leftminimizebutton_id)
   701         leftminimizebutton.Bind(wx.EVT_BUTTON, toggleleftwindow, id=leftminimizebutton_id)
   640         leftbuttonmainsizer.AddWindow(leftminimizebutton, 0, border=5, flag=wx.RIGHT|wx.ALIGN_CENTER)
   702         leftbuttonmainsizer.AddWindow(leftminimizebutton, 0, border=5, flag=wx.RIGHT|wx.ALIGN_CENTER)
   641 
   703 
   642         deletebutton_id = wx.NewId()
       
   643         deletebutton = wx.lib.buttons.GenBitmapButton(id=deletebutton_id, bitmap=wx.Bitmap(os.path.join(CWD, 'images', 'Delete24x24.png')),
       
   644               name='DeleteBusButton', parent=leftwindow, pos=wx.Point(0, 0),
       
   645               size=wx.Size(24, 24), style=wx.NO_BORDER)
       
   646         deletebutton.SetToolTipString("Delete this plugin")
       
   647         deletebutton.Bind(wx.EVT_BUTTON, self.GetDeleteButtonFunction(plugin), id=deletebutton_id)
       
   648         leftbuttonmainsizer.AddWindow(deletebutton, 0, border=5, flag=wx.RIGHT|wx.ALIGN_CENTER)
       
   649 
       
   650         locations = plugin.GetLocations()
   704         locations = plugin.GetLocations()
   651         lb = wx.ListBox(leftwindow, -1, size=wx.Size(-1, max(1, min(len(locations), 4)) * 25), style=wx.NO_BORDER)
   705         lb = wx.ListBox(leftwindow, -1, size=wx.Size(-1, max(1, min(len(locations), 4)) * 25), style=wx.NO_BORDER)
   652         for location in locations:
   706         for location in locations:
   653             lb.Append(location["NAME"].replace("__", "%").replace("_", "."))
   707             lb.Append(location["NAME"].replace("__", "%").replace("_", "."))
   654         if not self.PluginInfos[plugin]["left_visible"]:
   708         if not self.PluginInfos[plugin]["left_visible"]:
   665         middlewindow.SetSizer(middlewindowmainsizer)
   719         middlewindow.SetSizer(middlewindowmainsizer)
   666         
   720         
   667         middlewindowsizer = wx.FlexGridSizer(cols=2, rows=1)
   721         middlewindowsizer = wx.FlexGridSizer(cols=2, rows=1)
   668         middlewindowsizer.AddGrowableCol(1)
   722         middlewindowsizer.AddGrowableCol(1)
   669         middlewindowsizer.AddGrowableRow(0)
   723         middlewindowsizer.AddGrowableRow(0)
   670         middlewindowmainsizer.AddSizer(middlewindowsizer, 0, border=17, flag=wx.TOP|wx.GROW)
   724         middlewindowmainsizer.AddSizer(middlewindowsizer, 0, border=8, flag=wx.TOP|wx.GROW)
   671         
   725         
   672         msizer = self.GenerateMethodButtonSizer(plugin, middlewindow, not self.PluginInfos[plugin]["middle_visible"])
   726         msizer = self.GenerateMethodButtonSizer(plugin, middlewindow, not self.PluginInfos[plugin]["middle_visible"])
   673         middlewindowsizer.AddSizer(msizer, 0, border=0, flag=wx.GROW)
   727         middlewindowsizer.AddSizer(msizer, 0, border=0, flag=wx.GROW)
   674         
   728         
   675         middleparamssizer = wx.BoxSizer(wx.HORIZONTAL)
   729         middleparamssizer = wx.BoxSizer(wx.HORIZONTAL)
   691         
   745         
   692         middleminimizebutton_id = wx.NewId()
   746         middleminimizebutton_id = wx.NewId()
   693         middleminimizebutton = wx.lib.buttons.GenBitmapToggleButton(id=middleminimizebutton_id, bitmap=wx.Bitmap(os.path.join(CWD, 'images', 'Maximize.png')),
   747         middleminimizebutton = wx.lib.buttons.GenBitmapToggleButton(id=middleminimizebutton_id, bitmap=wx.Bitmap(os.path.join(CWD, 'images', 'Maximize.png')),
   694               name='MinimizeButton', parent=middlewindow, pos=wx.Point(0, 0),
   748               name='MinimizeButton', parent=middlewindow, pos=wx.Point(0, 0),
   695               size=wx.Size(24, 24), style=wx.NO_BORDER)
   749               size=wx.Size(24, 24), style=wx.NO_BORDER)
   696         middleminimizebutton.GetBackgroundBrush = gen_mini_GetBackgroundBrush(middleminimizebutton)
   750         make_genbitmaptogglebutton_flat(middleminimizebutton)
   697         middleminimizebutton.SetBackgroundColour(wx.Colour(208, 208, 208))
       
   698         middleminimizebutton.labelDelta = 0
       
   699         middleminimizebutton.SetBezelWidth(0)
       
   700         middleminimizebutton.SetUseFocusIndicator(False)
       
   701         middleminimizebutton.SetBitmapSelected(wx.Bitmap(os.path.join(CWD, 'images', 'Minimize.png')))
   751         middleminimizebutton.SetBitmapSelected(wx.Bitmap(os.path.join(CWD, 'images', 'Minimize.png')))
   702         middleminimizebutton.SetToggle(self.PluginInfos[plugin]["middle_visible"])
   752         middleminimizebutton.SetToggle(self.PluginInfos[plugin]["middle_visible"])
   703         middleparamssizer.AddWindow(middleminimizebutton, 0, border=5, flag=wx.ALL)
   753         middleparamssizer.AddWindow(middleminimizebutton, 0, border=5, flag=wx.ALL)
   704         
   754         
   705         rightwindow = wx.Panel(self.PLCConfig, -1, size=wx.Size(-1, -1))
   755 #        rightwindow = wx.Panel(self.PLCConfig, -1, size=wx.Size(-1, -1))
   706         rightwindow.SetBackgroundColour(wx.Colour(240,240,240))
   756 #        rightwindow.SetBackgroundColour(wx.Colour(240,240,240))
   707         
   757 #        
   708         self.PluginTreeSizer.AddWindow(rightwindow, 0, border=0, flag=wx.GROW)
   758 #        self.PluginTreeSizer.AddWindow(rightwindow, 0, border=0, flag=wx.GROW)
   709         
   759 #        
   710         rightsizer = wx.BoxSizer(wx.VERTICAL)
   760 #        rightsizer = wx.BoxSizer(wx.VERTICAL)
   711         rightwindow.SetSizer(rightsizer)
   761 #        rightwindow.SetSizer(rightsizer)
   712         
   762 #        
   713         rightmainsizer = wx.BoxSizer(wx.VERTICAL)
   763 #        rightmainsizer = wx.BoxSizer(wx.VERTICAL)
   714         rightsizer.AddSizer(rightmainsizer, 0, border=5, flag=wx.ALL)
   764 #        rightsizer.AddSizer(rightmainsizer, 0, border=5, flag=wx.ALL)
   715         
   765 #        
   716         if len(plugin.PlugChildsTypes) > 0:
   766 #        if len(plugin.PlugChildsTypes) > 0:
   717             addsizer = self.GenerateAddButtonSizer(plugin, rightwindow)
   767 #            addsizer = self.GenerateAddButtonSizer(plugin, rightwindow)
   718             rightmainsizer.AddSizer(addsizer, 0, border=12, flag=wx.TOP)
   768 #            rightmainsizer.AddSizer(addsizer, 0, border=4, flag=wx.TOP)
   719         else:
   769 #        else:
   720             addsizer = None
   770 #            addsizer = None
   721             
   771             
   722         def togglemiddlerightwindow(event):
   772         def togglemiddlerightwindow(event):
   723             if middleminimizebutton.GetToggle():
   773             if middleminimizebutton.GetToggle():
   724                 middleparamssizer.Show(0)
   774                 middleparamssizer.Show(0)
   725                 msizer.SetCols(1)
   775                 msizer.SetCols(1)
   726                 if addsizer is not None:
   776 #                if addsizer is not None:
   727                     addsizer.SetCols(1)
   777 #                    addsizer.SetCols(1)
   728             else:
   778             else:
   729                 middleparamssizer.Hide(0)
   779                 middleparamssizer.Hide(0)
   730                 msizer.SetCols(len(plugin.PluginMethods))
   780                 msizer.SetCols(len(plugin.PluginMethods))
   731                 if addsizer is not None:
   781 #                if addsizer is not None:
   732                     addsizer.SetCols(len(plugin.PlugChildsTypes))
   782 #                    addsizer.SetCols(len(plugin.PlugChildsTypes))
   733             self.PluginInfos[plugin]["middle_visible"] = middleminimizebutton.GetToggle()
   783             self.PluginInfos[plugin]["middle_visible"] = middleminimizebutton.GetToggle()
   734             self.PLCConfigMainSizer.Layout()
   784             self.PLCConfigMainSizer.Layout()
   735             self.RefreshScrollBars()
   785             self.RefreshScrollBars()
   736             event.Skip()
   786             event.Skip()
   737         middleminimizebutton.Bind(wx.EVT_BUTTON, togglemiddlerightwindow, id=middleminimizebutton_id)
   787         middleminimizebutton.Bind(wx.EVT_BUTTON, togglemiddlerightwindow, id=middleminimizebutton_id)
   738         
   788         
   739         self.PluginInfos[plugin]["left"] = index[0]
   789         self.PluginInfos[plugin]["left"] = index[0]
   740         self.PluginInfos[plugin]["middle"] = index[0] + 1
   790         self.PluginInfos[plugin]["middle"] = index[0] + 1
   741         self.PluginInfos[plugin]["right"] = index[0] + 2
   791 #        self.PluginInfos[plugin]["right"] = index[0] + 2
   742         index[0] += 3
   792 #        index[0] += 3
       
   793         index[0] += 2
   743         for child in self.PluginInfos[plugin]["children"]:
   794         for child in self.PluginInfos[plugin]["children"]:
   744             self.GenerateTreeBranch(child, index)
   795             self.GenerateTreeBranch(child, index)
   745             if not self.PluginInfos[child]["expanded"]:
   796             if not self.PluginInfos[child]["expanded"]:
   746                 self.CollapsePlugin(child)
   797                 self.CollapsePlugin(child)
   747 
   798 
   766         def OnPluginMenu(event):
   817         def OnPluginMenu(event):
   767             wx.CallAfter(self.AddPlugin, name, plugin)
   818             wx.CallAfter(self.AddPlugin, name, plugin)
   768             event.Skip()
   819             event.Skip()
   769         return OnPluginMenu
   820         return OnPluginMenu
   770     
   821     
   771     def OnPluginTreeRightUp(self, event):
   822     def Gen_AddPluginMenu(self, plugin):
   772         plugin = self.GetSelectedPlugin()
   823         def AddPluginMenu(event):
   773         if plugin:
       
   774             main_menu = wx.Menu(title='')
   824             main_menu = wx.Menu(title='')
   775             if len(plugin.PlugChildsTypes) > 0:
   825             if len(plugin.PlugChildsTypes) > 0:
   776                 plugin_menu = wx.Menu(title='')
   826                 for name, XSDClass, help in plugin.PlugChildsTypes:
   777                 for name, XSDClass in plugin.PlugChildsTypes:
       
   778                     new_id = wx.NewId()
   827                     new_id = wx.NewId()
   779                     plugin_menu.Append(help='', id=new_id, kind=wx.ITEM_NORMAL, text=name)
   828                     main_menu.Append(help=help, id=new_id, kind=wx.ITEM_NORMAL, text="Append "+help)
   780                     self.Bind(wx.EVT_MENU, self._GetAddPluginFunction(name), id=new_id)
   829                     self.Bind(wx.EVT_MENU, self._GetAddPluginFunction(name, plugin), id=new_id)
   781                 main_menu.AppendMenu(-1, "Add", plugin_menu, '')
   830             self.PopupMenuXY(main_menu)
   782             new_id = wx.NewId()
   831             event.Skip()
   783             main_menu.Append(help='', id=new_id, kind=wx.ITEM_NORMAL, text="Delete")
   832         return AddPluginMenu
   784             self.Bind(wx.EVT_MENU, self.OnDeleteButton, id=new_id)
       
   785             pos_x, pos_y = event.GetPosition()
       
   786             self.PluginTree.PopupMenuXY(main_menu, pos_x, pos_y)
       
   787         event.Skip()
       
   788     
   833     
   789     def GetButtonCallBackFunction(self, plugin, method):
   834     def GetButtonCallBackFunction(self, plugin, method):
   790         def OnButtonClick(event):
   835         def OnButtonClick(event):
   791             getattr(plugin,method)(self.Log)
   836             getattr(plugin,method)(self.Log)
   792             self.RefreshVariableLists()
   837             self.RefreshVariableLists()
   864                 boxsizer = wx.BoxSizer(wx.HORIZONTAL)
   909                 boxsizer = wx.BoxSizer(wx.HORIZONTAL)
   865                 if first:
   910                 if first:
   866                     sizer.AddSizer(boxsizer, 0, border=5, flag=wx.GROW|wx.ALL)
   911                     sizer.AddSizer(boxsizer, 0, border=5, flag=wx.GROW|wx.ALL)
   867                 else:
   912                 else:
   868                     sizer.AddSizer(boxsizer, 0, border=5, flag=wx.GROW|wx.LEFT|wx.RIGHT|wx.BOTTOM)
   913                     sizer.AddSizer(boxsizer, 0, border=5, flag=wx.GROW|wx.LEFT|wx.RIGHT|wx.BOTTOM)
   869                 bitmappath = os.path.join("images", "%s.png"%element_infos["name"])
   914                 staticbitmap = GenStaticBitmap(ID=-1, bitmapname="%s.png"%element_infos["name"],
   870                 if os.path.isfile(bitmappath):
   915                     name="%s_bitmap"%element_infos["name"], parent=parent,
   871                     staticbitmap = wx.StaticBitmap(id=-1, bitmap=wx.Bitmap(bitmappath),
   916                     pos=wx.Point(0, 0), size=wx.Size(24, 24), style=0)
   872                         name="%s_bitmap"%element_infos["name"], parent=parent,
   917                 boxsizer.AddWindow(staticbitmap, 0, border=5, flag=wx.RIGHT)
   873                         pos=wx.Point(0, 0), size=wx.Size(24, 24), style=0)
       
   874                     boxsizer.AddWindow(staticbitmap, 0, border=5, flag=wx.RIGHT)
       
   875                 else:
       
   876                     staticbitmap = wx.StaticBitmap(id=-1, bitmap=GenerateEmptyBitmap(24, 24),
       
   877                         name="%s_bitmap"%element_infos["name"], parent=parent,
       
   878                         pos=wx.Point(0, 0), size=wx.Size(24, 24), style=0)
       
   879                     boxsizer.AddWindow(staticbitmap, 0, border=5, flag=wx.RIGHT)
       
   880                 statictext = wx.StaticText(id=-1, label="%s:"%element_infos["name"], 
   918                 statictext = wx.StaticText(id=-1, label="%s:"%element_infos["name"], 
   881                     name="%s_label"%element_infos["name"], parent=parent, 
   919                     name="%s_label"%element_infos["name"], parent=parent, 
   882                     pos=wx.Point(0, 0), size=wx.Size(100, 17), style=0)
   920                     pos=wx.Point(0, 0), size=wx.Size(100, 17), style=0)
   883                 boxsizer.AddWindow(statictext, 0, border=4, flag=wx.TOP)
   921                 boxsizer.AddWindow(statictext, 0, border=4, flag=wx.TOP)
   884                 id = wx.NewId()
   922                 id = wx.NewId()
   907                 boxsizer = wx.BoxSizer(wx.HORIZONTAL)
   945                 boxsizer = wx.BoxSizer(wx.HORIZONTAL)
   908                 if first:
   946                 if first:
   909                     sizer.AddSizer(boxsizer, 0, border=5, flag=wx.GROW|wx.ALL)
   947                     sizer.AddSizer(boxsizer, 0, border=5, flag=wx.GROW|wx.ALL)
   910                 else:
   948                 else:
   911                     sizer.AddSizer(boxsizer, 0, border=5, flag=wx.GROW|wx.LEFT|wx.RIGHT|wx.BOTTOM)
   949                     sizer.AddSizer(boxsizer, 0, border=5, flag=wx.GROW|wx.LEFT|wx.RIGHT|wx.BOTTOM)
   912                 bitmappath = os.path.join("images", "%s.png"%element_infos["name"])
   950                 staticbitmap = GenStaticBitmap(ID=-1, bitmapname="%s.png"%element_infos["name"],
   913                 if os.path.isfile(bitmappath):
   951                     name="%s_bitmap"%element_infos["name"], parent=parent,
   914                     staticbitmap = wx.StaticBitmap(id=-1, bitmap=wx.Bitmap(bitmappath),
   952                     pos=wx.Point(0, 0), size=wx.Size(24, 24), style=0)
   915                         name="%s_bitmap"%element_infos["name"], parent=parent,
   953                 boxsizer.AddWindow(staticbitmap, 0, border=5, flag=wx.RIGHT)
   916                         pos=wx.Point(0, 0), size=wx.Size(24, 24), style=0)
       
   917                     boxsizer.AddWindow(staticbitmap, 0, border=5, flag=wx.RIGHT)
       
   918                 else:
       
   919                     staticbitmap = wx.StaticBitmap(id=-1, bitmap=GenerateEmptyBitmap(24, 24),
       
   920                         name="%s_bitmap"%element_infos["name"], parent=parent,
       
   921                         pos=wx.Point(0, 0), size=wx.Size(24, 24), style=0)
       
   922                     boxsizer.AddWindow(staticbitmap, 0, border=5, flag=wx.RIGHT)
       
   923                 statictext = wx.StaticText(id=-1, label="%s:"%element_infos["name"], 
   954                 statictext = wx.StaticText(id=-1, label="%s:"%element_infos["name"], 
   924                     name="%s_label"%element_infos["name"], parent=parent, 
   955                     name="%s_label"%element_infos["name"], parent=parent, 
   925                     pos=wx.Point(0, 0), size=wx.Size(100, 17), style=0)
   956                     pos=wx.Point(0, 0), size=wx.Size(100, 17), style=0)
   926                 boxsizer.AddWindow(statictext, 0, border=4, flag=wx.TOP)
   957                 boxsizer.AddWindow(statictext, 0, border=4, flag=wx.TOP)
   927                 id = wx.NewId()
   958                 id = wx.NewId()
   951                 boxsizer = wx.BoxSizer(wx.HORIZONTAL)
   982                 boxsizer = wx.BoxSizer(wx.HORIZONTAL)
   952                 if first:
   983                 if first:
   953                     sizer.AddSizer(boxsizer, 0, border=5, flag=wx.GROW|wx.ALL)
   984                     sizer.AddSizer(boxsizer, 0, border=5, flag=wx.GROW|wx.ALL)
   954                 else:
   985                 else:
   955                     sizer.AddSizer(boxsizer, 0, border=5, flag=wx.GROW|wx.LEFT|wx.RIGHT|wx.BOTTOM)
   986                     sizer.AddSizer(boxsizer, 0, border=5, flag=wx.GROW|wx.LEFT|wx.RIGHT|wx.BOTTOM)
   956                 bitmappath = os.path.join("images", "%s.png"%element_infos["name"])
   987                 staticbitmap = GenStaticBitmap(ID=-1, bitmapname="%s.png"%element_infos["name"],
   957                 if os.path.isfile(bitmappath):
   988                     name="%s_bitmap"%element_infos["name"], parent=parent,
   958                     staticbitmap = wx.StaticBitmap(id=-1, bitmap=wx.Bitmap(bitmappath),
   989                     pos=wx.Point(0, 0), size=wx.Size(24, 24), style=0)
   959                         name="%s_bitmap"%element_infos["name"], parent=parent,
   990                 boxsizer.AddWindow(staticbitmap, 0, border=5, flag=wx.RIGHT)
   960                         pos=wx.Point(0, 0), size=wx.Size(24, 24), style=0)
       
   961                     boxsizer.AddWindow(staticbitmap, 0, border=5, flag=wx.RIGHT)
       
   962                 else:
       
   963                     staticbitmap = wx.StaticBitmap(id=-1, bitmap=GenerateEmptyBitmap(24, 24),
       
   964                         name="%s_bitmap"%element_infos["name"], parent=parent,
       
   965                         pos=wx.Point(0, 0), size=wx.Size(24, 24), style=0)
       
   966                     boxsizer.AddWindow(staticbitmap, 0, border=5, flag=wx.RIGHT)
       
   967 
   991 
   968                 statictext = wx.StaticText(id=-1, label="%s:"%element_infos["name"], 
   992                 statictext = wx.StaticText(id=-1, label="%s:"%element_infos["name"], 
   969                     name="%s_label"%element_infos["name"], parent=parent, 
   993                     name="%s_label"%element_infos["name"], parent=parent, 
   970                     pos=wx.Point(0, 0), size=wx.Size(100, 17), style=0)
   994                     pos=wx.Point(0, 0), size=wx.Size(100, 17), style=0)
   971                 boxsizer.AddWindow(statictext, 0, border=4, flag=wx.TOP)
   995                 boxsizer.AddWindow(statictext, 0, border=4, flag=wx.TOP)
  1102     
  1126     
  1103     def GetAddButtonFunction(self, plugin, window):
  1127     def GetAddButtonFunction(self, plugin, window):
  1104         def AddButtonFunction(event):
  1128         def AddButtonFunction(event):
  1105             if plugin and len(plugin.PlugChildsTypes) > 0:
  1129             if plugin and len(plugin.PlugChildsTypes) > 0:
  1106                 plugin_menu = wx.Menu(title='')
  1130                 plugin_menu = wx.Menu(title='')
  1107                 for name, XSDClass in plugin.PlugChildsTypes:
  1131                 for name, XSDClass, help in plugin.PlugChildsTypes:
  1108                     new_id = wx.NewId()
  1132                     new_id = wx.NewId()
  1109                     plugin_menu.Append(help='', id=new_id, kind=wx.ITEM_NORMAL, text=name)
  1133                     plugin_menu.Append(help=help, id=new_id, kind=wx.ITEM_NORMAL, text=name)
  1110                     self.Bind(wx.EVT_MENU, self._GetAddPluginFunction(name, plugin), id=new_id)
  1134                     self.Bind(wx.EVT_MENU, self._GetAddPluginFunction(name, plugin), id=new_id)
  1111                 window_pos = window.GetPosition()
  1135                 window_pos = window.GetPosition()
  1112                 wx.CallAfter(self.PLCConfig.PopupMenu, plugin_menu)
  1136                 wx.CallAfter(self.PLCConfig.PopupMenu, plugin_menu)
  1113             event.Skip()
  1137             event.Skip()
  1114         return AddButtonFunction
  1138         return AddButtonFunction