Beremiz_service.py
changeset 290 3bd617ae7a05
parent 271 ea7928fd07da
child 294 39b3d4a2195b
--- a/Beremiz_service.py	Fri Jan 09 17:08:31 2009 +0100
+++ b/Beremiz_service.py	Wed Jan 14 16:41:14 2009 +0100
@@ -215,6 +215,7 @@
                     message.Destroy()
                     return
             self.EndModal(wx.ID_OK)
+            event.Skip()
         
         def GetValue(self):
             return self.GetSizer().GetItem(1).GetWindow().GetValue()
@@ -222,21 +223,24 @@
         def SetTests(self, tests):
             self.Tests = tests
             
-    class DemoTaskBarIcon(wx.TaskBarIcon):
+    class BeremizTaskBarIcon(wx.TaskBarIcon):
         TBMENU_CHANGE_NAME = wx.NewId()
         TBMENU_CHANGE_PORT = wx.NewId()
         TBMENU_CHANGE_INTERFACE = wx.NewId()
+        TBMENU_LIVE_SHELL = wx.NewId()
         TBMENU_CHANGE_WD = wx.NewId()
         TBMENU_QUIT = wx.NewId()
         
         def __init__(self, pyroserver):
             wx.TaskBarIcon.__init__(self)
+            self.pyroserver = pyroserver
             # Set the image
             self.UpdateIcon(None)
     
             # bind some events
             self.Bind(wx.EVT_MENU, self.OnTaskBarChangeName, id=self.TBMENU_CHANGE_NAME)
             self.Bind(wx.EVT_MENU, self.OnTaskBarChangeInterface, id=self.TBMENU_CHANGE_INTERFACE)
+            self.Bind(wx.EVT_MENU, self.OnTaskBarLiveShell, id=self.TBMENU_LIVE_SHELL)
             self.Bind(wx.EVT_MENU, self.OnTaskBarChangePort, id=self.TBMENU_CHANGE_PORT)
             self.Bind(wx.EVT_MENU, self.OnTaskBarChangeWorkingDir, id=self.TBMENU_CHANGE_WD)
             self.Bind(wx.EVT_MENU, self.OnTaskBarQuit, id=self.TBMENU_QUIT)
@@ -251,6 +255,7 @@
             menu = wx.Menu()
             menu.Append(self.TBMENU_CHANGE_NAME, "Change Name")
             menu.Append(self.TBMENU_CHANGE_INTERFACE, "Change IP of interface to bind")
+            menu.Append(self.TBMENU_LIVE_SHELL, "Launch a live Python shell")
             menu.Append(self.TBMENU_CHANGE_PORT, "Change Port Number")
             menu.AppendSeparator()
             menu.Append(self.TBMENU_CHANGE_WD, "Change working directory")
@@ -276,34 +281,47 @@
                            ( lambda ip :len([x for x in ip.split(".") if 0 <= int(x) <= 255]) == 4, "Ip is not valid!")
                            ])
             if dlg.ShowModal() == wx.ID_OK:
-                pyroserver.ip = dlg.GetValue()
-                pyroserver.Stop()
+                self.pyroserver.ip = dlg.GetValue()
+                self.pyroserver.Stop()
+            evt.Skip()
                 
         def OnTaskBarChangePort(self,evt):
             dlg = ParamsEntryDialog(None, "Enter a port number ", defaultValue=str(pyroserver.port))
             dlg.SetTests([(UnicodeType.isdigit, "Port number must be an integer!"), (lambda port : 0 <= int(port) <= 65535 , "Port number must be 0 <= port <= 65535!")])
             if dlg.ShowModal() == wx.ID_OK:
-                pyroserver.port = int(dlg.GetValue())
-                pyroserver.Stop()
-                
+                self.pyroserver.port = int(dlg.GetValue())
+                self.pyroserver.Stop()
+            evt.Skip()
         
         def OnTaskBarChangeWorkingDir(self,evt):
             dlg = wx.DirDialog(None, "Choose a working directory ", pyroserver.workdir, wx.DD_NEW_DIR_BUTTON)
             if dlg.ShowModal() == wx.ID_OK:
-                pyroserver.workdir = dlg.GetPath()
-                pyroserver.Stop()
+                self.pyroserver.workdir = dlg.GetPath()
+                self.pyroserver.Stop()
+            evt.Skip()
                 
         def OnTaskBarChangeName(self,evt):
             dlg = ParamsEntryDialog(None, "Enter a name ", defaultValue=pyroserver.name)
             dlg.SetTests([(lambda name : len(name) is not 0 , "Name must not be null!")])
             if dlg.ShowModal() == wx.ID_OK:
-                pyroserver.name = dlg.GetValue()
-                pyroserver.Restart()
-    
+                self.pyroserver.name = dlg.GetValue()
+                self.pyroserver.Restart()
+            evt.Skip()
+
+        def OnTaskBarLiveShell(self,evt):
+            if self.pyroserver.plcobj is not None and self.pyroserver.plcobj.python_threads_vars is not None:
+                from wx import py
+                frame = py.shell.ShellFrame(locals=self.pyroserver.plcobj.python_threads_vars)
+                frame.Show()
+            else:
+                wx.MessageBox("No runnning PLC","Error")
+            evt.Skip()
+
         def OnTaskBarQuit(self,evt):
             pyroserver.Quit()
             self.RemoveIcon()
             wx.GetApp().ExitMainLoop()
+            evt.Skip()
             
         def UpdateIcon(self, plcstatus):
             if plcstatus is "Started" :
@@ -376,7 +394,7 @@
 
 if havewx:
     app=wx.App(redirect=False)
-    taskbar_instance = DemoTaskBarIcon(pyroserver)
+    taskbar_instance = BeremizTaskBarIcon(pyroserver)
     def statuschange(status):
         wx.CallAfter(taskbar_instance.UpdateIcon,status)
     pyro_thread=Thread(target=pyroserver.Loop, args=[statuschange])