home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyo (Python 2.5)
-
- from __future__ import with_statement
- from tab import Tab
- from gui import skin
- from OverlayImage import OverlayImage
- from navigation_arrows import Navi
- from gui.uberwidgets.UberButton import UberButton
- from gui.uberwidgets.UberEvents import EVT_DRAG_START
- import wx
- from wx import RectS, Rect, RectPS
- from util import do
- from common import pref, profile, prefprop
- from gui.uberwidgets import UberWidget
- from cgui import SimplePanel
- CUPID = wx.NewId()
- CDOWNID = wx.NewId()
- CLOSE_TAB = wx.NewId()
- CLOSE_OTHER_TABS = wx.NewId()
-
- class TabBar(SimplePanel, UberWidget):
-
- def __init__(self, parent, skinkey):
- SimplePanel.__init__(self, parent)
- self.tabs = []
- self.rows = []
- self.rowindex = 0
- self.tabindex = 0
- self.tabendex = 0
- events = [
- (wx.EVT_PAINT, self.OnPaint),
- (wx.EVT_SIZE, self.OnSize),
- (wx.EVT_BUTTON, self.OnButton),
- (wx.EVT_MOUSEWHEEL, self.OnWheel),
- (wx.EVT_MOTION, self.OnMotion)]
- for event, method in events:
- self.Bind(event, method)
-
- self.flagedrows = set()
- self.lastsize = self.Size
- self.rowheight = 0
- self.SetSkinKey(skinkey, True)
- self.cupb = UberButton(self, CUPID, skin = self.scrollbuttonskin, icon = self.upicon)
- self.cupb.Show(False)
- self.cdownb = UberButton(self, CDOWNID, skin = self.scrollbuttonskin, icon = self.downicon)
- self.cdownb.Show(False)
- self.navi = Navi(self)
- self.dragorigin = None
- self.dragtarget = None
- self.dropmarker = OverlayImage(self, self.dropmarkerimage)
- self.dragside = None
- link = profile.prefs.link
- link('tabs.rows', self.Generate, False)
- link('tabs.tabbar_x', self.Generate, False)
- link('tabs.hide_at_1', self.Generate, False)
- link('tabs.side_tabs', self.SkinRedirect, False)
- self.Top.Bind(wx.EVT_MENU, self.OnMenuEvent)
-
- side_tabs = prefprop('tabs.side_tabs')
- tab_rows = prefprop('tabs.rows', 2)
-
- def UpdateSkin(self):
- key = self.tabskin = self.skinkey
-
- g = lambda k, default = (sentinel,): skin.get(key + '.' + k, default)
-
- sg = lambda k, default = (sentinel,): skin.get('side' + key + '.' + k, default)
- elems = (('spacing', 'spacing', 2), ('bg', 'backgrounds.bar'), ('dropmarkerimage', 'dropmarker.image'), ('dropmarkeroffset', 'dropmarker.offset', 0), ('closebuttonskin', 'closebuttonskin', ''), ('closeicon', 'icons.close', None), ('scrollbuttonskin', 'scrollbuttonskin', ''), ('lefticon', 'icons.left', ''), ('righticon', 'icons.right', ''), ('upicon', 'icons.up', ''), ('downicon', 'icons.down', ''))
- for elem in elems:
- setattr(self, 'top' + elem[0], g(*elem[1:]))
- setattr(self, 'side' + elem[0], sg(elem[1], getattr(self, 'top' + elem[0])))
- None(setattr, self, elem[0](getattr, self if self.side_tabs else 'top' + elem[0]))
-
- if hasattr(self, 'dropmarker'):
- self.dropmarker.SetImage(self.dropmarkerimage)
- if self.side_tabs:
- pass
- self.dropmarker.SetRotation(not (self.dropmarkerimage))
-
- navi = getattr(self, 'navi', None)
- if navi is not None:
- self.cdownb.SetSkinKey(self.scrollbuttonskin)
- self.cupb.SetSkinKey(self.scrollbuttonskin)
- self.cdownb.SetIcon(self.downicon)
- self.cupb.SetIcon(self.upicon)
- self.navi.closebutton.SetSkinKey(self.closebuttonskin)
- self.navi.closebutton.SetIcon(self.closeicon)
- scrollskin = self.scrollbuttonskin
- navi.prevb.SetSkinKey(scrollskin)
- navi.nextb.SetSkinKey(scrollskin)
- navi.upb.SetSkinKey(scrollskin)
- navi.downb.SetSkinKey(scrollskin)
- navi.prevb.SetIcon(self.lefticon)
- navi.nextb.SetIcon(self.righticon)
- navi.upb.SetIcon(self.upicon)
- navi.downb.SetIcon(self.downicon)
-
- wx.CallAfter(self.Generate)
-
-
- def SkinRedirect(self, val = None):
- elems = ('spacing', 'bg', 'dropmarkerimage', 'closebuttonskin', 'closeicon', 'scrollbuttonskin', 'lefticon', 'righticon', 'upicon', 'downicon')
- for elem in elems:
- None(setattr, self, elem(getattr, self if self.side_tabs else 'top' + elem))
-
- self.UpdateChildSkins()
-
-
- def UpdateChildSkins(self):
- self.cdownb.SetSkinKey(self.scrollbuttonskin, True)
- self.cupb.SetSkinKey(self.scrollbuttonskin, True)
- navi = self.navi
- sbs = self.scrollbuttonskin
- navi.closebutton.SetSkinKey(self.closebuttonskin, True)
- navi.prevb.SetSkinKey(sbs, True)
- navi.nextb.SetSkinKey(sbs, True)
- navi.upb.SetSkinKey(sbs, True)
- navi.downb.SetSkinKey(sbs, True)
- self.UpdateChildrenIcons()
- for tab in self.tabs:
- tab.UpdateMode()
-
- self.Generate()
-
-
- def __repr__(self):
- return '<TabBar %r>' % self.tabs
-
-
- def OnDragStart(self, tab):
- self.NotifyDrag(tab)
-
-
- def OnMotion(self, event):
- if event.LeftIsDown():
- if self.dragorigin or self.Manager.source:
- self.DragCalc(event.Position)
-
-
-
- def __getitem__(self, index):
- return self.tabs[index]
-
-
- def OnPaint(self, event):
- dc = wx.PaintDC(self)
- rect = RectS(self.Size)
- if not self.side_tabs:
- rcount = min(len(self.rows), pref('tabs.rows', 2))
- height = self.tabs[0].Size.height
- y = 0
- for unused_i in xrange(rcount):
- self.bg.Draw(dc, Rect(rect.x, y, rect.width, height))
- y += height
-
- else:
- self.bg.Draw(dc, rect)
-
-
- def Add(self, page, focus, resort = True):
- tab = Tab(self, page, skinkey = self.tabskin)
- tab.Bind(wx.EVT_CONTEXT_MENU, self.ShowMenu)
- tab.Show(False)
- self.tabs.append(tab)
- if focus:
- wx.CallAfter(tab.SetActive, True)
- elif resort:
- if self.side_tabs:
- self.ReVgenerate()
- else:
- self.Regenerate(True)
-
- return tab
-
-
- def ShowMenu(self, e):
- self._menutab = e.EventObject
-
- try:
- menu = self._tabmenu
- except AttributeError:
- UMenu = UMenu
- import gui.uberwidgets.umenu
- menu = self._tabmenu = UMenu(self)
- menu.AddItem('Close &Other Tabs', id = CLOSE_OTHER_TABS)
- menu.AddSep()
- menu.AddItem('&Close Tab', id = CLOSE_TAB)
-
- menu.PopupMenu()
-
-
- def OnMenuEvent(self, e):
- if e.Id == CLOSE_TAB:
- self._menutab.CloseTab()
- elif e.Id == CLOSE_OTHER_TABS:
- menutab = self._menutab
- menutab.active = True
- self.Frozen().__enter__()
-
- try:
- for tab in self.tabs[:]:
- if tab is not menutab:
- tab.CloseTab()
- continue
- self.Frozen()
- finally:
- pass
-
- else:
- e.Skip()
-
-
- def Generate(self, val = None):
- self.navi.closebutton.Show(pref('tabs.tabbar_x', False))
- if self.side_tabs:
- self.ReVgenerate(True)
- else:
- self.Regenerate()
-
-
- def ReVgenerate(self, total = False, safe = False, dotoggle = True):
- tabs = self.tabs
- if not tabs:
- return None
-
- do((lambda .0: for tab in .0:
- tab.Show(False))(self.tabs))
- for tab in self.tabs:
- tab.row = None
-
- del self.rows[:]
- if self.tabindex < 0 or self.tabindex >= len(tabs):
- self.tabindex = 0
-
- n = self.tabindex
- self.rowheight = tabs[0].GetMinHeight()
- area = self.Notebook.Size.height - 32
- i = area // self.rowheight
- count = len(tabs)
- for r in xrange(count):
- tabs[r].row = r
-
- rows = self.rows
- size = self.Size
- navi = self.navi
- navi.ShowNav(4)
- navi.Hide()
- navi.Position = wx.Point(size.width - navi.Size.width, 0)
- if (total and not rows or i + 1 != len(rows[0])) and not (i > len(rows[0])) and len(rows[0]) == len(tabs):
- rows.append([])
- col = rows[0]
- if i >= count:
- n = 0
- self.tabindex = 0
- (do,)((lambda .0: for tab in .0:
- col.append(tab))(tabs))
- av = col[0].MinSize.height
- else:
- for t in xrange(n, n + i + 1):
- if t < len(tabs):
- col.append(tabs[t])
- continue
-
- while len(col) < i and n > 0:
- n -= 1
- col.insert(0, tabs[n])
- if col:
- av = col[0].MinSize.height
-
- else:
- col = rows[0]
- av = col[0].MinSize.height
- count = 16
- for t in col:
- t.Size = (self.Size.width, av)
- t.Position = (0, count)
- count += av
- t.Show()
-
- self.tabindex = n
- endex = self.tabendex = n + len(col)
- if dotoggle:
- self.Toggle()
-
- cupb = self.cupb
- cdownb = self.cdownb
- cupb.Enable(self.tabindex != 0)
- if not endex < len(tabs):
- pass
- cdownb.Enable(tabs[endex - 1].Position.y + tabs[endex - 1].Size.height > size.height - 16)
- self.UpdateNotify()
-
-
- def Regenerate(self, safe = False, dotoggle = True):
- if not self.IsShown() and len(self.tabs) == 1:
- return None
-
- self.Frozen().__enter__()
-
- try:
- self._Regenerate(safe = safe, dotoggle = dotoggle)
- finally:
- pass
-
- self.Refresh(False)
-
-
- def _Regenerate(self, safe = False, dotoggle = True):
- self.cupb.Show(False)
- self.cdownb.Show(False)
- parentpage = self.Parent.pagecontainer
- style = self.tab_rows
- if not safe:
- pass
- careful = parentpage.active
- for tab in self.tabs:
- tab.Show(False)
- tab.row = None
-
- del self.rows[:]
- tally = sum((lambda .0: for tab in .0:
- tab.MinSize.width)(self.tabs))
- navi = self.navi
- tabs = self.tabs
- rows = self.rows
- if not tabs:
- return None
-
- if self.tabindex < 0 or self.tabindex >= len(tabs):
- self.tabindex = 0
-
- n = self.tabindex
- i = n
- row = 0
- self.rowheight = tabs[0].MinHeight
- my_w = self.Size.width
- nav_w = navi.Size.width
- if tally >= my_w - nav_w and not style:
- navi.ShowNav(1)
- elif tally >= my_w - nav_w:
- navi.ShowNav(3)
- else:
- navi.ShowNav(0)
- navi.Freeze()
- navi.Show(True)
- navi.Fit()
- navi.Position = wx.Point(self.Size.width - navi.Size.width, 0)
- navi.Size = wx.Size(-1, self.Size.height)
- navi.Thaw()
- area = self.Notebook.Size.width - navi.Size.width
- while len(tabs) > i:
- tally = tabs[i].MinSize.width
- rows.append([])
- while i < len(tabs) and tally < area:
- i += 1
- if i < len(tabs):
- tally += tabs[i].MinSize.width
- continue
- if careful and not style:
- activeindex = tabs.index(parentpage.active.tab)
- change = False
- while activeindex >= i and n != i:
- i += 1
- tally += tabs[i].MinSize.width
- change = True
- if tally >= area and change:
- tally -= tabs[n].MinSize.width
- n += 1
- self.tabindex = n
-
-
- if not style:
- while n > 0 and area - tally > tabs[n - 1].MinSize.width:
- n -= 1
- self.tabindex = n
- tally += tabs[n].MinSize.width
-
- if not style:
- break
-
- row += 1
- n = i
- row = self.rowindex
- if not self.tab_rows:
- pass
- visible = 1
- if careful and style:
- active = parentpage.active.tab
- for ir, r in enumerate(rows):
- if active in r:
- if ir < row:
- row = self.rowindex = ir
- elif ir >= row + visible:
- row = ir - visible - 1
-
- ir < row
-
-
- if len(rows) - (row + 1) < visible and len(rows) >= visible:
- row = len(rows) - visible
- self.rowindex = row
-
- while row < len(rows) and row < self.rowindex + visible and len(rows[row]) != 0:
- if rows.index(rows[row]) == len(rows) - 1:
- if style or len(rows[row]) == len(tabs):
- for t in xrange(0, len(rows[row])):
- thistab = rows[row][t]
- thistab.SetSize(thistab.MinSize)
- if not t:
- thistab.SetPosition((0, self.rowheight * (row - self.rowindex)))
- else:
- thistab.SetPosition((rows[row][t - 1].Position.x + rows[row][t - 1].Size.width, self.rowheight * (row - self.rowindex)))
- thistab.Show(True)
-
- elif len(rows) > row:
- ordered = [ rows[row].index(t) for t in sorted(rows[row], key = (lambda o: o.MinSize.width), reverse = True) ]
- length = len(ordered)
- reserved = 0
- o = 0
- av = (area - reserved) / (length - o)
- mark = 0
- while o < length:
- for t in xrange(o, length):
- tab = rows[row][ordered[t]]
- if tab.GetMinSize()[0] > av:
- tab.SetSize(tab.MinSize)
- reserved += tab.MinSize.width
- o += 1
- mark = o
- if length - o:
- av = (area - reserved) / (length - o)
-
- length - o
- o += 1
-
- continue
- []
- for t in xrange(mark, length):
- tab = rows[row][ordered[t]]
- tab.SetSize((av, tab.MinSize.height))
-
- for t, tab in enumerate(rows[row]):
- tab.Show(True)
-
-
- row += 1
- if dotoggle:
- self.Toggle()
-
- if len(rows) < style or not style:
- rows_shown = len(rows)
- else:
- rows_shown = style
- if self.Parent.SashPosition != rows_shown * self.rowheight:
- self.MinSize = wx.Size(-1, rows_shown * self.rowheight)
- self.Parent.SetSashPosition(self.MinSize.height)
-
- navi.Enabler()
- self.tabendex = i - 1
- self.UpdateNotify()
- navi.Size = wx.Size(-1, rows_shown * self.rowheight)
-
-
- def Remove(self, target):
- index = self.tabs.index(target)
- self.tabs.remove(target)
- if len(self.tabs) == 0:
- self.Notebook.window.Close()
- elif index > self.tabindex and index < self.tabendex and self.tabindex > 0:
- self.tabindex -= 1
-
- if self.side_tabs:
- self.ReVgenerate(total = True)
- else:
- self.Regenerate(safe = True)
-
-
- def OnSize(self, event):
- event.Skip()
- if self.side_tabs and self.tabs:
- cupb = self.cupb
- cdownb = self.cdownb
- size = self.Size
- tabs = self.tabs
- endex = self.tabendex
- cupb.Position = (0, 0)
- cupb.Size = (size.width, 16)
- cupb.Show()
- cupb.Enable(self.tabindex != 0)
- cdownb.Position = (0, size.height - 16)
- cdownb.Size = (size.width, 16)
- cdownb.Show()
- if not endex < len(tabs):
- pass
- cdownb.Enable(tabs[endex - 1].Position.y + tabs[endex - 1].Size.height > size.height - 16)
-
- sz = self.Size
- if (sz.width != self.lastsize.width or not (self.side_tabs) or sz != self.lastsize or self.side_tabs) and self.IsShownOnScreen():
- self.lastsize = sz
- if self.side_tabs:
- self.ReVgenerate(dotoggle = False)
- else:
- self.Regenerate(True, dotoggle = False)
-
-
- try:
- wx.CallAfter(wx.CallAfter, self.Parent.pagecontainer.active.panel.input_area.expandEvent)
- except AttributeError:
- pass
-
- self.Refresh(False)
-
-
- def GetTabCount(self):
- return [](_[1])
-
-
- def NextTab(self):
- self.SetNextActive(self.ActiveTab, wrap = True)
-
-
- def PrevTab(self):
- self.SetLastActive(self.ActiveTab, wrap = True)
-
-
- def SetNextActive(self, origin, wrap = False):
- if origin in self.tabs:
- index = self.tabs.index(origin)
- if not (index < len(self.tabs) - 1) and wrap:
- self.tabs[0].SetActive(True)
- elif index < len(self.tabs) - 1:
- self.tabs[index + 1].SetActive(True)
- elif index > 0:
- self.tabs[index - 1].SetActive(True)
-
- self.Refresh(False)
-
-
-
- def SetLastActive(self, origin, wrap = False):
- if origin in self.tabs:
- index = self.tabs.index(origin)
- if not (index > 0) and wrap:
- self.tabs[len(self.tabs) - 1].SetActive(True)
- elif index > 0:
- self.tabs[index - 1].SetActive(True)
- elif index < 0:
- self.tabs[index + 1].SetActive(True)
-
- self.Refresh(False)
-
-
-
- def SyncActive(self, atab):
- if not atab:
- return None
-
- if self.side_tabs:
- if atab < self.tabindex:
- self.tabindex = atab
- self.ReVgenerate(True)
- else:
- thetab = self.tabs[atab]
- while atab >= self.tabendex or thetab.Position.y + thetab.Size.height > self.Size.height - 16:
- self.tabindex += 1
- self.ReVgenerate(True)
- continue
- self
- else:
- style = self.tab_rows
- if atab < self.rowindex:
- self.rowindex = atab
- self.Regenerate()
- elif atab > self.rowindex + style - 1:
- self.rowindex = (atab - style) + 1
- self.Regenerate()
-
-
-
- def OnWheel(self, event):
- if RectS(self.Size).Contains(event.Position):
- direction = event.GetWheelRotation()
- if direction < 0:
- self.SetNextActive(self.ActiveTab, True)
- elif direction > 0:
- self.SetLastActive(self.ActiveTab, True)
-
-
-
-
- def Notebook(self):
- return self.Parent
-
- Notebook = property(Notebook)
-
- def Manager(self):
- return self.Notebook.manager
-
- Manager = property(Manager)
-
- def ActiveTab(self):
- active = self.Notebook.pagecontainer.active
- if active is not None:
- return active.tab
-
-
- ActiveTab = property(ActiveTab)
-
- def OnButton(self, event):
- if event.GetId() == CUPID:
- if self.tabindex > 0:
- self.tabindex -= 1
- self.ReVgenerate(total = True)
-
- elif event.GetId() == CDOWNID:
- if self.tabendex < len(self.tabs) or self.tabs[self.tabendex - 1].Position.y + self.tabs[self.tabendex - 1].Size.height > self.Size.height - 16:
- self.tabindex += 1
- self.ReVgenerate(total = True)
-
-
- self.UpdateNotify()
-
-
- def NotifyDrag(self, origin):
- self.dragorigin = origin
- origin.SetCursor(wx.StockCursor(wx.CURSOR_NO_ENTRY))
- self.Manager.Notify(self.Notebook)
-
-
- def DragCalc(self, point):
- sidetabs = self.side_tabs
- if not (self.dragorigin) and self.Manager.source:
- master = self.Manager.source
- dragorigin = master.tabbar.dragorigin
- self.Manager.Request(self.Notebook)
- else:
- dragorigin = self.dragorigin
- if not (self.dragtarget) or not self.dragtarget.Rect.Contains(point):
- wap = wx.FindWindowAtPointer()
- self.dragtarget = None if isinstance(wap, Tab) else None
- self.dragside = None
-
- if self.dragtarget and self.dragtarget != dragorigin:
- dtrect = self.dragtarget.Rect
- if not sidetabs:
- x = point[0] - dtrect.x
- x2 = dtrect.width / 2
- else:
- x = point[1] - dtrect.y
- x2 = dtrect.height / 2
- if x <= x2:
- if self.dragside != False:
- self.dragside = False
- if not sidetabs:
- self.DrawDropMarker(dtrect.x, dtrect.y)
- else:
- self.DrawDropMarker(dtrect.x, dtrect.y)
-
- elif not self.dragside:
- self.dragside = True
- if not sidetabs:
- self.DrawDropMarker(dtrect.x + dtrect.width, dtrect.y)
- else:
- self.DrawDropMarker(dtrect.x, dtrect.y + dtrect.height)
-
- self.SetFocus()
- elif not dragorigin or self.dragtarget != dragorigin:
- if (dragorigin == None or self.dragtarget == None) and self.Rect.Contains(point):
- if not sidetabs:
- row = self.rows[point[1] // self.rowheight + self.rowindex]
- tab = row[len(row) - 1]
- self.dragside = True
- elif point.y > self.rowheight:
- tab = self.rows[0][len(self.rows[0]) - 1]
- self.dragside = True
- else:
- tab = self.rows[0][0]
- self.dragside = False
- dtrect = tab.Rect
- if not sidetabs:
- self.DrawDropMarker(dtrect.x + dtrect.width, dtrect.y)
- elif self.dragside == True:
- self.DrawDropMarker(dtrect.x, dtrect.y + dtrect.height)
- else:
- self.DrawDropMarker(dtrect.x + dtrect.width / 2, dtrect.y)
- self.SetFocus()
- self.dragtarget = tab
- else:
- self.dropmarker.Show(False)
-
-
- def Explode(self):
- newwin = self.Notebook.window.winman.NewWindow
- for x, tab in enumerate(self.tabs[1:]):
- pos = wx.Point(30, 30) + (20 * (x + 1), 20 * (x + 1))
- dest = newwin(self.Manager, pos).notebook
- page = tab.page
- del tab.page
- del page.tab
- self.tabs.remove(tab)
- tab.Close()
- dest.Insert(page)
- wx.CallAfter(page.Show)
-
- self.tabs[0].SetActive(True)
- if self.side_tabs:
- self.ReVgenerate(True)
- else:
- self.Regenerate()
-
-
- def DragFinish(self, new = False):
- if not wx.IsDestroyed(self.dragorigin):
- self.dragorigin.SetCursor(wx.StockCursor(wx.CURSOR_ARROW))
-
- if self.dragorigin and self.dragorigin.previewtabs:
- self.dragorigin.previewtabs.Stop()
- self.dragorigin.previewtabs = None
-
- rect = RectPS(self.Notebook.ClientToScreen(self.Position), self.Size)
- parentrect = self.Notebook.window.Rect
- mousepos = wx.GetMousePosition()
- manager = self.Manager
- if not new:
- if manager.destination or not parentrect.Contains(mousepos) or not rect.Contains(mousepos):
- if self.ActiveTab == self.dragorigin:
- self.SetNextActive(self.dragorigin)
-
- self.dragorigin.Show(False)
- dest = manager.destination
- if not dest or not dest.tabbar.Rect.Contains(dest.ScreenToClient(wx.GetMousePosition())):
- originsize = self.dragorigin.GetSize()
- newpoint = wx.Point(mousepos[0] - originsize[0], mousepos[1] - originsize[1])
- destination = self.Notebook.window.winman.NewWindow(manager, newpoint, self.Notebook.window.GetSize()).notebook
- else:
- destination = dest
- manager.Request()
- page = self.dragorigin.page
- del self.dragorigin.page
- del page.tab
- self.tabs.remove(self.dragorigin)
- self.dragorigin.Close()
- destination.Insert(page, False)
- manager.Notify()
- self.dragorigin = None
- if self.side_tabs:
- self.ReVgenerate(True)
- else:
- self.Regenerate(safe = True)
- elif self.dragtarget and self.dragorigin and self.dragorigin != self.dragtarget and self.Rect.Contains(self.Notebook.ScreenToClient(mousepos)):
- self.tabs.remove(self.dragorigin)
- pos = None + self.tabs.index(self.dragtarget) if self.dragside else 0
- self.tabs.insert(pos, self.dragorigin)
- if self.side_tabs:
- self.ReVgenerate(True)
- else:
- self.Regenerate()
- elif new:
- if self.side_tabs:
- self.ReVgenerate(True)
- else:
- self.Regenerate()
-
- if self.dragorigin:
- self.dragorigin.OnMouseLeave()
-
- self.dropmarker.Show(False)
- self.dragorigin = None
- self.dragtarget = None
- dest = manager.destination
- if dest:
- dest.tabbar.dragorigin = None
- dest.tabbar.dragtarget = None
-
- manager.Request()
- manager.Notify()
- if len(self.tabs) == 0:
- self.Notebook.window.Close()
-
-
-
- def DrawDropMarker(self, x, y):
- self.dropmarker.Teleport(self.ClientToScreen((x, y + self.dropmarkeroffset)))
- if not self.dropmarker.IsShown():
- self.Manager.ShowDropMarker(self.dropmarker)
-
-
-
- def Toggle(self, switch = None):
- if pref('tabs.hide_at_1', True) and len(self.tabs) <= 1 and not switch:
- self.Notebook.Split(False)
- self.ProcessEvent(wx.CommandEvent(wx.wxEVT_SIZE))
- else:
- self.Notebook.Split(True)
-
-
- def UpdateNotify(self):
- frows = self.flagedrows
- frows.clear()
- if self.side_tabs:
- tabs = self.tabs
- for i, tab in enumerate(tabs):
- if tab.notified:
- frows.add(i)
- continue
- if i in self.flagedrows:
- frows.remove(i)
- continue
-
- if len(frows):
- pass
- self.cupb.SetNotify(min(frows) < self.tabindex)
- if not len(frows) and max(frows) >= self.tabendex:
- pass
- self.cdownb.SetNotify(tabs[max(frows)].Position.y + tabs[max(frows)].Size.height > self.Size.height - 16)
- else:
- for i, row in enumerate(self.rows):
- flaged = False
- for tab in row:
- if tab and tab.notified:
- flaged = True
- frows.add(i)
- continue
-
-
- if len(frows):
- pass
- self.navi.upb.SetNotify(min(frows) < self.rowindex)
- if len(frows):
- pass
- self.navi.downb.SetNotify(max(frows) > self.rowindex + self.tab_rows - 1)
-
-
-
- try:
- import psyco
- except ImportError:
- pass
-
- psyco.bind(TabBar)
-