# -*- coding: utf-8 -*-

import wx

class Mote:
    def __init__(self,x,y,rad=6,ledS=5):

        self.x=x
        self.y=y
        self.gps=False
        
        self.rad=rad
        self.redOn=False
        self.yellowOn=False
        self.greenOn=False

        self.ledSize=ledS
        
        self.redX=x-(self.ledSize/2)
        self.redY=y-(self.ledSize)

        self.greenX=x-(self.ledSize)
        self.greenY=y

        self.yellowX=x
        self.yellowY=y


    def SetGPS(self,bool):
        self.gps=bool
        
    def DrawMote(self,dc):   
        dc.SetBackground(wx.Brush("white"))
        dc.Clear()     
#mote
        if self.gps:
            dc.SetBrush(wx.BLUE_BRUSH)
        else:
            dc.SetBrush(wx.BLACK_BRUSH)
        dc.DrawCircle(self.x,self.y,self.rad)
#leds
        if self.redOn:
            dc.SetBrush(wx.Brush("red"))
            dc.DrawRectangle(self.redX,self.redY,self.ledSize,self.ledSize)
        else:
            dc.SetBrush(wx.Brush("black"))
            dc.DrawRectangle(self.redX,self.redY,self.ledSize,self.ledSize)
        if self.greenOn:
            dc.SetBrush(wx.Brush("green"))
            dc.DrawRectangle(self.greenX,self.greenY,self.ledSize,self.ledSize)
        else:
            dc.SetBrush(wx.Brush("black"))
            dc.DrawRectangle(self.greenX,self.greenY,self.ledSize,self.ledSize)
        if self.yellowOn:
            dc.SetBrush(wx.Brush("yellow"))
            dc.DrawRectangle(self.yellowX,self.yellowY,self.ledSize,self.ledSize)
        else:
            dc.SetBrush(wx.Brush("black"))
            dc.DrawRectangle(self.yellowX,self.yellowY,self.ledSize,self.ledSize)


    def MoveXY(self,_x,_y):

#nuevas coordenadas
        self.x=_x
        self.y=_y

        self.redX=self.x-(self.ledSize/2)
        self.redY=self.y-self.ledSize

        self.greenX=self.x-(self.ledSize)
        self.greenY=self.y

        self.yellowX=self.x
        self.yellowY=self.y


    def GetX(self):
        return self.x

    def GetY(self):
        return self.y

    def SetX(self,_x):
        self.x=_x   

    def SetY(self,_y):
        self.y=_y 
        
    def GetRad(self):
        return self.rad

    def GetRedLed(self):
        return self.redOn

    def GetGreenLed(self):
        return self.greenOn

    def GetYellowLed(self):
        return self.yellowOn

    def TurnRedOn(self):
        self.redOn=True

    def TurnGreenOn(self):
        self.greenOn=True

    def TurnYellowOn(self):
        self.yellowOn=True
    
    def TurnRedOff(self):
        self.redOn=False

    def TurnGreenOff(self):
        self.greenOn=False

    def TurnYellowOff(self):
        self.yellowOn=False
        
        

class MainWindow(wx.Frame):
    def __init__(self,title):
        wx.Frame.__init__(self,None,wx.ID_ANY,title,size=(800,600))
                
        self.panel=wx.Panel(self,-1,size=(600,600))
        self.panel.SetBackgroundColour("White")
        self.Bind(wx.EVT_PAINT,self.OnPaint)
        
       
        redOffB=wx.Button(self,-1,"Apaga rojo")
        self.Bind(wx.EVT_BUTTON,self.OnRedOff,redOffB)
         
        greenOffB=wx.Button(self,-1,"Apaga verde")
        self.Bind(wx.EVT_BUTTON,self.OnGreenOff,greenOffB)
              
        yellowOffB=wx.Button(self,-1,"Apaga amarillo")
        self.Bind(wx.EVT_BUTTON,self.OnYellowOff,yellowOffB)

        redOnB=wx.Button(self,-1,"Enciende rojo")
        self.Bind(wx.EVT_BUTTON,self.OnRedOn,redOnB)

        greenOnB=wx.Button(self,-1,"Enciende verde")
        self.Bind(wx.EVT_BUTTON,self.OnGreenOn,greenOnB)        

        yellowOnB=wx.Button(self,-1,"Enciende amarillo")
        self.Bind(wx.EVT_BUTTON,self.OnYellowOn,yellowOnB)  

        moveB=wx.Button(self,-1,"Mueve mote")
        self.Bind(wx.EVT_BUTTON,self.OnMove,moveB)
        
        sizer=wx.BoxSizer()
        sizer.Add(self.panel)
        sizer.Add(redOnB)
        sizerV=wx.BoxSizer(orient=wx.VERTICAL)
        sizerV.Add(redOffB,flag=wx.ALIGN_LEFT)
        sizerV.Add(greenOffB,flag=wx.ALIGN_LEFT)
        sizerV.Add(yellowOffB,flag=wx.ALIGN_LEFT)
        sizerV.Add(redOnB,flag=wx.ALIGN_LEFT)
        sizerV.Add(greenOnB,flag=wx.ALIGN_LEFT)
        sizerV.Add(yellowOnB,flag=wx.ALIGN_LEFT)
        sizerV.Add(moveB,flag=wx.ALIGN_LEFT)       
        sizer.Add(sizerV)

        self.SetSizer(sizer)        
        self.Fit()

        self.mote=Mote(20,20)        
        self.InitBuffer()       

        self.Show(True)

       

    def InitBuffer(self): 
        self.buffer = wx.EmptyBitmap(600,600)
        dc = wx.BufferedDC(wx.ClientDC(self.panel), self.buffer)
        self.mote.DrawMote(dc)
        
            
    def OnPaint(self,event):
        dc = wx.BufferedPaintDC(self, self.buffer)
        event.Skip()
        

        
    def OnMove(self,event):
        self.mote.MoveXY(100,100)
        dc = wx.BufferedDC(wx.ClientDC(self.panel), self.buffer)
        self.mote.DrawMote(dc)

    def OnRedOff(self,event):
        self.mote.TurnRedOff()
        dc = wx.BufferedDC(wx.ClientDC(self.panel), self.buffer)
        self.mote.DrawMote(dc)

    def OnGreenOff(self,event):
        self.mote.TurnGreenOff()
        dc = wx.BufferedDC(wx.ClientDC(self.panel), self.buffer)
        self.mote.DrawMote(dc)

    def OnYellowOff(self,event):
        self.mote.TurnYellowOff()
        dc = wx.BufferedDC(wx.ClientDC(self.panel), self.buffer)
        self.mote.DrawMote(dc)        

    def OnRedOn(self,event):
        self.mote.TurnRedOn()
        dc = wx.BufferedDC(wx.ClientDC(self.panel), self.buffer)
        self.mote.DrawMote(dc)
        
    def OnGreenOn(self,event):
        self.mote.TurnGreenOn()
        dc = wx.BufferedDC(wx.ClientDC(self.panel), self.buffer)
        self.mote.DrawMote(dc)

    def OnYellowOn(self,event):
        self.mote.TurnYellowOn()
        dc = wx.BufferedDC(wx.ClientDC(self.panel), self.buffer)
        self.mote.DrawMote(dc)

if __name__=="__main__":
    app = wx.PySimpleApp()
    frame=MainWindow('Test')
    app.MainLoop()
