Advertisement
Guest User

Untitled

a guest
Jul 29th, 2016
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.16 KB | None | 0 0
  1.  
  2. '''
  3. Pythonista Forum - @Phuket2
  4. '''
  5. import ui, editor, bz2, base64
  6. #_pyui_file_name = 'booking.pyui'
  7.  
  8. __pyui_str__ ='''
  9. QlpoOTFBWSZTWaO7pcYAGNlf4NVVUGd/9T/n3Y6/79/+IAAAQMAAYAv/A+B25OipHWmzGq
  10. VFrRVbpiUohIELwkkp6I0jTxJ6QaABoDR6jeoE00AAABJQTBNNNNRU/UAmAAAAAAAABw0e
  11. SaNGEaGBGCaNMgMRowQaAMDjJk0YhpoYCaGJo0yYgZGE0aaYQZMIkiInpNU9tFE80oDT1H
  12. qaNNBoeoG1HoniTJ5IBEoECYo00mRTyTagGgZqaZAaHqGmg00GYvKkBQH41HgP9f74qFYW
  13. gllIClVKIdJfyX1QwA4QkICGSwZGEHCDAQaoOQBVDJTKASSFwC6wQYhAiQAGBADBItxKAJ
  14. UTAlw8/V5VcJggSCySCwgpIMIZ57KoMiiioaKCA+sQVLsASCkIxYqEIhCRSeuAEIotLAkU
  15. gMRNKoiH6dUwwBE9XV2/u3FvqpVMkVK0ZfHsPKSQk54BHwYXr8/qx1+wzVaBh/QBRCioJR
  16. VUGyAlswpKIBCKhgA0hcSCEJ2rKIEQgAtxOtRqEqCkW0UXQANiUqmbx7ee8zl1OPARlkF/
  17. PftoIw4W4UQUg1ggMJRQOQXo5zZYg3dDr/PKmf010Q2Qshwu6Gq8UjJA80zQ9yCsk9Gck5
  18. IGJJo5mzRtqUhWK9NMRaJdGWqtD7df4LVE9iOSyz6KlEz471WvEOB+eNJUNcABbyV1kFJy
  19. cqnxoPyCWfkMlMgCpmoYWq4LEkmWLoXQveSSSSTPAmBMIYQpACCXM4GlJUktdCoEiSqCRK
  20. IsCqQ02cRpHLOiFsS9aoXcLeIVsWIXLl0K1tJIyxK0M1ZnhaBEMqDEKITLABkJnUSqGM5a
  21. ylkC4EAhcS5DFDJCpnUqtkKpCMWEQvRBIFgBfiDB930c/yQZwJVSqlVICHuh7UKYqhWA4V
  22. wg0g4oMQcVgAHNJSaFswohSFpIjS0RLFhUxxEoTESCSAXqk3VQGZD3QbkIRNIoU+/fVXOC
  23. hjIKwvcr+Va4yjMYseop8DiuZpXJrJMpUQzjnEKCS8rSTEo0rpMqWsWXGMhlq7oqcDiF/h
  24. y9wU6XZfvmgqg3k0GW20JQ22nEqlPak0DK5M6jxBMTVCiGvTRDai/OW20370NL9y3LrfTn
  25. HTWiGSGK6ggRV+5DsWlNHRntWBoWJmh4AbuQJqhihmY4WIQrDJCnGWLrbVDjtyvzfLIciu
  26. SnAJqFAdeVLKFpPQhpv883oLM4iDbZBslogq+EHFEFJSigoVQShNBxoZIbEMiCSOwTWsBq
  27. J83kgyfQhjAstwpPJaV48aPJp1558pTUmqpSGvF37xlLyokBJ2OqFRNm1F0myytvKpVSnp
  28. vvohLmDxi+UK+i1agmlFIdy+myh7L5885Fedim9siqVhudrgabkIb5IS2L88BqdyEPh1wt
  29. 1cgy9+rxDWEsZcMZoHWs1UQPbuQMHMNJay1dMxEAmdjO/Jv4ZcCUG/FjnXqVUTXKXqpOC7
  30. UMynfETfVlUD83oKxSqg1pLPZBBk3Mwk7WZLfhfWhuhxVv0saRC22vW1tKcTEOl+ENrVfZ
  31. riaa7oVM8+kCnOwBVQ0Q6dFodEWpObx3uQMpCl0GiBwhhuSe2dkiF0Gss7tc3XTLbOxZde
  32. 9DJDHXFec+oOnI6yEpjfiCdlvohLF3lVec3jCs0naQZvSvEigslDK6DKEBGkdJTilaUa4M
  33. lQTGAmF54kghdBR24ugbPJBqP2vfBGr0DqoHiCiYyVnbDjXTc1BuugwOmYaReZsy2yFTTu
  34. ELcodV047rdYWQ75xpnghtWqQ3IUBWzgrchEM1lkIuWhDYhv03khYrB6XNia52Qohvjw2L
  35. OqHK532070q7SmlHOJRBMnqgximbEFqVbCb3kx0E5hJKIh9J2B+oHdHvN5wuyG23QQ7doh
  36. 382W2gniUylEM0OxlqvZC2nYwvfQSaFANkLofuCpzn41XvNF8ojQ2m826ZW1iFO7ZCX0Sp
  37. uHyzEEEsrx3fjt8whw0mgo1KTSpwbaSB+reOylaenxuePbpmh4IcIdPI6c7+hDvWaZakXG
  38. WMUkcKoI2QWmgrmZ656UxZBSiDOEpiLXig3Q4zQ7iqHTGN54v9A7fKDx4xUrJPiYn3S1CQ
  39. JDpB6LWJCQQOCIYlQlAPt0qp5ZZ4QSIIFARC5uWbl2Z5PxMzM3M8E5RCScJHqHBS+syMEW
  40. welE8yFdLgVoORdCL7g/hYHWiHeaUVxRU7uLhOb0lKqbgszJVMgh9Z82KnYV5i0FeVUiE3
  41. D+9ROoZFwwcFxE0igwOlEXYsql1hWGBUiA5JDubJTFAzwGwrZVL/k0RcYRd9ILkhBMwigB
  42. 36/aKYWvyWpey8BkJAhJCMQkGBm3wk7LQoh0l1U2nAYohWCSPhsFT63Yz9Qr3BVVMReT4t
  43. QcgJltzAOISXO3KkJRJDh3ItIsiqXVTNda7DbsRAoR4cVfgGFl5PGiG8L5qLlaiKljc8x1
  44. apAe4zReo6UA3Z5odwA5dzx3FTYHiRfvfh8XeKkFM+bv0g+FhuNliIcvCG6yFhXlFNz4QN
  45. +sGclIURCZIQuKp57azA0QyQ98KVSGBVbhGl+F6dAfXzd4D+O+EQ80hcG/1vwN6lxFC4Hs
  46. B+BO65bpREPsPKhYvwDFIRQNNTbsixrsDdVMkbZiBRGBM6nY9vCqWxqHgeQZdj2mq1FYeg
  47. QPNxKegPMVx+nCrydDUH4taYHvV3ekMTwbUgqG5F4kVOQLiuR0LWxVN7QrQbzAN9wwMBdQ
  48. JIqZxQdBOkUIKpTlEMwFqu4pRgQzVU4Byry+kGKfhZ36hLVGKBqugeecCjXxVS7uDe9RNl
  49. U9hmDIaeKLyBvbZCIaoZm3eK1iqbBsLLivRVOmwbHgLshgVMB1z8B6IvHmqmD3olENAB4g
  50. hz1KaBQAIREI8ovretbCD9mQYA6wHgPUpFPYgxB8wkE7RGAkhIDCKEUIpAZIEQIRCMCKE1
  51. oqasehTQJ0IOlDoE/LL1oqaRNCuPb6BDq67TrQq1jrMALjL9Ze0heTCF7WMaMIWKr76++g
  52. YhWGLQAiGLRaoVEL/VMghshDUEEq1wABNPQTSLuSKcKEhR3dLjAA==
  53. '''
  54.  
  55. from collections import deque
  56.  
  57. class ViewWalker(object):
  58. # JonB
  59. '''simple iterator for ui.View objects, capable of depth or breadth first traversal'''
  60. def __init__(self,v,breadthfirst=False):
  61. self._dq=deque([v])
  62. self._breadth=breadthfirst
  63.  
  64. def __iter__(self):
  65. '''required for iterator objects'''
  66. return self
  67.  
  68. def __next__(self):
  69. '''required for iterator objects. raise stopiteration once the queue is empty. '''
  70. if not self._dq:
  71. raise StopIteration
  72. #pop next view...
  73. if self._breadth:
  74. v=self._dq.popleft()# oldest entry (FIFO)
  75. else:
  76. v=self._dq.pop() # newest entry (stack)
  77. #then push its subviews
  78. if hasattr(v,'subviews'):
  79. self._dq.extend(v.subviews)
  80. return v
  81.  
  82. def sub_view_objects(self, breadthfirst = False):
  83. self._breadth=breadthfirst
  84. return [s for s in self]
  85.  
  86. def sub_view_names(self, breadthfirst = False):
  87. self._breadth=breadthfirst
  88. return [s.name for s in self]
  89.  
  90. def pyui_decode(str):
  91. s = bz2.decompress(base64.b64decode(str))
  92. return s.decode('utf-8')
  93.  
  94. def WrapInstance(obj):
  95. class Wrapper(obj.__class__):
  96. def __new__(cls):
  97. return obj
  98. return Wrapper
  99.  
  100.  
  101. class ThemeViewer(ui.View):
  102. def __init__(self, pyui_str , theme, *args, **kwargs):
  103. #ui.load_view(_pyui_file_name,
  104. #bindings={'MyClass': WrapInstance(self), 'self': self})
  105. ui.load_view_str(pyui_str, bindings={'MyClass': WrapInstance(self), 'self': self})
  106.  
  107. super().__init__(*args, **kwargs)
  108.  
  109. self.tc = None
  110. self.set_tint_color_cheat(theme)
  111. self.theme = theme
  112. self.border_width=.5
  113. self.corner_radius = 6
  114. self.border_color='darkgray'
  115. self.update_view()
  116.  
  117. def update_view(self):
  118.  
  119. self['lb_theme'].border_color = 'darkgray'
  120. self['lb_theme'].text = self.theme
  121.  
  122. # attempt to set all subviews border color to the correct
  123. # tint color.only shown on obects that have a border_width set
  124. for sv in ViewWalker(self).sub_view_objects():
  125. sv.border_color = self.tc
  126.  
  127. def reset_theme(self, sender):
  128. #print('in, reset_theme')
  129. self.theme = sender.title
  130. self.set_tint_color_cheat(self.theme)
  131. editor.apply_ui_theme(self, theme_name = sender.title)
  132. self.update_view()
  133.  
  134. def set_tint_color_cheat(self, theme):
  135. # maybe this is a screw up....
  136. #return
  137. btn = ui.Button()
  138. editor.apply_ui_theme(btn, theme_name = theme)
  139. self.tc = btn.tint_color
  140.  
  141. def take_screenshot(self):
  142. # take a screenshot of the ui.View.bounds
  143. with ui.ImageContext(self.width, self.height) as ctx:
  144. self.draw_snapshot()
  145. return ctx.get_image()
  146.  
  147. if __name__ == '__main__':
  148. # initial theme
  149. theme = 'Cool Glow'
  150.  
  151. # decode the pyui str
  152. pyui_str = pyui_decode(__pyui_str__)
  153.  
  154. tv = ThemeViewer(theme = theme , pyui_str = pyui_str)
  155.  
  156. editor.present_themed(tv, theme_name=theme, style='sheet', animated=False)
  157.  
  158. # take a screen shot of the view, could be used to create thumbnail
  159. # images for example...
  160. img = tv.take_screenshot()
  161.  
  162. # show the image in the console
  163. img.show()
  164.  
  165. # write the snapshot to a png file
  166. bytes = img.to_png()
  167. with open(theme + '.png', 'wb') as file:
  168. file.write(bytes)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement