diff orpg/gametree/nodehandlers/map_miniature_nodehandler.py @ 0:4385a7d0efd1 grumpy-goblin

Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
author sirebral
date Tue, 14 Jul 2009 16:41:58 -0500
parents
children c54768cffbd4
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/orpg/gametree/nodehandlers/map_miniature_nodehandler.py	Tue Jul 14 16:41:58 2009 -0500
@@ -0,0 +1,140 @@
+# Copyright (C) 2000-2001 The OpenRPG Project
+#
+#        openrpg-dev@lists.sourceforge.net
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+# --
+#
+# File: map_miniature_nodehandler.py
+# Author: Andrew Bennett
+# Maintainer:
+# Version:
+#   $Id: map_miniature_nodehandler.py,v 1.17 2007/12/07 20:39:48 digitalxero Exp $
+#
+# Description: nodehandler for miniature images
+#
+
+#from nodehandlers.core import *
+from core import *
+from orpg.gametree import *
+from orpg.mapper.miniatures_msg import mini_msg
+from orpg.mapper.images import ImageHandler
+import urllib
+
+
+class map_miniature_handler(node_handler):
+
+    """ A node handler for miniatures
+        <nodehandler name='Elf-1' module='map_miniature_nodehandler' class='map_miniature_handler' >
+                <miniature id='' label='Elf-1' posx='' posy='' path='' ...  />
+        </nodehandler >
+    """
+
+
+    def __init__(self,xml_dom,tree_node):
+        node_handler.__init__(self,xml_dom,tree_node)
+        self.mapper = open_rpg.get_component("map")
+        self.session = open_rpg.get_component("session")
+        self.miniature_dom = self.master_dom.getElementsByTagName("miniature")
+        if self.miniature_dom:
+            self.miniature_dom = self.miniature_dom[0]   # convert to scalar
+
+    def get_scaled_bitmap(self,x,y):
+        my_mini_msg = mini_msg()
+        my_mini_msg.init_from_dom(self.miniature_dom)
+        bmp = None
+        path = my_mini_msg.get_prop("path")
+
+        if path:
+            path = urllib.unquote(path)
+            if ImageHandler.Cache.has_key(path):
+                bmp = ImageHandler.Cache[path]
+            else:
+                #bmp = ImageHandler.directLoad(path, 'miniature', id)
+                bmp = ImageHandler.directLoad(path)# Old Code TaS.
+
+            if bmp:
+                img = wx.ImageFromMime(ImageHandler.Cache[path][1], ImageHandler.Cache[path][2])
+                #img = wx.ImageFromBitmap(bmp)
+                scaled_img = img.Scale(x,y)
+                scaled_bmp = scaled_img.ConvertToBitmap()
+                scratch = scaled_img.ConvertToBitmap()
+                memDC = wx.MemoryDC()
+                memDC.BeginDrawing()
+                memDC.SelectObject(scaled_bmp)
+                memDC.SetBrush(wx.WHITE_BRUSH)
+                memDC.SetPen(wx.WHITE_PEN)
+                memDC.DrawRectangle(0,0,x,y)
+                memDC.SetPen(wx.NullPen)
+                memDC.SetBrush(wx.NullBrush)
+                memDC.DrawBitmap(scratch,0,0,1)
+                memDC.SelectObject(wx.NullBitmap)
+                memDC.EndDrawing()
+                del memDC
+                return scaled_bmp
+
+    def map_aware(self):
+        return 1
+
+    def get_miniature_XML(self):
+        my_mini_msg = mini_msg()
+        my_mini_msg.init_from_dom(self.miniature_dom)
+        my_mini_msg.init_prop("id",self.session.get_next_id())
+        label = self.master_dom.getAttribute("name")
+        my_mini_msg.init_prop("label",label)
+        new_xml = my_mini_msg.get_all_xml()
+        return new_xml
+
+    def get_to_map_XML(self):
+        new_xml = self.get_miniature_XML()
+        new_xml = str("<map action='update'><miniatures>" + new_xml + "</miniatures></map>")
+        return new_xml
+
+    def on_send_to_map(self,evt):
+        if isinstance(evt, wx.MouseEvent) and evt.LeftUp():# as opposed to a menu event
+            dc = wx.ClientDC(self.mapper.canvas)
+            self.mapper.canvas.PrepareDC(dc)
+            grid = self.mapper.canvas.layers['grid']
+            dc.SetUserScale(grid.mapscale, grid.mapscale)
+            pos = evt.GetLogicalPosition(dc)
+            try:
+                align = int(self.miniature_dom.getAttribute("align"))
+                width = int(self.miniature_dom.getAttribute("width"))
+                height = int(self.miniature_dom.getAttribute("height"))
+                pos = grid.get_snapped_to_pos(pos, align, width, height)
+            except:
+                pass
+            self.miniature_dom.setAttribute("posx", str(pos.x))
+            self.miniature_dom.setAttribute("posy", str(pos.y))
+        new_xml = self.get_to_map_XML()
+        if (self.session.my_role() != self.session.ROLE_GM) and (self.session.my_role() != self.session.ROLE_PLAYER):
+            open_rpg.get_component("chat").InfoPost("You must be either a player or GM to use the miniature Layer")
+            return
+
+        if new_xml:
+            self.mapper.new_data(new_xml)
+            self.session.send(new_xml)
+        else:
+            print "problem converting old mini xml to new mini xml"
+
+    def about(self):
+        return "Miniature node by Andrew Bennett"
+
+    def tohtml(self):
+        html_str = "<table><tr><td>"
+        html_str += "<center><img src='" + self.miniature_dom.getAttribute("path") + "'>"
+        html_str += "</center></td></tr>\n"
+        html_str += "<tr><td><center>" + self.master_dom.getAttribute("name") + "</center></td></tr></table>"
+        return html_str