launcher/sys.py/UI/foot_bar.py
Daniel Cecil 48bb893a5c Revert SetLabelTexts
This causes SNES button actions to be backwards.
Please merge this pull request to revert back, or properly fix whatever the update was supposed to change in the first place.
2019-07-07 18:28:48 -07:00

193 lines
6.3 KiB
Python

# -*- coding: utf-8 -*-
import pygame
import os
##local import
from constants import Width,Height,ICON_TYPES,ALIGN
from util_funcs import FileExists,midRect
from icon_item import IconItem
from multi_icon_item import MultiIconItem
from icon_pool import MyIconPool
from libs.roundrects import aa_round_rect
from lang_manager import MyLangManager
from widget import Widget
from skin_manager import MySkinManager
import config
icon_base_path = MySkinManager.GiveIcon("gameshell/footbar_icons/")
class FootBarIcon(MultiIconItem):
def TotalWidth(self):
return self._Width+self._Label._Width
def Draw(self):
if self._Align==ALIGN["VCenter"]: #default
if self._Label != None:
self._Label._PosX = self._PosX - self._Label._Width/2
self._Label._PosY = self._PosY + self._Height/2 + 12
elif self._Align ==ALIGN["HLeft"]:
if self._Label != None:
self._Label._PosX = self._PosX + self._Width/2 + 3
self._Label._PosY = self._PosY - self._Label._Height/2
if self._Label!=None:
self._Label.Draw()
if self._ImgSurf != None:
self._Parent._CanvasHWND.blit(self._ImgSurf,midRect(self._PosX,
self._PosY,
self._Width,self._Height,Width,Height),
(0,self._IconIndex*self._IconHeight,self._IconWidth,self._IconHeight))
class FootBar(Widget):
_Width = Width
_Height = 20
_BarHeight = 20.5
_BorderWidth = 1
_CanvasHWND = None
_HWND = None
_Icons = {}
_IconWidth = 18
_IconHeight = 18
_LabelFont = MyLangManager.TrFont("veramono10")
_State = "normal"
_SkinManager = None
def __init__(self):
self._Icons = {}
def ReadFootBarIcons(self,icondir):
if FileExists(icondir) == False and os.path.isdir(icondir) == False:
return
keynames = ["nav","x","y","a","b","select"]
share_surf = pygame.image.load(icon_base_path+"footbar.png").convert_alpha()
files = os.listdir(icondir)
for _i,i in enumerate( keynames):
it = FootBarIcon()
it._MyType = ICON_TYPES["NAV"]
it._Parent = self
it._ImgSurf= share_surf
it._Align = ALIGN["HLeft"] # (x)text <=
it.AddLabel("game",self._LabelFont)
it.Adjust(self._IconWidth/2+_i*self._IconWidth, self._IconHeight/2+2, self._IconWidth, self._IconHeight,0)
it._IconIndex = _i
self._Icons[i] = it
def Init(self,screen):
self._HWND = screen
self._CanvasHWND = pygame.Surface((Width,int(self._BarHeight)))
self.ReadFootBarIcons(icon_base_path)
round_corners = MultiIconItem()
round_corners._IconWidth = 10
round_corners._IconHeight = 10
round_corners._MyType = ICON_TYPES["STAT"]
round_corners._Parent = self
round_corners._ImgSurf = MyIconPool.GiveIconSurface("roundcorners")
round_corners.Adjust(0,0,10,10,0)
self._Icons["round_corners"] = round_corners
def ResetNavText(self):
self._Icons["nav"]._Label.SetText(MyLangManager.Tr("Nav"))
self._State = "normal"
self.Draw()
return False
def UpdateNavText(self,texts):
self._State = "tips"
texts = MyLangManager.Tr(texts)
my_text = self._LabelFont.render(texts,True,self._SkinManager.GiveColor("Text"))
"""
_w = 0
for i, x in enumerate(("b","a","y","x")):
if self._Icons[x]._Label._Text!="":
if i==0:
_w += self._Icons[x].TotalWidth()
else:
_w += self._Icons[x].TotalWidth()+5
"""
left_width = self._Width - 18
final_piece = ""
for i ,v in enumerate(texts):
text_slice = texts[:i+1]
my_text = self._LabelFont.render(text_slice,True, self._SkinManager.GiveColor("Text"))
final_piece = text_slice
if my_text.get_width() >= left_width:
break
print("finalpiece %s" %final_piece)
self._Icons["nav"]._Label.SetText( final_piece )
self.Draw()
def SetLabelTexts(self,texts):
barr = ["nav","y","x","b","a","select"]
texts2 = texts + [""] if len(texts) == 5 else texts
for idx,x in enumerate(barr):
try:
self._Icons[x]._Label.SetText(MyLangManager.Tr(texts2[idx]))
except IndexError:
print("Index "+x+" doesn't exist!")
def ClearCanvas(self):
self._CanvasHWND.fill( self._SkinManager.GiveColor("White") )
self._Icons["round_corners"].NewCoord(5,self._Height -5 )
self._Icons["round_corners"]._IconIndex = 2
self._Icons["round_corners"].Draw()
self._Icons["round_corners"].NewCoord(self._Width-5,self._Height-5)
self._Icons["round_corners"]._IconIndex = 3
self._Icons["round_corners"].Draw()
"""
aa_round_rect(self._CanvasHWND,
(0,0,self._Width,self._Height),self._BgColor,8,0, self._BgColor)
pygame.draw.rect(self._CanvasHWND,self._BgColor,(0,0,Width,self._BarHeight/2), 0 )
"""
def Draw(self):
self.ClearCanvas()
self._Icons["nav"].NewCoord(self._IconWidth/2+3,self._IconHeight/2+2)
self._Icons["nav"].Draw()
if self._State == "normal":
_w=0
#for i,x in enumerate(("a","b","x","y")):
for i, x in enumerate(("b","a","y","x","select")):
if self._Icons[x]._Label._Text!="":
if i==0:
_w += self._Icons[x].TotalWidth()
else:
_w += self._Icons[x].TotalWidth()+5
start_x = self._Width - _w
start_y = self._IconHeight/2+2
self._Icons[x].NewCoord(start_x,start_y)
self._Icons[x].Draw()
pygame.draw.line(self._CanvasHWND,self._SkinManager.GiveColor("Line"),(0,0),(Width,0),self._BorderWidth)
if self._HWND != None:
self._HWND.blit(self._CanvasHWND,(self._PosX,Height - self._Height,Width,self._BarHeight))