90 # Contants for defining which drawing mode is selected for app |
90 # Contants for defining which drawing mode is selected for app |
91 [FREEDRAWING_MODE, DRIVENDRAWING_MODE] = [1, 2] |
91 [FREEDRAWING_MODE, DRIVENDRAWING_MODE] = [1, 2] |
92 |
92 |
93 # Color for Highlighting |
93 # Color for Highlighting |
94 HIGHLIGHTCOLOR = wx.CYAN |
94 HIGHLIGHTCOLOR = wx.CYAN |
95 |
|
96 CURSORS = None |
|
97 |
|
98 def ResetCursors(): |
|
99 global CURSORS |
|
100 if CURSORS == None: |
|
101 CURSORS = [wx.NullCursor, |
|
102 wx.StockCursor(wx.CURSOR_HAND), |
|
103 wx.StockCursor(wx.CURSOR_SIZENWSE), |
|
104 wx.StockCursor(wx.CURSOR_SIZENESW), |
|
105 wx.StockCursor(wx.CURSOR_SIZEWE), |
|
106 wx.StockCursor(wx.CURSOR_SIZENS)] |
|
107 |
95 |
108 HANDLE_CURSORS = { |
96 HANDLE_CURSORS = { |
109 (1, 1) : 2, |
97 (1, 1) : 2, |
110 (3, 3) : 2, |
98 (3, 3) : 2, |
111 (1, 3) : 3, |
99 (1, 3) : 3, |
468 self.Highlighted = False |
456 self.Highlighted = False |
469 self.Pos = wx.Point(0, 0) |
457 self.Pos = wx.Point(0, 0) |
470 self.Size = wx.Size(0, 0) |
458 self.Size = wx.Size(0, 0) |
471 self.BoundingBox = wx.Rect(0, 0, 0, 0) |
459 self.BoundingBox = wx.Rect(0, 0, 0, 0) |
472 self.Visible = False |
460 self.Visible = False |
473 self.CurrentCursor = 0 |
|
474 ResetCursors() |
|
475 |
461 |
476 def TestVisible(self, screen): |
462 def TestVisible(self, screen): |
477 self.Visible = self.GetRedrawRect().Intersects(screen) |
463 self.Visible = self.GetRedrawRect().Intersects(screen) |
478 |
464 |
479 def IsVisible(self): |
465 def IsVisible(self): |
628 # Test if an handle have been clicked |
614 # Test if an handle have been clicked |
629 handle = self.TestHandle(pos) |
615 handle = self.TestHandle(pos) |
630 # Find which type of handle have been clicked, |
616 # Find which type of handle have been clicked, |
631 # Save a resize event and change the cursor |
617 # Save a resize event and change the cursor |
632 cursor = HANDLE_CURSORS.get(handle, 1) |
618 cursor = HANDLE_CURSORS.get(handle, 1) |
633 if cursor != self.CurrentCursor: |
619 wx.CallAfter(self.Parent.SetCurrentCursor, cursor) |
634 self.Parent.SetCursor(CURSORS[cursor]) |
|
635 self.CurrentCursor = cursor |
|
636 if cursor > 1: |
620 if cursor > 1: |
637 self.Handle = (HANDLE_RESIZE, handle) |
621 self.Handle = (HANDLE_RESIZE, handle) |
638 else: |
622 else: |
639 self.Handle = (HANDLE_MOVE, None) |
623 self.Handle = (HANDLE_MOVE, None) |
640 self.SetSelected(False) |
624 self.SetSelected(False) |
647 def OnLeftUp(self, event, dc, scaling): |
631 def OnLeftUp(self, event, dc, scaling): |
648 # If a dragging have been initiated |
632 # If a dragging have been initiated |
649 if self.Dragging and self.oldPos: |
633 if self.Dragging and self.oldPos: |
650 self.RefreshModel() |
634 self.RefreshModel() |
651 self.Parent.RefreshBuffer() |
635 self.Parent.RefreshBuffer() |
652 if self.CurrentCursor != 0: |
636 wx.CallAfter(self.Parent.SetCurrentCursor, 0) |
653 self.Parent.SetCursor(CURSORS[0]) |
|
654 self.CurrentCursor = 0 |
|
655 self.SetSelected(True) |
637 self.SetSelected(True) |
656 self.oldPos = None |
638 self.oldPos = None |
657 |
639 |
658 # Method called when a RightDown event have been generated |
640 # Method called when a RightDown event have been generated |
659 def OnRightDown(self, event, dc, scaling): |
641 def OnRightDown(self, event, dc, scaling): |
662 # Method called when a RightUp event have been generated |
644 # Method called when a RightUp event have been generated |
663 def OnRightUp(self, event, dc, scaling): |
645 def OnRightUp(self, event, dc, scaling): |
664 if self.Dragging and self.oldPos: |
646 if self.Dragging and self.oldPos: |
665 self.RefreshModel() |
647 self.RefreshModel() |
666 self.Parent.RefreshBuffer() |
648 self.Parent.RefreshBuffer() |
667 if self.CurrentCursor != 0: |
649 wx.CallAfter(self.Parent.SetCurrentCursor, 0) |
668 self.Parent.SetCursor(CURSORS[0]) |
|
669 self.CurrentCursor = 0 |
|
670 self.SetSelected(True) |
650 self.SetSelected(True) |
671 self.oldPos = None |
651 self.oldPos = None |
672 |
652 |
673 # Method called when a LeftDClick event have been generated |
653 # Method called when a LeftDClick event have been generated |
674 def OnLeftDClick(self, event, dc, scaling): |
654 def OnLeftDClick(self, event, dc, scaling): |
701 pos = event.GetLogicalPosition(dc) |
681 pos = event.GetLogicalPosition(dc) |
702 handle = self.TestHandle(pos) |
682 handle = self.TestHandle(pos) |
703 # Find which type of handle have been clicked, |
683 # Find which type of handle have been clicked, |
704 # Save a resize event and change the cursor |
684 # Save a resize event and change the cursor |
705 cursor = HANDLE_CURSORS.get(handle, 0) |
685 cursor = HANDLE_CURSORS.get(handle, 0) |
706 if cursor != self.CurrentCursor: |
686 wx.CallAfter(self.Parent.SetCurrentCursor, cursor) |
707 self.Parent.SetCursor(CURSORS[cursor]) |
|
708 self.CurrentCursor = cursor |
|
709 return 0, 0 |
687 return 0, 0 |
710 |
688 |
711 # Moves the element |
689 # Moves the element |
712 def Move(self, dx, dy, exclude = []): |
690 def Move(self, dx, dy, exclude = []): |
713 self.Pos.x += dx |
691 self.Pos.x += dx |
2372 pos = GetScaledEventPosition(event, dc, scaling) |
2350 pos = GetScaledEventPosition(event, dc, scaling) |
2373 # Test if a point have been handled |
2351 # Test if a point have been handled |
2374 #result = self.TestPoint(pos) |
2352 #result = self.TestPoint(pos) |
2375 #if result != None: |
2353 #if result != None: |
2376 # self.Handle = (HANDLE_POINT, result) |
2354 # self.Handle = (HANDLE_POINT, result) |
2377 # self.Parent.SetCursor(wx.StockCursor(wx.CURSOR_HAND)) |
2355 # wx.CallAfter(self.Parent.SetCurrentCursor, 1) |
2378 #else: |
2356 #else: |
2379 # Test if a segment have been handled |
2357 # Test if a segment have been handled |
2380 result = self.TestSegment(pos) |
2358 result = self.TestSegment(pos) |
2381 if result != None: |
2359 if result != None: |
2382 if result[1] in (NORTH, SOUTH): |
2360 if result[1] in (NORTH, SOUTH): |
2383 self.Parent.SetCursor(wx.StockCursor(wx.CURSOR_SIZEWE)) |
2361 wx.CallAfter(self.Parent.SetCurrentCursor, 4) |
2384 elif result[1] in (EAST, WEST): |
2362 elif result[1] in (EAST, WEST): |
2385 self.Parent.SetCursor(wx.StockCursor(wx.CURSOR_SIZENS)) |
2363 wx.CallAfter(self.Parent.SetCurrentCursor, 5) |
2386 self.Handle = (HANDLE_SEGMENT, result) |
2364 self.Handle = (HANDLE_SEGMENT, result) |
2387 # Execute the default method for a graphic element |
2365 # Execute the default method for a graphic element |
2388 else: |
2366 else: |
2389 Graphic_Element.OnLeftDown(self, event, dc, scaling) |
2367 Graphic_Element.OnLeftDown(self, event, dc, scaling) |
2390 self.oldPos = pos |
2368 self.oldPos = pos |
2459 if not event.Dragging(): |
2437 if not event.Dragging(): |
2460 # Test if a segment has been handled |
2438 # Test if a segment has been handled |
2461 result = self.TestSegment(pos) |
2439 result = self.TestSegment(pos) |
2462 if result: |
2440 if result: |
2463 if result[1] in (NORTH, SOUTH): |
2441 if result[1] in (NORTH, SOUTH): |
2464 if self.CurrentCursor != 4: |
2442 wx.CallAfter(self.Parent.SetCurrentCursor, 4) |
2465 self.CurrentCursor = 4 |
|
2466 wx.CallAfter(self.Parent.SetCursor, CURSORS[4]) |
|
2467 elif result[1] in (EAST, WEST): |
2443 elif result[1] in (EAST, WEST): |
2468 if self.CurrentCursor != 5: |
2444 wx.CallAfter(self.Parent.SetCurrentCursor, 5) |
2469 self.CurrentCursor = 5 |
|
2470 wx.CallAfter(self.Parent.SetCursor, CURSORS[5]) |
|
2471 return 0, 0 |
2445 return 0, 0 |
2472 else: |
2446 else: |
2473 # Test if a point has been handled |
2447 # Test if a point has been handled |
2474 #result = self.TestPoint(pos) |
2448 #result = self.TestPoint(pos) |
2475 #if result != None: |
2449 #if result != None: |