소스 검색

extend: sdl-fixture with scroll-bar and block_wrap .. ok

micha 1 년 전
부모
커밋
66ff695675
2개의 변경된 파일162개의 추가작업 그리고 51개의 파일을 삭제
  1. 141 48
      tksdl/fix.py
  2. 21 3
      tool/sdl_elm.py

+ 141 - 48
tksdl/fix.py

@@ -255,6 +255,22 @@ cmd_client = chat.Client(port=30003)
 err = []
 err.append([time.time(),"init"])
 
+scroll_bar = sdl_elm.Button(window,pos=[640,40,40,400])
+scroll_bar.btn1.color_on = [255,255,0]
+scroll_bar.dbg = 0
+scroll_bar.btn4.color_on=[0,0,0]
+scroll_bar.btn4.color_off=[0,0,0]
+scroll_bar.fader = "v" 
+scroll_bar.text="\n"*10+"<ival%>%"
+scroll_bar.text=" "
+
+scroll_bar.btn4.nr_on  = [5]
+scroll_bar.btn4.nr_off = [4]
+scroll_bar.draw()
+
+width,hight   = main_size #[1]
+scroll_max = 100
+
 while 1:
 
     try:
@@ -271,10 +287,11 @@ while 1:
         rgb = (0xdd,0xdd,0xdd,0)
         rgb = (0xaa,0xaa,0xaa,0)
         
-        window.fill((5,5,5))
+        #window.fill((2,2,2))
+        window.fill((0,0,0))
         pygame.draw.rect(window,(0,0,0),[0,0,main_size[0],main_size[1]])
 
-        fr = font22.render("FIXTURE DATA (READONLY!)" ,1, (200,200,200))
+        fr = font22.render("FIXTURE DATA " ,1, (200,200,200))
         window.blit(fr,(20,10 ))
 
         fr = font22.render("DEMO / TEST - MODE ! "  ,1, (200,200,200))
@@ -295,9 +312,50 @@ while 1:
         rgb = (0xff,0,0xaa,0)
 
         data = read_fix(dmx)
-        #data = add_dmx(data,dmx)
 
 
+        #scroll_bar.btn4.val._max = len(data)-8  #draw()
+        scroll_max = len(data)-8
+        scroll_max = len(data.keys())-8
+        scroll_max = 0 
+        block_wrap = int((width -200 ) /120)
+        if block_wrap <= 0:
+            block_wrap = 1
+
+        for k in data.keys():
+            print(k,data[k])
+            if "ATTRIBUT" in data[k]:
+                row = data[k]["ATTRIBUT"]
+                if len(row) <= 2:
+                    continue
+
+                scroll_max += 1
+    
+                #attr["acount"] = 0
+                acount=0
+                for attr in row:
+                    if attr.startswith("_"):
+                        continue
+                    if attr.endswith("-FINE"):
+                        continue
+                    acount+=1
+
+                if acount:
+                    #attr["acount"] = acount
+                    scroll_max += int(acount/block_wrap)
+
+
+        print()
+        scroll_bar.btn4.val._max = scroll_max
+        scroll_bar.increment = (len(data))/100*10  #draw()
+        #data = add_dmx(data,dmx)
+        scroll_pos = scroll_bar.btn4.val.get()
+        scroll_bar.pos[0] = width-80
+        scroll_bar.pos[3] = hight-80
+
+        #print(scroll_pos)
+        table_grid_draw=[] #{}
+        table_draw = []
         i = 0
         r=40
         if 1:
@@ -312,6 +370,7 @@ while 1:
                 key = list(key)
                 key2 = []
                 for k in key:
+                    #print(k)
                     try:
                         key2.append(int(k))
                     except:
@@ -322,7 +381,8 @@ while 1:
                     btn1_press = [key[0]]
                 rgb = (0x00,0,0xff,0)
                 k2 = btn1_press[-1]
-                fr = font22.render("SRC:"+str(k2) ,1, rgb) #(200,200,200))
+                #fr = font22.render("SRC:"+str(k2) ,1, rgb) #(200,200,200))
+                fr = font22.render("D:"+str(scroll_max) ,1, rgb) #(200,200,200))
                 window.blit(fr,(400,1))
 
                 fr = font22.render("FPS:"+str(fps_old) ,1, rgb) #(200,200,200))
@@ -336,8 +396,10 @@ while 1:
                         window.blit(fr,(700,1+err_r))
                         err_r += 20
 
-
+                i4 = 0
+                #scroll_max=1
                 for k in key:#y.items():
+
                     k = str(k)
                     v = y[k]
                     attr_count = 0
@@ -353,6 +415,11 @@ while 1:
                     if attr_count <= 0:
                         continue
 
+                    #scroll_max+=1
+                    i4 += 1
+                    if i4 < scroll_pos:
+                        continue
+
                     #print(k,v)
                     x=mc.get(k)
                     cccount = 0
@@ -383,10 +450,11 @@ while 1:
 
                     bx.btn1.val.set(active)
                     bx.text = "ID:"+ k #str(txt) #+"\n<val>\n" #.format(i+1)
+                    bx.text += " "+v["NAME"]
                     bx.font0 = bx_font0 #pygame.font.SysFont("freesans-bold",20)
                     bx.btn1.bg_on = [0,255,255]
                     bx.btn1.type = "toggle"
-                    bx.pos  = [10,r,70,20]
+                    bx.pos  = [10,r,120,20]
 
                     if "ATTRIBUT" in v:
                         bcv_r = 0
@@ -411,7 +479,7 @@ while 1:
                         bxc.btn1.color  = [bcv_r,bcv_g,bcv_b]
                         bxc.btn1.color_on  = [bcv_r,bcv_g,bcv_b]
 
-                    bxc.pos  = [85,r,20,20]
+                    bxc.pos  = [140,r,20,20]
                     bxc.text = ""
 
                     bx.draw()
@@ -422,6 +490,7 @@ while 1:
                     iii += 35
                     
                     rr = 0
+                    acount = 0
                     if "ATTRIBUT" in v: # and 10: 
                         ATTR = v["ATTRIBUT"]
                         for k2 in ATTR:
@@ -447,7 +516,7 @@ while 1:
                                 dmx_val = k2_ATTR["VALUE2"]
 
                             if k3 not in table_grid:
-                                bx = sdl_elm.Button(window,pos=[300,rr,60,20])
+                                bx = sdl_elm.Button(window,pos=[600,rr,60,20])
                                 bx.btn1.color_on = [255,255,0]
                                 bx.ID = 0
                                 if "ID" in v:
@@ -486,15 +555,26 @@ while 1:
                             bx.btn1.type = "toggle"
                             if type(dmx_val) == int:
                                 bx.btn4.val.set(dmx_val) # "toggle"
-                            bx.pos  = [100+rr,r,120,20]
+                            bx.pos  = [170+rr,r,120,20]
                             bx.draw()
                             rr+=bx.get_rect()[2]+2
+                            
+
+                            table_grid_draw.append(k3) #table_grid[k3]
                             if rr > 1000:
                                 break
+                            acount +=1
+                            if acount %block_wrap==0:
+                                r += r_buf
+                                rr = 0
+
+                    table_draw.append(k)
 
                     r += r_buf
-                    if r > 800:
+                    if r > hight-30:#/20:
                         break
+                    #width   = event.w
+                    #hight   = event.h
 
 
 
@@ -507,11 +587,11 @@ while 1:
             #print(event.type)
             if "scancode" in event.dict:
                 if event.scancode == 9:
-                    for k in table:
+                    for k in table_draw:
                         t = table[k]
                         #t.btn2.clean()
                         t.btn1.clean()
-                    for k in table_grid:
+                    for k in table_grid_draw:
                         t = table_grid[k]
                         #t.btn2.clean()
                         t.btn1.clean()
@@ -530,41 +610,51 @@ while 1:
                 hight   = event.h
                 resize_changed = True
 
-            for t in table:
-                #print(t)
-                table[t].event(event)
-                if table[t].btn3.get():
-                    data = table[t].data
-                    print("FIX:",data)
-
-            for t in table_grid:
-                #print(t)
-                change = table_grid[t].event(event)
-                if table_grid[t].btn3.get():
-                    data = table_grid[t].data
-                    FIX = table_grid[t].ID
-                    ATTR = table_grid[t].ATTR
-                    #print("change",change)
-
-                    key = "MOUSE ENCODER"
-                    if key in change:
-                        if "press" in change[key]:
-                            msg = json.dumps([{"event":"FIXTURES","TYPE":"ENCODERS","FIX":str(FIX),"VAL":"++","ATTR":ATTR}]).encode("utf-8")
-                        if "release" in change[key]:
-                            msg = json.dumps([{"event":"FIXTURES","TYPE":"ENCODERS","FIX":str(FIX),"VAL":"--","ATTR":ATTR}]).encode("utf-8")
-                        print("   ",msg)
-                        cmd_client.send(msg)
-
-                    key = "BUTTON"
-                    if key in change:
-                        if "press" in change[key]:
-                            #print(" ATTR:",FIX,ATTR,data)
-                            #print("  CHANGE",change)
-                            msg = json.dumps([{"event":"FIXTURES","TYPE":"ENCODERS","FIX":str(FIX),"VAL":"click","ATTR":ATTR}]).encode("utf-8")
+            scroll_bar.event(event) #daraw()
+            event_lock = scroll_bar.btn3.val.get()
+            if event_lock:
+                print("event_lock",event_lock)
+
+            if not event_lock:
+                for t in table_draw:
+                    #print(t)
+                    table[t].event(event)
+                    if table[t].btn3.get():
+                        data = table[t].data
+                        print("FIX:",data)
+            
+
+
+            if not event_lock:
+                for k3 in table_grid_draw:
+                    #print(t)
+                    row = table_grid[k3]
+                    change = table_grid[k3].event(event)
+                    if row.btn3.get():
+                        data = row.data
+                        FIX  = row.ID
+                        ATTR = row.ATTR
+                        #print("change",change)
+
+                        key = "MOUSE ENCODER"
+                        if key in change:
+                            if "press" in change[key]:
+                                msg = json.dumps([{"event":"FIXTURES","TYPE":"ENCODERS","FIX":str(FIX),"VAL":"++","ATTR":ATTR}]).encode("utf-8")
+                            if "release" in change[key]:
+                                msg = json.dumps([{"event":"FIXTURES","TYPE":"ENCODERS","FIX":str(FIX),"VAL":"--","ATTR":ATTR}]).encode("utf-8")
                             print("   ",msg)
                             cmd_client.send(msg)
-                        if "release" in change[key]:
-                            pass
+
+                        key = "BUTTON"
+                        if key in change:
+                            if "press" in change[key]:
+                                #print(" ATTR:",FIX,ATTR,data)
+                                #print("  CHANGE",change)
+                                msg = json.dumps([{"event":"FIXTURES","TYPE":"ENCODERS","FIX":str(FIX),"VAL":"click","ATTR":ATTR}]).encode("utf-8")
+                                print("   ",msg)
+                                cmd_client.send(msg)
+                            if "release" in change[key]:
+                                pass
 
 
             if "pos" in event.dict:
@@ -581,7 +671,9 @@ while 1:
 
 
 
-            if "button" in event.dict:
+            if event_lock:
+                pass
+            elif "button" in event.dict:
                 if event.type == 6:
                     #print("grab DOOOO",event)
                     #print("grab2", event.dict["button"],len(mouse_grab) )
@@ -636,7 +728,7 @@ while 1:
             if ( d1 > pix or d1 < -pix)  or  ( d2 >pix or d2 < -pix):
 
                 sdl_elm.draw_mouse_box(window,mouse_pos1,mouse_pos2)
-                for k in table: # FIX-ID
+                for k in table_draw: # FIX-ID
                     t = table[k]
                     pos = t.get_rect()
 
@@ -655,7 +747,7 @@ while 1:
                             print("mouse_grab.remove",t)
 
 
-                for k3 in table_grid: # FIX-ATTR
+                for k3 in table_grid_draw: # FIX-ATTR
                     t = table_grid[k3]
                     pos = t.get_rect()
 
@@ -706,6 +798,7 @@ while 1:
 
 
 
+        scroll_bar.draw()
 
         clock.tick(10)
 

+ 21 - 3
tool/sdl_elm.py

@@ -231,7 +231,7 @@ class Button():
         self.w = 20
         self.h = 10
         self.pos = pos
-        self.fader = 1
+        self.fader = "h" #v
         self.ATTR = "XX"
         self.ID = "0"
 
@@ -337,16 +337,27 @@ class Button():
         rgb = [0,200,0]
         rgb = self.btn4.color_on
         pos2 = self.pos[:]
+        hight = pos2[3] 
         v = self.btn4.val.get() #self.val.get()
         fh = get_font_hight(self.font0)
-        if self.fader:
+        _max_val = self.btn4.val._max
+        if self.fader == "h":
             pos2[1] += 2 #fh+2
             pos2[3] = 4 #fh+2
             if v > 0: 
-                pos2[2] = int(pos2[2]* v/255)
+                pos2[2] = int(pos2[2]* v/_max_val)
             else:
                 pos2[2] = 4
             pygame.draw.rect(self.window,rgb,pos2)
+        elif self.fader == "v":
+            if v > 0: 
+                pos2[1] += int((hight-20)* v/_max_val)
+                pos2[3] = 20
+            else:
+                pos2[3] = 20 
+            pos2[0] += 6
+            pos2[2] -= 12 
+            pygame.draw.rect(self.window,rgb,pos2)
 
     def _draw_font(self,text=""):
         pos = self.pos
@@ -360,6 +371,13 @@ class Button():
 
         for i in lines:
             i = str(i)
+            if "<ival%>" in i:
+                v=float(v)
+                v=v/self.btn4.val._max*100
+                v=int(v)
+                i = i.replace("<ival%>",str(v))
+            if "<ival>" in i:
+                i = i.replace("<ival>",str(int(float(v))))
             if "<val>" in i:
                 i = i.replace("<val>",v)
             fr = self.font0.render(i ,1, (0,0,0))