menulib3.py

Created by fime

Created on December 13, 2023

1.32 KB


from kandinsky import draw_string as text
from ion import keydown as key
from time import sleep

def menuInter(ox,oy,name,*inpwids,s=0,bg=(255,255,255),fg=(0,0,0),sl=(255,0,0)):
  wids=[wid.split(',') for wid in inpwids]
  n_wids,p=len(wids),1
  text(name,ox,oy,fg,bg)
  def drawWid(i,s):
    wid=wids[i]+[0]*20
    txt=["{} →","- {} -","{} : %s"%(wid[wid[2]+3]),"{} : %d"%(wid[2])][("btn","lbl","lst","sld").index(wid[0])].format(wid[1])
    col=(fg,sl,bg)[s]
    text(txt,ox,oy+(i+1)*25,col,bg)
  for i,wid in enumerate(wids):
    if wid[0] in "lstsld":wids[i][2]=int(wid[2])
    drawWid(i,i==s)
  while 1:
    drawWid(s,1)
    scan=[k for k in range(5) if key(k)]
    if scan==[]:
      p=0
      continue
    elif p:continue
    v,h,p=0,0,1
    if (4 or 3) in scan and wids[s][0]=="btn":return s
    if 1 in scan:v=-1
    if 2 in scan:v=+1
    if v!=0 :
      drawWid(s,0)
      s=(s+v)%n_wids
      while wids[s][0]=="lbl":s=(s+v)%n_wids
    if wids[s][0]=="btn":continue
    drawWid(s,2)
    if 0 in scan:h=-1
    if 3 in scan:h=+1
    if wids[s][0]=="lst":
      wids[s][2]=(wids[s][2]+h)%len(wids[s][3:])
    else:
      m,M=int(wids[s][3]),int(wids[s][4])
      wids[s][2]=(wids[s][2]+h-m)%(M-m+1)+m

widgets=(
"lbl,Category 1",
"btn,Validate",
"lst,Mode,0,Solo,Vs Bot",
"sld,Diff,5,2,7")

menuInter(25,25,"MENU",*widgets)