home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyo (Python 2.6)
-
- from gui.prototypes.fontdropdown import FontDropDown
- 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 gui.skin.skinobjects import Margins, SkinColor
- from cgui import SimplePanel
- from util.primitives.funcs import Delegate
- wxWindow_Show = wx.Window.Show
-
- 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
- self.lastheight = 0
- Bind = self.Bind
- Bind(wx.EVT_PAINT, self.OnBGPaint)
- Bind(wx.EVT_SIZE, self.OnReSize)
- 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))
- 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))
- sizer.AddGrowableCol(1, 1)
- sizer.AddGrowableRow(1, 1)
- 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)
-
-
- for object in self.children + self.staticchildren:
- if isinstance(object, UberButton):
- object.SetSkinKey(self.buttonskin, True)
- if object.menu:
- object.menu.SetSkinKey(self.buttonskin)
-
- object.menu
- if isinstance(object, FontDropDown):
- object.SetSkinKey(self.buttonskin)
- object.SetMenuSkinKey(self.menuskin)
- continue
-
- 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.')
- isinstance(object, UMenu).content.Insert(self.content.GetChildCount() - 1, object, expand, RIGHT | EXPAND, self.padding.x)
- self.staticchildren.append(object)
- self.GenWidthRestriction()
- else:
- raise AssertionError('Static items are only availible in OverFlowMode')
- return self.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, calcSize = True):
- if object.menuitem:
- self.overflowmenu.RemoveItem(object.menuitem)
-
-
- try:
- self.overflowed.remove(object)
- except ValueError:
- pass
-
- self.content.Detach(object)
- self.children.remove(object)
- if calcSize:
- 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!')
- isinstance(object, UberButton)
- object.menuitem = None
- object.shouldshow = True
- object.Show = OverflowShow
-
- if isinstance(object, UberButton):
- object.SetSkinKey(self.buttonskin, True)
- if object.menu:
- object.menu.SetSkinKey(self.buttonskin)
-
- elif isinstance(object, FontDropDown):
- object.SetSkinKey(self.buttonskin)
- object.SetMenuSkinKey(self.menuskin)
-
- 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 = wx.AutoBufferedPaintDC(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()
- if self.Size.height != self.lastheight:
- self.lastheight = self.Size.height
- wx.CallAfter(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
- self.overflowmode 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)
- if laterchild.icon is not None:
- menu_title = [
- laterchild.icon,
- menu_title]
-
- laterchild.menuitem = SimpleMenuItem(menu_title, id = laterchild.Id, 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]
- if furtherchild.menuitem:
- 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
-
-
- def UpdateItemLabel(self, id, label):
- for item in (self.FindWindowById(id, self), self.overflowmenu.FindItemById(id)):
- if item is not None:
- item.SetLabel(label)
- continue
-
-
-
-