beremiz

fix issue, then it wasn't possible to remove functional blocks from
project using right click and popup menu.

The problem is that, PopupMenu was called using IDEFrame object and as
a result item in ProjectTree loosed focus and focus went to IDEFrame.
Therefore later functions couldn't detect which item in ProjectTree
was selected.
<?xml version='1.0' encoding='utf-8'?>
<PyFile xmlns:xhtml="http://www.w3.org/1999/xhtml">
<variables>
<variable name="Power_ON" type="BOOL"/>
<variable name="Power_OFF" type="BOOL"/>
<variable name="DrawTest" type="BOOL"/>
<variable name="DrawLogo" type="BOOL"/>
<variable name="DrawEscher" type="BOOL"/>
<variable name="Detect_Circle" type="BOOL"/>
<variable name="XaxisPos" type="INT"/>
<variable name="YaxisPos" type="INT"/>
<variable name="ZaxisPos" type="INT"/>
<variable name="TaxisPos" type="INT"/>
<variable name="XaxisMinus" type="BOOL"/>
<variable name="YaxisMinus" type="BOOL"/>
<variable name="ZaxisMinus" type="BOOL"/>
<variable name="TaxisMinus" type="BOOL"/>
<variable name="XaxisPlus" type="BOOL"/>
<variable name="YaxisPlus" type="BOOL"/>
<variable name="ZaxisPlus" type="BOOL"/>
<variable name="TaxisPlus" type="BOOL"/>
</variables>
<globals>
<xhtml:p><![CDATA[
import ctypes
import wx, sys
AxisList = ["X","Y","Z","T"]
PwrButtons = ['Power_ON',
'Power_OFF']
ActionButtons = ['Detect_Circle',
'DrawTest',
'DrawLogo',
'DrawEscher']
class ThreeDee(wx.StaticText):
def __init__(self, *args, **kwargs):
self.initialized = False
kwargs["style"] = wx.ALIGN_CENTRE_HORIZONTAL
super(ThreeDee, self).__init__(*args, **kwargs)
self.SetFont(wx.Font(24, wx.SWISS, wx.NORMAL, wx.BOLD))
self.positions = [0.]*4
self.Message = None
self.NegLimits = None
self.Disk = None
def UpdatePositions(self, positions):
# get globals from PLC
self.positions = positions
self.SetLabel(
((self.Message +'\n\n') if self.Message else '' )+
" ".join(["%s %+.2f"%(axis,self.positions[i])
for i,axis in enumerate(AxisList)]))
def MakeButtonFunc(window, sizer, btname):
def ButtonDown(event):
setattr(PLCGlobals,btname,1)
event.Skip()
def ButtonUp(event):
setattr(PLCGlobals,btname,0)
event.Skip()
obj = wx.BitmapButton(window, -1, wx.Bitmap('%s.png'%btname))
sizer.Add(obj, 2, wx.EXPAND, 0)
obj.Bind(wx.EVT_LEFT_DOWN, ButtonDown)
obj.Bind(wx.EVT_LEFT_UP, ButtonUp)
return obj
def UpdPos(self):
positions = [getattr(PLCGlobals,axname+"axisPos") for axname in AxisList]
self.window_1.UpdatePositions(positions)
Class_wxglade_hmi.UpdPos = UpdPos
#def UpdatePositions(self, event):
#
# positions = [getattr(PLCGlobals,axname+"axisPos") for axname in AxisList]
#
# self.window_1.UpdatePositions(positions)
#
# event.Skip()
#Class_wxglade_hmi.UpdatePositions = UpdatePositions
initorig = Class_wxglade_hmi.__init__
def Init(self,*args,**kargs):
initorig(self,*args,**kargs)
sizer = self.GetSizer().GetItem(1).GetSizer().GetItem(0).GetSizer()
self.main_buttons = map(
lambda btname: MakeButtonFunc(self, sizer, btname), PwrButtons)
sizer = self.GetSizer().GetItem(1).GetSizer().GetItem(1).GetSizer()
self.main_buttons = map(
lambda btname: MakeButtonFunc(self, sizer, btname), ActionButtons)
self.axis_buttons = map(
lambda axis:( MakeButtonFunc(self, sizer, axis+"axisMinus"),
MakeButtonFunc(self, sizer, axis+"axisPlus")),
AxisList)
# self.timer = wx.Timer(self, -1)
# self.Bind(wx.EVT_TIMER, self.UpdatePositions, self.timer)
# self.ShowFullScreen(True,wx.FULLSCREEN_ALL)
# wx.CallAfter(self.timer.Start,200)
Class_wxglade_hmi.__init__ = Init
def SetPLCGlobalVar(self, evt):
tglbtname = evt.GetEventObject().GetName()
setattr(PLCGlobals, tglbtname, evt.GetEventObject().GetValue())
]]></xhtml:p>
</globals>
<init>
<xhtml:p><![CDATA[
]]></xhtml:p>
</init>
<cleanup>
<xhtml:p><![CDATA[
]]></xhtml:p>
</cleanup>
<start>
<xhtml:p><![CDATA[
]]></xhtml:p>
</start>
<stop>
<xhtml:p><![CDATA[
]]></xhtml:p>
</stop>
</PyFile>