X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1f780e48af479e7bf9a07eaaa1ab6b41f1ffb17b..b81383bbd984f1b0aad8db92d7be069f2a23fa74:/wxPython/samples/ide/activegrid/tool/AbstractEditor.py diff --git a/wxPython/samples/ide/activegrid/tool/AbstractEditor.py b/wxPython/samples/ide/activegrid/tool/AbstractEditor.py index 8bda44696d..8369738428 100644 --- a/wxPython/samples/ide/activegrid/tool/AbstractEditor.py +++ b/wxPython/samples/ide/activegrid/tool/AbstractEditor.py @@ -21,6 +21,7 @@ _ = wx.GetTranslation SELECT_BRUSH = wx.Brush("BLUE", wx.SOLID) SHAPE_BRUSH = wx.Brush("WHEAT", wx.SOLID) LINE_BRUSH = wx.BLACK_BRUSH +INACTIVE_SELECT_BRUSH = wx.Brush("LIGHT BLUE", wx.SOLID) def GetRawModel(model): @@ -59,15 +60,42 @@ class CanvasView(wx.lib.docview.View): frame.Layout() self.Activate() return True - + def OnActivateView(self, activate, activeView, deactiveView): if activate and self._canvas: # In MDI mode just calling set focus doesn't work and in SDI mode using CallAfter causes an endless loop if self.GetDocumentManager().GetFlags() & wx.lib.docview.DOC_SDI: - self._canvas.SetFocus() + self.SetFocus() else: - wx.CallAfter(self._canvas.SetFocus) + wx.CallAfter(self.SetFocus) + + + def SetFocus(self): + if self._canvas: + self._canvas.SetFocus() + + + def OnFocus(self, event): + self.SetFocus() + self.FocusColorPropertyShape(True) + event.Skip() + + + def OnKillFocus(self, event): + self.FocusColorPropertyShape(False) + event.Skip() + + + def HasFocus(self): + winWithFocus = wx.Window.FindFocus() + if not winWithFocus: + return False + while winWithFocus: + if winWithFocus == self._canvas: + return True + winWithFocus = winWithFocus.GetParent() + return False def OnClose(self, deleteWindow = True): @@ -90,6 +118,17 @@ class CanvasView(wx.lib.docview.View): wx.EVT_MOTION(self._canvas, self.OnLeftDrag) wx.EVT_LEFT_DCLICK(self._canvas, self.OnLeftDoubleClick) wx.EVT_KEY_DOWN(self._canvas, self.OnKeyPressed) + + # need this otherwise mouse clicks don't set focus to this view + wx.EVT_LEFT_DOWN(self._canvas, self.OnFocus) + wx.EVT_LEFT_DCLICK(self._canvas, self.OnFocus) + wx.EVT_RIGHT_DOWN(self._canvas, self.OnFocus) + wx.EVT_RIGHT_DCLICK(self._canvas, self.OnFocus) + wx.EVT_MIDDLE_DOWN(self._canvas, self.OnFocus) + wx.EVT_MIDDLE_DCLICK(self._canvas, self.OnFocus) + + wx.EVT_KILL_FOCUS(self._canvas, self.OnKillFocus) + wx.EVT_SET_FOCUS(self._canvas, self.OnFocus) maxWidth = 2000 maxHeight = 16000 @@ -505,7 +544,36 @@ class CanvasView(wx.lib.docview.View): # draw new selection if self._propShape and self._propShape in self._diagram.GetShapeList(): - self._propShape.SetBrush(SELECT_BRUSH) + if self.HasFocus(): + self._propShape.SetBrush(SELECT_BRUSH) + else: + self._propShape.SetBrush(INACTIVE_SELECT_BRUSH) + if (self._propShape._textColourName in ["BLACK", "WHITE"]): # Would use GetTextColour() but it is broken + self._propShape.SetTextColour("WHITE", 0) + self._propShape.Draw(dc) + + dc.EndDrawing() + + + def FocusColorPropertyShape(self, gotFocus=False): + # no need to change highlight if no PropertyService is running + propertyService = wx.GetApp().GetService(PropertyService.PropertyService) + if not propertyService: + return + + if not self._propShape: + return + + dc = wx.ClientDC(self._canvas) + self._canvas.PrepareDC(dc) + dc.BeginDrawing() + + # draw deactivated selection + if self._propShape and self._propShape in self._diagram.GetShapeList(): + if gotFocus: + self._propShape.SetBrush(SELECT_BRUSH) + else: + self._propShape.SetBrush(INACTIVE_SELECT_BRUSH) if (self._propShape._textColourName in ["BLACK", "WHITE"]): # Would use GetTextColour() but it is broken self._propShape.SetTextColour("WHITE", 0) self._propShape.Draw(dc)