import wx
from wx.lib.floatcanvas import FloatCanvas as FC

print wx.version()


class MainFrame(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, size=(800, 600))
        self.objectsAndIds = {}
        #self.toolbar = wx.Panel(self, id=self.GetNewId("self.toolbar"), style=wx.BORDER_DOUBLE)
        self.CreateStatusBar()
        self.CanvasPanel = self.CreateCanvasPanel(self)
        self.Canvas.Bind(FC.EVT_MOTION, self.OnMove)
        self.Canvas.Bind(wx.EVT_LEFT_UP, self.OnLeftUp)
        
        box = wx.BoxSizer(wx.VERTICAL)
        #box.Add(self.toolbar, 1, wx.EXPAND)
        box.Add(self.CanvasPanel, 1, wx.EXPAND)
        self.SetSizer(box)

        self.Initialize()
        self.OnDraw()
#        self.Canvas.ZoomToBB()
        self.Centre()

    def Initialize(self):
        """
        Initialize all the variables
        """
        self.segments = []
        self.newDirection = False
        self.lastDirection = False

    def OnLeftUp(self, evt):
        self.segments = [[[0, 0], [50, 50]]]
        self.OnDraw()
#        Canvas = self.Canvas
#        foo = evt.GetPosition()
        
    def OnDraw(self):
        print 'OnDraw'
        Canvas = self.Canvas
     
        if len(self.segments) > 0:
            for segment in self.segments:
                lineWorldCoord = [Canvas.PixelToWorld(segment[0]),
                                  Canvas.PixelToWorld(segment[1])]
                print segment
                print lineWorldCoord
                Canvas.AddLine(Canvas.PixelToWorld(lineWorldCoord), LineColor = "Cyan")
                Canvas.AddLine(lineWorldCoord, LineColor = "blue", LineWidth=5)
        Canvas.Draw()

        import pprint
        pprint.pprint(Canvas._DrawList)
        

    def GetNewId(self, object):
        id = wx.NewId()
        self.objectsAndIds[object] = id
        return id

    def CreateCanvasPanel(self, parent):
        panel = wx.Panel(parent, id=self.GetNewId("self.CanvasPanel"))
        panel.SetBackgroundColour("pink")
        self.Canvas = FC.FloatCanvas(panel, BackgroundColor = "Black")
        self.CanvasBox = wx.BoxSizer(wx.VERTICAL)
        self.CanvasBox.Add(self.Canvas, 1, wx.EXPAND)
        panel.SetSizer(self.CanvasBox)
        return panel

    def OnMove(self, evt):
        """
        Updates the status bar
        """
        Canvas = self.Canvas
        worldCoord = evt.Coords
        pixelCoords = Canvas.WorldToPixel(worldCoord)
        self.SetStatusText("%.2f, %.2f"%tuple(worldCoord))

class App(wx.App):
    def OnInit(self):
        frame = MainFrame(None, -1, "test")
        frame.Show(True)
        return True

if __name__ == "__main__":
    app = App(redirect=False)

    #import wx.lib.inspection
    #wx.lib.inspection.InspectionTool().Show()
    
    app.MainLoop()

    
    
