257 for i, rung in enumerate(self.Rungs): |
257 for i, rung in enumerate(self.Rungs): |
258 if rung.IsElementIn(element): |
258 if rung.IsElementIn(element): |
259 return i |
259 return i |
260 return None |
260 return None |
261 |
261 |
262 def FindElement(self, pos, exclude_group = False): |
262 def FindElement(self, event, exclude_group = False): |
263 if self.GetDrawingMode() == FREEDRAWING_MODE: |
263 if self.GetDrawingMode() == FREEDRAWING_MODE: |
264 return Viewer.FindElement(self, pos, exclude_group) |
264 return Viewer.FindElement(self, event, exclude_group) |
265 |
265 |
|
266 dc = self.GetLogicalDC() |
|
267 pos = event.GetLogicalPosition(dc) |
266 if self.SelectedElement and not isinstance(self.SelectedElement, (Graphic_Group, Wire)): |
268 if self.SelectedElement and not isinstance(self.SelectedElement, (Graphic_Group, Wire)): |
267 if self.SelectedElement.HitTest(pos) or self.SelectedElement.TestHandle(pos) != (0, 0): |
269 if self.SelectedElement.HitTest(pos) or self.SelectedElement.TestHandle(pos) != (0, 0): |
268 return self.SelectedElement |
270 return self.SelectedElement |
269 elements = [] |
271 elements = [] |
270 for element in self.GetElements(sort_wires=True): |
272 for element in self.GetElements(sort_wires=True): |
271 if element.HitTest(pos) or element.TestHandle(pos) != (0, 0): |
273 if element.HitTest(pos) or element.TestHandle(event) != (0, 0): |
272 elements.append(element) |
274 elements.append(element) |
273 if len(elements) == 1: |
275 if len(elements) == 1: |
274 return elements[0] |
276 return elements[0] |
275 elif len(elements) > 1: |
277 elif len(elements) > 1: |
276 group = Graphic_Group(self) |
278 group = Graphic_Group(self) |
294 |
296 |
295 def OnViewerLeftDown(self, event): |
297 def OnViewerLeftDown(self, event): |
296 if self.GetDrawingMode() == FREEDRAWING_MODE: |
298 if self.GetDrawingMode() == FREEDRAWING_MODE: |
297 Viewer.OnViewerLeftDown(self, event) |
299 Viewer.OnViewerLeftDown(self, event) |
298 elif self.Mode == MODE_SELECTION: |
300 elif self.Mode == MODE_SELECTION: |
299 dc = self.GetLogicalDC() |
301 element = self.FindElement(event) |
300 pos = event.GetLogicalPosition(dc) |
|
301 element = self.FindElement(pos) |
|
302 if self.SelectedElement: |
302 if self.SelectedElement: |
303 if not isinstance(self.SelectedElement, Graphic_Group): |
303 if not isinstance(self.SelectedElement, Graphic_Group): |
304 if self.SelectedElement != element: |
304 if self.SelectedElement != element: |
305 if self.IsWire(self.SelectedElement): |
305 if self.IsWire(self.SelectedElement): |
306 self.SelectedElement.SetSelectedSegment(None) |
306 self.SelectedElement.SetSelectedSegment(None) |
321 elt.SetSelectedSegment(None) |
321 elt.SetSelectedSegment(None) |
322 self.SelectedElement.SetSelected(False) |
322 self.SelectedElement.SetSelected(False) |
323 self.SelectedElement = None |
323 self.SelectedElement = None |
324 if element: |
324 if element: |
325 self.SelectedElement = element |
325 self.SelectedElement = element |
326 self.SelectedElement.OnLeftDown(event, dc, self.Scaling) |
326 self.SelectedElement.OnLeftDown(event, self.GetLogicalDC(), self.Scaling) |
327 self.SelectedElement.Refresh() |
327 self.SelectedElement.Refresh() |
328 else: |
328 else: |
329 self.rubberBand.Reset() |
329 self.rubberBand.Reset() |
330 self.rubberBand.OnLeftDown(event, dc, self.Scaling) |
330 self.rubberBand.OnLeftDown(event, self.GetLogicalDC(), self.Scaling) |
331 event.Skip() |
331 event.Skip() |
332 |
332 |
333 def OnViewerLeftUp(self, event): |
333 def OnViewerLeftUp(self, event): |
334 if self.GetDrawingMode() == FREEDRAWING_MODE: |
334 if self.GetDrawingMode() == FREEDRAWING_MODE: |
335 Viewer.OnViewerLeftUp(self, event) |
335 Viewer.OnViewerLeftUp(self, event) |
364 |
364 |
365 def OnViewerRightUp(self, event): |
365 def OnViewerRightUp(self, event): |
366 if self.GetDrawingMode() == FREEDRAWING_MODE: |
366 if self.GetDrawingMode() == FREEDRAWING_MODE: |
367 Viewer.OnViewerRightUp(self, event) |
367 Viewer.OnViewerRightUp(self, event) |
368 else: |
368 else: |
369 dc = self.GetLogicalDC() |
369 element = self.FindElement(event) |
370 pos = event.GetLogicalPosition(dc) |
|
371 element = self.FindElement(pos) |
|
372 if element: |
370 if element: |
373 if self.SelectedElement and self.SelectedElement != element: |
371 if self.SelectedElement and self.SelectedElement != element: |
374 self.SelectedElement.SetSelected(False) |
372 self.SelectedElement.SetSelected(False) |
375 self.SelectedElement = element |
373 self.SelectedElement = element |
376 if self.IsWire(self.SelectedElement): |
374 if self.IsWire(self.SelectedElement): |
377 self.SelectedElement.SetSelectedSegment(0) |
375 self.SelectedElement.SetSelectedSegment(0) |
378 else: |
376 else: |
379 self.SelectedElement.SetSelected(True) |
377 self.SelectedElement.SetSelected(True) |
380 self.SelectedElement.OnRightUp(event, dc, self.Scaling) |
378 self.SelectedElement.OnRightUp(event, self.GetLogicalDC(), self.Scaling) |
381 self.SelectedElement.Refresh() |
379 self.SelectedElement.Refresh() |
382 wx.CallAfter(self.SetCurrentCursor, 0) |
380 wx.CallAfter(self.SetCurrentCursor, 0) |
383 event.Skip() |
381 event.Skip() |
384 |
382 |
385 #------------------------------------------------------------------------------- |
383 #------------------------------------------------------------------------------- |