Show stuff for inactive tabs, if possible
This commit is contained in:
@@ -10,6 +10,7 @@
|
||||
|
||||
import wx
|
||||
import copy
|
||||
import time
|
||||
from gui import bitmapLoader
|
||||
|
||||
_PageChanging, EVT_NOTEBOOK_PAGE_CHANGING = wx.lib.newevent.NewEvent()
|
||||
@@ -653,6 +654,16 @@ class PFTabsContainer(wx.Panel):
|
||||
self.addButton = PFAddRenderer()
|
||||
self.addBitmap = self.addButton.Render()
|
||||
|
||||
self.previewTimer = None
|
||||
self.previewTimerID = wx.ID_ANY
|
||||
self.previewWnd = None
|
||||
self.previewBmp = None
|
||||
self.previewPos = None
|
||||
self.previewTab = None
|
||||
|
||||
self.Bind(wx.EVT_TIMER, self.OnTimer)
|
||||
self.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeaveWindow)
|
||||
|
||||
self.Bind(wx.EVT_PAINT, self.OnPaint)
|
||||
self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnErase)
|
||||
self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown)
|
||||
@@ -917,9 +928,36 @@ class PFTabsContainer(wx.Panel):
|
||||
self.CheckCloseButtons(mposx, mposy)
|
||||
|
||||
self.CheckAddHighlighted(mposx,mposy)
|
||||
|
||||
self.CheckTabPreview(mposx, mposy)
|
||||
event.Skip()
|
||||
|
||||
def CheckTabPreview(self, mposx, mposy):
|
||||
if self.previewWnd:
|
||||
self.previewWnd.Show(False)
|
||||
del self.previewWnd
|
||||
self.previewWnd = None
|
||||
if self.previewTimer:
|
||||
if self.previewTimer.IsRunning():
|
||||
if self.previewWnd:
|
||||
self.previewTimer.Stop()
|
||||
return
|
||||
for tab in self.tabs:
|
||||
if not tab.GetSelected():
|
||||
if self.TabHitTest(tab, mposx, mposy):
|
||||
try:
|
||||
page = self.Parent.GetPage(self.GetTabIndex(tab))
|
||||
if page.CanUseSnapshot():
|
||||
if not self.previewTimer:
|
||||
self.previewTimer = wx.Timer(self, self.previewTimerID)
|
||||
|
||||
self.previewTab = tab
|
||||
self.previewBmp = page.FVsnapshot
|
||||
self.previewTimer.Start(1500, True)
|
||||
break
|
||||
except:
|
||||
pass
|
||||
|
||||
|
||||
def CheckAddHighlighted(self, mposx, mposy):
|
||||
if not self.showAddButton:
|
||||
return
|
||||
@@ -1117,3 +1155,116 @@ class PFTabsContainer(wx.Panel):
|
||||
b = min(max(b,0),255)
|
||||
|
||||
return wx.Colour(r,g,b)
|
||||
|
||||
def OnLeaveWindow(self, event):
|
||||
if self.previewWnd:
|
||||
self.previewWnd.Show(False)
|
||||
del self.previewWnd
|
||||
self.previewWnd = None
|
||||
event.Skip()
|
||||
|
||||
def OnTimer(self, event):
|
||||
mposx, mposy = wx.GetMousePosition()
|
||||
cposx, cposy = self.ScreenToClient((mposx, mposy))
|
||||
if self.FindTabAtPos(cposx, cposy) == self.previewTab:
|
||||
if not self.previewTab.GetSelected():
|
||||
|
||||
self.previewWnd = PFNotebookPagePreview(self,(mposx+3,mposy+3), self.previewBmp, self.previewTab.text)
|
||||
self.previewWnd.Show()
|
||||
|
||||
event.Skip()
|
||||
|
||||
class PFNotebookPagePreview(wx.Frame):
|
||||
def __init__ (self,parent, pos, bitmap, title):
|
||||
wx.Frame.__init__(self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = pos, size = wx.DefaultSize, style =
|
||||
wx.NO_BORDER
|
||||
| wx.FRAME_NO_TASKBAR
|
||||
| wx.STAY_ON_TOP)
|
||||
img = bitmap.ConvertToImage()
|
||||
img = img.ConvertToGreyscale()
|
||||
bitmap = wx.BitmapFromImage(img)
|
||||
self.title = title
|
||||
self.bitmap = bitmap
|
||||
self.SetSize((bitmap.GetWidth(), bitmap.GetHeight()))
|
||||
self.Bind(wx.EVT_PAINT,self.OnWindowPaint)
|
||||
self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnWindowEraseBk)
|
||||
self.Bind(wx.EVT_TIMER, self.OnTimer)
|
||||
|
||||
self.timer = wx.Timer(self,wx.ID_ANY)
|
||||
self.timerSleep = None
|
||||
self.timerSleepId = wx.NewId()
|
||||
self.direction = 1
|
||||
self.transp = 0
|
||||
self.SetSize((bitmap.GetWidth(),bitmap.GetHeight()))
|
||||
|
||||
self.SetTransparent(0)
|
||||
self.Refresh()
|
||||
|
||||
def OnTimer(self, event):
|
||||
if event.GetId() == self.timerSleepId:
|
||||
self.direction = -1
|
||||
self.timer.Start(10)
|
||||
return
|
||||
self.transp += 20*self.direction
|
||||
if self.transp > 240:
|
||||
self.transp = 240
|
||||
self.timer.Stop()
|
||||
if not self.timerSleep:
|
||||
self.timerSleep = wx.Timer(self, self.timerSleepId)
|
||||
self.timerSleep.Start(5000, True)
|
||||
|
||||
if self.transp < 0:
|
||||
self.transp = 0
|
||||
self.timer.Stop()
|
||||
wx.Frame.Show(self,False)
|
||||
self.Destroy()
|
||||
return
|
||||
self.SetTransparent(self.transp)
|
||||
|
||||
def RaiseParent(self):
|
||||
wnd = self
|
||||
lastwnd = None
|
||||
while wnd is not None:
|
||||
lastwnd = wnd
|
||||
wnd = wnd.Parent
|
||||
if lastwnd:
|
||||
lastwnd.Raise()
|
||||
|
||||
def Show(self, showWnd = True):
|
||||
if showWnd:
|
||||
wx.Frame.Show(self, showWnd)
|
||||
self.RaiseParent()
|
||||
self.direction = 1
|
||||
self.timer.Start(10)
|
||||
else:
|
||||
self.direction = -1
|
||||
self.timer.Start(10)
|
||||
|
||||
|
||||
def OnWindowEraseBk(self,event):
|
||||
pass
|
||||
|
||||
def OnWindowPaint(self,event):
|
||||
rect = self.GetRect()
|
||||
canvas = wx.EmptyBitmap(rect.width, rect.height)
|
||||
mdc = wx.BufferedPaintDC(self)
|
||||
mdc.SelectObject(canvas)
|
||||
color = wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOWTEXT)
|
||||
mdc.SetBackground(wx.Brush(color))
|
||||
mdc.Clear()
|
||||
|
||||
font = wx.FontFromPixelSize((0,14), wx.SWISS, wx.NORMAL,wx.NORMAL, False)
|
||||
mdc.SetFont(font)
|
||||
|
||||
x,y = mdc.GetTextExtent(self.title)
|
||||
|
||||
mdc.SetTextForeground(wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW))
|
||||
|
||||
mdc.DrawText(self.title, (rect.width - x)/2, (16 -y)/2)
|
||||
|
||||
mdc.DrawBitmap(self.bitmap, 0, 16)
|
||||
|
||||
mdc.SetPen( wx.Pen("#000000", width = 1 ) )
|
||||
mdc.SetBrush( wx.TRANSPARENT_BRUSH )
|
||||
|
||||
mdc.DrawRectangle( 0, 16, rect.width,rect.height - 16)
|
||||
|
||||
@@ -105,9 +105,12 @@ class FittingView(d.Display):
|
||||
|
||||
self.SetDropTarget(FittingViewDrop(self.swapItems))
|
||||
self.activeFitID = None
|
||||
self.FVsnapshot = None
|
||||
|
||||
self.Bind(wx.EVT_KEY_UP, self.kbEvent)
|
||||
self.Bind(wx.EVT_LEFT_DOWN, self.click)
|
||||
self.Bind(wx.EVT_RIGHT_DOWN, self.click)
|
||||
self.Bind(wx.EVT_SHOW, self.OnShow)
|
||||
self.parent.Bind(gui.chromeTabs.EVT_NOTEBOOK_PAGE_CHANGED, self.pageChanged)
|
||||
|
||||
def Destroy(self):
|
||||
@@ -363,3 +366,34 @@ class FittingView(d.Display):
|
||||
icolor = self.GetItemBackgroundColour(i)
|
||||
if icolor != bkcolor:
|
||||
self.SetItemBackgroundColour(i, bkcolor)
|
||||
|
||||
def OnShow(self, event):
|
||||
if not event.GetShow():
|
||||
self.Snapshot()
|
||||
event.Skip()
|
||||
|
||||
def CanUseSnapshot(self):
|
||||
return True
|
||||
|
||||
def Snapshot(self):
|
||||
|
||||
if self.FVsnapshot:
|
||||
del self.FVsnapshot
|
||||
|
||||
rect = self.GetRect()
|
||||
if rect.height >400:
|
||||
rect.height = 400
|
||||
if rect.width > 576:
|
||||
rect.width = 576
|
||||
|
||||
mdc = wx.MemoryDC()
|
||||
mbmp = wx.EmptyBitmap(rect.width, rect.height)
|
||||
mdc.SelectObject(mbmp)
|
||||
|
||||
pageDC = wx.ClientDC(self)
|
||||
|
||||
mdc.Blit(0, 0, rect.width, rect.height, pageDC, 0, 0)
|
||||
|
||||
mdc.SelectObject(wx.NullBitmap)
|
||||
|
||||
self.FVsnapshot = mbmp
|
||||
|
||||
Reference in New Issue
Block a user