'''
Select coordinates and draw with mouse selection
'''

# import wxPython
import wx
# import the floatcanvas module
import floatcanvas2 as fc

class Drawer(object):
    def __init__(self, canvas):
        self.point = None
        self.canvas = canvas
        # Event handlers
        self.canvas.subscribe( self.OnLeftDown, 'input.left_down' )
        # Show image
        img = wx.Image( 'floatcanvas2/data/toucan.png' )
        self.canvas.create( 'Circle', 300, pos = (0,0), look=('red', 'red') )
        self.canvas.create( 'Bitmap', img, pos = (0,0), look = ('white','white') )
        self.canvas.zoomToExtents()

    def OnLeftDown(self, evt):
        pos = evt.coords.world
        self.point = (pos[0], pos[1])
        self.drawNode = self.canvas.create('Circle', 10, pos=self.point, look=('black', 'white'), where = 'front')
        self.drawNode.subscribe( self.OnRightDown, 'right_down' )
        print 'Point: ', self.point
        print self.drawNode

    def OnRightDown(self, evt):
        self.canvas.removeChild( evt.node )

class Frame(wx.Frame):
    def __init__(self, parent):
        wx.Frame.__init__(self, parent, -1, title="Xc3", size=(800,600))

        #Status bar
        self.statusbar = self.CreateStatusBar()
        
        #MenuBar
        self.menuBar = wx.MenuBar()
        file_menu = wx.Menu()
        item = file_menu.Append(-1, "&Exit")
        self.Bind(wx.EVT_MENU, self.OnExit, item)
        self.menuBar.Append(file_menu, "&File")
        self.SetMenuBar(self.menuBar)

        #The canvas
        canvas = fc.NavCanvas( self, backgroundColor = 'white' )
        drawer = Drawer(canvas)

        #Event handlers
        ##Neither of these event bindings work after toolbar (guimode) is used, why?:
        canvas.subscribe( self.OnMotion, 'raw_input.move' )
        #canvas.canvasPanel.Bind(wx.EVT_MOTION, self.OnMotion)

    def OnMotion(self, event):
        #print self.canvas.events.
        self.statusbar.SetStatusText("Coordinates | World: %s - Screen: %s - Local: %s" % ( event.coords.world, event.coords.screen, event.coords.local ), 0)

    def OnExit(self,event):
        self.Close(True)
        #self.Destroy()


class App(wx.App):
    """Application class"""
    def OnInit(self):
        self.frame = Frame(None)
        self.frame.Show(True)
        self.SetTopWindow(self.frame)
        return True

def main():
    app = App(redirect = False)
    app.MainLoop()

if __name__ == '__main__':
    main()
