Mercurial > traipse_dev
comparison orpg/mapper/whiteboard.py @ 71:449a8900f9ac ornery-dev
Code refining almost completed, for this round. Some included files are still in need of some clean up, but this is test worthy.
author | sirebral |
---|---|
date | Thu, 20 Aug 2009 03:00:39 -0500 |
parents | 072ffc1d466f |
children | 54446a995007 e842a5f1b775 |
comparison
equal
deleted
inserted
replaced
70:52a5fa913008 | 71:449a8900f9ac |
---|---|
41 else: value = 1 | 41 else: value = 1 |
42 return value | 42 return value |
43 | 43 |
44 class WhiteboardText: | 44 class WhiteboardText: |
45 def __init__(self, id, text_string, pos, style, pointsize, weight, color="#000000", log=None): | 45 def __init__(self, id, text_string, pos, style, pointsize, weight, color="#000000", log=None): |
46 self.log = log | |
47 self.log.log("Enter WhiteboardText", ORPG_DEBUG) | |
48 self.scale = 1 | 46 self.scale = 1 |
49 self.r_h = RGBHex() | 47 self.r_h = RGBHex() |
50 self.selected = False | 48 self.selected = False |
51 self.text_string = text_string | 49 self.text_string = text_string |
52 self.id = id | 50 self.id = id |
59 self.font = wx.Font(self.pointsize, wx.DEFAULT, self.style, self.weight) | 57 self.font = wx.Font(self.pointsize, wx.DEFAULT, self.style, self.weight) |
60 self.highlighted = False | 58 self.highlighted = False |
61 r,g,b = self.r_h.rgb_tuple(self.textcolor) | 59 r,g,b = self.r_h.rgb_tuple(self.textcolor) |
62 self.highlight_color = self.r_h.hexstring(r^255, g^255, b^255) | 60 self.highlight_color = self.r_h.hexstring(r^255, g^255, b^255) |
63 self.isUpdated = False | 61 self.isUpdated = False |
64 self.log.log("Exit WhiteboardText", ORPG_DEBUG) | |
65 | 62 |
66 def highlight(self, highlight=True): | 63 def highlight(self, highlight=True): |
67 self.log.log("Enter WhiteboardText->highlight(self, highlight)", ORPG_DEBUG) | |
68 self.highlighted = highlight | 64 self.highlighted = highlight |
69 self.log.log("Exit WhiteboardText->highlight(self, highlight)", ORPG_DEBUG) | |
70 | 65 |
71 def set_text_props(self, text_string, style, point, weight, color="#000000"): | 66 def set_text_props(self, text_string, style, point, weight, color="#000000"): |
72 self.log.log("Enter WhiteboardText->set_text_props(self, text_string, style, point, weight, color)", ORPG_DEBUG) | |
73 self.text_string = text_string | 67 self.text_string = text_string |
74 self.textcolor = color | 68 self.textcolor = color |
75 self.style = int(style) | 69 self.style = int(style) |
76 self.font.SetStyle(self.style) | 70 self.font.SetStyle(self.style) |
77 self.pointsize = int(point) | 71 self.pointsize = int(point) |
78 self.font.SetPointSize(self.pointsize) | 72 self.font.SetPointSize(self.pointsize) |
79 self.weight = int(weight) | 73 self.weight = int(weight) |
80 self.font.SetWeight(self.weight) | 74 self.font.SetWeight(self.weight) |
81 self.isUpdated = True | 75 self.isUpdated = True |
82 self.log.log("Exit WhiteboardText->set_text_props(self, text_string, style, point, weight, color)", ORPG_DEBUG) | |
83 | 76 |
84 def hit_test(self, pt, dc): | 77 def hit_test(self, pt, dc): |
85 self.log.log("Enter WhiteboardText->hit_test(self, pt, dc)", ORPG_DEBUG) | |
86 rect = self.get_rect(dc) | 78 rect = self.get_rect(dc) |
87 result = rect.InsideXY(pt.x, pt.y) | 79 result = rect.InsideXY(pt.x, pt.y) |
88 self.log.log("Exit WhiteboardText->hit_test(self, pt, dc)", ORPG_DEBUG) | |
89 return result | 80 return result |
90 | 81 |
91 def get_rect(self, dc): | 82 def get_rect(self, dc): |
92 self.log.log("Enter WhiteboardText->get_rect(self, dc)", ORPG_DEBUG) | |
93 dc.SetFont(self.font) | 83 dc.SetFont(self.font) |
94 (w,x,y,z) = dc.GetFullTextExtent(self.text_string) | 84 (w,x,y,z) = dc.GetFullTextExtent(self.text_string) |
95 self.log.log("Exit WhiteboardText->get_rect(self, dc)", ORPG_DEBUG) | |
96 return wx.Rect(self.posx,self.posy,w,(x+y+z)) | 85 return wx.Rect(self.posx,self.posy,w,(x+y+z)) |
97 | 86 |
98 def draw(self, parent, dc, op=wx.COPY): | 87 def draw(self, parent, dc, op=wx.COPY): |
99 self.log.log("Enter WhiteboardText->draw(self, parent, dc, op)", ORPG_DEBUG) | |
100 self.scale = parent.canvas.layers['grid'].mapscale | 88 self.scale = parent.canvas.layers['grid'].mapscale |
101 if self.highlighted: textcolor = self.highlight_color | 89 if self.highlighted: textcolor = self.highlight_color |
102 else: textcolor = self.textcolor | 90 else: textcolor = self.textcolor |
103 try: dc.SetTextForeground(textcolor) | 91 try: dc.SetTextForeground(textcolor) |
104 except Exception,e: dc.SetTextForeground('#000000') | 92 except Exception,e: dc.SetTextForeground('#000000') |
107 # Draw text | 95 # Draw text |
108 (w,x,y,z) = self.get_rect(dc) | 96 (w,x,y,z) = self.get_rect(dc) |
109 dc.SetFont(self.font) | 97 dc.SetFont(self.font) |
110 dc.DrawText(self.text_string, self.posx, self.posy) | 98 dc.DrawText(self.text_string, self.posx, self.posy) |
111 dc.SetTextForeground(wx.Colour(0,0,0)) | 99 dc.SetTextForeground(wx.Colour(0,0,0)) |
112 self.log.log("Exit WhiteboardText->draw(self, parent, dc, op)", ORPG_DEBUG) | |
113 | 100 |
114 def toxml(self, action="update"): | 101 def toxml(self, action="update"): |
115 self.log.log("Enter WhiteboardText->toxml(self, " + action + ")", ORPG_DEBUG) | |
116 if action == "del": | 102 if action == "del": |
117 xml_str = "<text action='del' id='" + str(self.id) + "'/>" | 103 xml_str = "<text action='del' id='" + str(self.id) + "'/>" |
118 self.log.log(xml_str, ORPG_DEBUG) | |
119 self.log.log("Exit WhiteboardText->toxml(self, " + action + ")", ORPG_DEBUG) | |
120 return xml_str | 104 return xml_str |
121 xml_str = "<text" | 105 xml_str = "<text" |
122 xml_str += " action='" + action + "'" | 106 xml_str += " action='" + action + "'" |
123 xml_str += " id='" + str(self.id) + "'" | 107 xml_str += " id='" + str(self.id) + "'" |
124 if self.pointsize != None: xml_str += " pointsize='" + str(self.pointsize) + "'" | 108 if self.pointsize != None: xml_str += " pointsize='" + str(self.pointsize) + "'" |
127 if self.posx != None: xml_str+= " posx='" + str(self.posx) + "'" | 111 if self.posx != None: xml_str+= " posx='" + str(self.posx) + "'" |
128 if not (self.posy is None): xml_str += " posy='" + str(self.posy) + "'" | 112 if not (self.posy is None): xml_str += " posy='" + str(self.posy) + "'" |
129 if self.text_string != None: xml_str+= " text_string='" + self.text_string + "'" | 113 if self.text_string != None: xml_str+= " text_string='" + self.text_string + "'" |
130 if self.textcolor != None: xml_str += " color='" + self.textcolor + "'" | 114 if self.textcolor != None: xml_str += " color='" + self.textcolor + "'" |
131 xml_str += "/>" | 115 xml_str += "/>" |
132 self.log.log(xml_str, ORPG_DEBUG) | |
133 self.log.log("Exit WhiteboardText->toxml(self, " + action + ")", ORPG_DEBUG) | |
134 if (action == "update" and self.isUpdated) or action == "new": | 116 if (action == "update" and self.isUpdated) or action == "new": |
135 self.isUpdated = False | 117 self.isUpdated = False |
136 return xml_str | 118 return xml_str |
137 else: return '' | 119 else: return '' |
138 | 120 |
139 def takedom(self, xml_dom): | 121 def takedom(self, xml_dom): |
140 self.log.log("Enter WhiteboardText->takedom(self, xml_dom)", ORPG_DEBUG) | |
141 self.text_string = xml_dom.getAttribute("text_string") | 122 self.text_string = xml_dom.getAttribute("text_string") |
142 self.log.log("self.text_string=" + self.text_string, ORPG_DEBUG) | |
143 self.id = xml_dom.getAttribute("id") | 123 self.id = xml_dom.getAttribute("id") |
144 self.log.log("self.id=" + str(self.id), ORPG_DEBUG) | |
145 if xml_dom.hasAttribute("posy"): | 124 if xml_dom.hasAttribute("posy"): |
146 self.posy = int(xml_dom.getAttribute("posy")) | 125 self.posy = int(xml_dom.getAttribute("posy")) |
147 self.log.log("self.posy=" + str(self.posy), ORPG_DEBUG) | |
148 if xml_dom.hasAttribute("posx"): | 126 if xml_dom.hasAttribute("posx"): |
149 self.posx = int(xml_dom.getAttribute("posx")) | 127 self.posx = int(xml_dom.getAttribute("posx")) |
150 self.log.log("self.posx=" + str(self.posx), ORPG_DEBUG) | |
151 if xml_dom.hasAttribute("weight"): | 128 if xml_dom.hasAttribute("weight"): |
152 self.weight = int(xml_dom.getAttribute("weight")) | 129 self.weight = int(xml_dom.getAttribute("weight")) |
153 self.font.SetWeight(self.weight) | 130 self.font.SetWeight(self.weight) |
154 self.log.log("self.weight=" + str(self.weight), ORPG_DEBUG) | |
155 if xml_dom.hasAttribute("style"): | 131 if xml_dom.hasAttribute("style"): |
156 self.style = int(xml_dom.getAttribute("style")) | 132 self.style = int(xml_dom.getAttribute("style")) |
157 self.font.SetStyle(self.style) | 133 self.font.SetStyle(self.style) |
158 self.log.log("self.style=" + str(self.style), ORPG_DEBUG) | |
159 if xml_dom.hasAttribute("pointsize"): | 134 if xml_dom.hasAttribute("pointsize"): |
160 self.pointsize = int(xml_dom.getAttribute("pointsize")) | 135 self.pointsize = int(xml_dom.getAttribute("pointsize")) |
161 self.font.SetPointSize(self.pointsize) | 136 self.font.SetPointSize(self.pointsize) |
162 self.log.log("self.pointsize=" + str(self.pointsize), ORPG_DEBUG) | |
163 if xml_dom.hasAttribute("color") and xml_dom.getAttribute("color") != '': | 137 if xml_dom.hasAttribute("color") and xml_dom.getAttribute("color") != '': |
164 self.textcolor = xml_dom.getAttribute("color") | 138 self.textcolor = xml_dom.getAttribute("color") |
165 if self.textcolor == '#0000000': self.textcolor = '#000000' | 139 if self.textcolor == '#0000000': self.textcolor = '#000000' |
166 self.log.log("self.textcolor=" + self.textcolor, ORPG_DEBUG) | |
167 self.log.log("Exit WhiteboardText->takedom(self, xml_dom)", ORPG_DEBUG) | |
168 | 140 |
169 class WhiteboardLine: | 141 class WhiteboardLine: |
170 def __init__(self, id, line_string, upperleft, lowerright, color="#000000", width=1, log=None): | 142 def __init__(self, id, line_string, upperleft, lowerright, color="#000000", width=1, log=None): |
171 self.log = log | |
172 self.log.log("Enter WhiteboardLine", ORPG_DEBUG) | |
173 self.scale = 1 | 143 self.scale = 1 |
174 self.r_h = RGBHex() | 144 self.r_h = RGBHex() |
175 if color == '': color = "#000000" | 145 if color == '': color = "#000000" |
176 self.linecolor = color | 146 self.linecolor = color |
177 self.linewidth = width | 147 self.linewidth = width |
181 self.line_string = line_string | 151 self.line_string = line_string |
182 self.id = id | 152 self.id = id |
183 self.highlighted = False | 153 self.highlighted = False |
184 r,g,b = self.r_h.rgb_tuple(self.linecolor) | 154 r,g,b = self.r_h.rgb_tuple(self.linecolor) |
185 self.highlight_color = self.r_h.hexstring(r^255, g^255, b^255) | 155 self.highlight_color = self.r_h.hexstring(r^255, g^255, b^255) |
186 self.log.log("Exit WhiteboardLine", ORPG_DEBUG) | |
187 | 156 |
188 def highlight(self, highlight=True): | 157 def highlight(self, highlight=True): |
189 self.log.log("Enter WhiteboardLine->highlight(self, highlight)", ORPG_DEBUG) | |
190 self.highlighted = highlight | 158 self.highlighted = highlight |
191 self.log.log("Enter WhiteboardLine->highlight(self, highlight)", ORPG_DEBUG) | 159 |
192 | 160 def set_line_props(self, line_string="", |
193 def set_line_props(self, line_string="", upperleftx=0, upperlefty=0, | 161 upperleftx=0, upperlefty=0, |
194 lowerrightx=0, lowerrighty=0, color="#000000", width=1): | 162 lowerrightx=0, lowerrighty=0, |
195 self.log.log("Enter WhiteboardLine->set_line_props(self, line_string, upperleftx, upperlefty, lowerrightx, lowerrighty, color, width)", ORPG_DEBUG) | 163 color="#000000", width=1): |
196 self.line_string = line_string | 164 self.line_string = line_string |
197 self.upperleft.x = upperleftx | 165 self.upperleft.x = upperleftx |
198 self.upperleft.y = upperlefty | 166 self.upperleft.y = upperlefty |
199 self.lowerright.x = lowerrightx | 167 self.lowerright.x = lowerrightx |
200 self.lowerright.y = lowerrighty | 168 self.lowerright.y = lowerrighty |
201 self.linecolor = color | 169 self.linecolor = color |
202 self.linewidth = width | 170 self.linewidth = width |
203 self.log.log("Exit WhiteboardLine->set_line_props(self, line_string, upperleftx, upperlefty, lowerrightx, lowerrighty, color, width)", ORPG_DEBUG) | |
204 | 171 |
205 def hit_test(self, pt): | 172 def hit_test(self, pt): |
206 self.log.log("Enter WhiteboardLine->hit_test(self, pt)", ORPG_DEBUG) | |
207 coords = self.line_string.split(";") | 173 coords = self.line_string.split(";") |
208 stcords = coords[0].split(",") | 174 stcords = coords[0].split(",") |
209 oldicords = (int(stcords[0]),int(stcords[1])) | 175 oldicords = (int(stcords[0]),int(stcords[1])) |
210 for coordinate_string_counter in range(1, len(coords)): | 176 for coordinate_string_counter in range(1, len(coords)): |
211 stcords = coords[coordinate_string_counter].split(",") | 177 stcords = coords[coordinate_string_counter].split(",") |
212 if stcords[0] == "": | 178 if stcords[0] == "": |
213 self.log.log("Exit WhiteboardLine->hit_test(self, pt) return False", ORPG_DEBUG) | |
214 return False | 179 return False |
215 icords = (int(stcords[0]),int(stcords[1])) | 180 icords = (int(stcords[0]),int(stcords[1])) |
216 if orpg.mapper.map_utils.proximity_test(oldicords,icords,pt,12): | 181 if orpg.mapper.map_utils.proximity_test(oldicords,icords,pt,12): |
217 self.log.log("Exit WhiteboardLine->hit_test(self, pt) return True", ORPG_DEBUG) | |
218 return True | 182 return True |
219 oldicords = icords | 183 oldicords = icords |
220 self.log.log("Exit WhiteboardLine->hit_test(self, pt) return False", ORPG_DEBUG) | |
221 return False | 184 return False |
222 | 185 |
223 def draw(self, parent, dc, op=wx.COPY): | 186 def draw(self, parent, dc, op=wx.COPY): |
224 self.log.log("Enter WhiteboardLine->draw(self, parent, dc, op=wx.COPY)", ORPG_DEBUG) | |
225 self.scale = parent.canvas.layers['grid'].mapscale | 187 self.scale = parent.canvas.layers['grid'].mapscale |
226 if self.highlighted: linecolor = self.highlight_color | 188 if self.highlighted: linecolor = self.highlight_color |
227 else: linecolor = self.linecolor | 189 else: linecolor = self.linecolor |
228 pen = wx.BLACK_PEN | 190 pen = wx.BLACK_PEN |
229 try: pen.SetColour(linecolor) | 191 try: pen.SetColour(linecolor) |
246 pen.SetColour(wx.Colour(0,0,0)) | 208 pen.SetColour(wx.Colour(0,0,0)) |
247 dc.SetPen(pen) | 209 dc.SetPen(pen) |
248 dc.SetPen(wx.NullPen) | 210 dc.SetPen(wx.NullPen) |
249 dc.SetBrush(wx.NullBrush) | 211 dc.SetBrush(wx.NullBrush) |
250 #selected outline | 212 #selected outline |
251 self.log.log("Exit WhiteboardLine->draw(self, parent, dc, op=wx.COPY)", ORPG_DEBUG) | |
252 | 213 |
253 def toxml(self, action="update"): | 214 def toxml(self, action="update"): |
254 self.log.log("Enter WhiteboardLine->toxml(self, " + action + ")", ORPG_DEBUG) | |
255 if action == "del": | 215 if action == "del": |
256 xml_str = "<line action='del' id='" + str(self.id) + "'/>" | 216 xml_str = "<line action='del' id='" + str(self.id) + "'/>" |
257 self.log.log(xml_str, ORPG_DEBUG) | |
258 self.log.log("Exit WhiteboardLine->toxml(self, " + action + ")", ORPG_DEBUG) | |
259 return xml_str | 217 return xml_str |
260 # if there are any changes, make sure id is one of them | 218 # if there are any changes, make sure id is one of them |
261 xml_str = "<line" | 219 xml_str = "<line" |
262 xml_str += " action='" + action + "'" | 220 xml_str += " action='" + action + "'" |
263 xml_str += " id='" + str(self.id) + "'" | 221 xml_str += " id='" + str(self.id) + "'" |
271 if self.linecolor != None: | 229 if self.linecolor != None: |
272 xml_str += " color='" + str(self.linecolor) + "'" | 230 xml_str += " color='" + str(self.linecolor) + "'" |
273 if self.linewidth != None: | 231 if self.linewidth != None: |
274 xml_str += " width='" + str(self.linewidth) + "'" | 232 xml_str += " width='" + str(self.linewidth) + "'" |
275 xml_str += "/>" | 233 xml_str += "/>" |
276 self.log.log(xml_str, ORPG_DEBUG) | |
277 self.log.log("Exit WhiteboardLine->toxml(self, " + action + ")", ORPG_DEBUG) | |
278 if action == "new": return xml_str | 234 if action == "new": return xml_str |
279 return '' | 235 return '' |
280 | 236 |
281 def takedom(self, xml_dom): | 237 def takedom(self, xml_dom): |
282 self.log.log("Enter WhiteboardLine->takedom(self, xml_dom)", ORPG_DEBUG) | |
283 self.line_string = xml_dom.getAttribute("line_string") | 238 self.line_string = xml_dom.getAttribute("line_string") |
284 self.log.log("self.line_string=" + self.line_string, ORPG_DEBUG) | |
285 self.id = xml_dom.getAttribute("id") | 239 self.id = xml_dom.getAttribute("id") |
286 self.log.log("self.id=" + str(self.id), ORPG_DEBUG) | |
287 if xml_dom.hasAttribute("upperleftx"): | 240 if xml_dom.hasAttribute("upperleftx"): |
288 self.upperleft.x = int(xml_dom.getAttribute("upperleftx")) | 241 self.upperleft.x = int(xml_dom.getAttribute("upperleftx")) |
289 self.log.log("self.upperleft.x=" + str(self.upperleft.x), ORPG_DEBUG) | |
290 if xml_dom.hasAttribute("upperlefty"): | 242 if xml_dom.hasAttribute("upperlefty"): |
291 self.upperleft.y = int(xml_dom.getAttribute("upperlefty")) | 243 self.upperleft.y = int(xml_dom.getAttribute("upperlefty")) |
292 self.log.log("self.upperleft.y=" + str(self.upperleft.y), ORPG_DEBUG) | |
293 if xml_dom.hasAttribute("lowerrightx"): | 244 if xml_dom.hasAttribute("lowerrightx"): |
294 self.lowerright.x = int(xml_dom.getAttribute("lowerrightx")) | 245 self.lowerright.x = int(xml_dom.getAttribute("lowerrightx")) |
295 self.log.log("self.lowerright.x=" + str(self.lowerright.x), ORPG_DEBUG) | |
296 if xml_dom.hasAttribute("lowerrighty"): | 246 if xml_dom.hasAttribute("lowerrighty"): |
297 self.lowerright.y = int(xml_dom.getAttribute("lowerrighty")) | 247 self.lowerright.y = int(xml_dom.getAttribute("lowerrighty")) |
298 self.log.log("self.lowerright.y=" + str(self.lowerright.y), ORPG_DEBUG) | |
299 if xml_dom.hasAttribute("color") and xml_dom.getAttribute("color") != '': | 248 if xml_dom.hasAttribute("color") and xml_dom.getAttribute("color") != '': |
300 self.linecolor = xml_dom.getAttribute("color") | 249 self.linecolor = xml_dom.getAttribute("color") |
301 if self.linecolor == '#0000000': | 250 if self.linecolor == '#0000000': |
302 self.linecolor = '#000000' | 251 self.linecolor = '#000000' |
303 self.log.log("self.linecolor=" + self.linecolor, ORPG_DEBUG) | |
304 if xml_dom.hasAttribute("width"): | 252 if xml_dom.hasAttribute("width"): |
305 self.linewidth = int(xml_dom.getAttribute("width")) | 253 self.linewidth = int(xml_dom.getAttribute("width")) |
306 self.log.log("self.linewidth=" + str(self.linewidth), ORPG_DEBUG) | |
307 self.log.log("Exit WhiteboardLine->takedom(self, xml_dom)", ORPG_DEBUG) | |
308 | 254 |
309 ##----------------------------- | 255 ##----------------------------- |
310 ## whiteboard layer | 256 ## whiteboard layer |
311 ##----------------------------- | 257 ##----------------------------- |
312 class whiteboard_layer(layer_base): | 258 class whiteboard_layer(layer_base): |
313 | 259 |
314 def __init__(self, canvas): | 260 def __init__(self, canvas): |
315 self.canvas = canvas | 261 self.canvas = canvas |
316 self.log = self.canvas.log | |
317 self.log.log("Enter whiteboard_layer", ORPG_DEBUG) | |
318 layer_base.__init__(self) | 262 layer_base.__init__(self) |
319 self.r_h = RGBHex() | 263 self.r_h = RGBHex() |
320 self.id = -1 | 264 self.id = -1 |
321 self.lines = [] | 265 self.lines = [] |
322 self.texts = [] | 266 self.texts = [] |
323 self.serial_number = 0 | 267 self.serial_number = 0 |
324 self.color = "#000000" | 268 self.color = "#000000" |
325 self.width = 1 | 269 self.width = 1 |
326 self.removedLines = [] | 270 self.removedLines = [] |
327 self.log.log("Exit whiteboard_layer", ORPG_DEBUG) | |
328 | 271 |
329 def next_serial(self): | 272 def next_serial(self): |
330 self.log.log("Enter whiteboard_layer->next_serial(self)", ORPG_DEBUG) | |
331 self.serial_number += 1 | 273 self.serial_number += 1 |
332 self.log.log("Exit whiteboard_layer->next_serial(self)", ORPG_DEBUG) | |
333 return self.serial_number | 274 return self.serial_number |
334 | 275 |
335 def get_next_highest_z(self): | 276 def get_next_highest_z(self): |
336 self.log.log("Enter whiteboard_layer->get_next_highest_z(self)", ORPG_DEBUG) | |
337 z = len(self.lines)+1 | 277 z = len(self.lines)+1 |
338 self.log.log("Exit whiteboard_layer->get_next_highest_z(self)", ORPG_DEBUG) | |
339 return z | 278 return z |
340 | 279 |
341 def cleanly_collapse_zorder(self): | 280 def cleanly_collapse_zorder(self): |
342 self.log.log("Enter/Exit whiteboard_layer->cleanly_collapse_zorder(self)", ORPG_DEBUG) | 281 pass |
343 | 282 |
344 def collapse_zorder(self): | 283 def collapse_zorder(self): |
345 self.log.log("Enter/Exit whiteboard_layer->collapse_zorder(self)", ORPG_DEBUG) | 284 pass |
346 | 285 |
347 def rollback_serial(self): | 286 def rollback_serial(self): |
348 self.log.log("Enter whiteboard_layer->rollback_serial(self)", ORPG_DEBUG) | |
349 self.serial_number -= 1 | 287 self.serial_number -= 1 |
350 self.log.log("Exit whiteboard_layer->rollback_serial(self)", ORPG_DEBUG) | |
351 | 288 |
352 def add_line(self, line_string="", upperleft=cmpPoint(0,0), lowerright=cmpPoint(0,0), color="#000000", width=1): | 289 def add_line(self, line_string="", upperleft=cmpPoint(0,0), lowerright=cmpPoint(0,0), color="#000000", width=1): |
353 self.log.log("Enter whiteboard_layer->add_line(self, line_string, upperleft, lowerright, color, width)", ORPG_DEBUG) | |
354 id = 'line-' + str(self.next_serial()) | 290 id = 'line-' + str(self.next_serial()) |
355 line = WhiteboardLine(id, line_string, upperleft, lowerright, color=self.color, width=self.width, log=self.log) | 291 line = WhiteboardLine(id, line_string, upperleft, lowerright, color=self.color, width=self.width) |
356 self.lines.append(line) | 292 self.lines.append(line) |
357 xml_str = "<map><whiteboard>" | 293 xml_str = "<map><whiteboard>" |
358 xml_str += line.toxml("new") | 294 xml_str += line.toxml("new") |
359 xml_str += "</whiteboard></map>" | 295 xml_str += "</whiteboard></map>" |
360 self.canvas.frame.session.send(xml_str) | 296 self.canvas.frame.session.send(xml_str) |
361 self.canvas.Refresh(True) | 297 self.canvas.Refresh(True) |
362 self.log.log("Exit whiteboard_layer->add_line(self, line_string, upperleft, lowerright, color, width)", ORPG_DEBUG) | |
363 return line | 298 return line |
364 | 299 |
365 def get_line_by_id(self, id): | 300 def get_line_by_id(self, id): |
366 self.log.log("Enter whiteboard_layer->get_line_by_id(self, id)", ORPG_DEBUG) | |
367 for line in self.lines: | 301 for line in self.lines: |
368 if str(line.id) == str(id): | 302 if str(line.id) == str(id): |
369 self.log.log("Exit whiteboard_layer->get_line_by_id(self, id) return LineID: " + str(id), ORPG_DEBUG) | |
370 return line | 303 return line |
371 self.log.log("Exit whiteboard_layer->get_line_by_id(self, id) return None", ORPG_DEBUG) | |
372 return None | 304 return None |
373 | 305 |
374 def get_text_by_id(self, id): | 306 def get_text_by_id(self, id): |
375 self.log.log("Enter whiteboard_layer->get_text_by_id(self, id)", ORPG_DEBUG) | |
376 for text in self.texts: | 307 for text in self.texts: |
377 if str(text.id) == str(id): | 308 if str(text.id) == str(id): |
378 self.log.log("Exit whiteboard_layer->get_text_by_id(self, id) return textID: " + str(id), ORPG_DEBUG) | |
379 return text | 309 return text |
380 self.log.log("Enter whiteboard_layer->get_text_by_id(self, id) return None", ORPG_DEBUG) | |
381 return None | 310 return None |
382 | 311 |
383 def del_line(self, line): | 312 def del_line(self, line): |
384 self.log.log("Enter whiteboard_layer->del_line(self, line)", ORPG_DEBUG) | |
385 xml_str = "<map><whiteboard>" | 313 xml_str = "<map><whiteboard>" |
386 xml_str += line.toxml("del") | 314 xml_str += line.toxml("del") |
387 xml_str += "</whiteboard></map>" | 315 xml_str += "</whiteboard></map>" |
388 self.canvas.frame.session.send(xml_str) | 316 self.canvas.frame.session.send(xml_str) |
389 if line: | 317 if line: |
390 self.lines.remove(line) | 318 self.lines.remove(line) |
391 self.removedLines.append(line) | 319 self.removedLines.append(line) |
392 self.canvas.Refresh(True) | 320 self.canvas.Refresh(True) |
393 self.log.log("Exit whiteboard_layer->del_line(self, line)", ORPG_DEBUG) | |
394 | 321 |
395 def undo_line(self): | 322 def undo_line(self): |
396 if len(self.removedLines)>0: | 323 if len(self.removedLines)>0: |
397 line = self.removedLines[len(self.removedLines)-1] | 324 line = self.removedLines[len(self.removedLines)-1] |
398 self.removedLines.remove(line) | 325 self.removedLines.remove(line) |
399 self.add_line(line.line_string, line.upperleft, line.lowerright, line.linecolor, line.linewidth) | 326 self.add_line(line.line_string, line.upperleft, line.lowerright, line.linecolor, line.linewidth) |
400 self.canvas.Refresh(True) | 327 self.canvas.Refresh(True) |
401 | 328 |
402 def del_all_lines(self): | 329 def del_all_lines(self): |
403 self.log.log("Enter whiteboard_layer->del_all_lines(self)", ORPG_DEBUG) | |
404 for i in xrange(len(self.lines)): | 330 for i in xrange(len(self.lines)): |
405 self.del_line(self.lines[0]) | 331 self.del_line(self.lines[0]) |
406 print self.lines | 332 print self.lines |
407 self.log.log("Exit whiteboard_layer->del_all_lines(self)", ORPG_DEBUG) | |
408 | 333 |
409 def del_text(self, text): | 334 def del_text(self, text): |
410 self.log.log("Enter whiteboard_layer->del_text(self, text)", ORPG_DEBUG) | |
411 xml_str = "<map><whiteboard>" | 335 xml_str = "<map><whiteboard>" |
412 xml_str += text.toxml("del") | 336 xml_str += text.toxml("del") |
413 xml_str += "</whiteboard></map>" | 337 xml_str += "</whiteboard></map>" |
414 self.canvas.frame.session.send(xml_str) | 338 self.canvas.frame.session.send(xml_str) |
415 if text: | 339 if text: |
416 self.texts.remove(text) | 340 self.texts.remove(text) |
417 self.canvas.Refresh(True) | 341 self.canvas.Refresh(True) |
418 self.log.log("Exit whiteboard_layer->del_text(self, text)", ORPG_DEBUG) | |
419 | 342 |
420 def layerDraw(self, dc): | 343 def layerDraw(self, dc): |
421 self.log.log("Enter whiteboard_layer->layerDraw(self, dc)", ORPG_DEBUG) | |
422 for m in self.lines: m.draw(self, dc) | 344 for m in self.lines: m.draw(self, dc) |
423 for m in self.texts: m.draw(self,dc) | 345 for m in self.texts: m.draw(self,dc) |
424 self.log.log("Exit whiteboard_layer->layerDraw(self, dc)", ORPG_DEBUG) | |
425 | 346 |
426 def hit_test_text(self, pos, dc): | 347 def hit_test_text(self, pos, dc): |
427 self.log.log("Enter whiteboard_layer->hit_test_text(self, pos, dc)", ORPG_DEBUG) | |
428 list_of_texts_matching = [] | 348 list_of_texts_matching = [] |
429 if self.canvas.layers['fog'].use_fog == 1: | 349 if self.canvas.layers['fog'].use_fog == 1: |
430 if self.canvas.frame.session.role != "GM": | 350 if self.canvas.frame.session.role != "GM": |
431 self.log.log("Exit whiteboard_layer->hit_test_text(self, pos, dc)", ORPG_DEBUG) | |
432 return list_of_texts_matching | 351 return list_of_texts_matching |
433 for m in self.texts: | 352 for m in self.texts: |
434 if m.hit_test(pos,dc): list_of_texts_matching.append(m) | 353 if m.hit_test(pos,dc): list_of_texts_matching.append(m) |
435 self.log.log("Exit whiteboard_layer->hit_test_text(self, pos, dc)", ORPG_DEBUG) | |
436 return list_of_texts_matching | 354 return list_of_texts_matching |
437 | 355 |
438 def hit_test_lines(self, pos, dc): | 356 def hit_test_lines(self, pos, dc): |
439 self.log.log("Enter whiteboard_layer->hit_test_lines(self, pos, dc)", ORPG_DEBUG) | |
440 list_of_lines_matching = [] | 357 list_of_lines_matching = [] |
441 if self.canvas.layers['fog'].use_fog == 1: | 358 if self.canvas.layers['fog'].use_fog == 1: |
442 if self.canvas.frame.session.role != "GM": | 359 if self.canvas.frame.session.role != "GM": |
443 self.log.log("Exit whiteboard_layer->hit_test_lines(self, pos, dc)", ORPG_DEBUG) | |
444 return list_of_lines_matching | 360 return list_of_lines_matching |
445 for m in self.lines: | 361 for m in self.lines: |
446 if m.hit_test(pos): list_of_lines_matching.append(m) | 362 if m.hit_test(pos): list_of_lines_matching.append(m) |
447 self.log.log("Exit whiteboard_layer->hit_test_lines(self, pos, dc)", ORPG_DEBUG) | |
448 return list_of_lines_matching | 363 return list_of_lines_matching |
449 | 364 |
450 def find_line(self, pt): | 365 def find_line(self, pt): |
451 self.log.log("Enter whiteboard_layer->find_line(self, pt)", ORPG_DEBUG) | |
452 scale = self.canvas.layers['grid'].mapscale | 366 scale = self.canvas.layers['grid'].mapscale |
453 dc = wx.ClientDC( self.canvas ) | 367 dc = wx.ClientDC( self.canvas ) |
454 self.canvas.PrepareDC( dc ) | 368 self.canvas.PrepareDC( dc ) |
455 dc.SetUserScale(scale,scale) | 369 dc.SetUserScale(scale,scale) |
456 line_list = self.hit_test_lines(pt,dc) | 370 line_list = self.hit_test_lines(pt,dc) |
457 if line_list: | 371 if line_list: |
458 self.log.log("Exit whiteboard_layer->find_line(self, pt)", ORPG_DEBUG) | |
459 return line_list[0] | 372 return line_list[0] |
460 else: | 373 else: |
461 self.log.log("Exit whiteboard_layer->find_line(self, pt) return None", ORPG_DEBUG) | |
462 return None | 374 return None |
463 | 375 |
464 def setcolor(self, color): | 376 def setcolor(self, color): |
465 self.log.log("Enter whiteboard_layer->setcolor(self, color)", ORPG_DEBUG) | |
466 r,g,b = color.Get() | 377 r,g,b = color.Get() |
467 self.color = self.r_h.hexstring(r,g,b) | 378 self.color = self.r_h.hexstring(r,g,b) |
468 self.log.log("Exit whiteboard_layer->setcolor(self, color)", ORPG_DEBUG) | |
469 | 379 |
470 def sethexcolor(self, hexcolor): | 380 def sethexcolor(self, hexcolor): |
471 self.log.log("Enter whiteboard_layer->sethexcolor(self, hexcolor)", ORPG_DEBUG) | |
472 self.color = hexcolor | 381 self.color = hexcolor |
473 self.log.log("Exit whiteboard_layer->sethexcolor(self, hexcolor)", ORPG_DEBUG) | |
474 | 382 |
475 def setwidth(self, width): | 383 def setwidth(self, width): |
476 self.log.log("Enter whiteboard_layer->setwidth(self, width)", ORPG_DEBUG) | |
477 self.width = int(width) | 384 self.width = int(width) |
478 self.log.log("Exit whiteboard_layer->setwidth(self, width)", ORPG_DEBUG) | |
479 | 385 |
480 def set_font(self, font): | 386 def set_font(self, font): |
481 self.log.log("Enter whiteboard_layer->set_font(self, font)", ORPG_DEBUG) | |
482 self.font = font | 387 self.font = font |
483 self.log.log("Exit whiteboard_layer->set_font(self, font)", ORPG_DEBUG) | |
484 | 388 |
485 def add_text(self, text_string, pos, style, pointsize, weight, color="#000000"): | 389 def add_text(self, text_string, pos, style, pointsize, weight, color="#000000"): |
486 self.log.log("Enter whiteboard_layer->add_text(self, text_string, pos, style, pointsize, weight, color)", ORPG_DEBUG) | |
487 id = 'text-' + str(self.next_serial()) | 390 id = 'text-' + str(self.next_serial()) |
488 text = WhiteboardText(id,text_string, pos, style, pointsize, weight, color, self.log) | 391 text = WhiteboardText(id,text_string, pos, style, pointsize, weight, color) |
489 self.texts.append(text) | 392 self.texts.append(text) |
490 xml_str = "<map><whiteboard>" | 393 xml_str = "<map><whiteboard>" |
491 xml_str += text.toxml("new") | 394 xml_str += text.toxml("new") |
492 xml_str += "</whiteboard></map>" | 395 xml_str += "</whiteboard></map>" |
493 self.canvas.frame.session.send(xml_str) | 396 self.canvas.frame.session.send(xml_str) |
494 self.canvas.Refresh(True) | 397 self.canvas.Refresh(True) |
495 self.log.log("Exit whiteboard_layer->add_text(self, text_string, pos, style, pointsize, weight, color)", ORPG_DEBUG) | |
496 | 398 |
497 def draw_working_line(self, dc, line_string): | 399 def draw_working_line(self, dc, line_string): |
498 self.log.log("Enter whiteboard_layer->draw_working_line(self, dc, line_string)", ORPG_DEBUG) | |
499 scale = self.canvas.layers['grid'].mapscale | 400 scale = self.canvas.layers['grid'].mapscale |
500 dc.SetPen(wx.BLACK_PEN) | 401 dc.SetPen(wx.BLACK_PEN) |
501 dc.SetBrush(wx.BLACK_BRUSH) | 402 dc.SetBrush(wx.BLACK_BRUSH) |
502 pen = wx.BLACK_PEN | 403 pen = wx.BLACK_PEN |
503 pen.SetColour(self.color) | 404 pen.SetColour(self.color) |
515 dc.DrawLine(x2,y2,x1,y1) | 416 dc.DrawLine(x2,y2,x1,y1) |
516 x2 = x1 | 417 x2 = x1 |
517 y2 = y1 | 418 y2 = y1 |
518 dc.SetPen(wx.NullPen) | 419 dc.SetPen(wx.NullPen) |
519 dc.SetBrush(wx.NullBrush) | 420 dc.SetBrush(wx.NullBrush) |
520 self.log.log("Exit whiteboard_layer->draw_working_line(self, dc, line_string)", ORPG_DEBUG) | |
521 | 421 |
522 def layerToXML(self, action="update"): | 422 def layerToXML(self, action="update"): |
523 """ format """ | 423 """ format """ |
524 self.log.log("Enter whiteboard_layer->layerToXML(self, " + action + ")", ORPG_DEBUG) | |
525 white_string = "" | 424 white_string = "" |
526 if self.lines: | 425 if self.lines: |
527 for l in self.lines: white_string += l.toxml(action) | 426 for l in self.lines: white_string += l.toxml(action) |
528 if self.texts: | 427 if self.texts: |
529 for l in self.texts: white_string += l.toxml(action) | 428 for l in self.texts: white_string += l.toxml(action) |
531 s = "<whiteboard" | 430 s = "<whiteboard" |
532 s += " serial='" + str(self.serial_number) + "'" | 431 s += " serial='" + str(self.serial_number) + "'" |
533 s += ">" | 432 s += ">" |
534 s += white_string | 433 s += white_string |
535 s += "</whiteboard>" | 434 s += "</whiteboard>" |
536 self.log.log(s, ORPG_DEBUG) | |
537 self.log.log("Exit whiteboard_layer->layerToXML(self, " + action + ")", ORPG_DEBUG) | |
538 return s | 435 return s |
539 else: | 436 else: |
540 self.log.log("Exit whiteboard_layer->layerToXML(self, " + action + ")", ORPG_DEBUG) | |
541 return "" | 437 return "" |
542 | 438 |
543 def layerTakeDOM(self, xml_dom): | 439 def layerTakeDOM(self, xml_dom): |
544 self.log.log("Enter whiteboard_layer->layerTakeDOM(self, xml_dom)", ORPG_DEBUG) | |
545 serial_number = xml_dom.getAttribute('serial') | 440 serial_number = xml_dom.getAttribute('serial') |
546 if serial_number != "": self.serial_number = int(serial_number) | 441 if serial_number != "": self.serial_number = int(serial_number) |
547 children = xml_dom._get_childNodes() | 442 children = xml_dom._get_childNodes() |
548 for l in children: | 443 for l in children: |
549 nodename = l._get_nodeName() | 444 nodename = l._get_nodeName() |
551 id = l.getAttribute('id') | 446 id = l.getAttribute('id') |
552 if action == "del": | 447 if action == "del": |
553 if nodename == 'line': | 448 if nodename == 'line': |
554 line = self.get_line_by_id(id) | 449 line = self.get_line_by_id(id) |
555 if line != None: self.lines.remove(line) | 450 if line != None: self.lines.remove(line) |
556 else: self.log.log("Whiteboard error: Deletion of unknown line object attempted.", ORPG_GENERAL) | |
557 elif nodename == 'text': | 451 elif nodename == 'text': |
558 text = self.get_text_by_id(id) | 452 text = self.get_text_by_id(id) |
559 if text != None: self.texts.remove(text) | 453 if text != None: self.texts.remove(text) |
560 else: self.log.log("Whiteboard error: Deletion of unknown text object attempted.", ORPG_GENERAL) | |
561 else: self.log.log("Whiteboard error: Deletion of unknown whiteboard object attempted.", ORPG_GENERAL) | |
562 elif action == "new": | 454 elif action == "new": |
563 if nodename == "line": | 455 if nodename == "line": |
564 try: | 456 try: |
565 line_string = l.getAttribute('line_string') | 457 line_string = l.getAttribute('line_string') |
566 upperleftx = l.getAttribute('upperleftx') | 458 upperleftx = l.getAttribute('upperleftx') |
573 if color == '#0000000': color = '#000000' | 465 if color == '#0000000': color = '#000000' |
574 id = l.getAttribute('id') | 466 id = l.getAttribute('id') |
575 width = int(l.getAttribute('width')) | 467 width = int(l.getAttribute('width')) |
576 except: | 468 except: |
577 line_string = upperleftx = upperlefty = lowerrightx = lowerrighty = color = 0 | 469 line_string = upperleftx = upperlefty = lowerrightx = lowerrighty = color = 0 |
578 self.log.log(traceback.format_exc(), ORPG_GENERAL) | |
579 self.log.log("invalid line", ORPG_GENERAL) | |
580 continue | 470 continue |
581 line = WhiteboardLine(id, line_string, upperleft, lowerright, color, width, self.log) | 471 line = WhiteboardLine(id, line_string, upperleft, lowerright, color, width) |
582 self.lines.append(line) | 472 self.lines.append(line) |
583 elif nodename == "text": | 473 elif nodename == "text": |
584 try: | 474 try: |
585 text_string = l.getAttribute('text_string') | 475 text_string = l.getAttribute('text_string') |
586 style = l.getAttribute('style') | 476 style = l.getAttribute('style') |
593 posy = l.getAttribute('posy') | 483 posy = l.getAttribute('posy') |
594 pos = wx.Point(0,0) | 484 pos = wx.Point(0,0) |
595 pos.x = int(posx) | 485 pos.x = int(posx) |
596 pos.y = int(posy) | 486 pos.y = int(posy) |
597 except: | 487 except: |
598 self.log.log(traceback.format_exc(), ORPG_GENERAL) | |
599 self.log.log("invalid line", ORPG_GENERAL) | |
600 continue | 488 continue |
601 text = WhiteboardText(id, text_string, pos, style, pointsize, weight, color, self.log) | 489 text = WhiteboardText(id, text_string, pos, style, pointsize, weight, color) |
602 self.texts.append(text) | 490 self.texts.append(text) |
603 else: | 491 else: |
604 if nodename == "line": | 492 if nodename == "line": |
605 line = self.get_line_by_id(id) | 493 line = self.get_line_by_id(id) |
606 if line: line.takedom(l) | 494 if line: line.takedom(l) |
607 else: self.log.log("Whiteboard error: Update of unknown line attempted.", ORPG_GENERAL) | |
608 if nodename == "text": | 495 if nodename == "text": |
609 text = self.get_text_by_id(id) | 496 text = self.get_text_by_id(id) |
610 if text: text.takedom(l) | 497 if text: text.takedom(l) |
611 else: self.log.log("Whiteboard error: Update of unknown text attempted.", ORPG_GENERAL) | |
612 self.log.log("Enter whiteboard_layer->layerTakeDOM(self, xml_dom)", ORPG_DEBUG) | |
613 #self.canvas.send_map_data() | 498 #self.canvas.send_map_data() |
614 | 499 |
615 def add_temp_line(self, line_string): | 500 def add_temp_line(self, line_string): |
616 line = WhiteboardLine(0, line_string, wx.Point(0,0), wx.Point(0,0), | 501 line = WhiteboardLine(0, line_string, wx.Point(0,0), wx.Point(0,0), |
617 color=self.color, width=self.width, log=self.log) | 502 color=self.color, width=self.width) |
618 self.lines.append(line) | 503 self.lines.append(line) |
619 return line | 504 return line |
620 | 505 |
621 def del_temp_line(self, line): | 506 def del_temp_line(self, line): |
622 if line: self.lines.remove(line) | 507 if line: self.lines.remove(line) |