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:
@@ -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,8 +1587,10 @@ 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
|
||||||
boldFont.SetWeight(wx.FONTWEIGHT_BOLD)
|
|
||||||
dc.SetFont(boldFont)
|
if "__WXGTK__" in wx.PlatformInfo:
|
||||||
|
boldFont.SetWeight(wx.FONTWEIGHT_BOLD)
|
||||||
|
dc.SetFont(boldFont)
|
||||||
|
|
||||||
height = dc.GetCharHeight()
|
height = dc.GetCharHeight()
|
||||||
|
|
||||||
@@ -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,10 +3511,11 @@ 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.SetWeight(wx.BOLD)
|
boldFont = wx.SystemSettings_GetFont(wx.SYS_DEFAULT_GUI_FONT)
|
||||||
memDc.SetFont(boldFont)
|
boldFont.SetWeight(wx.BOLD)
|
||||||
|
memDc.SetFont(boldFont)
|
||||||
|
|
||||||
height = memDc.GetCharHeight()
|
height = memDc.GetCharHeight()
|
||||||
tabHeight = height + FNB_HEIGHT_SPACER # We use 10 pixels as padding
|
tabHeight = height + FNB_HEIGHT_SPACER # We use 10 pixels as padding
|
||||||
@@ -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)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user