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