__init__.py 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284
  1. # -*- coding: utf-8 -*-
  2. import os
  3. import pygame
  4. import glob
  5. #import math
  6. import commands
  7. #from beeprint import pp
  8. from libs.roundrects import aa_round_rect
  9. #import gobject
  10. #from wicd import misc
  11. ## local UI import
  12. from UI.constants import Width,Height,ICON_TYPES
  13. from UI.page import Page,PageSelector
  14. from UI.label import Label
  15. from UI.fonts import fonts
  16. from UI.util_funcs import midRect,FileExists,IsExecutable
  17. from UI.keys_def import CurKeys
  18. from UI.scroller import ListScroller
  19. from UI.icon_pool import MyIconPool
  20. from UI.icon_item import IconItem
  21. from UI.multi_icon_item import MultiIconItem
  22. from UI.lang_manager import MyLangManager
  23. from UI.multilabel import MultiLabel
  24. from UI.info_page_list_item import InfoPageListItem
  25. from UI.info_page_selector import InfoPageSelector
  26. from UI.skin_manager import MySkinManager
  27. class NotifyJobListItem(InfoPageListItem):
  28. _CanvasHWND = None
  29. def Init(self,text):
  30. #self._Fonts["normal"] = fonts["veramono12"]
  31. self._CanvasHWND = self._Parent._CanvasHWND
  32. l = Label()
  33. l._PosX = 10
  34. l.SetCanvasHWND(self._Parent._CanvasHWND)
  35. l.Init(text,self._Fonts["normal"])
  36. self._Labels["Text"] = l
  37. done_icon = IconItem()
  38. done_icon._ImgSurf = MyIconPool._Icons["done"]
  39. done_icon._CanvasHWND = self._Parent._CanvasHWND
  40. done_icon._Parent = self
  41. self._Icons["done"] = done_icon
  42. def Draw(self):
  43. if self._ReadOnly == False:
  44. self._Labels["Text"].SetColor(MySkinManager.GiveColor("ReadOnlyText"))
  45. else:
  46. self._Labels["Text"].SetColor(MySkinManager.GiveColor("Text"))
  47. self._Labels["Text"]._PosX = self._Labels["Text"]._PosX + self._PosX
  48. self._Labels["Text"]._PosY = self._PosY + (self._Height - self._Labels["Text"]._Height)/2
  49. self._Labels["Text"].Draw()
  50. self._Labels["Text"]._PosX = self._Labels["Text"]._PosX - self._PosX
  51. if "Small" in self._Labels:
  52. self._Labels["Small"]._PosX = self._Width - self._Labels["Small"]._Width-5
  53. self._Labels["Small"]._PosY = self._PosY + (self._Height - self._Labels["Small"]._Height)/2
  54. self._Labels["Small"].Draw()
  55. if self._ReadOnly:
  56. self._Icons["done"].NewCoord(self._Width - 25,5)
  57. self._Icons["done"].Draw()
  58. pygame.draw.line(self._Parent._CanvasHWND,MySkinManager.GiveColor('Line'),(self._PosX,self._PosY+self._Height-1),(self._PosX+self._Width,self._PosY+self._Height-1),1)
  59. class NotificationPage(Page):
  60. _FootMsg = ["Nav","","","Back","Toggle"]
  61. _MyList = []
  62. _ListFontObj = MyLangManager.TrFont("varela13")
  63. _AList = {}
  64. _Scrolled = 0
  65. _BGwidth = 320
  66. _BGheight = 240-24-20
  67. _DrawOnce = False
  68. _Scroller = None
  69. _EasingDur = 30
  70. _GSNOTIFY_JOBS = "gsnotify/Jobs"
  71. _GSNOTIFY_SOCKET="/tmp/gsnotify.sock"
  72. _Config =None
  73. _AllowedExts = [".sh",".lsp",".lua",".bin",".py",".js"]
  74. def __init__(self):
  75. Page.__init__(self)
  76. self._Icons = {}
  77. def GenList(self):
  78. self._MyList = []
  79. ## map ini to self._AList
  80. files_path = glob.glob(self._GSNOTIFY_JOBS+"/*")
  81. start_x = 10
  82. start_y = 0
  83. for i,v in enumerate( files_path):
  84. filename, file_extension = os.path.splitext(v)
  85. alias_file = filename + ".alias"
  86. if file_extension in self._AllowedExts:
  87. li = NotifyJobListItem()
  88. li._Parent = self
  89. li._PosX = start_x
  90. li._PosY = start_y + i*InfoPageListItem._Height
  91. li._Width = Width-10
  92. li._Fonts["normal"] = self._ListFontObj
  93. li._Fonts["small"] = fonts["varela12"]
  94. if IsExecutable(v):
  95. li._ReadOnly = True
  96. if os.path.isfile(alias_file):
  97. fp = open(alias_file, "r")
  98. alias = fp.read()
  99. alias = alias.strip()
  100. label_text = alias.decode("utf8")
  101. li.Init( label_text )
  102. fp.close()
  103. else:
  104. li.Init( os.path.basename(v) )
  105. li._Flag = v
  106. ##li.SetSmallText( v )
  107. self._MyList.append(li)
  108. def Init(self):
  109. if self._Screen != None:
  110. if self._Screen._CanvasHWND != None and self._CanvasHWND == None:
  111. self._CanvasHWND = self._Screen._CanvasHWND
  112. self._PosX = self._Index*self._Screen._Width
  113. self._Width = self._Screen._Width ## equal to screen width
  114. self._Height = self._Screen._Height
  115. ps = InfoPageSelector()
  116. ps._PosX = 11
  117. ps._Parent = self
  118. ps._Width = self._Width-10
  119. self._Ps = ps
  120. self._PsIndex = 0
  121. self._Scroller = ListScroller()
  122. self._Scroller._Parent = self
  123. self._Scroller._PosX = 2
  124. self._Scroller._PosY = 2
  125. self._Scroller.Init()
  126. def ScrollDown(self):
  127. if len(self._MyList) == 0:
  128. return
  129. self._PsIndex +=1
  130. if self._PsIndex >= len(self._MyList):
  131. self._PsIndex = len(self._MyList) -1
  132. cur_li = self._MyList[self._PsIndex]
  133. if cur_li._PosY +cur_li._Height > self._Height:
  134. for i in range(0,len(self._MyList)):
  135. self._MyList[i]._PosY -= self._MyList[i]._Height
  136. def ScrollUp(self):
  137. if len(self._MyList) == 0:
  138. return
  139. self._PsIndex -= 1
  140. if self._PsIndex < 0:
  141. self._PsIndex = 0
  142. cur_li = self._MyList[self._PsIndex]
  143. if cur_li._PosY < 0:
  144. for i in range(0, len(self._MyList)):
  145. self._MyList[i]._PosY += self._MyList[i]._Height
  146. def Click(self):
  147. if len(self._MyList) == 0:
  148. return
  149. cur_li = self._MyList[self._PsIndex]
  150. #print("Click ",cur_li._Flag)
  151. if IsExecutable(cur_li._Flag):
  152. os.system("chmod -x "+cur_li._Flag)
  153. else:
  154. os.system("chmod +x "+cur_li._Flag)
  155. self.GenList()
  156. def OnLoadCb(self):
  157. self._Scrolled = 0
  158. self._PosY = 0
  159. self._DrawOnce = False
  160. self.GenList()
  161. def OnReturnBackCb(self):
  162. self.ReturnToUpLevelPage()
  163. self._Screen.Draw()
  164. self._Screen.SwapAndShow()
  165. def KeyDown(self,event):
  166. if event.key == CurKeys["A"] or event.key == CurKeys["Menu"]:
  167. self.ReturnToUpLevelPage()
  168. self._Screen.Draw()
  169. self._Screen.SwapAndShow()
  170. if event.key == CurKeys["B"]:
  171. self._Screen._MsgBox.SetText("Applying")
  172. self._Screen._MsgBox.Draw()
  173. self._Screen.SwapAndShow()
  174. pygame.time.delay(638)
  175. self.Click()
  176. self._Screen.Draw()
  177. self._Screen.SwapAndShow()
  178. if event.key == CurKeys["Up"]:
  179. self.ScrollUp()
  180. self._Screen.Draw()
  181. self._Screen.SwapAndShow()
  182. if event.key == CurKeys["Down"]:
  183. self.ScrollDown()
  184. self._Screen.Draw()
  185. self._Screen.SwapAndShow()
  186. def Draw(self):
  187. self.ClearCanvas()
  188. self._Ps.Draw()
  189. if len(self._MyList) > 0:
  190. for i in self._MyList:
  191. i.Draw()
  192. self._Scroller.UpdateSize( len(self._MyList)*InfoPageListItem._Height,
  193. self._PsIndex*InfoPageListItem._Height)
  194. self._Scroller.Draw()
  195. class APIOBJ(object):
  196. _Page = None
  197. def __init__(self):
  198. pass
  199. def Init(self,main_screen):
  200. self._Page = NotificationPage()
  201. self._Page._Screen = main_screen
  202. self._Page._Name ="Notify"
  203. self._Page.Init()
  204. def API(self,main_screen):
  205. if main_screen !=None:
  206. main_screen.PushPage(self._Page)
  207. main_screen.Draw()
  208. main_screen.SwapAndShow()
  209. OBJ = APIOBJ()
  210. def Init(main_screen):
  211. OBJ.Init(main_screen)
  212. def API(main_screen):
  213. OBJ.API(main_screen)