sound_page.py 4.4 KB

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