home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyo (Python 2.5)
-
- import wx
- from wx import Size, TOP, BOTTOM, EXPAND, ALIGN_LEFT, RIGHT, LEFT, HORIZONTAL, FULL_REPAINT_ON_RESIZE, BufferedPaintDC, RectS, Point
- from gui import skin
- from UberButton import UberButton
- from simplemenu import SimpleMenu, SimpleMenuItem
- from gui.uberwidgets.umenu import UMenu
- from gui.toolbox import OverflowShow
- from gui.uberwidgets import UberWidget
- from util import do
- from gui.skin.skinobjects import Margins, SkinColor
- from cgui import SimplePanel
- from util import Delegate
- wxWindow_Show = wx.Window.Show
- from config import platformName
-
- class UberBar(SimplePanel, UberWidget):
-
- def __init__(self, parent, id = wx.ID_ANY, skinkey = None, overflowmode = False, name = 'UberBar', alignment = None):
- SimplePanel.__init__(self, parent, FULL_REPAINT_ON_RESIZE)
- UberWidget.__init__(self, 'toolbar')
- self.ChildPaints = Delegate()
- self.alignment = None if alignment and not overflowmode else ALIGN_LEFT
- self.overflowmode = overflowmode
- self.navimode = False
- self.active = None
- self.children = []
- self.staticchildren = []
- self.overflowed = []
- self.focus = None
- events = [
- (wx.EVT_PAINT, self.OnBGPaint),
- (wx.EVT_SIZE, self.OnReSize)]
- (do,)((lambda .0: for event, method in .0:
- self.Bind(event, method))(events))
- self.keyletters = { }
- self.tlmargins = Size()
- self.brmargins = Size()
- self.SetSkinKey(skinkey, True)
- self.content = wx.BoxSizer(HORIZONTAL)
- sizer = self.Sizer = wx.GridBagSizer()
- sizer.SetEmptyCellSize(wx.Size(0, 0))
- sizer.AddGrowableCol(1, 1)
- sizer.AddGrowableRow(1, 1)
- contentFlag = None | TOP | BOTTOM if self.alignment == ALIGN_LEFT else self.alignment
- sizer.Add(self.content, (1, 1), flag = contentFlag, border = self.padding.y)
- sizer.Add(Size(self.margins.left, self.margins.top), (0, 0))
- sizer.Add(Size(self.margins.right, self.margins.bottom), (2, 2))
- if overflowmode:
- self.overflowmenu = SimpleMenu(self, self.menuskin)
- self.overflowbutton = UberButton(self, skin = self.buttonskin, type = 'menu', menu = self.overflowmenu)
- self.content.Add((self.padding.x, 1), 1, EXPAND)
- self.content.Add(self.overflowbutton, 0, RIGHT | EXPAND, self.padding.x)
- self.staticchildren.append(self.overflowbutton)
- else:
- spacersizer = self.spacersizer = wx.BoxSizer(wx.HORIZONTAL)
- spacersizer.Add((self.padding.x, 1), 0, EXPAND)
- self.content.Add(spacersizer, 0, EXPAND)
- self.GenWidthRestriction()
-
-
- def UpdateSkin(self):
- key = self.skinkey
- self.native = not key
- if self.native:
- if self.uxthemeable:
- self.OpenNativeTheme()
- self.bg = None
- else:
- self.bg = SkinColor(wx.SystemSettings_GetColour(wx.SYS_COLOUR_3DFACE))
- self.padding = Point(2, 2)
- self.margins = Margins([
- 0,
- 0,
- 0,
- 0])
- self.buttonskin = None
- self.menuskin = None
- else:
- self.CloseNativeTheme()
- self.padding = skin.get(key + '.padding', Point(2, 2))
- self.margins = skin.get(key + '.margins', Margins([
- 0,
- 0,
- 0,
- 0]))
- self.bg = skin.get(key + '.background', (lambda : SkinColor(wx.SystemSettings_GetColour(wx.SYS_COLOUR_3DFACE))))
- self.buttonskin = skin.get(key + '.buttonskin', None)
- self.menuskin = skin.get(key + '.menuskin', None)
- s = self.Sizer
- if s:
- s.Detach(1)
- s.Detach(1)
- s.Add(Size(self.margins.left, self.margins.top), (0, 0))
- s.Add(Size(self.margins.right, self.margins.bottom), (2, 2))
- s.Children[0].SetBorder(self.padding.y)
- for child in self.content.Children:
- child.SetBorder(self.padding.x)
-
-
- (do,)((lambda .0: for item in .0:
- if isinstance(item, UberButton):
- item.SetSkinKey(self.buttonskin)continue)(self.children))
- (do,)((lambda .0: for item in .0:
- if isinstance(item, UberButton) and item.menu:
- item.menu.SetSkinKey(self.menuskin)item.menu)(self.children))
- if hasattr(self, 'overflowbutton'):
- self.overflowbutton.SetSkinKey(self.buttonskin)
- self.overflowmenu.SetSkinKey(self.menuskin)
-
- if not (self.overflowmode) and hasattr(self, 'content'):
- spacersizer = self.spacersizer
- spacersizer.Detach(0)
- spacersizer.Add((self.padding.x, 1), 0, EXPAND)
-
- wx.CallAfter(self.Layout)
-
-
- def GentAltCals(self):
- self.keyletters = { }
- for child in self.children:
- amp_idx = child.label.find('&')
- if isinstance(child, UberButton) and amp_idx != -1:
- self.keyletters[child.label[amp_idx + 1].upper()] = child
- continue
-
-
-
- def Add(self, object, expand = False, calcSize = True):
- return self.Insert(len(self.children), object, expand, calcSize = calcSize)
-
-
- def AddMany(self, objects, expand = False):
- for object in objects:
- self.Add(object, expand)
-
-
-
- def AddStatic(self, object, expand = False):
- if self.overflowmode:
- if isinstance(object, UMenu):
- object = UberButton(self, -1, object.GetTitle(), self.buttonskin, type = 'menu', menu = object)
- elif isinstance(object, UberButton):
- object.SetSkinKey(self.buttonskin, True)
- else:
- raise TypeError('Only buttons can be added to UberBar in overflow mode.')
- self.content.Add(object, expand, RIGHT | EXPAND, self.padding.x)
- self.staticchildren.append(object)
- self.GenWidthRestriction()
- else:
- raise AssertionError('Static items are only availible in OverFlowMode')
-
-
- def AddMenuItem(self, item):
- if self.overflowmode:
- self.overflowmenu.AppendItem(item)
-
-
-
- def AddSpacer(self):
- if not self.overflowmode:
- self.content.Add((4 * self.padding.x, 1), 1, EXPAND)
- self.GenWidthRestriction()
-
-
-
- def AddStretchSpacer(self, prop = 1):
- self.content.AddStretchSpacer(prop)
- self.GenWidthRestriction()
-
-
- def InsertSpacer(self, pos):
- if not self.overflowmode:
- self.content.Insert(pos, (4 * self.padding.x, 1), 1, EXPAND)
- self.GenWidthRestriction()
-
-
-
- def Remove(self, object):
- self.content.Detach(object)
- self.children.remove(object)
- self.OnUBSize()
-
-
- def InsertNew(self, pos, thingy, id = -1, label = '', **args):
- object = thingy(self, id = id, label = label, **args)
- self.Insert(pos, object)
- return id
-
-
- def Insert(self, pos, object, expand = False, calcSize = True):
- if isinstance(object, UMenu):
- object = UberButton(self, -1, object.GetTitle(), self.buttonskin, type = 'menu', menu = object)
- elif self.overflowmode:
- if not isinstance(object, UberButton):
- raise TypeError('Can only add buttons or menus to an UberBar in overflow mode silly!')
-
- object.menuitem = None
- object.shouldshow = True
- object.Show = OverflowShow
-
- if isinstance(object, UberButton):
- object.SetSkinKey(self.buttonskin, True)
-
- self.content.Insert(pos, object, expand, LEFT | EXPAND, self.padding.x)
- self.children.insert(pos, object)
- if calcSize:
- self.OnUBSize()
-
-
-
- def OnBGPaint(self, event):
- dc = BufferedPaintDC(self)
- if self.bg:
- rect = RectS(self.Size)
- self.bg.Draw(dc, rect)
- else:
- self.DrawNativeLike(dc, 0, 0, wx.RectS(self.Size))
- self.ChildPaints(dc)
-
-
- def OnUBSize(self, event = None):
- self.GenWidthRestriction()
-
-
- def SetAlignment(self, alignment):
- if self.alignment != alignment:
- self.alignment = alignment
- self.Sizer.Detach(self.content)
- None(self.Sizer.Add, self.content if alignment == ALIGN_LEFT else 0, self.alignment)
- self.Sizer.Layout()
-
-
-
- def OnReSize(self, event = None):
- if event is not None:
- event.Skip()
-
- self.GenWidthRestriction()
- self.Parent.Layout()
-
-
- def GenWidthRestriction(self, flushoverflow = False):
- if not self.overflowmode:
- return None
-
- children = _[1]
- staticchildren = self.staticchildren
- overflowed = self.overflowed
- omenu = self.overflowmenu
- if flushoverflow:
- for thing in overflowed[:]:
- wxWindow_Show(thing, thing.shouldshow)
- overflowed.remove(thing)
- thing.overflowed = False
- while omenu.spine.items[0].id == -1:
- omenu.RemoveItem(0)
- continue
- None if thing.menuitem else []
- self.Layout()
-
-
- if children:
- i = len(children) - len(overflowed) - 1
- laterchild = children[i]
- cutoffpoint = self.Size.width - (sum((lambda .0: for staticchild in .0:
- staticchild.Size.width)(staticchildren)) + (len(staticchildren) + 1) * self.padding.x)
- while len(children) > len(overflowed) and laterchild.Rect.Right >= cutoffpoint:
- if not len(overflowed) and omenu.spine.items and not (omenu.spine.items[0].id == -1):
- omenu.Insert(0, id = -1)
-
- overflowed.insert(0, laterchild)
- menu_title = getattr(laterchild, 'overflow_label', laterchild.label)
- menu_cb = getattr(laterchild, 'overflow_callback', laterchild.SendButtonEvent)
- print menu_title, menu_cb
- laterchild.menuitem = SimpleMenuItem(menu_title, method = (lambda i, mcb = menu_cb: mcb()))
- omenu.InsertItem(0, laterchild.menuitem)
- wxWindow_Show(laterchild, False)
- i = len(children) - len(overflowed) - 1
- laterchild = children[i]
- while overflowed and None - cutoffpoint if len(overflowed) == len(children) else laterchild.Rect.Right > overflowed[0].Size.width + self.padding.x:
- furtherchild = overflowed[0]
- omenu.RemoveItem(furtherchild.menuitem)
- furtherchild.menuitem = None
- wxWindow_Show(furtherchild, True)
- overflowed.remove(furtherchild)
- i = len(children) - len(overflowed) - 1
- laterchild = children[i]
- while omenu.spine.items[0].id == -1:
- omenu.RemoveItem(0)
-
- self.Layout()
- self.Top.Layout()
-
-
- def MarkFocus(self, item):
- index = self.children.index(item)
- if self.focus is not None and self.focus != index:
- self.children[self.focus].ReleaseHover()
-
- self.focus = index
-
-
-