]> git.immae.eu Git - perso/Immae/Projets/Python/MusicSampler.git/blame_incremental - music_sampler.py
Show last used keys
[perso/Immae/Projets/Python/MusicSampler.git] / music_sampler.py
... / ...
CommitLineData
1import kivy
2kivy.require("1.9.1")
3from kivy.app import App
4from kivy.uix.floatlayout import FloatLayout
5from kivy.uix.relativelayout import RelativeLayout
6from kivy.properties import ListProperty, StringProperty
7from kivy.clock import Clock
8from kivy.core.window import Window
9from kivy.lang import Builder
10from helpers.key import Key
11from helpers.mapping import Mapping
12import helpers
13
14class KeyList(RelativeLayout):
15 keylist = ListProperty([])
16 first_key = StringProperty("")
17 second_key = StringProperty("")
18 third_key = StringProperty("")
19
20 def append(self, value):
21 self.keylist = [value] + self.keylist
22
23 def on_keylist(self, instance, new_key_list):
24 if len(self.keylist) > 0:
25 self.first_key = self.keylist[0]
26 if len(self.keylist) > 1:
27 self.second_key = self.keylist[1]
28 if len(self.keylist) > 2:
29 self.third_key = self.keylist[2]
30
31class PlayList(RelativeLayout):
32 playlist = ListProperty([])
33
34 def __init__(self, **kwargs):
35 super(PlayList, self).__init__(**kwargs)
36 Clock.schedule_interval(self.update_playlist, 0.5)
37
38 def update_playlist(self, dt):
39 if self.parent is None or 'Mapping' not in self.parent.ids:
40 return True
41
42 open_files = self.parent.ids['Mapping'].open_files
43 self.playlist = []
44 for music_file in open_files.values():
45 if not music_file.is_playing():
46 continue
47 if music_file.is_paused():
48 self.playlist.append(["⏸", music_file.name, False])
49 else:
50 self.playlist.append(["⏵", music_file.name, True])
51
52
53class ActionList(RelativeLayout):
54 action_title = StringProperty("")
55 action_list = ListProperty([])
56
57 def update_list(self, key, action_number = 0):
58 self.action_title = "actions linked to key {}:".format(key.key_sym)
59 self.action_list = []
60
61 action_descriptions = [action.description() for action in key.actions]
62
63 for index, description in enumerate(action_descriptions):
64 if index < int(action_number):
65 icon = "✓"
66 elif index + 0.5 == action_number:
67 icon = "✅"
68 else:
69 icon = " "
70
71 self.action_list.append([icon, description])
72
73class Screen(FloatLayout):
74 pass
75
76class MusicSamplerApp(App):
77 def build(self):
78 Window.size = (913, 563)
79
80 return Screen()
81
82if __name__ == '__main__':
83 Builder.load_file(helpers.path() + "/music_sampler.kv")
84 MusicSamplerApp().run()