sound_page.py 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  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.skin_manager import MySkinManager
  15. from UI.icon_pool import MyIconPool
  16. from libs.roundrects import aa_round_rect
  17. import myvars
  18. class SoundSlider(Slider):
  19. OnChangeCB = None
  20. _Parent = None
  21. _VolumeLabel =None
  22. def __init__(self):
  23. Slider.__init__(self)
  24. def Init(self):
  25. self._Width = self._Parent._Width
  26. self._Height = self._Parent._Height
  27. self._VolumeLabel = Label()
  28. self._VolumeLabel.SetCanvasHWND(self._CanvasHWND)
  29. self._VolumeLabel.Init("VOLUME",MySkinManager.GiveFont("EurostileBold13"))
  30. self._VolumeLabel.SetColor(MySkinManager.GiveColor('Text'))
  31. def SetValue(self,vol):#pct 0-100
  32. if vol >= 0 and vol <= 100:
  33. self._Value = vol
  34. def Further(self):
  35. self._Value+=5
  36. if self._Value > 100:
  37. self._Value = 100
  38. if self.OnChangeCB != None:
  39. if callable(self.OnChangeCB):
  40. self.OnChangeCB( self._Value )
  41. def StepBack(self):
  42. self._Value-=5
  43. if self._Value < 0:
  44. self._Value = 0
  45. if self.OnChangeCB != None:
  46. if callable(self.OnChangeCB):
  47. self.OnChangeCB( self._Value )
  48. def Draw(self):
  49. start_x = 82
  50. start_y = self._Parent._Screen._Height/2-5
  51. height = 30
  52. width = 4
  53. seg = self._Value / 5
  54. for i in range(0, 20):
  55. rect = pygame.Rect(start_x+i*(width*2),start_y,width,height)
  56. if i > seg:
  57. pygame.draw.rect(self._CanvasHWND,MySkinManager.GiveColor('Text'),rect, 1)
  58. #aa_round_rect(self._CanvasHWND,rect, MySkinManager.GiveColor('Text'),1,1, MySkinManager.GiveColor('White'))
  59. else:
  60. pygame.draw.rect(self._CanvasHWND,MySkinManager.GiveColor('Text'),rect, 0)
  61. #aa_round_rect(self._CanvasHWND,rect, MySkinManager.GiveColor('Text'),1,0, MySkinManager.GiveColor('White'))
  62. self._VolumeLabel.NewCoord(118,self._Parent._Screen._Height/2-30)
  63. self._VolumeLabel.Draw(True)
  64. minus_box_rect = pygame.Rect(start_x- (4+6)*4,start_y,6*4,30)
  65. pygame.draw.rect(self._CanvasHWND,MySkinManager.GiveColor('Text'),minus_box_rect, 0)
  66. minus_rect = pygame.Rect(start_x-8*4,start_y+14,2*4,2)
  67. pygame.draw.rect(self._CanvasHWND,MySkinManager.GiveColor('White'),minus_rect, 0)
  68. plus_box_rect = pygame.Rect(start_x + 39*4 +4*4,start_y,6*4,30)
  69. pygame.draw.rect(self._CanvasHWND,MySkinManager.GiveColor('Text'),plus_box_rect, 0)
  70. cross1_rect = pygame.Rect(start_x+39*4+4*4+2*4,start_y+14,2*4,2)
  71. pygame.draw.rect(self._CanvasHWND,MySkinManager.GiveColor('White'),cross1_rect, 0)
  72. cross2_rect = pygame.Rect(start_x+39*4+4*4+2*4+3,start_y+14-3,2,2*4)
  73. pygame.draw.rect(self._CanvasHWND,MySkinManager.GiveColor('White'),cross2_rect, 0)
  74. class SoundPage(Page):
  75. _MySlider = None
  76. _FootMsg = ["Nav","","","Back","Enter"]
  77. def Init(self):
  78. self._CanvasHWND = self._Screen._CanvasHWND
  79. self._Width = self._Screen._Width
  80. self._Height = self._Screen._Height
  81. self._MySlider = SoundSlider()
  82. self._MySlider._Parent = self
  83. self._MySlider.SetCanvasHWND(self._CanvasHWND)
  84. self._MySlider.OnChangeCB = self.WhenSliderDrag
  85. self._MySlider.Init()
  86. try:
  87. m = alsaaudio.Mixer()
  88. self._MySlider.SetValue(m.getvolume()[0])
  89. except Exception,e:
  90. print(str(e))
  91. self._MySlider.SetValue(0)
  92. def OnLoadCb(self):
  93. try:
  94. m = alsaaudio.Mixer()
  95. self._MySlider.SetValue(m.getvolume()[0])
  96. except Exception,e:
  97. print(str(e))
  98. def WhenSliderDrag(self,value): ##value 0-100
  99. if value < 0 or value > 100:
  100. return
  101. m = alsaaudio.Mixer()
  102. m.setvolume(int(value))
  103. def KeyDown(self,event):
  104. if IsKeyMenuOrB(event.key):
  105. self.ReturnToUpLevelPage()
  106. self._Screen.Draw()
  107. self._Screen.SwapAndShow()
  108. if event.key == CurKeys["Right"]:
  109. self._MySlider.Further()
  110. self._Screen.Draw()
  111. self._Screen.SwapAndShow()
  112. if event.key == CurKeys["Left"]:
  113. self._MySlider.StepBack()
  114. self._Screen.Draw()
  115. self._Screen.SwapAndShow()
  116. def Draw(self):
  117. self.ClearCanvas()
  118. self._MySlider.Draw()