]> git.immae.eu Git - perso/Immae/Projets/Python/MusicSampler.git/blame_incremental - music_sampler.py
Make 'wait' action interruptible
[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_not_stopped():
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
56 if music_file.is_paused():
57 self.playlist.append(["⏸", music_file.name, text, False])
58 else:
59 self.playlist.append(["⏵", music_file.name, text, True])
60
61
62class ActionList(RelativeLayout):
63 action_title = StringProperty("")
64 action_list = ListProperty([])
65
66 def update_list(self, key, action_number = 0):
67 self.action_title = "actions linked to key {}:".format(key.key_sym)
68 self.action_list = []
69
70 action_descriptions = [action.description() for action in key.actions]
71
72 for index, description in enumerate(action_descriptions):
73 if index < int(action_number):
74 icon = "✓"
75 elif index + 0.5 == action_number:
76 icon = "✅"
77 else:
78 icon = " "
79
80 self.action_list.append([icon, description])
81
82class Screen(FloatLayout):
83 pass
84
85class MusicSamplerApp(App):
86 def build(self):
87 Window.size = (913, 563)
88
89 return Screen()
90
91if __name__ == '__main__':
92 Builder.load_file(helpers.path() + "/music_sampler.kv")
93 MusicSamplerApp().run()