Skip to content
Snippets Groups Projects
Commit 31cd3de3 authored by iggy's avatar iggy Committed by q3k
Browse files

py: menu/controls: petal-locked controls, demo in menu_tinysynth

parent 179d0f24
No related branches found
No related tags found
No related merge requests found
......@@ -55,6 +55,11 @@ class ControlSwitch(Control):
def scroll(self,delta):
self.enter()
def touch_1d(self,x,z):
if z<0: #Release
self.enter()
class ControlFloat(Control):
def __init__(self, min=0.0,max=1.0,step=0.1, *args, **kwargs):
self.min=min
......@@ -85,6 +90,18 @@ class ControlKnob(ControlFloat):
self.set_value(v_new)
self.draw()
def touch_1d(self,x,z):
if z>0: #Inital Contact
self._x_init = x
if z==0: #Continous contact
diff = self._x_init-x
self.scroll(5*diff)
if z<0: #Release
pass
class ControlSlide(ControlFloat):
def __init__(self, do_reset=True, *args, **kwargs):
self.do_reset=do_reset
......@@ -95,8 +112,9 @@ class ControlSlide(ControlFloat):
self._saved_value = self.get_value()
if z==0: #Continous contact
v = (self.max-self.min)*x
v = (self.max-self.min)*x+self.min
self.set_value(v)
print("c",x,v,self.max,self.min)
if z<0: #Release
if self.do_reset:
......
......@@ -5,9 +5,11 @@ import control
import audio
import application
import demo_worms,demo_sparabo,cap_touch_demo, melodic_demo, harmonic_demo
import demo_worms, cap_touch_demo
import demo_sparabo, melodic_demo, harmonic_demo
import menu_settings,menu_tinysynth
import time
hardware.captouch_autocalib()
......@@ -19,35 +21,35 @@ menu_apps = menu.Menu("apps")
menu_music = menu.Menu("music")
for app_module in [demo_sparabo,melodic_demo,harmonic_demo]:
menu_music.add(menu.MenuItemApp(app_module.app))
#for app_module in [demo_sparabo,melodic_demo,harmonic_demo]:
# menu_music.add(menu.MenuItemApp(app_module.app))
for app_module in [demo_worms,cap_touch_demo,]:
menu_apps.add(menu.MenuItemApp(app_module.app))
testmenu = menu.Menu("test")
#testmenu = menu.Menu("test")
item_add = menu.MenuItem("+")
item_add.action = lambda x: testmenu.add(menu.MenuItem("new {}".format(len(testmenu.items))))
#item_add = menu.MenuItem("+")
#item_add.action = lambda x: testmenu.add(menu.MenuItem("new {}".format(len(testmenu.items))))
item_sub = menu.MenuItem("-")
item_sub.action = lambda x: testmenu.pop() if len(testmenu.items) > 4 else None
#item_sub = menu.MenuItem("-")
#item_sub.action = lambda x: testmenu.pop() if len(testmenu.items) > 4 else None
item_foo = menu.MenuItem("foo")
testmenu.add(item_foo)
testmenu.add(item_sub)
testmenu.add(item_add)
#item_foo = menu.MenuItem("foo")
#testmenu.add(item_foo)
#testmenu.add(item_sub)
#testmenu.add(item_add)
menu_badge.add(menu.MenuItemSubmenu(testmenu))
#menu_badge.add(menu.MenuItemSubmenu(testmenu))
menu_main.add(menu.MenuItemSubmenu(menu_badge))
menu_main.add(menu.MenuItemSubmenu(menu_apps))
menu_main.add(menu.MenuItemSubmenu(menu_music))
#menu_main.add(menu.MenuItemSubmenu(menu_music))
menu_main.add(menu.MenuItemSubmenu(menu_settings.get_menu()))
menu_music.add(menu.MenuItemSubmenu(menu_tinysynth.get_menu()))
menu_main.add(menu.MenuItemSubmenu(menu_tinysynth.get_menu()))
menu.set_active_menu(menu_main)
menu.render()
......
......@@ -11,8 +11,10 @@ class Menu():
def __init__(self,name="menu",has_back=True):
self.name=name
self.items=[]
self.items_petal=[None for i in range(10)]
self.__index = 0
self.ui = ui.GroupRing(r=80)
self.ui2 = ui.GroupPetals(r=100) #TODO(iggy) hack, this should be composed together in ui
self.icon = ui.IconFlower(label=name,size=80)
self.ui.element_center = self.icon
......@@ -29,6 +31,10 @@ class Menu():
self.items.append(item)
self.ui.add(item.ui)
def add_petal(self, item, petal_index):
self.items_petal[petal_index]=item
self.ui2.children[petal_index]=item.ui
def pop(self):
self.items.pop()
self.ui.children.pop()
......@@ -54,7 +60,7 @@ class Menu():
self.icon.phi_offset = self.angle
def rotate_steps(self, steps=1):
self.rotate_by(self.angle_step*steps)
self.rotate_by(-self.angle_step*steps)
def _get_hovered_index(self):
index = round(-self.angle/(math.pi*2)*len(self.items))
......@@ -88,7 +94,10 @@ class Menu():
else:
item.ui.has_highlight=False
item.ui.size=30+my_extra
self.ui2.draw()
self.ui.draw()
class MenuItem():
......@@ -193,6 +202,7 @@ def on_release(d):
def on_touch_1d(d):
if active_menu is None:
return
#print(d["radius"])
v = min(1.0,max(0.0,((d["radius"]+25000.0)/50000.0)))
z = 0
if d["change"]:
......@@ -201,6 +211,14 @@ def on_touch_1d(d):
print("menu: touch_1d",v,z)
hovered=active_menu.get_hovered_item()
petal_idx = d["index"]
petal_item = active_menu.items_petal[petal_idx]
if petal_item:
petal_item.touch_1d(v,z)
if hasattr(hovered, "touch_1d"):
print("hastouch")
hovered.touch_1d(v,z)
......@@ -239,7 +257,7 @@ event.Event(name="menu rotation button release",group_id="menu",
)
event.Event(name="menu 1d captouch",group_id="menu",
condition=lambda e: e["type"] =="captouch" and (e["value"]==1 or e["change"]) and e["index"]==9,
condition=lambda e: e["type"] =="captouch" and (e["value"]==1 or e["change"]) and e["index"]%2==1,
action=on_touch_1d, enabled=True
)
......
......@@ -7,9 +7,7 @@ import ui
import hardware
import audio
ui_input = ui.Icon("")
synth = tinysynth(440,0)
def set_play(value):
print ("set_controls_overlay")
......@@ -18,42 +16,54 @@ def set_play(value):
else:
synth.stop()
def set_volume(value):
db = int(value*60-40)
print("DB",db)
audio.set_volume_dB(db)
the_freq = 440
def set_frequency(value):
f = 440+value*440
synth.freq(f)
global the_freq
the_freq = value
synth.freq(the_freq)
def set_pitch(value):
p = 440
print("p:",p)
synth.freq(value)
synth.freq(the_freq+the_freq*value)
print("value")
def get_menu():
m = menu.Menu("tinysynth")
freq=control.ControlKnob(name="freq",on_set=set_frequency,default=0.0)
m.add(menu.MenuItemControl("freq",freq))
freq=control.ControlKnob(
name="freq",
on_set=set_frequency,
default=the_freq,
min=220,max=440*4,step=10
)
m.add_petal(menu.MenuItemControl("freq",freq), petal_index=7)
pitch = control.ControlSlide(
name="pitch",
on_set=set_pitch,
default=0,
min=-0.5,max=0.5
)
m.add_petal(menu.MenuItemControl("pitch",pitch), petal_index=9)
pitch = control.ControlSlide(name="pitch",on_set=set_frequency,default=0)
m.add(menu.MenuItemControl("pitch",pitch))
vol = control.ControlKnob(name="vol",
#on_set=set_volume
on_mod=audio.adjust_volume_dB,
on_get=audio.get_volume_relative
)
m.add(menu.MenuItemControl("volume",vol))
mi_vol = menu.MenuItemControl("volume",vol)
#m.add(mi_vol)
m.add_petal(mi_vol,1)
play = control.ControlSwitch(name="play",on_set=set_play,default=False)
m.add(menu.MenuItemControl("play",play))
m.add_petal(menu.MenuItemControl("play",play), petal_index=5)
return m
synth = tinysynth(440,0)
m = get_menu()
......@@ -224,8 +224,11 @@ class GroupRing(UIElement):
for index in range(len(self.children)):
#print("child",index)
child = self.children[index]
if not child:
continue
angle = 2*math.pi/len(self.children)*index+self.angle_offset
x = math.sin(angle)*self.r+pos[0]
#print(angle,self.r,pos[0])
x = -math.sin(angle)*self.r+pos[0]
y = -math.cos(angle)*self.r+pos[1]
#print("pos",(x,y))
child.draw(offset=(x,y))
......@@ -234,3 +237,8 @@ class GroupRing(UIElement):
if self.element_center:
self.element_center.has_highlight = False
self.element_center._draw(pos)
class GroupPetals(GroupRing):
def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)
self.children = [None for i in range(10)]
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment