graphics/GraphicCommons.py
changeset 381 98890d848701
parent 372 8cab11dd2325
child 384 ed27a676d5c9
equal deleted inserted replaced
380:9ca678ee827f 381:98890d848701
    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: