Mercurial > traipse_dev
diff orpg/map/_text.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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orpg/map/_text.py Tue Jul 14 16:41:58 2009 -0500 @@ -0,0 +1,161 @@ +from math import sqrt + +import wx + +import orpg.dirpath +from orpg.orpgCore import * + +from _object import MapObject + +class MapText(MapObject): + def __init__(self, canvas, start=wx.Point(0,0), text='', size=12, weight=wx.NORMAL, style=wx.NORMAL, color="#000000"): + MapObject.__init__(self, canvas=canvas) + self.start = start + self.color = color + self.text = text + self.weight = weight + self.style = style + self.size = size + + r, g, b = self.RGBHex.rgb_tuple(self.color) + self.hcolor = self.RGBHex.hexstring(r^255, g^255, b^255) + + self.id = 'text-' + self.canvas.GetNewObjectId() + + + def Draw(self, dc): + if not self.highlighed: + c = self.color + else: + c = self.hcolor + + font = wx.Font(self.size, wx.DEFAULT, self.weight, self.style) + dc.SetFont(font, c) + w, h = dc.GetTextExtent(self.text) + + + if self.IsShown(): + dc.DrawText(self.text, self.start.x-(w/2), self.start.y-(h/2)) + elif self.canvas.toolWnd.gmToolBar.IsShown(): + r, g, b = self.RGBHex.rgb_tuple(c) + dc.SetFont(font, wx.Color(r, g, b, 40)) + dc.DrawText(self.text, self.start.x-(w/2), self.start.y-(h/2)) + + + if self.selected: + self.DrawSelection(dc) + + def DrawSelection(self, dc): + w, h = dc.GetTextExtent(self.text) + dc.SetBrush(wx.GREEN_BRUSH) + dc.SetPen(wx.GREEN_PEN) + path = dc.CreatePath() + + path.AddRectangle(self.start.x-((w/2)+1), self.start.y-((h/2)+1), 5, 5) + path.AddRectangle(self.start.x-((w/2)+1), self.start.y+((h/2)+1), 5, 5) + path.AddRectangle(self.start.x+((w/2)+1), self.start.y-((h/2)+1), 5, 5) + path.AddRectangle(self.start.x+((w/2)+1), self.start.y+((h/2)+1), 5, 5) + + dc.DrawPath(path) + + dc.SetBrush(wx.NullBrush) + dc.SetPen(wx.NullPen) + + def InObject(self, pos): + dc = wx.ClientDC(self.canvas) + self.canvas.PrepareDC(dc) + font = wx.Font(self.size, wx.DEFAULT, self.weight, self.style) + w, h = dc.GetTextExtent(self.text) + rgn = wx.RegionFromPoints([(self.start.x-(w/2), self.start.y-(h/2)), (self.start.x-(w/2), self.start.y+(h/2)), (self.start.x+(w/2), self.start.y-(h/2)), (self.start.x+(w/2), self.start.y+(h/2))]) + + if rgn.Contains(pos.x, pos.y): + return True + + return False + + def GetName(self): + return self.text + ' Color:' + self.color + + def ShowProperties(self, event): + dlg = wx.Dialog(self.canvas, wx.ID_ANY, "Circle Properties") + sizer = wx.BoxSizer(wx.HORIZONTAL) + + text = wx.TextCtrl(dlg, wx.ID_ANY) + text.SetValue(self.text) + + colorbtn = wx.Button(dlg, wx.ID_ANY, "Color") + colorbtn.SetForegroundColour(self.color) + + size = wx.SpinCtrl(dlg, wx.ID_ANY, value=str(self.size), min=7, initial=12, name="Font Size: ") + + weight = wx.Choice(dlg, wx.ID_ANY, choices=["Normal", "Bold"]) + if self.weight == wx.NORMAL: + weight.SetSelection(0) + else: + weight.SetSelection(1) + + style = wx.Choice(dlg, wx.ID_ANY, choices=["Normal", "Italic"]) + if self.weight == wx.NORMAL: + style.SetSelection(0) + else: + style.SetSelection(1) + + def ColorBtn(event): + newcolor = self.RGBHex.do_hex_color_dlg(self.canvas) + if newcolor == None: + return + + colorbtn.SetForegroundColour(newcolor) + dlg.Unbind(wx.EVT_BUTTON) + + dlg.Bind(wx.EVT_BUTTON, ColorBtn, colorbtn) + + sizer.Add(wx.StaticText(dlg, wx.ID_ANY, "Text:"), 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 2) + sizer.Add(text, 0, wx.EXPAND|wx.ALL, 3) + sizer.Add(size, 0, wx.ALL, 2) + sizer.Add(weight, 0, wx.ALL, 3) + sizer.Add(style, 0, wx.ALL, 2) + sizer.Add(colorbtn, 0, wx.ALL, 3) + sizer.Add(wx.Button(dlg, wx.ID_OK), 0, wx.ALL, 2) + + dlg.SetSizer(sizer) + dlg.SetAutoLayout(True) + dlg.Fit() + dlg.Show() + + if dlg.ShowModal() == wx.ID_OK: + self.text = text.GetValue() + r,g,b = colorbtn.GetForegroundColour().Get() + self.color = self.RGBHex.hexstring(r, g, b) + self.hcolor = self.RGBHex.hexstring(r^255, g^255, b^255) + self.size = int(size.GetValue()) + if weight.GetSelection() == 0: + self.weight = wx.NORMAL + else: + self.weight = wx.BOLD + + if style.GetSelection() == 0: + self.style = wx.NORMAL + else: + self.style = wx.ITALIC + + if event != None: + self.Update(send=True, action="update") + + + def OnLeftDown(self, pos): + self.ShowProperties(None) + self.color = self.canvas.whiteboardColor + if self.text != '': + self.canvas.zOrder['front'].append(MapText(self.canvas, pos, self.text, self.size, self.weight, self.style, self.color)) + self.Update(send=True, action='new') + + self.text = '' + self.weight = wx.NORMAL + self.size = 12 + self.style = wx.NORMAL + self.color = self.canvas.whiteboardColor + self.hcolor = self.canvas.whiteboardColor + + def _toxml(self, action="update"): + return '' \ No newline at end of file