Beremiz.py
changeset 203 cb9901076a21
parent 201 520d2416ff4d
child 214 b4531bf9bdb3
equal deleted inserted replaced
202:cd81a7a6e55c 203:cb9901076a21
   355         self.Log = LogPseudoFile(self.LogConsole)
   355         self.Log = LogPseudoFile(self.LogConsole)
   356         
   356         
   357         # Add beremiz's icon in top left corner of the frame
   357         # Add beremiz's icon in top left corner of the frame
   358         self.SetIcon(wx.Icon(os.path.join(CWD, "images", "brz.ico"), wx.BITMAP_TYPE_ICO))
   358         self.SetIcon(wx.Icon(os.path.join(CWD, "images", "brz.ico"), wx.BITMAP_TYPE_ICO))
   359         
   359         
   360         self.PluginRoot = PluginsRoot(self)
   360         self.PluginRoot = PluginsRoot(self, self.Log)
   361         self.DisableEvents = False
   361         self.DisableEvents = False
   362         
   362         
   363         self.PluginInfos = {}
   363         self.PluginInfos = {}
   364         
   364         
   365         if projectOpen:
   365         if projectOpen:
   366             self.PluginRoot.LoadProject(projectOpen, self.Log)
   366             self.PluginRoot.LoadProject(projectOpen)
   367             self.RefreshPLCParams()
   367             self.RefreshPLCParams()
   368             self.RefreshPluginTree()
   368             self.RefreshPluginTree()
   369         
   369         
   370         self.RefreshMainMenu()
   370         self.RefreshMainMenu()
   371 
   371 
   570         if horizontal:
   570         if horizontal:
   571             msizer = wx.FlexGridSizer(cols=len(plugin.PluginMethods))
   571             msizer = wx.FlexGridSizer(cols=len(plugin.PluginMethods))
   572         else:
   572         else:
   573             msizer = wx.FlexGridSizer(cols=1)
   573             msizer = wx.FlexGridSizer(cols=1)
   574         for plugin_method in plugin.PluginMethods:
   574         for plugin_method in plugin.PluginMethods:
   575             if "method" in plugin_method:
   575             if "method" in plugin_method and plugin_method.get("shown",True):
   576                 id = wx.NewId()
   576                 id = wx.NewId()
   577                 button = GenBitmapTextButton(id=id, parent=parent,
   577                 button = GenBitmapTextButton(id=id, parent=parent,
   578                     bitmap=wx.Bitmap(os.path.join(CWD, "%s.png"%plugin_method.get("bitmap", os.path.join("images", "Unknown")))), label=plugin_method["name"], 
   578                     bitmap=wx.Bitmap(os.path.join(CWD, "%s.png"%plugin_method.get("bitmap", os.path.join("images", "Unknown")))), label=plugin_method["name"], 
   579                     name=plugin_method["name"], pos=wx.DefaultPosition, style=wx.NO_BORDER)
   579                     name=plugin_method["name"], pos=wx.DefaultPosition, style=wx.NO_BORDER)
   580                 button.SetToolTipString(plugin_method["tooltip"])
   580                 button.SetToolTipString(plugin_method["tooltip"])
   673         enablebutton.SetToolTipString("Enable/Disable this plugin")
   673         enablebutton.SetToolTipString("Enable/Disable this plugin")
   674         make_genbitmaptogglebutton_flat(enablebutton)
   674         make_genbitmaptogglebutton_flat(enablebutton)
   675         enablebutton.SetBitmapSelected(wx.Bitmap(os.path.join(CWD, 'images', 'Enabled.png')))
   675         enablebutton.SetBitmapSelected(wx.Bitmap(os.path.join(CWD, 'images', 'Enabled.png')))
   676         enablebutton.SetToggle(plugin.MandatoryParams[1].getEnabled())
   676         enablebutton.SetToggle(plugin.MandatoryParams[1].getEnabled())
   677         def toggleenablebutton(event):
   677         def toggleenablebutton(event):
   678             res = self.SetPluginParamsAttribute(plugin, "BaseParams.Enabled", enablebutton.GetToggle(), self.Log)
   678             res = self.SetPluginParamsAttribute(plugin, "BaseParams.Enabled", enablebutton.GetToggle())
   679             enablebutton.SetToggle(res)
   679             enablebutton.SetToggle(res)
   680             event.Skip()
   680             event.Skip()
   681         enablebutton.Bind(wx.EVT_BUTTON, toggleenablebutton, id=enablebutton_id)
   681         enablebutton.Bind(wx.EVT_BUTTON, toggleenablebutton, id=enablebutton_id)
   682         rolesizer.AddWindow(enablebutton, 0, border=0, flag=wx.RIGHT|wx.ALIGN_CENTER_VERTICAL)
   682         rolesizer.AddWindow(enablebutton, 0, border=0, flag=wx.RIGHT|wx.ALIGN_CENTER_VERTICAL)
   683 
   683 
   893         self.RefreshPLCParams()
   893         self.RefreshPLCParams()
   894         self.RefreshPluginTree()
   894         self.RefreshPluginTree()
   895         
   895         
   896     def GetItemChannelChangedFunction(self, plugin, value):
   896     def GetItemChannelChangedFunction(self, plugin, value):
   897         def OnPluginTreeItemChannelChanged(event):
   897         def OnPluginTreeItemChannelChanged(event):
   898             res = self.SetPluginParamsAttribute(plugin, "BaseParams.IEC_Channel", value, self.Log)
   898             res = self.SetPluginParamsAttribute(plugin, "BaseParams.IEC_Channel", value)
   899             event.Skip()
   899             event.Skip()
   900         return OnPluginTreeItemChannelChanged
   900         return OnPluginTreeItemChannelChanged
   901     
   901     
   902     def _GetAddPluginFunction(self, name, plugin):
   902     def _GetAddPluginFunction(self, name, plugin):
   903         def OnPluginMenu(event):
   903         def OnPluginMenu(event):
   921         """ Generate the callbackfunc for a given plugin method"""
   921         """ Generate the callbackfunc for a given plugin method"""
   922         def OnButtonClick(event):
   922         def OnButtonClick(event):
   923             # Disable button to prevent re-entrant call 
   923             # Disable button to prevent re-entrant call 
   924             event.GetEventObject().Disable()
   924             event.GetEventObject().Disable()
   925             # Call
   925             # Call
   926             getattr(plugin,method)(self.Log)
   926             getattr(plugin,method)()
   927             # Re-enable button 
   927             # Re-enable button 
   928             event.GetEventObject().Enable()
   928             event.GetEventObject().Enable()
   929             # Trigger refresh on Idle
   929             # Trigger refresh on Idle
   930             wx.CallAfter(self.RefreshAll)
   930             wx.CallAfter(self.RefreshAll)
   931             event.Skip()
   931             event.Skip()
   932         return OnButtonClick
   932         return OnButtonClick
   933     
   933     
   934     def GetChoiceCallBackFunction(self, choicectrl, plugin, path):
   934     def GetChoiceCallBackFunction(self, choicectrl, plugin, path):
   935         def OnChoiceChanged(event):
   935         def OnChoiceChanged(event):
   936             res = self.SetPluginParamsAttribute(plugin, path, choicectrl.GetStringSelection(), self.Log)
   936             res = self.SetPluginParamsAttribute(plugin, path, choicectrl.GetStringSelection())
   937             choicectrl.SetStringSelection(res)
   937             choicectrl.SetStringSelection(res)
   938             event.Skip()
   938             event.Skip()
   939         return OnChoiceChanged
   939         return OnChoiceChanged
   940     
   940     
   941     def GetChoiceContentCallBackFunction(self, choicectrl, staticboxsizer, plugin, path):
   941     def GetChoiceContentCallBackFunction(self, choicectrl, staticboxsizer, plugin, path):
   942         def OnChoiceContentChanged(event):
   942         def OnChoiceContentChanged(event):
   943             res = self.SetPluginParamsAttribute(plugin, path, choicectrl.GetStringSelection(), self.Log)
   943             res = self.SetPluginParamsAttribute(plugin, path, choicectrl.GetStringSelection())
   944             if wx.VERSION < (2, 8, 0):
   944             if wx.VERSION < (2, 8, 0):
   945                 self.ParamsPanel.Freeze()
   945                 self.ParamsPanel.Freeze()
   946                 choicectrl.SetStringSelection(res)
   946                 choicectrl.SetStringSelection(res)
   947                 infos = self.PluginRoot.GetParamsAttributes(path)
   947                 infos = self.PluginRoot.GetParamsAttributes(path)
   948                 staticbox = staticboxsizer.GetStaticBox()
   948                 staticbox = staticboxsizer.GetStaticBox()
   956             event.Skip()
   956             event.Skip()
   957         return OnChoiceContentChanged
   957         return OnChoiceContentChanged
   958     
   958     
   959     def GetTextCtrlCallBackFunction(self, textctrl, plugin, path):
   959     def GetTextCtrlCallBackFunction(self, textctrl, plugin, path):
   960         def OnTextCtrlChanged(event):
   960         def OnTextCtrlChanged(event):
   961             res = self.SetPluginParamsAttribute(plugin, path, textctrl.GetValue(), self.Log)
   961             res = self.SetPluginParamsAttribute(plugin, path, textctrl.GetValue())
   962             textctrl.SetValue(res)
   962             textctrl.SetValue(res)
   963             event.Skip()
   963             event.Skip()
   964         return OnTextCtrlChanged
   964         return OnTextCtrlChanged
   965     
   965     
   966     def GetCheckBoxCallBackFunction(self, chkbx, plugin, path):
   966     def GetCheckBoxCallBackFunction(self, chkbx, plugin, path):
   967         def OnCheckBoxChanged(event):
   967         def OnCheckBoxChanged(event):
   968             res = self.SetPluginParamsAttribute(plugin, path, chkbx.IsChecked(), self.Log)
   968             res = self.SetPluginParamsAttribute(plugin, path, chkbx.IsChecked())
   969             chkbx.SetValue(res)
   969             chkbx.SetValue(res)
   970             event.Skip()
   970             event.Skip()
   971         return OnCheckBoxChanged
   971         return OnCheckBoxChanged
   972     
   972     
   973     def ClearSizer(self, sizer):
   973     def ClearSizer(self, sizer):
  1110             defaultpath = os.getcwd()
  1110             defaultpath = os.getcwd()
  1111         dialog = wx.DirDialog(self , "Choose a project", defaultpath, wx.DD_NEW_DIR_BUTTON)
  1111         dialog = wx.DirDialog(self , "Choose a project", defaultpath, wx.DD_NEW_DIR_BUTTON)
  1112         if dialog.ShowModal() == wx.ID_OK:
  1112         if dialog.ShowModal() == wx.ID_OK:
  1113             projectpath = dialog.GetPath()
  1113             projectpath = dialog.GetPath()
  1114             if os.path.isdir(projectpath):
  1114             if os.path.isdir(projectpath):
  1115                 result = self.PluginRoot.LoadProject(projectpath, self.Log)
  1115                 result = self.PluginRoot.LoadProject(projectpath)
  1116                 if not result:
  1116                 if not result:
  1117                     self.RefreshPLCParams()
  1117                     self.RefreshPLCParams()
  1118                     self.RefreshPluginTree()
  1118                     self.RefreshPluginTree()
  1119                     self.RefreshMainMenu()
  1119                     self.RefreshMainMenu()
  1120                 else:
  1120                 else:
  1214     
  1214     
  1215     def AddPlugin(self, PluginType, plugin):
  1215     def AddPlugin(self, PluginType, plugin):
  1216         dialog = wx.TextEntryDialog(self, "Please enter a name for plugin:", "Add Plugin", "", wx.OK|wx.CANCEL)
  1216         dialog = wx.TextEntryDialog(self, "Please enter a name for plugin:", "Add Plugin", "", wx.OK|wx.CANCEL)
  1217         if dialog.ShowModal() == wx.ID_OK:
  1217         if dialog.ShowModal() == wx.ID_OK:
  1218             PluginName = dialog.GetValue()
  1218             PluginName = dialog.GetValue()
  1219             plugin.PlugAddChild(PluginName, PluginType, self.Log)
  1219             plugin.PlugAddChild(PluginName, PluginType)
  1220             self.RefreshPluginTree()
  1220             self.RefreshPluginTree()
  1221         dialog.Destroy()
  1221         dialog.Destroy()
  1222     
  1222     
  1223     def DeletePlugin(self, plugin):
  1223     def DeletePlugin(self, plugin):
  1224         dialog = wx.MessageDialog(self, "Really delete plugin ?", "Remove plugin", wx.YES_NO|wx.NO_DEFAULT)
  1224         dialog = wx.MessageDialog(self, "Really delete plugin ?", "Remove plugin", wx.YES_NO|wx.NO_DEFAULT)