From 1ea6ba11b2200192817d84d3048c4e97d3a54437 Mon Sep 17 00:00:00 2001 From: 9and3r <9and3r@gmail.com> Date: Sun, 24 May 2015 16:08:06 +0200 Subject: [PATCH] Longpress to change next/previous track --- mopidy_touchscreen/input/input_manager.py | 11 ++++++--- mopidy_touchscreen/screen_manager.py | 2 +- mopidy_touchscreen/screens/main_screen.py | 28 +++++++++++++++++++---- mopidy_touchscreen/screens/menu_screen.py | 8 +++---- 4 files changed, 36 insertions(+), 13 deletions(-) diff --git a/mopidy_touchscreen/input/input_manager.py b/mopidy_touchscreen/input/input_manager.py index 135a329..4a1f5dc 100644 --- a/mopidy_touchscreen/input/input_manager.py +++ b/mopidy_touchscreen/input/input_manager.py @@ -91,8 +91,12 @@ class InputManager(): else: return None if direction is not None: + if time.time() - self.down_time > InputManager.long_click_min_time: + longpress = True + else: + longpress = False return InputEvent(InputManager.key, None, None, None, - direction, self.last_key) + direction, self.last_key, longpress=longpress) def mouse_down(self, event): self.down_pos = event.pos @@ -125,13 +129,14 @@ class InputManager(): self.up_pos, False, None) -class InputEvent(): +class InputEvent: def __init__(self, event_type, down_pos, current_pos, vertical, - direction, unicode=None): + direction, unicode=None, longpress=False): self.type = event_type self.down_pos = down_pos self.current_pos = current_pos self.unicode = unicode + self.longpress = longpress if event_type is InputManager.swipe and direction is None: if vertical: if self.down_pos[1] < self.current_pos[1]: diff --git a/mopidy_touchscreen/screen_manager.py b/mopidy_touchscreen/screen_manager.py index c812739..9ab51f5 100644 --- a/mopidy_touchscreen/screen_manager.py +++ b/mopidy_touchscreen/screen_manager.py @@ -198,7 +198,7 @@ class ScreenManager(): event.current_pos) return self.click_on_objects(objects, event) else: - if event.type == InputManager.key: + if event.type == InputManager.key and not event.longpress: dir = event.direction if dir == InputManager.right or dir == InputManager.left: if not self.screens[self.current_screen]\ diff --git a/mopidy_touchscreen/screens/main_screen.py b/mopidy_touchscreen/screens/main_screen.py index f5735f5..2eca417 100644 --- a/mopidy_touchscreen/screens/main_screen.py +++ b/mopidy_touchscreen/screens/main_screen.py @@ -339,14 +339,32 @@ class MainScreen(BaseScreen): volume = self.core.playback.volume.get() + 10 if volume > 100: volume = 100 - self.core.playback.volume = volume - self.manager.volume_changed(volume) + self.core.mixer.set_volume(volume) elif event.direction == InputManager.down: volume = self.core.playback.volume.get() - 10 if volume < 0: volume = 0 - self.core.playback.volume = volume - self.manager.volume_changed(volume) + self.core.mixer.set_volume(volume) + elif event.type == InputManager.key: + if event.direction == InputManager.enter: + self.click_on_objects(["pause_play"], None) + elif event.direction == InputManager.up: + vol = self.core.mixer.get_volume().get() + vol += 3 + if vol > 100: + vol = 100 + self.core.mixer.set_volume(vol) + elif event.direction == InputManager.down: + vol = self.core.mixer.get_volume().get() + vol -= 3 + if vol < 0: + vol = 0 + self.core.mixer.set_volume(vol) + elif event.longpress: + if event.direction == InputManager.left: + self.click_on_objects(["previous"], None) + elif event.direction == InputManager.right: + self.click_on_objects(["next"], None) def click_on_objects(self, objects, event): if objects is not None: @@ -379,7 +397,7 @@ class MainScreen(BaseScreen): volume = manager.get_touch_object("volume") pos = event.current_pos value = volume.get_pos_value(pos) - self.core.playback.volume = value + self.core.mixer.set_volume(value) def playback_state_changed(self, old_state, new_state): if new_state == mopidy.core.PlaybackState.PLAYING: diff --git a/mopidy_touchscreen/screens/menu_screen.py b/mopidy_touchscreen/screens/menu_screen.py index 49b70af..f3bc1ba 100644 --- a/mopidy_touchscreen/screens/menu_screen.py +++ b/mopidy_touchscreen/screens/menu_screen.py @@ -29,16 +29,16 @@ class MenuScreen(BaseScreen): clicked = self.list.touch_event(event) if clicked is not None: if clicked == 0: - random = not self.core.tracklist.random.get() + random = not self.core.tracklist.get_random().get() self.core.tracklist.set_random(random) elif clicked == 1: - repeat = not self.core.tracklist.repeat.get() + repeat = not self.core.tracklist.get_repeat().get() self.core.tracklist.set_repeat(repeat) elif clicked == 2: - single = not self.core.tracklist.single.get() + single = not self.core.tracklist.get_single().get() self.core.tracklist.set_single(single) elif clicked == 3: - consume = not self.core.tracklist.consume.get() + consume = not self.core.tracklist.get_consume().get() self.core.tracklist.set_consume(consume) elif clicked == 4: os.system("pkill mopidy")