sound_page.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. # -*- coding: utf-8 -*-
  2. import pygame
  3. #from libs.roundrects import aa_round_rect
  4. import alsaaudio
  5. ## local UI import
  6. from UI.constants import Width,Height,ICON_TYPES
  7. from UI.page import Page,PageSelector
  8. from UI.icon_item import IconItem
  9. from UI.label import Label
  10. from UI.fonts import fonts
  11. from UI.util_funcs import midRect
  12. from UI.keys_def import CurKeys
  13. from UI.slider import Slider
  14. from UI.multi_icon_item import MultiIconItem
  15. from UI.icon_pool import MyIconPool
  16. import myvars
  17. class SoundSlider(Slider):
  18. OnChangeCB = None
  19. _BGpng = None
  20. _BGwidth = 192
  21. _BGheight = 173
  22. _NeedleSurf = None
  23. _Scale = None
  24. _Parent = None
  25. snd_segs = [ [0,20],[21,40],[41,50],[51,60],[61,70],[71,85],[86,90],[91,95],[96,100] ]
  26. def __init__(self):
  27. Slider.__init__(self)
  28. def Init(self):
  29. self._Width = self._Parent._Width
  30. self._Height = self._Parent._Height
  31. self._BGpng = IconItem()
  32. self._BGpng._ImgSurf = MyIconPool._Icons["vol"]
  33. self._BGpng._MyType = ICON_TYPES["STAT"]
  34. self._BGpng._Parent = self
  35. self._BGpng.Adjust(0,0,self._BGwidth,self._BGheight,0)
  36. ##self._NeedleSurf = pygame.Surface( (38,12),pygame.SRCALPHA )
  37. self._Scale = MultiIconItem()
  38. self._Scale._MyType = ICON_TYPES["STAT"]
  39. self._Scale._Parent = self
  40. self._Scale._ImgSurf = MyIconPool._Icons["scale"]
  41. self._Scale._IconWidth = 82
  42. self._Scale._IconHeight = 63
  43. self._Scale.Adjust(0,0,82,63,0)
  44. def SetValue(self,vol):#pct 0-100
  45. for i,v in enumerate(self.snd_segs):
  46. if vol >= v[0] and vol <= v[1]:
  47. self._Value = i # self._Value : 0 - 8
  48. break
  49. def Further(self):
  50. self._Value+=1
  51. if self._Value > len(self.snd_segs)-1:
  52. self._Value = len(self.snd_segs) -1
  53. vol = self.snd_segs[self._Value][0] + (self.snd_segs[self._Value][1] - self.snd_segs[self._Value][0])/2
  54. if self.OnChangeCB != None:
  55. if callable(self.OnChangeCB):
  56. self.OnChangeCB( vol )
  57. def StepBack(self):
  58. self._Value-=1
  59. if self._Value < 0:
  60. self._Value = 0
  61. vol = self.snd_segs[self._Value][0]
  62. if self.OnChangeCB != None:
  63. if callable(self.OnChangeCB):
  64. self.OnChangeCB( vol )
  65. def Draw(self):
  66. self._BGpng.NewCoord(self._Width/2,self._Height/2 )
  67. self._BGpng.Draw()
  68. self._Scale.NewCoord(self._Width/2,self._Height/2)
  69. self._Scale._IconIndex = self._Value
  70. self._Scale.Draw()
  71. class SoundPage(Page):
  72. _MySlider = None
  73. _FootMsg = ["Nav","","","Back","Enter"]
  74. def Init(self):
  75. self._CanvasHWND = self._Screen._CanvasHWND
  76. self._Width = self._Screen._Width
  77. self._Height = self._Screen._Height
  78. self._MySlider = SoundSlider()
  79. self._MySlider._Parent = self
  80. self._MySlider.SetCanvasHWND(self._CanvasHWND)
  81. self._MySlider.OnChangeCB = self.WhenSliderDrag
  82. self._MySlider.Init()
  83. try:
  84. m = alsaaudio.Mixer()
  85. self._MySlider.SetValue(m.getvolume()[0])
  86. except Exception,e:
  87. print(str(e))
  88. self._MySlider.SetValue(0)
  89. def OnLoadCb(self):
  90. try:
  91. m = alsaaudio.Mixer()
  92. self._MySlider.SetValue(m.getvolume()[0])
  93. except Exception,e:
  94. print(str(e))
  95. def WhenSliderDrag(self,value): ##value 0-100
  96. if value < 0 or value > 100:
  97. return
  98. m = alsaaudio.Mixer()
  99. m.setvolume(int(value))
  100. def KeyDown(self,event):
  101. if event.key == CurKeys["Menu"] or event.key == CurKeys["A"]:
  102. self.ReturnToUpLevelPage()
  103. self._Screen.Draw()
  104. self._Screen.SwapAndShow()
  105. if event.key == CurKeys["Right"]:
  106. self._MySlider.Further()
  107. self._Screen.Draw()
  108. self._Screen.SwapAndShow()
  109. if event.key == CurKeys["Left"]:
  110. self._MySlider.StepBack()
  111. self._Screen.Draw()
  112. self._Screen.SwapAndShow()
  113. def Draw(self):
  114. self.ClearCanvas()
  115. self._MySlider.Draw()