Beispiel #1
0
class LocalMapFrame(wx.Frame):
    def __init__(self, parent, ms, map_name, id=wx.ID_ANY,
                 pos=wx.DefaultPosition,
                 size=(512,512), style=wx.DEFAULT_FRAME_STYLE):

        title = map_name
        self.map_name = map_name
        wx.Frame.__init__(self, parent, id, title, pos, size, style)
        wx.GetApp().local_map_windows[map_name] = self

        self.ms = ms
        self.ms = MapService()

        self.wnd = LocalMapWindow(self, self.ms, map_name)
        self.wnd.SetSize(self.GetSize())

        self.status_bar = wx.StatusBar(self)
        self.SetStatusBar(self.status_bar)

        self.SetSize((size[0], size[1] + self.status_bar.GetSize()[1]))

        self.wnd.Bind(wx.EVT_MOUSE_EVENTS, self.OnMouse)

    def OnMouse(self, event):
        #~ if not event.LeftDown() and not event.RightDown():
            #~ return
        #~ log.debug("OnMouse(%s, %s)" % (event.GetX(), event.GetY()))

        if event.ButtonDClick():
            log.debug("Close!")
            wx.GetApp().local_map_windows.pop(self.map_name)
            self.Close()

        hit = self.wnd.HitTest(event.GetX(), event.GetY())
        if hit:
            hit = hit.door
            self.status_bar.SetStatusText(str(hit), 0)
        else:
            self.status_bar.SetStatusText("", 0)

        if hit and event.LeftDown():
            log.debug("hit: %s" % hit)
            other_side = self.ms.other_side(hit)
            log.debug("other_side: %s" % other_side)

            if other_side.map_name not in wx.GetApp().local_map_windows:
                log.debug("other_side.map_name: %s" % other_side.map_name)
                win =  LocalMapFrame(None, self.ms, other_side.map_name)
                win.Show()

        if not hit and event.LeftDown():
            map_size = self.ms.map_size(self.map_name)
            zoom = map_size[0] / 512.
            loc = (int(event.GetX() * zoom),
                   map_size[1] - int(event.GetY() * zoom))
            log.debug("OnMouse(%s, %s) -> (%s, %s)" % (event.GetX(),
                                                       event.GetY(),
                                                       loc[0],
                                                       loc[1]))
            wx.GetApp().SetNavTo(Location(self.map_name, loc))