Advertisement
phjoe

Dropdown Selector

Dec 8th, 2014
237
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # Dropdown Select in Canvas
  2. # Author: Joe
  3. # 09/12/2014
  4. # note: this is just an example, not a module
  5.  
  6. import appuifw as A
  7. import graphics as G
  8.  
  9. run=1
  10. def exit():
  11.  global run
  12.  run=0
  13. A.app.exit_key_handler=exit
  14. img=G.Image.new(G.sysinfo.display_pixels())
  15.  
  16. class Dropdown:
  17.  def __init__(self,items=[]):
  18.   self.cur,self.page,self.offset=0,0,6
  19.   self.state=1
  20.   self.items=items
  21.   self.selected=None
  22.   self.c=A.Canvas(redraw_callback=self.redraw)
  23.   A.app.screen='full'
  24.   A.app.body=self.c
  25.  
  26.  def redraw(self,rect):
  27.   if img:
  28.    self.c.blit(img)
  29.  
  30.  def down(self):
  31.   if not self.state:
  32.    if self.page*self.offset+self.cur<len(self.items)-1 and self.cur<self.offset-1:
  33.     self.cur+=1
  34.    else:
  35.     if len(self.items)-1>self.page*self.offset+self.cur and self.cur==self.offset-1:
  36.      self.page=self.page+1
  37.      self.cur=0
  38.  
  39.  def up(self):
  40.   if not self.state:
  41.    if self.cur>0:
  42.     self.cur-=1
  43.     if self.cur<0:self.state=1
  44.    else:
  45.     if self.page>0:
  46.      self.page=self.page-1
  47.      self.cur=self.offset-1
  48.  
  49.  def select(self):
  50.   if self.state:self.state=0
  51.   else:self.state=1
  52.   self.selected=self.items[self.page * self.offset+self.cur]
  53.  
  54.  def show(self):
  55.   self.c.bind(50,self.up)
  56.   self.c.bind(56,self.down)
  57.   self.c.bind(53,self.select)
  58.   px,py,th=15,30,14
  59.   bw=max([len(s) for s in self.items])+100
  60.   while run:
  61.    img.clear(0x363636)
  62.    if not self.state:
  63.     if len(self.items)-self.page*self.offset<self.offset:mx=len(self.items)-self.page*self.offset
  64.     else:mx=self.offset
  65.     img.rectangle((px-5,py-(th-2),px+bw,py+mx*th+4),0xdadada,0xfcfcfc)
  66.     img.line((px-5,py+2,px+bw,py+2),0xeeeeee)
  67.     img.polygon((px+bw-2,py-(th-4), px+bw-8, py, px+bw-14, py-(th-4)),fill=0)
  68.     img.rectangle((px-3,py+self.cur*th+2,px+bw-2,py+self.cur*th+th+4),fill=0xefefef)
  69.     for index in range(0,mx):
  70.      img.text((px,py+index*th+th),self.items[index+self.page*self.offset],0)
  71.    else:
  72.     img.rectangle((px-5,py-(th-2),px+bw,py+4),0xdadada,0xfcfcfc)
  73.     img.polygon((px+bw-2,py-(th-4), px+bw-8, py, px+bw-14, py-(th-4)),fill=0)
  74.     img.text((px,py),(u'Silahkan Pilih',self.selected)[self.selected!=None],0)
  75.  
  76.    img.text((px-5,py-15),u'Menu:',0xdadada)
  77.    img.text((px-5,186),u'Dropdown Selector',0xdadada)
  78.    img.text((px-5,200),u'Scroll: (%d/%d) / Item: %s' %(self.page+1,(len(self.items)//self.offset)+1,(u'Belum dipilih',self.page*self.offset+self.cur) [self.selected!=None]),0xdadada)
  79.    self.redraw(0)
  80.    A.e32.ao_sleep(0)
  81.  
  82. menu=[u'Item %d' %i for i in range(10)]
  83. dd=Dropdown(menu)
  84. dd.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement