home *** CD-ROM | disk | FTP | other *** search
/ PC PowerPlay 56 / CDPowerplay56Disc2.iso / demos / blade / data1.cab / Program_Executable_Files / Lib / Widgets / netwidgets.py < prev    next >
Encoding:
Python Source  |  2000-10-27  |  12.3 KB  |  463 lines

  1. import BUIx
  2. import BVideo
  3. import Raster
  4. import BBLib
  5. import math
  6. import sys
  7. import MenuWidget
  8. import BInput
  9. import ListWidget
  10. import ScorerWidgets
  11. import NetMisc
  12.  
  13. CharList = None
  14. #print "arrecho"
  15.  
  16. def ChangePlayer(n):
  17.     global CharList
  18.     CharList.ChangeImage(n)
  19.  
  20. #
  21. # Seleccion de personaje
  22. ################################
  23. class B_ImageListWidget(BUIx.B_RectWidget):
  24.     
  25.     def __init__(self,Parent,MenuDescr,StackMenu):
  26.         global CharList
  27.         
  28.         imagelist=MenuDescr["ImageList"]
  29.         self.Bitmap={}
  30.         self.IDX = imagelist[0][0]
  31.         
  32.         for i in imagelist:
  33.             bitm = BBLib.B_BitMap24()
  34.             bitm.ReadFromBMP(i[1])
  35.             self.Bitmap[i[0]] = bitm
  36.             
  37.         self.vidw,self.vidh=self.Bitmap[self.IDX].GetDimension()
  38.         BUIx.B_RectWidget.__init__(self,Parent,MenuDescr["Name"],self.vidw,self.vidh)
  39.         self.Selected=0
  40.         self.Solid=0
  41.         self.Border=0
  42.         self.SetDrawFunc(self.Draw)
  43.         CharList = self
  44.         self.IDX         = MenuDescr["GetCharType"]()
  45.         
  46.     
  47.     def ChangeImage(self,name):
  48.         self.IDX = name
  49.     
  50.     def Draw(self,x,y,time):
  51.         Raster.SetPosition(x,y)
  52.         Raster.DrawImage(self.vidw,self.vidh,"RGB","Normal",self.Bitmap[self.IDX].GetData())
  53.         self.DefDraw(x,y,time)
  54.  
  55.     def FinalRelease(self):
  56.         global CharList
  57.         CharList = None
  58.         BUIx.B_RectWidget.FinalRelease(self)
  59.         
  60.     def AcceptsFocus(self):
  61.         return 0
  62.  
  63. #
  64. #  Seleccion de mapas
  65. #############################################
  66. class B_MapListWidget(BUIx.B_RectWidget):
  67.     def __init__(self,Parent,MenuDescr,StackMenu):
  68.         name=MenuDescr["LeftMap"]
  69.         self.LeftMap       = BBLib.B_BitMap24()
  70.         self.LeftMap.ReadFromBMP(name)
  71.         self.LSize,garbage = self.LeftMap.GetDimension()
  72.         
  73.         name=MenuDescr["RightMap"]
  74.         self.RightMap      = BBLib.B_BitMap24()
  75.         self.RightMap.ReadFromBMP(name)
  76.         self.RSize,garbage = self.RightMap.GetDimension()
  77.         
  78.         name=MenuDescr["SelMap"]
  79.         self.SelMap      = BBLib.B_BitMap24()
  80.         self.SelMap.ReadFromBMP(name)
  81.         self.SSize,self.vidh = self.SelMap.GetDimension()
  82.  
  83.         name=MenuDescr["MarkMap"]
  84.         self.MarkMap     = BBLib.B_BitMap24()
  85.         self.MarkMap.ReadFromBMP(name)
  86.         self.SSize,self.vidh = self.MarkMap.GetDimension()
  87.         
  88.         self.vidw = self.SSize*3+self.LSize+self.RSize
  89.         
  90.         imagelist = NetMisc.ActualizeMapsBitmaps()
  91.         self.Bitmap=[]
  92.         self.IDX = 0
  93.         
  94.         self.MapSetValue = MenuDescr["MapSetValue"]
  95.         dta              = MenuDescr["MapGetValue"]()
  96.         
  97.         for i in imagelist:
  98.             bitm = BBLib.B_BitMap24()
  99.             bitm.ReadFromBMP(i[0])
  100.             
  101.             self.Bitmap.append([bitm,i[1],i[2],0])
  102.             
  103.             for j in dta:
  104.                 if j == i[2]:
  105.                     self.Bitmap[len(self.Bitmap)-1][3] = 1
  106.         
  107.         self.MapW,self.MapH = self.Bitmap[self.IDX][0].GetDimension()
  108.         
  109.         self.MapW = (self.SSize - self.MapW)/2
  110.         self.MapH = (self.vidh  - self.MapH)/2
  111.         
  112.         BUIx.B_RectWidget.__init__(self,Parent,MenuDescr["Name"],self.vidw,self.vidh)
  113.         self.Selected=0
  114.         self.Solid=0
  115.         self.Border=0
  116.         self.SetDrawFunc(self.Draw)
  117.         
  118.     def Draw(self,x,y,time):
  119.         global LabelName
  120.         if self.IDX == 0:
  121.             first = len(self.Bitmap)-1
  122.         else:
  123.             first = self.IDX-1
  124.         
  125.         if self.IDX == len(self.Bitmap)-1:
  126.             last = 0
  127.         else:
  128.             last = self.IDX+1
  129.             
  130.         if self.Bitmap[first][3]:
  131.             Raster.SetPosition(x+self.SSize*0+self.LSize, y)
  132.             Raster.DrawImage(self.SSize,self.vidh,"RGB","Normal",self.MarkMap.GetData())
  133.             
  134.         if self.Bitmap[self.IDX][3]:
  135.             Raster.SetPosition(x+self.SSize*1+self.LSize, y)
  136.             Raster.DrawImage(self.SSize,self.vidh,"RGB","Normal",self.MarkMap.GetData())
  137.         
  138.         if self.Bitmap[last][3]:
  139.             Raster.SetPosition(x+self.SSize*2+self.LSize, y)
  140.             Raster.DrawImage(self.SSize,self.vidh,"RGB","Normal",self.MarkMap.GetData())
  141.         
  142.         if self.GetHasFocus():        
  143.             Raster.SetPosition(x,y+self.MapH)
  144.             Raster.DrawImage(self.LSize,self.vidh-2*self.MapH,"RGB","Normal",self.LeftMap.GetData())
  145.  
  146.             Raster.SetPosition(x+self.SSize*3+self.LSize, y+self.MapH)
  147.             Raster.DrawImage(self.LSize,self.vidh-2*self.MapH,"RGB","Normal",self.RightMap.GetData())
  148.             
  149.             if int(time*5)%2 == 0:
  150.                 Raster.SetPosition(x+self.SSize*1+self.LSize, y)
  151.                 Raster.DrawImage(self.SSize,self.vidh,"RGB","Normal",self.SelMap.GetData())
  152.             
  153.             
  154.         Raster.SetPosition(x+self.MapW+self.SSize*0+self.LSize, y+self.MapH)
  155.         Raster.DrawImage(self.SSize-2*self.MapW,self.vidh-2*self.MapH,"RGB","Normal",self.Bitmap[first][0].GetData())
  156.         
  157.             
  158.         Raster.SetPosition(x+self.MapW+self.SSize*1+self.LSize, y+self.MapH)
  159.         Raster.DrawImage(self.SSize-2*self.MapW,self.vidh-2*self.MapH,"RGB","Normal",self.Bitmap[self.IDX][0].GetData())
  160.         
  161.         Raster.SetPosition(x+self.MapW+self.SSize*2+self.LSize, y+self.MapH)
  162.         Raster.DrawImage(self.SSize-2*self.MapW,self.vidh-2*self.MapH,"RGB","Normal",self.Bitmap[last][0].GetData())
  163.         
  164.         self.DefDraw(x,y,time)
  165.         
  166.         LabelName = self.Bitmap[self.IDX][1]
  167.         
  168.     def IncMenuItem(self):
  169.         self.IDX = self.IDX+1
  170.         if self.IDX >= len(self.Bitmap):
  171.             self.IDX = 0
  172.             
  173.     
  174.     def DecMenuItem(self):
  175.         self.IDX = self.IDX-1
  176.         if self.IDX < 0:
  177.             self.IDX = len(self.Bitmap)-1
  178.             
  179.     def ActivateItem(self,act):
  180.         self.Bitmap[self.IDX][3] = not self.Bitmap[self.IDX][3]
  181.         v = []
  182.         for i in self.Bitmap:
  183.             if i[3]:
  184.                 v.append(i[2])
  185.         self.MapSetValue(v)
  186.         
  187.         
  188.     def AcceptsFocus(self):
  189.         return 1
  190.  
  191. def FullFillPassword(cad,char):
  192.     res =""
  193.     for x in range(len(cad)):
  194.         res = res + char
  195.     return res
  196.  
  197. #
  198. #  Entrada de texto
  199. #################################################
  200. class B_InputBox(MenuWidget.B_MenuItemTextNoFX):
  201.     def __init__(self,Parent,MenuDescr,StackMenu):
  202.         MenuWidget.B_MenuItemTextNoFX.__init__(self,Parent,MenuDescr,StackMenu)
  203.         mentirita = None
  204.         
  205.         self.Label    = MenuDescr["Name"]
  206.         self.Input    = MenuDescr["GetInput"]()
  207.         self.MaxSize  = MenuDescr["MaxSize"]
  208.         self.SetInput = MenuDescr["SetInput"]
  209.         
  210.         self.IManager=BInput.GetInputManager()
  211.         
  212.         self.ListenerName=MenuDescr["Name"]+" Listener"
  213.         self.Listener=BInput.B_InputListener(self.ListenerName) #No se puede heredar m·ltiple de una clase generada por SWIG
  214.         self.Listener.SetPythonFunc(self.ListenDevice)
  215.         self.Parent = Parent
  216.         self.xx=-1
  217.  
  218.         if MenuDescr.has_key("PasswordChar"):
  219.             self.PasswordChar = MenuDescr["PasswordChar"]
  220.         else:
  221.             self.PasswordChar = None
  222.  
  223.         try:
  224.             self.Locked = MenuDescr["Locked"]()
  225.         except:
  226.             self.Locked = 0    
  227.         
  228.         
  229.     def Draw(self,x,y,time):
  230.         cursor = ""
  231.         if self.xx==-1:
  232.             self.xx = x
  233.             self.yy = y
  234.         
  235.         if self.GetVisible()==0:
  236.             return
  237.     
  238.         #print "MenuItemText",self.Name()
  239.         foc=self.GetHasFocus()
  240.         if foc:
  241.             self.SetColor(220,220,220)
  242.             if not self.Locked:
  243.                 if((int(time*5)%2)==0):
  244.                     cursor = ">"
  245.         else:
  246.             self.SetColor(220,10,10)
  247.         
  248.         if self.PasswordChar:
  249.             self.SetText(self.Label+" "+FullFillPassword(self.Input,self.PasswordChar)+cursor)
  250.         else:
  251.             self.SetText(self.Label+" "+self.Input+cursor)
  252.                 
  253.         self.DefDraw(self.xx-self.MaxSize*3,self.yy,time)
  254.         
  255.     def SetHasFocus(self,foc):
  256.         MenuWidget.B_MenuItemTextNoFX.SetHasFocus(self,foc)
  257.         if self.Locked:
  258.             return
  259.         if(foc==1):
  260.             self.BeginDefineKey()
  261.         print "Let's Write!",foc
  262.     
  263.     def FinalRelease(self):
  264.         self.Listener = None
  265.         self.IManager = None
  266.         self.Parent = None
  267.         self.SetInput = None
  268.         MenuWidget.B_MenuItemTextNoFX.FinalRelease(self)
  269.         print "FinalRelease"
  270.         
  271.     def BeginDefineKey(self):
  272.         keyb=self.IManager.GetAttachedDevice("Keyboard")
  273.         keyb.AddListener(self.Listener)
  274.         self.oldInputActionsSet=self.IManager.GetInputActionsSet()
  275.         self.IManager.SetInputActionsSet("MenuRedefine")
  276.         
  277.     def EndDefineKey(self):
  278.         self.IManager.SetInputActionsSet(self.oldInputActionsSet)
  279.         self.oldInputActionsSet = None
  280.         keyb=self.IManager.GetAttachedDevice("Keyboard")
  281.         keyb.RemoveListener(self.ListenerName)
  282.  
  283.     def AddLetter(self,letra):
  284.         if(len(self.Input)<self.MaxSize):
  285.             self.Input = self.Input+letra
  286.     
  287.     def ListenDevice(self,x,y,z):
  288.         if z==1.0:
  289.             if x=="Down":
  290.                 self.EndDefineKey()
  291.                 self.Parent.NextFocus()
  292.             elif x=="Tab":
  293.                 self.EndDefineKey()
  294.                 self.Parent.NextFocus()
  295.             elif x=="Up":
  296.                 self.EndDefineKey()
  297.                 self.Parent.PrevFocus()
  298.             elif x=="Esc":
  299.                 self.EndDefineKey()
  300.             elif x=="Backspace":
  301.                 largo = len(self.Input)
  302.                 if(largo!=0):
  303.                     self.Input = self.Input[0:largo-1]
  304.             elif x=="Delete":
  305.                 self.Input = ""
  306.             elif len(x)==1:
  307.                 self.AddLetter(x)                
  308.             elif x=="Decimal":
  309.                 self.AddLetter(".")
  310.             elif x=="Period":
  311.                 self.AddLetter(".")
  312.             elif x[0:6]=="Numpad":
  313.                 self.AddLetter(x[6])
  314.             elif x[0:6]=="Space":
  315.                 self.AddLetter(" ")
  316.             self.SetInput(self.Input)
  317.             
  318.     def __del__(self):
  319.         print "Chau! input box"
  320.         MenuWidget.B_MenuItemTextNoFX.__del__(self)
  321.  
  322.  
  323. #
  324. # Lista de servidores
  325. ###########################
  326.  
  327. LaListaDeServidores = None
  328.  
  329. class B_ServerListWidget(ListWidget.B_ListWidget):
  330.  
  331.     def __init__(self,Parent,Menudesc,StackMenu,VertPos=0):
  332.         global LaListaDeServidores
  333.         ListWidget.B_ListWidget.__init__(self,Parent,Menudesc,StackMenu,VertPos)
  334.         self.StackMenu = StackMenu
  335.         
  336.         self.DownArrow.SetAlpha(1) # Parche, no funciona la llamada a AdjustScrollArrows() en AddMenuElement(),
  337.                                    # hasta que lo averigⁿe.
  338.         LaListaDeServidores = self
  339.         self.SetDrawFunc(self.Draw)
  340.  
  341.     def Draw(self,x,y,time):
  342.         #pdb.set_trace()
  343.         self.SetClipDraw(1)
  344.         self.DefDraw(x,y,time)
  345.  
  346.     def __del__(self):
  347.         ListWidget.B_ListWidget.__del__(self)
  348.  
  349.     def FinalRelease(self):
  350.         global LaListaDeServidores
  351.         
  352.         LaListaDeServidores = None
  353.         self.StackMenu      = None
  354.         ListWidget.B_ListWidget.FinalRelease(self)
  355.  
  356.     def SetList(self,lista):
  357.         while(self.nWidgets()>0):
  358.             self.RemoveWidget_Idx(0)
  359.         
  360.         self.nElements=0
  361.         self.Position=0
  362.         self.ListItems=[]
  363.         self.VertPos=0
  364.         self.ListSize=0
  365.         self.WidgetsVPos=[]
  366.         self.WidgetsHeights=[]
  367.         
  368.         self.Focus=None
  369.         self.MenuItems=[]
  370.         
  371.         for i in lista:
  372.             m_class=MenuWidget.B_MenuItemTextNoFX
  373.             try:
  374.                 m_class=i["Kind"]
  375.             except:
  376.                 pass
  377.             
  378.             wSubMenu=m_class(self,i,self.StackMenu)
  379.             self.AddMenuElement(wSubMenu)
  380.             
  381.         self.SetFocus_Idx(0)
  382.  
  383.         self.UpArrow=BUIx.B_TextWidget(self,"UpArrow",chr(190),ScorerWidgets.font_server,"..\\..\\Data\\Letras menu med.bmp")
  384.         self.AddWidget(self.UpArrow,77,0,BUIx.B_FrameWidget.B_FR_AbsoluteLeft,BUIx.B_FrameWidget.B_FR_Left,
  385.                                          BUIx.B_FrameWidget.B_FR_AbsoluteTop,BUIx.B_FrameWidget.B_FR_Top)
  386.         self.UpArrow.SetColor(250,0,0)
  387.         self.UpArrow.SetAlpha(0.5)        
  388.         
  389.         self.DownArrow=BUIx.B_TextWidget(self,"DownArrow",chr(191),ScorerWidgets.font_server,"..\\..\\Data\\Letras menu med.bmp")
  390.         self.AddWidget(self.DownArrow,77,0,BUIx.B_FrameWidget.B_FR_AbsoluteLeft,BUIx.B_FrameWidget.B_FR_Left,
  391.                                            BUIx.B_FrameWidget.B_FR_AbsoluteBottom,BUIx.B_FrameWidget.B_FR_Bottom)
  392.         self.DownArrow.SetColor(250,0,0)
  393.         self.DownArrow.SetAlpha(0.5)
  394.  
  395.  
  396. class B_ServerLabel(MenuWidget.B_MenuItemTextNoFX):
  397.     def __init__(self,Parent,MenuDescr,StackMenu,VertPos=0):
  398.         
  399.         MenuWidget.B_MenuItemTextNoFX.__init__(self,Parent,MenuDescr,StackMenu)
  400.         
  401.         self.name       = MenuDescr["Name"]
  402.         self.NumPlayers = MenuDescr["NumPlayers"]
  403.         self.MaxPlayers = MenuDescr["MaxPlayers"]
  404.         self.Idx    = MenuDescr["Idx"]
  405.         self.Join    = MenuDescr["Join"]
  406.  
  407.     def ActivateItem(self,act):
  408.         if(act):
  409.             self.Join(self.Name,self.NumPlayers,self.MaxPlayers,self.Idx)
  410.         else:
  411.             MenuWidget.B_MenuItemTextNoFX.__init__(self,act)
  412.  
  413.  
  414.     def Draw(self,x,y,time):
  415.     
  416.         if self.GetVisible()==0:
  417.             return
  418.     
  419.         foc=self.GetHasFocus()
  420.         if foc:
  421.             self.SetColor(220,220,220)
  422.         else:
  423.             self.SetColor(220,10,10)
  424.                     
  425.         self.SetText(self.name)
  426.         self.DefDraw(x,y,time)
  427.  
  428.         if  self.MaxPlayers != 0:
  429.             self.SetText(`self.NumPlayers`+" / "+`self.MaxPlayers`)
  430.             self.DefDraw(x+250,y,time)
  431.             self.SetText(self.name)
  432.  
  433. LabelName = ""
  434.  
  435. class B_DescriptorLabel(MenuWidget.B_MenuItemTextNoFX):
  436.     def __init__(self,Parent,MenuDescr,StackMenu):
  437.         MenuWidget.B_MenuItemTextNoFX.__init__(self,Parent,MenuDescr,StackMenu)
  438.         self.SetDrawFunc(self.Draw)
  439.         self.LastLevelName = ""
  440.         self.Parent = Parent
  441.  
  442.     def Draw(self,x,y,time):
  443.         global LabelName
  444.         
  445.         if self.GetVisible()==0:
  446.             return
  447.         
  448.         if self.LastLevelName != LabelName:
  449.             self.SetText(LabelName)
  450.             self.Parent.RecalcLayout()
  451.             self.LastLevelName = LabelName
  452.  
  453.         foc=self.GetHasFocus()
  454.         if foc:
  455.             self.SetColor(254,148,1)
  456.         else:
  457.             self.SetColor(220,10,10)
  458.         self.SetAlpha(1.0)
  459.         self.DefDraw(x,y,time)
  460.  
  461.     def AcceptsFocus(self):
  462.         return 0
  463.