updates from Andrea

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41978 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn
2006-10-12 23:24:40 +00:00
parent c66068835e
commit 331139716c

View File

@@ -11,7 +11,7 @@
# Python Code By: # Python Code By:
# #
# Andrea Gavana, @ 02 Oct 2006 # Andrea Gavana, @ 02 Oct 2006
# Latest Revision: 10 Oct 2006, 21.00 GMT # Latest Revision: 12 Oct 2006, 20.00 GMT
# #
# #
# For All Kind Of Problems, Requests Of Enhancements And Bug Reports, Please # For All Kind Of Problems, Requests Of Enhancements And Bug Reports, Please
@@ -58,7 +58,7 @@ License And Version:
FlatNotebook Is Freeware And Distributed Under The wxPython License. FlatNotebook Is Freeware And Distributed Under The wxPython License.
Latest Revision: Andrea Gavana @ 10 Oct 2006, 21.00 GMT Latest Revision: Andrea Gavana @ 12 Oct 2006, 20.00 GMT
Version 2.0. Version 2.0.
@@ -713,6 +713,31 @@ def PaintStraightGradientBox(dc, rect, startColor, endColor, vertical=True):
dc.SetBrush(savedBrush) dc.SetBrush(savedBrush)
# ---------------------------------------------------------------------------- #
# Class FNBDropSource
# Gives Some Custom UI Feedback during the DnD Operations
# ---------------------------------------------------------------------------- #
class FNBDropSource(wx.DropSource):
"""
Give some custom UI feedback during the drag and drop operation in this
function. It is called on each mouse move, so your implementation must
not be too slow.
"""
def __init__(self, win):
""" Default class constructor. Used internally. """
wx.DropSource.__init__(self, win)
self._win = win
def GiveFeedback(self, effect):
""" Provides user with a nice feedback when tab is being dragged. """
self._win.DrawDragHint()
return False
# ---------------------------------------------------------------------------- # # ---------------------------------------------------------------------------- #
# Class FNBDragInfo # Class FNBDragInfo
@@ -1129,7 +1154,7 @@ class TabNavigatorWindow(wx.Dialog):
bk = self.GetParent() bk = self.GetParent()
self._selectedItem = self._listBox.GetSelection() self._selectedItem = self._listBox.GetSelection()
iter = self._indexMap[self._selectedItem] iter = self._indexMap[self._selectedItem]
bk.SetSelection(iter) bk._pages.FireEvent(iter)
self.EndModal(wx.ID_OK) self.EndModal(wx.ID_OK)
@@ -1194,6 +1219,7 @@ class FNBRenderer:
self._xBgBmp = wx.EmptyBitmap(16, 14) self._xBgBmp = wx.EmptyBitmap(16, 14)
self._leftBgBmp = wx.EmptyBitmap(16, 14) self._leftBgBmp = wx.EmptyBitmap(16, 14)
self._rightBgBmp = wx.EmptyBitmap(16, 14) self._rightBgBmp = wx.EmptyBitmap(16, 14)
self._tabHeight = None
def GetLeftButtonPos(self, pageContainer): def GetLeftButtonPos(self, pageContainer):
@@ -1549,6 +1575,9 @@ class FNBRenderer:
def CalcTabHeight(self, pageContainer): def CalcTabHeight(self, pageContainer):
""" Calculates the height of the input tab. """ """ Calculates the height of the input tab. """
if self._tabHeight:
return self._tabHeight
pc = pageContainer pc = pageContainer
dc = wx.MemoryDC() dc = wx.MemoryDC()
dc.SelectObject(wx.EmptyBitmap(1,1)) dc.SelectObject(wx.EmptyBitmap(1,1))
@@ -1558,6 +1587,8 @@ class FNBRenderer:
# on MSW, preforming these steps yields wierd results # on MSW, preforming these steps yields wierd results
normalFont = wx.SystemSettings_GetFont(wx.SYS_DEFAULT_GUI_FONT) normalFont = wx.SystemSettings_GetFont(wx.SYS_DEFAULT_GUI_FONT)
boldFont = normalFont boldFont = normalFont
if "__WXGTK__" in wx.PlatformInfo:
boldFont.SetWeight(wx.FONTWEIGHT_BOLD) boldFont.SetWeight(wx.FONTWEIGHT_BOLD)
dc.SetFont(boldFont) dc.SetFont(boldFont)
@@ -1568,10 +1599,7 @@ class FNBRenderer:
# On GTK the tabs are should be larger # On GTK the tabs are should be larger
tabHeight += 6 tabHeight += 6
if pc.HasFlag(FNB_VC71): self._tabHeight = tabHeight
tabHeight = (pc.HasFlag(FNB_BOTTOM) and [tabHeight - 4] or [tabHeight])[0]
elif pc.HasFlag(FNB_FANCY_TABS):
tabHeight = (pc.HasFlag(FNB_BOTTOM) and [tabHeight - 2] or [tabHeight])[0]
return tabHeight return tabHeight
@@ -1679,13 +1707,13 @@ class FNBRenderer:
# Draw labels # Draw labels
normalFont = wx.SystemSettings_GetFont(wx.SYS_DEFAULT_GUI_FONT) normalFont = wx.SystemSettings_GetFont(wx.SYS_DEFAULT_GUI_FONT)
boldFont = normalFont boldFont = wx.SystemSettings_GetFont(wx.SYS_DEFAULT_GUI_FONT)
boldFont.SetWeight(wx.FONTWEIGHT_BOLD) boldFont.SetWeight(wx.FONTWEIGHT_BOLD)
dc.SetFont(boldFont) dc.SetFont(boldFont)
posx = pc._pParent.GetPadding() posx = pc._pParent.GetPadding()
# Update all the tabs from 0 to 'pc.self._nFrom' to be non visible # Update all the tabs from 0 to 'pc._nFrom' to be non visible
for i in xrange(pc._nFrom): for i in xrange(pc._nFrom):
pc._pagesInfoVec[i].SetPosition(wx.Point(-1, -1)) pc._pagesInfoVec[i].SetPosition(wx.Point(-1, -1))
@@ -1751,6 +1779,15 @@ class FNBRenderer:
self.DrawDropDownArrow(pc, dc) self.DrawDropDownArrow(pc, dc)
def DrawDragHint(self, pc, tabIdx):
"""
Draws tab drag hint, the default implementation is to do nothing.
You can override this function to provide a nice feedback to user.
"""
pass
# ---------------------------------------------------------------------------- # # ---------------------------------------------------------------------------- #
# Class FNBRendererMgr # Class FNBRendererMgr
# A manager that handles all the renderers defined below and calls the # A manager that handles all the renderers defined below and calls the
@@ -1947,14 +1984,15 @@ class FNBRendererVC71(FNBRenderer):
if tabIdx == pc.GetSelection(): if tabIdx == pc.GetSelection():
posy = (pc.HasFlag(FNB_BOTTOM) and [0] or [VERTICAL_BORDER_PADDING])[0] posy = (pc.HasFlag(FNB_BOTTOM) and [0] or [VERTICAL_BORDER_PADDING])[0]
dc.DrawRectangle(posx, posy, tabWidth, tabHeight - 1) tabH = (pc.HasFlag(FNB_BOTTOM) and [tabHeight - 5] or [tabHeight - 3])[0]
dc.DrawRectangle(posx, posy, tabWidth, tabH)
# Draw a black line on the left side of the # Draw a black line on the left side of the
# rectangle # rectangle
dc.SetPen(wx.BLACK_PEN) dc.SetPen(wx.BLACK_PEN)
blackLineY1 = VERTICAL_BORDER_PADDING blackLineY1 = VERTICAL_BORDER_PADDING
blackLineY2 = (pc.HasFlag(FNB_BOTTOM) and [pc.GetSize().y - 5] or [pc.GetSize().y - 3])[0] blackLineY2 = tabH
dc.DrawLine(posx + tabWidth, blackLineY1, posx + tabWidth, blackLineY2) dc.DrawLine(posx + tabWidth, blackLineY1, posx + tabWidth, blackLineY2)
# To give the tab more 3D look we do the following # To give the tab more 3D look we do the following
@@ -1993,7 +2031,7 @@ class FNBRendererVC71(FNBRenderer):
# The width of the images are 16 pixels # The width of the images are 16 pixels
padding = pc.GetParent().GetPadding() padding = pc.GetParent().GetPadding()
hasImage = pc._pagesInfoVec[tabIdx].GetImageIndex() != -1 hasImage = pc._pagesInfoVec[tabIdx].GetImageIndex() != -1
imageYCoord = (pc.HasFlag(FNB_BOTTOM) and [6] or [8])[0] imageYCoord = (pc.HasFlag(FNB_BOTTOM) and [5] or [8])[0]
if hasImage: if hasImage:
textOffset = 2*pc._pParent._nPadding + 16 textOffset = 2*pc._pParent._nPadding + 16
@@ -2058,7 +2096,7 @@ class FNBRendererFancy(FNBRenderer):
if tabIdx == pc.GetSelection(): if tabIdx == pc.GetSelection():
posy = (pc.HasFlag(FNB_BOTTOM) and [2] or [VERTICAL_BORDER_PADDING])[0] posy = (pc.HasFlag(FNB_BOTTOM) and [2] or [VERTICAL_BORDER_PADDING])[0]
th = (pc.HasFlag(FNB_BOTTOM) and [tabHeight - 2] or [tabHeight - 5])[0] th = tabHeight - 5
rect = wx.Rect(posx, posy, tabWidth, th) rect = wx.Rect(posx, posy, tabWidth, th)
@@ -2166,7 +2204,7 @@ class FNBRendererVC8(FNBRenderer):
# Set the font for measuring the tab height # Set the font for measuring the tab height
normalFont = wx.SystemSettings_GetFont(wx.SYS_DEFAULT_GUI_FONT) normalFont = wx.SystemSettings_GetFont(wx.SYS_DEFAULT_GUI_FONT)
boldFont = normalFont boldFont = wx.SystemSettings_GetFont(wx.SYS_DEFAULT_GUI_FONT)
boldFont.SetWeight(wx.FONTWEIGHT_BOLD) boldFont.SetWeight(wx.FONTWEIGHT_BOLD)
# Calculate the number of rows required for drawing the tabs # Calculate the number of rows required for drawing the tabs
@@ -2752,9 +2790,15 @@ class FlatNotebook(wx.Panel):
# Set default page height # Set default page height
dc = wx.ClientDC(self) dc = wx.ClientDC(self)
font = self.GetFont()
font.SetWeight(wx.FONTWEIGHT_BOLD) if "__WXGTK__" in wx.PlatformInfo:
dc.SetFont(font) # For GTK it seems that we must do this steps in order
# for the tabs will get the proper height on initialization
# on MSW, preforming these steps yields wierd results
boldFont = wx.SystemSettings_GetFont(wx.SYS_DEFAULT_GUI_FONT)
boldFont.SetWeight(wx.FONTWEIGHT_BOLD)
dc.SetFont(boldFont)
height = dc.GetCharHeight() height = dc.GetCharHeight()
tabHeight = height + FNB_HEIGHT_SPACER # We use 8 pixels as padding tabHeight = height + FNB_HEIGHT_SPACER # We use 8 pixels as padding
@@ -2826,7 +2870,7 @@ class FlatNotebook(wx.Panel):
event.SetOldSelection(oldSelection) event.SetOldSelection(oldSelection)
event.SetEventObject(self) event.SetEventObject(self)
if not self.GetEventHandler().ProcessEvent(event) or event.IsAllowed(): if not self.GetEventHandler().ProcessEvent(event) or event.IsAllowed() or len(self._windows) == 0:
bSelected = True bSelected = True
curSel = self._pages.GetSelection() curSel = self._pages.GetSelection()
@@ -2867,20 +2911,20 @@ class FlatNotebook(wx.Panel):
# Hide the page # Hide the page
page.Hide() page.Hide()
self._mainSizer.Layout()
self.Thaw() self.Thaw()
self._mainSizer.Layout()
self.Refresh() self.Refresh()
return True return True
def SetImageList(self, imglist): def SetImageList(self, imageList):
""" """
Sets the image list for the page control. It does not take ownership Sets the image list for the page control. It does not take ownership
of the image list, you must delete it yourself. of the image list, you must delete it yourself.
""" """
self._pages.SetImageList(imglist) self._pages.SetImageList(imageList)
def GetImageList(self): def GetImageList(self):
@@ -2941,7 +2985,7 @@ class FlatNotebook(wx.Panel):
event.SetOldSelection(oldSelection) event.SetOldSelection(oldSelection)
event.SetEventObject(self) event.SetEventObject(self)
if not self.GetEventHandler().ProcessEvent(event) or event.IsAllowed(): if not self.GetEventHandler().ProcessEvent(event) or event.IsAllowed() or len(self._windows) == 0:
bSelected = True bSelected = True
self._pages.InsertPage(indx, text, bSelected, imageId) self._pages.InsertPage(indx, text, bSelected, imageId)
@@ -3124,17 +3168,18 @@ class FlatNotebook(wx.Panel):
return self._pages.GetSelection() return self._pages.GetSelection()
def AdvanceSelection(self, bForward=True): def AdvanceSelection(self, forward=True):
""" """
Cycles through the tabs. Cycles through the tabs.
The call to this function generates the page changing events. The call to this function generates the page changing events.
""" """
self._pages.AdvanceSelection(bForward) self._pages.AdvanceSelection(forward)
def GetPageCount(self): def GetPageCount(self):
""" Returns the number of pages in the L{FlatNotebook} control. """ """ Returns the number of pages in the L{FlatNotebook} control. """
return self._pages.GetPageCount() return self._pages.GetPageCount()
@@ -3142,6 +3187,8 @@ class FlatNotebook(wx.Panel):
""" Handles the wx.EVT_NAVIGATION_KEY event for L{FlatNotebook}. """ """ Handles the wx.EVT_NAVIGATION_KEY event for L{FlatNotebook}. """
if event.IsWindowChange(): if event.IsWindowChange():
if len(self._windows) == 0:
return
# change pages # change pages
if self.HasFlag(FNB_SMART_TABS): if self.HasFlag(FNB_SMART_TABS):
if not self._popupWin: if not self._popupWin:
@@ -3238,6 +3285,8 @@ class FlatNotebook(wx.Panel):
""" Sets the L{FlatNotebook} window style flags. """ """ Sets the L{FlatNotebook} window style flags. """
wx.Panel.SetWindowStyleFlag(self, style) wx.Panel.SetWindowStyleFlag(self, style)
renderer = self._pages._mgr.GetRenderer(self.GetWindowStyleFlag())
renderer._tabHeight = None
if self._pages: if self._pages:
@@ -3287,10 +3336,10 @@ class FlatNotebook(wx.Panel):
self._pages._pRightClickMenu = menu self._pages._pRightClickMenu = menu
def GetPageText(self, page): def GetPageText(self, nPage):
""" Returns the tab caption. """ """ Returns the tab caption. """
return self._pages.GetPageText(page) return self._pages.GetPageText(nPage)
def SetGradientColours(self, fr, to, border): def SetGradientColours(self, fr, to, border):
@@ -3349,22 +3398,22 @@ class FlatNotebook(wx.Panel):
return self._pages._activeTextColor return self._pages._activeTextColor
def SetPageImage(self, page, imgindex): def SetPageImage(self, page, image):
""" """
Sets the image index for the given page. Image is an index into the Sets the image index for the given page. Image is an index into the
image list which was set with SetImageList. image list which was set with SetImageList.
""" """
self._pages.SetPageImage(page, imgindex) self._pages.SetPageImage(page, image)
def GetPageImage(self, page): def GetPageImage(self, nPage):
""" """
Returns the image index for the given page. Image is an index into the Returns the image index for the given page. Image is an index into the
image list which was set with SetImageList. image list which was set with SetImageList.
""" """
return self._pages.GetPageImage(page) return self._pages.GetPageImage(nPage)
def GetEnabled(self, page): def GetEnabled(self, page):
@@ -3462,8 +3511,9 @@ class PageContainer(wx.Panel):
# Set default page height, this is done according to the system font # Set default page height, this is done according to the system font
memDc = wx.MemoryDC() memDc = wx.MemoryDC()
memDc.SelectObject(wx.EmptyBitmap(1,1)) memDc.SelectObject(wx.EmptyBitmap(1,1))
normalFont = wx.SystemSettings_GetFont(wx.SYS_DEFAULT_GUI_FONT)
boldFont = normalFont if "__WXGTK__" in wx.PlatformInfo:
boldFont = wx.SystemSettings_GetFont(wx.SYS_DEFAULT_GUI_FONT)
boldFont.SetWeight(wx.BOLD) boldFont.SetWeight(wx.BOLD)
memDc.SetFont(boldFont) memDc.SetFont(boldFont)
@@ -3501,17 +3551,19 @@ class PageContainer(wx.Panel):
# Currently having problems with buffered DCs because of # Currently having problems with buffered DCs because of
# recent changes. Just do the buffering ourselves instead. # recent changes. Just do the buffering ourselves instead.
#dc = wx.BufferedPaintDC(self) dc = wx.BufferedPaintDC(self)
size = self.GetSize() #dc = wx.AutoBufferedPaintDC(self)
bmp = wx.EmptyBitmap(*size) #dc = wx.AutoBufferedPaintDCFactory(self)
dc = wx.MemoryDC() ## size = self.GetSize()
dc.SelectObject(bmp) ## bmp = wx.EmptyBitmap(*size)
## dc = wx.MemoryDC()
## dc.SelectObject(bmp)
renderer = self._mgr.GetRenderer(self.GetParent().GetWindowStyleFlag()) renderer = self._mgr.GetRenderer(self.GetParent().GetWindowStyleFlag())
renderer.DrawTabs(self, dc) renderer.DrawTabs(self, dc)
pdc = wx.PaintDC(self) ## pdc = wx.PaintDC(self)
pdc.Blit(0,0, size.width, size.height, dc, 0,0) ## pdc.Blit(0,0, size.width, size.height, dc, 0,0)
def AddPage(self, caption, selected=True, imgindex=-1): def AddPage(self, caption, selected=True, imgindex=-1):
@@ -3649,22 +3701,7 @@ class PageContainer(wx.Panel):
# In case the tab is disabled, we dont allow to choose it # In case the tab is disabled, we dont allow to choose it
if self._pagesInfoVec[tabIdx].GetEnabled(): if self._pagesInfoVec[tabIdx].GetEnabled():
self.FireEvent(tabIdx)
oldSelection = self._iActivePage
event = FlatNotebookEvent(wxEVT_FLATNOTEBOOK_PAGE_CHANGING, self.GetParent().GetId())
event.SetSelection(tabIdx)
event.SetOldSelection(oldSelection)
event.SetEventObject(self.GetParent())
if not self.GetParent().GetEventHandler().ProcessEvent(event) or event.IsAllowed():
self.SetSelection(tabIdx)
# Fire a wxEVT_FLATNOTEBOOK_PAGE_CHANGED event
event.SetEventType(wxEVT_FLATNOTEBOOK_PAGE_CHANGED)
event.SetOldSelection(oldSelection)
self.GetParent().GetEventHandler().ProcessEvent(event)
def OnLeftUp(self, event): def OnLeftUp(self, event):
@@ -4033,14 +4070,14 @@ class PageContainer(wx.Panel):
wx.SetCursor(wx.StockCursor(wx.CURSOR_NO_ENTRY)) wx.SetCursor(wx.StockCursor(wx.CURSOR_NO_ENTRY))
# Support for drag and drop # Support for drag and drop
if event.LeftIsDown() and not (style & FNB_NODRAG): if event.Dragging() and not (style & FNB_NODRAG):
self._isdragging = True self._isdragging = True
draginfo = FNBDragInfo(self, tabIdx) draginfo = FNBDragInfo(self, tabIdx)
drginfo = cPickle.dumps(draginfo) drginfo = cPickle.dumps(draginfo)
dataobject = wx.CustomDataObject(wx.CustomDataFormat("FlatNotebook")) dataobject = wx.CustomDataObject(wx.CustomDataFormat("FlatNotebook"))
dataobject.SetData(drginfo) dataobject.SetData(drginfo)
dragSource = wx.DropSource(self) dragSource = FNBDropSource(self)
dragSource.SetData(dataobject) dragSource.SetData(dataobject)
dragSource.DoDragDrop(wx.Drag_DefaultMove) dragSource.DoDragDrop(wx.Drag_DefaultMove)
@@ -4178,7 +4215,6 @@ class PageContainer(wx.Panel):
nMax = self.GetPageCount() - 1 nMax = self.GetPageCount() - 1
oldSelection = self._iActivePage
if bForward: if bForward:
newSelection = (nSel == nMax and [0] or [nSel + 1])[0] newSelection = (nSel == nMax and [0] or [nSel + 1])[0]
else: else:
@@ -4187,19 +4223,7 @@ class PageContainer(wx.Panel):
if not self._pagesInfoVec[newSelection].GetEnabled(): if not self._pagesInfoVec[newSelection].GetEnabled():
return return
event = FlatNotebookEvent(wxEVT_FLATNOTEBOOK_PAGE_CHANGING, self.GetParent().GetId()) self.FireEvent(newSelection)
event.SetSelection(newSelection)
event.SetOldSelection(oldSelection)
event.SetEventObject(self.GetParent())
if not self.GetParent().GetEventHandler().ProcessEvent(event) or event.IsAllowed():
self.SetSelection(newSelection)
# Fire a wxEVT_FLATNOTEBOOK_PAGE_CHANGED event
event.SetEventType(wxEVT_FLATNOTEBOOK_PAGE_CHANGED)
event.SetOldSelection(oldSelection)
self.GetParent().GetEventHandler().ProcessEvent(event)
def OnMouseLeave(self, event): def OnMouseLeave(self, event):
@@ -4321,7 +4345,7 @@ class PageContainer(wx.Panel):
if imageindex >= 0: if imageindex >= 0:
bmp = oldNotebook.GetImageList().GetBitmap(imageindex) bmp = oldNotebook.GetImageList().GetIcon(imageindex)
newImageList = newNotebook.GetImageList() newImageList = newNotebook.GetImageList()
if not newImageList: if not newImageList:
@@ -4331,7 +4355,7 @@ class PageContainer(wx.Panel):
else: else:
imageindex = newImageList.GetImageCount() imageindex = newImageList.GetImageCount()
newImageList.Add(bmp) newImageList.AddIcon(bmp)
newNotebook.SetImageList(newImageList) newNotebook.SetImageList(newImageList)
newNotebook.InsertPage(nIndex, window, caption, True, imageindex) newNotebook.InsertPage(nIndex, window, caption, True, imageindex)
@@ -4530,6 +4554,7 @@ class PageContainer(wx.Panel):
# item.SetBitmaps( (*m_ImageList)[pi.GetImageIndex()] ); # item.SetBitmaps( (*m_ImageList)[pi.GetImageIndex()] );
popupMenu.AppendItem(item) popupMenu.AppendItem(item)
item.Enable(pi.GetEnabled())
self.PopupMenu(popupMenu) self.PopupMenu(popupMenu)
@@ -4538,7 +4563,35 @@ class PageContainer(wx.Panel):
""" Handles the wx.EVT_MENU event for L{PageContainer}. """ """ Handles the wx.EVT_MENU event for L{PageContainer}. """
selection = event.GetId() selection = event.GetId()
self._pParent.SetSelection(selection) self.FireEvent(selection)
def FireEvent(self, selection):
"""
Fires the wxEVT_FLATNOTEBOOK_PAGE_CHANGING and wxEVT_FLATNOTEBOOK_PAGE_CHANGED events
called from other methods (from menu selection or Smart Tabbing).
Utility function.
"""
if selection == self._iActivePage:
# No events for the same selection
return
oldSelection = self._iActivePage
event = FlatNotebookEvent(wxEVT_FLATNOTEBOOK_PAGE_CHANGING, self.GetParent().GetId())
event.SetSelection(selection)
event.SetOldSelection(oldSelection)
event.SetEventObject(self.GetParent())
if not self.GetParent().GetEventHandler().ProcessEvent(event) or event.IsAllowed():
self.SetSelection(selection)
# Fire a wxEVT_FLATNOTEBOOK_PAGE_CHANGED event
event.SetEventType(wxEVT_FLATNOTEBOOK_PAGE_CHANGED)
event.SetOldSelection(oldSelection)
self.GetParent().GetEventHandler().ProcessEvent(event)
def SetImageList(self, imglist): def SetImageList(self, imglist):
@@ -4578,3 +4631,12 @@ class PageContainer(wx.Panel):
return True return True
def DrawDragHint(self):
""" Draws small arrow at the place that the tab will be placed. """
# get the index of tab that will be replaced with the dragged tab
pt = wx.GetMousePosition()
client_pt = self.ScreenToClient(pt)
where, tabIdx = self.HitTest(client_pt)
self._mgr.GetRenderer(self.GetParent().GetWindowStyleFlag()).DrawDragHint(self, tabIdx)