home *** CD-ROM | disk | FTP | other *** search
/ PC PowerPlay 56 / CDPowerplay56Disc2.iso / demos / blade / data1.cab / Program_Executable_Files / Lib / Widgets / MenuWidget.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2000-10-27  |  38.1 KB  |  1,005 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 1.5)
  3.  
  4. import BUIx
  5. import Bladex
  6. import Raster
  7. import ScorerWidgets
  8. import WidgetsExtra
  9. import SpinWidget
  10. import TextFXWidget
  11. import pdb
  12. import BInput
  13. import BBLib
  14. import MenuText
  15. import sys
  16. import netgame
  17.  
  18. class Stack:
  19.     
  20.     def __init__(self):
  21.         self.Items = []
  22.  
  23.     
  24.     def __del__(self):
  25.         pass
  26.  
  27.     
  28.     def nItems(self):
  29.         return len(self.Items)
  30.  
  31.     
  32.     def Push(self, item):
  33.         self.Items.append(item)
  34.  
  35.     
  36.     def Pop(self):
  37.         self.Items = self.Items[:-1]
  38.  
  39.     
  40.     def Top(self):
  41.         
  42.         try:
  43.             return self.Items[-1]
  44.         except:
  45.             return None
  46.  
  47.  
  48.     
  49.     def Reset(self):
  50.         self.Items = []
  51.  
  52.  
  53.  
  54. class MenuStack(Stack):
  55.     
  56.     def __init__(self, final_callback):
  57.         Stack.__init__(self)
  58.         self.FinalCallBack = final_callback
  59.  
  60.     
  61.     def Push(self, menu_item):
  62.         s = self.Top()
  63.         if not s:
  64.             Bladex.SetAppMode('Menu')
  65.         
  66.         Bladex.SetRootWidget(menu_item.GetPointer())
  67.         Stack.Push(self, menu_item)
  68.  
  69.     
  70.     def Pop(self):
  71.         Stack.Pop(self)
  72.         s = self.Top()
  73.         if s:
  74.             Bladex.SetRootWidget(s.GetPointer())
  75.         else:
  76.             self.FinalCallBack()
  77.  
  78.  
  79.  
  80. class B_MenuFocusManager:
  81.     
  82.     def __init__(self):
  83.         self.MenuItems = []
  84.         self.Focus = None
  85.  
  86.     
  87.     def __del__(self):
  88.         self.Focus = None
  89.         self.MenuItems = []
  90.  
  91.     
  92.     def AddMenuElement(self, menu_element):
  93.         self.MenuItems.append(menu_element)
  94.         self.Focus = menu_element
  95.  
  96.     
  97.     def GetFocus(self):
  98.         return self.Focus
  99.  
  100.     
  101.     def SetFocus(self, menu_element):
  102.         accepts_focus = 0
  103.         
  104.         try:
  105.             accepts_focus = menu_element.AcceptsFocus()
  106.         except:
  107.             pass
  108.  
  109.         if accepts_focus == 1:
  110.             old_foc = self.GetFocus()
  111.             if menu_element == old_foc:
  112.                 return 1
  113.             
  114.             if old_foc:
  115.                 old_foc.SetHasFocus(0)
  116.             
  117.             menu_element.SetHasFocus(1)
  118.             self.Focus = menu_element
  119.             return 1
  120.         
  121.         return 0
  122.  
  123.     
  124.     def SetFocus_Idx(self, menu_element_idx):
  125.         
  126.         try:
  127.             menu_element = self.MenuItems[menu_element_idx]
  128.             self.SetFocus(menu_element)
  129.         except:
  130.             print 'Error setting focus to index', menu_element_idx
  131.  
  132.  
  133.     
  134.     def NextFocus(self):
  135.         
  136.         try:
  137.             old_focus = self.GetFocus()
  138.             index = self.MenuItems.index(old_focus)
  139.             list = self.MenuItems[index + 1:] + self.MenuItems[:index]
  140.             for i in list:
  141.                 pass
  142.         except:
  143.             print 'B_MenuFocusManager::NextFocus() -> Exception ocurred.'
  144.  
  145.  
  146.     
  147.     def PrevFocus(self):
  148.         
  149.         try:
  150.             old_focus = self.GetFocus()
  151.             index = self.MenuItems.index(old_focus)
  152.             l1 = self.MenuItems[:index]
  153.             l2 = self.MenuItems[index + 1:]
  154.             l1.reverse()
  155.             l2.reverse()
  156.             list = l1 + l2
  157.             for i in list:
  158.                 pass
  159.         except:
  160.             print 'B_MenuFocusManager::PrevFocus() -> Exception ocurred.'
  161.  
  162.  
  163.     
  164.     def FinalRelease(self):
  165.         for i in self.MenuItems:
  166.             
  167.             try:
  168.                 i.FinalRelease()
  169.             except:
  170.                 0
  171.                 self.MenuItems
  172.  
  173.         
  174.  
  175.  
  176.  
  177. class B_MenuFrameWidget(B_MenuFocusManager, BUIx.B_FrameWidget):
  178.     
  179.     def __init__(self, Parent, Name, Width, Height, VertPos = 0):
  180.         BUIx.B_FrameWidget.__init__(self, Parent, Name, Width, Height)
  181.         B_MenuFocusManager.__init__(self)
  182.         self.VertPos = VertPos
  183.         self.thisown = 1
  184.         self.SetAutoScale(1)
  185.  
  186.     
  187.     def __del__(self):
  188.         for i in self.MenuItems:
  189.             i.SetDrawFunc(None)
  190.         
  191.         B_MenuFocusManager.__del__(self)
  192.         BUIx.B_FrameWidget.__del__(self)
  193.  
  194.     
  195.     def AddMenuElement(self, menu_element, sep = 0, HPos = 0.5, HIndicator = BUIx.B_FrameWidget.B_FR_HRelative, HAnchor = BUIx.B_FrameWidget.B_FR_HCenter):
  196.         B_MenuFocusManager.AddMenuElement(self, menu_element)
  197.         self.AddWidget(menu_element, HPos, self.VertPos + sep, HIndicator, HAnchor, BUIx.B_FrameWidget.B_FR_AbsoluteTop, BUIx.B_FrameWidget.B_FR_Top)
  198.         self.VertPos = self.VertPos + menu_element.GetSize()[1] + sep
  199.         self.SetFocus(menu_element.Name())
  200.  
  201.     
  202.     def AddMenuElementEx(self, menu_element, VPos = 0, HPos = 0.5, HIndicator = BUIx.B_FrameWidget.B_FR_HRelative, HAnchor = BUIx.B_FrameWidget.B_FR_HCenter):
  203.         B_MenuFocusManager.AddMenuElement(self, menu_element)
  204.         self.AddWidget(menu_element, HPos, self.VertPos + sep, HIndicator, HAnchor, BUIx.B_FrameWidget.B_FR_AbsoluteTop, BUIx.B_FrameWidget.B_FR_Top)
  205.         self.VertPos = self.VertPos + menu_element.GetSize()[1] + sep
  206.         self.SetFocus(menu_element.Name())
  207.  
  208.  
  209.  
  210. class B_MenuTreeItem:
  211.     
  212.     def __init__(self, MenuDescr, StackMenu):
  213.         self.SetAlpha(0.5)
  214.         self.StackMenu = StackMenu
  215.         self.MenuDescr = MenuDescr
  216.         
  217.         try:
  218.             self.FocusCallBack = MenuDescr['FocusCallBack']
  219.         except:
  220.             pass
  221.  
  222.  
  223.     
  224.     def __del__(self):
  225.         pass
  226.  
  227.     
  228.     def __str__(self):
  229.         print 'B_MenuTreeItem widget with descriptor', self.MenuDescr
  230.  
  231.     
  232.     def ActivateItem(self, activate):
  233.         if activate == 1:
  234.             NewFrame = self.CreateFrame()
  235.             if NewFrame:
  236.                 self.StackMenu.Push(NewFrame)
  237.                 return 1
  238.             else:
  239.                 
  240.                 try:
  241.                     command = self.MenuDescr['Command']
  242.                     command(self)
  243.                     return 1
  244.                 except:
  245.                     return 0
  246.  
  247.         elif activate == 0:
  248.             w = self.StackMenu.Top()
  249.             
  250.             try:
  251.                 w.FinalRelease()
  252.             except:
  253.                 pass
  254.  
  255.             self.StackMenu.Pop()
  256.         
  257.  
  258.     
  259.     def CreateFrame(self):
  260.         frame_class = None
  261.         
  262.         try:
  263.             frame_class = self.MenuDescr['FrameKind']
  264.         except KeyError:
  265.             frame_class = B_MenuTree
  266.             l_dscr = []
  267.             
  268.             try:
  269.                 l_dscr = self.MenuDescr['ListDescr']
  270.             except KeyError:
  271.                 pass
  272.  
  273.             if l_dscr == []:
  274.                 print 'l_dscr==[]'
  275.                 return None
  276.             
  277.         except:
  278.             l_dscr == []
  279.  
  280.         
  281.         try:
  282.             NewFrame = frame_class(self, self.MenuDescr, self.StackMenu)
  283.             return NewFrame
  284.         except:
  285.             print 'Error Creating frame of class', frame_class
  286.  
  287.  
  288.  
  289.  
  290. class B_MenuTree(B_MenuFrameWidget):
  291.     
  292.     def __init__(self, Parent, Menudesc, StackMenu, VertPos = 0):
  293.         (Width, Height) = Raster.GetSize()
  294.         
  295.         try:
  296.             (Width, Height) = Menudesc['Size']
  297.         except KeyError:
  298.             pass
  299.  
  300.         B_MenuFrameWidget.__init__(self, Parent, 'MenuTree' + Menudesc['Name'], Width, Height, VertPos)
  301.         self.Menudesc = Menudesc
  302.         ValidIndex = 0
  303.         isValidIndex = 0
  304.         for i in Menudesc['ListDescr']:
  305.             m_class = B_MenuItemTextNoFX
  306.             
  307.             try:
  308.                 m_class = i['Kind']
  309.             except KeyError:
  310.                 0
  311.                 0
  312.                 Menudesc['ListDescr']
  313.             except:
  314.                 0
  315.  
  316.             vsep = 0
  317.             
  318.             try:
  319.                 vsep = i['VSep']
  320.             except KeyError:
  321.                 0
  322.                 0
  323.                 Menudesc['ListDescr']
  324.             except:
  325.                 0
  326.  
  327.             wSubMenu = m_class(self, i, StackMenu)
  328.             if not isValidIndex:
  329.                 if wSubMenu.AcceptsFocus():
  330.                     isValidIndex = 1
  331.                 else:
  332.                     ValidIndex = ValidIndex + 1
  333.             
  334.             HPos = 0.5
  335.             HIndicator = BUIx.B_FrameWidget.B_FR_HRelative
  336.             HAnchor = BUIx.B_FrameWidget.B_FR_HCenter
  337.             
  338.             try:
  339.                 PosDscr = i['Position']
  340.                 HPos = PosDscr[0]
  341.                 HIndicator = PosDscr[1]
  342.                 HAnchor = PosDscr[2]
  343.             except KeyError:
  344.                 pass
  345.  
  346.             
  347.             try:
  348.                 PosDscr = i['PositionEx']
  349.                 HPos = PosDscr[0]
  350.                 HIndicator = PosDscr[1]
  351.                 HAnchor = PosDscr[2]
  352.             except KeyError:
  353.                 B_MenuFrameWidget.AddMenuElement(self, wSubMenu, vsep, HPos, HIndicator, HAnchor)
  354.  
  355.         
  356.         if Menudesc.has_key('iFocus'):
  357.             self.SetFocus_Idx(Menudesc['iFocus'])
  358.         else:
  359.             self.SetFocus_Idx(ValidIndex)
  360.  
  361.     
  362.     def __del__(self):
  363.         B_MenuFrameWidget.__del__(self)
  364.  
  365.     
  366.     def __str__(self):
  367.         print 'B_MenuTree widget with Frame', self.Name()
  368.  
  369.  
  370.  
  371. class B_MenuSpin(SpinWidget.B_SpinWidget, B_MenuTreeItem):
  372.     
  373.     def __init__(self, Parent, MenuDescr, StackMenu, font_server = ScorerWidgets.font_server):
  374.         w = 220
  375.         h = 19
  376.         
  377.         try:
  378.             (w, h) = MenuDescr['Size']
  379.         except KeyError:
  380.             pass
  381.  
  382.         font = '..\\..\\Data\\Letras menu med.bmp'
  383.         
  384.         try:
  385.             font = MenuDescr['Font']
  386.         except KeyError:
  387.             pass
  388.  
  389.         SpinWidget.B_SpinWidget.__init__(self, Parent, MenuDescr['Name'], w, h, font_server, font)
  390.         B_MenuTreeItem.__init__(self, MenuDescr, StackMenu)
  391.         
  392.         try:
  393.             val_func = MenuDescr['SpinGetValue']
  394.             val = val_func()
  395.             SpinWidget.B_SpinWidget.SetValue(self, val)
  396.         except KeyError:
  397.             pass
  398.  
  399.         
  400.         try:
  401.             (l, u, s) = MenuDescr['SpinValues']
  402.             SpinWidget.B_SpinWidget.SetLimits(self, l, u)
  403.             SpinWidget.B_SpinWidget.SetSteps(self, s)
  404.         except KeyError:
  405.             pass
  406.  
  407.         
  408.         try:
  409.             self.SetValueEnd = MenuDescr['SpinSetValueEnd']
  410.         except KeyError:
  411.             self.SetValueEnd = None
  412.  
  413.         if MenuDescr.has_key('SpinOnChange'):
  414.             self.SpinOnChange = MenuDescr['SpinOnChange']
  415.         else:
  416.             self.SpinOnChange = None
  417.  
  418.     
  419.     def IncMenuItem(self):
  420.         self.IncrementValue()
  421.         if self.SpinOnChange:
  422.             self.SpinOnChange(self.GetValue())
  423.         
  424.  
  425.     
  426.     def DecMenuItem(self):
  427.         self.DecrementValue()
  428.         if self.SpinOnChange:
  429.             self.SpinOnChange(self.GetValue())
  430.         
  431.  
  432.     
  433.     def FinalRelease(self):
  434.         if self.SetValueEnd is not None:
  435.             self.SetValueEnd(self.GetValue())
  436.         
  437.  
  438.  
  439.  
  440. class B_MenuItemTextNoFX(BUIx.B_TextWidget, B_MenuTreeItem):
  441.     
  442.     def __init__(self, Parent, MenuDescr, StackMenu, font_server = ScorerWidgets.font_server):
  443.         font = '..\\..\\Data\\Letras menu med.bmp'
  444.         
  445.         try:
  446.             font = MenuDescr['Font']
  447.         except KeyError:
  448.             pass
  449.  
  450.         BUIx.B_TextWidget.__init__(self, Parent, 'SubMenu' + MenuDescr['Name'], MenuDescr['Name'], font_server, font)
  451.         B_MenuTreeItem.__init__(self, MenuDescr, StackMenu)
  452.         self.SetDrawFunc(self.Draw)
  453.         self.SetAlpha(1.0)
  454.         self.thisown = 1
  455.  
  456.     
  457.     def __del__(self):
  458.         pass
  459.  
  460.     
  461.     def __str__(self):
  462.         print 'B_MenuItemTextNoFX widget with text', self.GetTextData()
  463.  
  464.     
  465.     def Draw(self, x, y, time):
  466.         if self.GetVisible() == 0:
  467.             return None
  468.         
  469.         foc = self.GetHasFocus()
  470.         if foc:
  471.             self.SetColor(254, 148, 1)
  472.         else:
  473.             self.SetColor(220, 10, 10)
  474.         self.DefDraw(x, y, time)
  475.  
  476.  
  477.  
  478. class B_MenuItemTextNoFXNoFocus(BUIx.B_TextWidget, B_MenuTreeItem):
  479.     
  480.     def __init__(self, Parent, MenuDescr, StackMenu, font_server = ScorerWidgets.font_server):
  481.         font = '..\\..\\Data\\Letras menu med.bmp'
  482.         
  483.         try:
  484.             font = MenuDescr['Font']
  485.         except KeyError:
  486.             pass
  487.  
  488.         BUIx.B_TextWidget.__init__(self, Parent, 'SubMenu' + MenuDescr['Name'], MenuDescr['Name'], font_server, font)
  489.         B_MenuTreeItem.__init__(self, MenuDescr, StackMenu)
  490.         self.SetDrawFunc(self.Draw)
  491.         self.SetAlpha(1.0)
  492.         self.thisown = 1
  493.  
  494.     
  495.     def __del__(self):
  496.         pass
  497.  
  498.     
  499.     def __str__(self):
  500.         print 'B_MenuItemTextNoFX widget with text', self.GetTextData()
  501.  
  502.     
  503.     def Draw(self, x, y, time):
  504.         if self.GetVisible() == 0:
  505.             return None
  506.         
  507.         foc = self.GetHasFocus()
  508.         if foc:
  509.             self.SetColor(254, 148, 1)
  510.         else:
  511.             self.SetColor(220, 10, 10)
  512.         self.SetAlpha(0.4)
  513.         self.DefDraw(x, y, time)
  514.         self.SetAlpha(1.0)
  515.  
  516.     
  517.     def AcceptsFocus(self):
  518.         return 0
  519.  
  520.  
  521.  
  522. class B_MenuItemText(TextFXWidget.B_TextFXWidget, B_MenuTreeItem):
  523.     
  524.     def __init__(self, Parent, MenuDescr, StackMenu, font_server = ScorerWidgets.font_server):
  525.         font = '..\\..\\Data\\Letras menu med.bmp'
  526.         
  527.         try:
  528.             font = MenuDescr['Font']
  529.         except KeyError:
  530.             pass
  531.  
  532.         TextFXWidget.B_TextFXWidget.__init__(self, Parent, 'SubMenu' + MenuDescr['Name'], MenuDescr['Name'], font_server, font)
  533.         B_MenuTreeItem.__init__(self, MenuDescr, StackMenu)
  534.  
  535.     
  536.     def __del__(self):
  537.         TextFXWidget.B_TextFXWidget.__del__(self)
  538.         B_MenuTreeItem.__del__(self)
  539.  
  540.     
  541.     def __str__(self):
  542.         print 'B_MenuItemText widget with text', self.GetTextData()
  543.  
  544.  
  545.  
  546. class B_MenuItemTextNoFocus(B_MenuItemText):
  547.     
  548.     def AcceptsFocus(self):
  549.         return 0
  550.  
  551.  
  552.  
  553. class B_MenuItemOption(B_MenuItemTextNoFX):
  554.     
  555.     def __init__(self, Parent, MenuDescr, StackMenu, font_server = ScorerWidgets.font_server):
  556.         self.Options = [
  557.             'No option defined.']
  558.         self.SelOption = 0
  559.         self.OptionText = MenuDescr['Name']
  560.         
  561.         try:
  562.             self.Options = MenuDescr['Options']
  563.         except KeyError:
  564.             pass
  565.  
  566.         
  567.         try:
  568.             GetSelFunc = MenuDescr['SelOptionFunc']
  569.             OptionSel = GetSelFunc()
  570.             self.SelOption = OptionSel
  571.             print self.SelOption
  572.         except KeyError:
  573.             pass
  574.  
  575.         B_MenuItemTextNoFX.__init__(self, Parent, MenuDescr, StackMenu)
  576.         self.Parent = Parent
  577.         OptionText = self.OptionText + '    ' + str(self.Options[self.SelOption])
  578.         self.SetText(OptionText)
  579.  
  580.     
  581.     def __del__(self):
  582.         pass
  583.  
  584.     
  585.     def ActivateItem(self, activate):
  586.         check_pass = None
  587.         val = 1
  588.         if self.MenuDescr.has_key('CheckPass'):
  589.             check_pass = self.MenuDescr['CheckPass']
  590.             val = check_pass()
  591.         
  592.         if activate == 1 and val == 1:
  593.             self.SelOption = self.SelOption + 1
  594.             self.SelOption = self.SelOption % len(self.Options)
  595.             OptionText = self.OptionText + '    ' + self.Options[self.SelOption]
  596.             self.SetText(OptionText)
  597.             
  598.             try:
  599.                 self.Parent.RecalcLayout()
  600.             except:
  601.                 pass
  602.  
  603.             
  604.             try:
  605.                 command = self.MenuDescr['Command']
  606.                 command(MenuText.GetInverseMenuText(self.Options[self.SelOption]))
  607.             except KeyError:
  608.                 pass
  609.  
  610.         elif activate == 0:
  611.             self.StackMenu.Pop()
  612.         
  613.  
  614.     
  615.     def FinalRelease(self):
  616.         print 'B_MenuItemOption.FinalRelease()'
  617.         self.Parent = None
  618.  
  619.  
  620.  
  621. class B_MenuItemPage(B_MenuFrameWidget):
  622.     
  623.     def __init__(self, Parent, PageDscr, MenuDescr, StackMenu):
  624.         self.TitleText = PageDscr['Title']
  625.         B_MenuFrameWidget.__init__(self, Parent, 'MenuItemPage ' + self.TitleText)
  626.         font = '..\\..\\Data\\Letras menu peq.bmp'
  627.         font_server = ScorerWidgets.font_server
  628.         self.BackgroundImage = None
  629.         
  630.         try:
  631.             self.BackgroundImage = PageDscr['Background']
  632.         except KeyError:
  633.             pass
  634.  
  635.         self.PrevLabel = 'Prev'
  636.         
  637.         try:
  638.             self.PrevLabel = PageDscr['PrevLabel']
  639.         except KeyError:
  640.             pass
  641.  
  642.         self.Title = BUIx.B_TextWidget(self, 'Title MenuItemPage ' + self.TitleText, self.TitleText, font_server, '..\\..\\Data\\Letras menu gra.bmp')
  643.         self.Title.SetAlpha(0.8)
  644.         self.Title.SetColor(240, 10, 10)
  645.         self.AddWidget(self.Title, 10, 10, BUIx.B_FrameWidget.B_FR_AbsoluteRight, BUIx.B_FrameWidget.B_FR_Right, BUIx.B_FrameWidget.B_FR_AbsoluteTop, BUIx.B_FrameWidget.B_FR_Top)
  646.         
  647.         try:
  648.             font = PageDscr['Font']
  649.             MenuDescr['Font'] = font
  650.         except KeyError:
  651.             pass
  652.  
  653.         self.PrevItem = B_MenuItemText(self, self.TitleText + self.PrevLabel, self.PrevLabel, None, StackMenu)
  654.         self.PrevItem.SetAlpha(1.0)
  655.         self.PrevItem.SetColor(240, 10, 10)
  656.         B_MenuFocusManager.AddMenuElement(self, self.PrevItem)
  657.         self.AddWidget(self.PrevItem, 10, 10, BUIx.B_FrameWidget.B_FR_AbsoluteLeft, BUIx.B_FrameWidget.B_FR_Left, BUIx.B_FrameWidget.B_FR_AbsoluteBottom, BUIx.B_FrameWidget.B_FR_Bottom)
  658.         self.NextLabel = 'Next'
  659.         
  660.         try:
  661.             self.NextLabel = PageDscr['NextLabel']
  662.         except KeyError:
  663.             pass
  664.  
  665.         self.NextItem = B_MenuItemText(self, self.TitleText + self.NextLabel, self.NextLabel, None, StackMenu)
  666.         self.NextItem.SetAlpha(1.0)
  667.         self.NextItem.SetColor(240, 10, 10)
  668.         B_MenuFocusManager.AddMenuElement(self, self.NextItem)
  669.         self.AddWidget(self.NextItem, 10, 10, BUIx.B_FrameWidget.B_FR_AbsoluteRight, BUIx.B_FrameWidget.B_FR_Right, BUIx.B_FrameWidget.B_FR_AbsoluteBottom, BUIx.B_FrameWidget.B_FR_Bottom)
  670.         self.ContinueItem = B_MenuItemText(self, self.TitleText + ' Continue', 'Continue', None, StackMenu)
  671.         self.ContinueItem.SetAlpha(1.0)
  672.         self.ContinueItem.SetColor(240, 10, 10)
  673.         B_MenuFocusManager.AddMenuElement(self, self.ContinueItem)
  674.         self.AddWidget(self.ContinueItem, 0.4, 10, BUIx.B_FrameWidget.B_FR_HRelative, BUIx.B_FrameWidget.B_FR_Left, BUIx.B_FrameWidget.B_FR_AbsoluteBottom, BUIx.B_FrameWidget.B_FR_Bottom)
  675.         self.BackItem = B_MenuItemText(self, self.TitleText + ' Back', 'Back', None, StackMenu)
  676.         self.BackItem.SetAlpha(0.5)
  677.         self.BackItem.SetColor(240, 10, 10)
  678.         B_MenuFocusManager.AddMenuElement(self, self.BackItem)
  679.         self.AddWidget(self.BackItem, 0.4, 10, BUIx.B_FrameWidget.B_FR_HRelative, BUIx.B_FrameWidget.B_FR_Right, BUIx.B_FrameWidget.B_FR_AbsoluteBottom, BUIx.B_FrameWidget.B_FR_Bottom)
  680.         self.Description = 'No Description'
  681.         
  682.         try:
  683.             self.Description = PageDscr['Description']
  684.         except KeyError:
  685.             pass
  686.  
  687.         self.DescriptionItem = B_MenuItemTextNoFocus(self, self.TitleText + ' Description', self.Description, None, StackMenu)
  688.         B_MenuFocusManager.AddMenuElement(self, self.DescriptionItem)
  689.         self.DescriptionItem.SetAlpha(1.0)
  690.         self.DescriptionItem.SetColor(240, 10, 10)
  691.         self.AddWidget(self.DescriptionItem, 25, 0.7, BUIx.B_FrameWidget.B_FR_AbsoluteRight, BUIx.B_FrameWidget.B_FR_Right, BUIx.B_FrameWidget.B_FR_VRelative, BUIx.B_FrameWidget.B_FR_VCenter)
  692.         
  693.         try:
  694.             BackgroundImage = PageDscr['BackGround']
  695.             self.BackgroundItem = WidgetsExtra.B_ImageWidget(self, self.TitleText + ' Background', BackgroundImage)
  696.             self.AddWidget(self.BackgroundItem, 0.5, 0.5, BUIx.B_FrameWidget.B_FR_HRelative, BUIx.B_FrameWidget.B_FR_HCenter, BUIx.B_FrameWidget.B_FR_VRelative, BUIx.B_FrameWidget.B_FR_VCenter)
  697.         except KeyError:
  698.             pass
  699.  
  700.         B_MenuFocusManager.SetFocus(self, self.ContinueItem)
  701.  
  702.     
  703.     def __del__(self):
  704.         pass
  705.  
  706.     
  707.     def __str__(self):
  708.         print 'B_MenuItemPage', self.TitleText
  709.  
  710.     
  711.     def SetVisible(self, v):
  712.         B_MenuFrameWidget.SetVisible(self, v)
  713.  
  714.  
  715.  
  716. class B_MenuItemPages(BUIx.B_TextWidget, B_MenuTreeItem):
  717.     
  718.     def __init__(self, Parent, MenuDescr, StackMenu):
  719.         font = '..\\..\\Data\\Letras menu med.bmp'
  720.         font_server = ScorerWidgets.font_server
  721.         BUIx.B_TextWidget.__init__(self, Parent, 'B_MenuItemPages', 'B_MenuItemPages Text', font_server, font)
  722.         B_MenuTreeItem.__init__(self, MenuDescr, StackMenu)
  723.         self.Pages = []
  724.         self.ActivePage = None
  725.         self.SetDrawFunc(self.Draw)
  726.         self.SetSizeChangedFunc(self.SizeChanged)
  727.         PageDscrs = MenuDescr['PageDscrs']
  728.         for i in PageDscrs:
  729.             self.AddPage(Parent, i, MenuDescr, StackMenu)
  730.         
  731.         self.SetActivePage(self.Pages[0])
  732.         self.thisown = 1
  733.  
  734.     
  735.     def __del__(self):
  736.         print 'Deleting', self
  737.  
  738.     
  739.     def AddPage(self, Parent, pagedscr, MenuDescr, StackMenu):
  740.         page = B_MenuItemPage(Parent, 640, 480, pagedscr, MenuDescr, StackMenu)
  741.         self.Pages.append(page)
  742.  
  743.     
  744.     def SetActivePage(self, page):
  745.         if self.ActivePage:
  746.             self.ActivePage.SetVisible(0)
  747.         
  748.         self.ActivePage = page
  749.         if self.ActivePage:
  750.             self.ActivePage.SetVisible(1)
  751.             Bladex.SetRootWidget(self.ActivePage.GetPointer())
  752.         
  753.  
  754.     
  755.     def NextPageAux(self, desp):
  756.         old_page = self.ActivePage
  757.         index = self.Pages.index(old_page)
  758.         index = index + desp
  759.         index = index % len(self.Pages)
  760.         self.SetActivePage(self.Pages[index])
  761.  
  762.     
  763.     def NextPage(self):
  764.         self.NextPageAux(1)
  765.  
  766.     
  767.     def PrevPage(self):
  768.         self.NextPageAux(-1)
  769.  
  770.     
  771.     def GetPointer(self):
  772.         if self.ActivePage:
  773.             return self.ActivePage.GetPointer()
  774.         else:
  775.             return self.GetPointer()
  776.  
  777.     
  778.     def AcceptsFocus(self):
  779.         return 0
  780.  
  781.     
  782.     def GetFocus(self):
  783.         return self
  784.  
  785.     
  786.     def NextFocus(self):
  787.         if self.ActivePage:
  788.             self.ActivePage.NextFocus()
  789.         
  790.  
  791.     
  792.     def PrevFocus(self):
  793.         if self.ActivePage:
  794.             self.ActivePage.PrevFocus()
  795.         
  796.  
  797.     
  798.     def ActivateItem(self, act):
  799.         if act and self.ActivePage:
  800.             wTemp = self.ActivePage.GetFocus()
  801.             if not wTemp.ActivateItem(1):
  802.                 if self.ActivePage.GetFocus() == self.ActivePage.PrevItem:
  803.                     self.PrevPage()
  804.                 elif self.ActivePage.GetFocus() == self.ActivePage.NextItem:
  805.                     self.NextPage()
  806.                 
  807.             
  808.         else:
  809.             self.SetActivePage(None)
  810.             B_MenuTreeItem.ActivateItem(self, act)
  811.  
  812.     
  813.     def __str__(self):
  814.         print 'class B_MenuItemPages with', len(self.Pages), 'pages'
  815.  
  816.     
  817.     def Draw(self, x, y, time):
  818.         if self.ActivePage:
  819.             self.ActivePage.Draw(x, y, time)
  820.         else:
  821.             self.SetColor(100, 100, 240)
  822.             self.SetAlpha(0.5)
  823.             BUIx.B_TextWidget.DefDraw(self, 100, 100, time)
  824.  
  825.     
  826.     def SizeChanged(self, reshz, resvt):
  827.         for i in self.Pages:
  828.             i.SizeChanged(reshz, resvt)
  829.         
  830.  
  831.     
  832.     def CreateFrame(self):
  833.         return None
  834.  
  835.  
  836.  
  837. class B_BackImageWidget(BUIx.B_RectWidget):
  838.     
  839.     def __init__(self, Parent, MenuDescr, StackMenu):
  840.         self.Bitmap = BBLib.B_BitMap24()
  841.         self.Bitmap.ReadFromBMP('..\\..\\Data\\menu.bmp')
  842.         self.vidw = 1
  843.         self.vidh = 1
  844.         BUIx.B_RectWidget.__init__(self, Parent, MenuDescr['Name'], self.vidw, self.vidh)
  845.         self.Selected = 0
  846.         self.Solid = 0
  847.         self.Border = 0
  848.         self.SetDrawFunc(self.Draw)
  849.  
  850.     
  851.     def Draw(self, x, y, time):
  852.         Raster.SetPosition(0, 0)
  853.         Raster.DrawImage(640, 480, 'BGR', 'Stretch', self.Bitmap.GetData())
  854.         self.DefDraw(x, y, time)
  855.  
  856.     
  857.     def FinalRelease(self):
  858.         BUIx.B_RectWidget.FinalRelease(self)
  859.  
  860.     
  861.     def AcceptsFocus(self):
  862.         return 0
  863.  
  864.  
  865.  
  866. class B_BackBlank(BUIx.B_RectWidget):
  867.     
  868.     def __init__(self, Parent, MenuDescr, StackMenu):
  869.         self.Bitmap = BBLib.B_BitMap24()
  870.         self.Bitmap.ReadFromBMP('..\\..\\Data\\Black.bmp')
  871.         self.vidw = 1
  872.         self.vidh = 1
  873.         BUIx.B_RectWidget.__init__(self, Parent, MenuDescr['Name'], self.vidw, self.vidh)
  874.         self.Selected = 0
  875.         self.Solid = 0
  876.         self.Border = 0
  877.         self.SetDrawFunc(self.Draw)
  878.  
  879.     
  880.     def Draw(self, x, y, time):
  881.         Raster.SetPosition(0, 0)
  882.         Raster.DrawImage(640, 480, 'BGR', 'Stretch', self.Bitmap.GetData())
  883.         self.DefDraw(x, y, time)
  884.  
  885.     
  886.     def FinalRelease(self):
  887.         BUIx.B_RectWidget.FinalRelease(self)
  888.  
  889.     
  890.     def AcceptsFocus(self):
  891.         return 0
  892.  
  893.  
  894.  
  895. class B_BackWeapon(BUIx.B_RectWidget):
  896.     
  897.     def __init__(self, Parent, MenuDescr, StackMenu):
  898.         self.Bitmap = BBLib.B_BitMap24()
  899.         self.Bitmap.ReadFromBMP('..\\..\\Data\\demo0.bmp')
  900.         self.Bitmap2 = BBLib.B_BitMap24()
  901.         self.Bitmap2.ReadFromBMP('..\\..\\Data\\demo1.bmp')
  902.         self.vidw = 1
  903.         self.vidh = 1
  904.         BUIx.B_RectWidget.__init__(self, Parent, MenuDescr['Name'], self.vidw, self.vidh)
  905.         self.Selected = 0
  906.         self.Solid = 0
  907.         self.Border = 0
  908.         self.SetDrawFunc(self.Draw)
  909.         self.image = 0
  910.         self.NumImages = 2
  911.         self.SndCorreGema = Bladex.CreateSound('..\\..\\Sounds\\golpe-2.wav', 'Chanje')
  912.         self.SndCorreGema.Volume = 0.5
  913.         self.SndCorreGema.MinDistance = 1000000.0
  914.         self.SndCorreGema.MaxDistance = 2000000
  915.  
  916.     
  917.     def Draw(self, x, y, time):
  918.         (x, y) = Raster.GetSize()
  919.         Raster.SetPosition((x - 640) / 2, (y - 480) / 2)
  920.         if self.image == 0:
  921.             Raster.DrawImage(640, 480, 'BGR', 'Normal', self.Bitmap2.GetData())
  922.         
  923.         if self.image == 1:
  924.             Raster.DrawImage(640, 480, 'BGR', 'Normal', self.Bitmap.GetData())
  925.         
  926.         if self.image < 0:
  927.             self.image = self.NumImages - 1
  928.         
  929.         if self.image > self.NumImages - 1:
  930.             self.image = 0
  931.         
  932.         self.DefDraw(x, y, time)
  933.  
  934.     
  935.     def FinalRelease(self):
  936.         BUIx.B_RectWidget.FinalRelease(self)
  937.  
  938.     
  939.     def AcceptsFocus(self):
  940.         return 1
  941.  
  942.     
  943.     def IncMenuItem(self):
  944.         self.SndCorreGema.PlayStereo()
  945.         self.image = self.image + 1
  946.  
  947.     
  948.     def DecMenuItem(self):
  949.         self.SndCorreGema.PlayStereo()
  950.         self.image = self.image - 1
  951.  
  952.     
  953.     def GetFocus(self):
  954.         return self
  955.  
  956.     
  957.     def ActivateItem(self, activate):
  958.         import Menu
  959.         Menu.ActivateMenu()
  960.         return None
  961.  
  962.  
  963.  
  964. class B_BackFeatures(BUIx.B_RectWidget):
  965.     
  966.     def __init__(self, Parent, MenuDescr, StackMenu):
  967.         self.Bitmap1 = BBLib.B_BitMap24()
  968.         self.Bitmap1.ReadFromBMP('..\\..\\Data\\Blade_features1.bmp')
  969.         self.Bitmap2 = BBLib.B_BitMap24()
  970.         self.Bitmap2.ReadFromBMP('..\\..\\Data\\Blade_features2.bmp')
  971.         self.CurrentBitmap = BBLib.B_BitMap24()
  972.         self.CurrentBitmap = self.Bitmap1
  973.         self.vidw = 1
  974.         self.vidh = 1
  975.         BUIx.B_RectWidget.__init__(self, Parent, MenuDescr['Name'], self.vidw, self.vidh)
  976.         self.Selected = 0
  977.         self.Solid = 0
  978.         self.Border = 0
  979.         self.SetDrawFunc(self.Draw)
  980.         self.Time2Exit = None
  981.  
  982.     
  983.     def Draw(self, x, y, time):
  984.         if self.Time2Exit == None:
  985.             self.Time2Exit = time
  986.         
  987.         if time - self.Time2Exit > 10.0:
  988.             Bladex.Quit()
  989.         elif time - self.Time2Exit > 5.0:
  990.             self.CurrentBitmap = self.Bitmap2
  991.         
  992.         Raster.SetPosition(0, 0)
  993.         Raster.DrawImage(640, 480, 'BGR', 'Stretch', self.CurrentBitmap.GetData())
  994.         self.DefDraw(x, y, time)
  995.  
  996.     
  997.     def FinalRelease(self):
  998.         BUIx.B_RectWidget.FinalRelease(self)
  999.  
  1000.     
  1001.     def AcceptsFocus(self):
  1002.         return 0
  1003.  
  1004.  
  1005.