tests/wxHMI/HMI@wxglade_hmi/pyfile.xml
author Edouard Tisserant
Thu, 18 Jun 2015 11:36:35 +0200
changeset 1461 954d1f42d42d
child 1462 9ee3a2dea7e8
permissions -rw-r--r--
Added wxHMI test
<?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 Image
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 UpdatePositions(self, event):

    # TODO : uncomment
    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 GUIMessage(message):
    try:
       wxglade_hmi.window_1.Message = message
    except:
       # sometime get some wxpydeadobject
       pass

def SetNegLimits(*args):
    wxglade_hmi.window_1.NegLimits = args

def SetDisk(*args):
    wxglade_hmi.window_1.Disk = args
    GUIMessage("DiskOK")

]]></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>