diff --git a/mopidy_touchscreen/.idea/workspace.xml b/mopidy_touchscreen/.idea/workspace.xml index ddbc175..96d8847 100644 --- a/mopidy_touchscreen/.idea/workspace.xml +++ b/mopidy_touchscreen/.idea/workspace.xml @@ -23,21 +23,11 @@ - - + + - - - - - - - - - - - - + + @@ -46,8 +36,8 @@ - - + + @@ -58,8 +48,28 @@ - - + + + + + + + + + + + + + + + + + + + + + + @@ -68,8 +78,8 @@ - - + + @@ -91,12 +101,13 @@ @@ -367,13 +378,6 @@ - - - - - - - @@ -719,26 +723,34 @@ - + - - + + - - + + + + + + + + + + - - + + @@ -747,24 +759,24 @@ - - + + + + + + + + + + - - - - - - - - - - + + diff --git a/mopidy_touchscreen/list_view.py b/mopidy_touchscreen/list_view.py index b4c1751..841ce82 100644 --- a/mopidy_touchscreen/list_view.py +++ b/mopidy_touchscreen/list_view.py @@ -31,7 +31,6 @@ class ListView(): self.scrollbar = True scroll_bar = ScrollBar((self.pos[0]+self.size[0]-self.base_size,self.pos[1]), (self.base_size, self.size[1]),self.list_size,self.max_rows) self.screen_objects.set_touch_object("scrollbar", scroll_bar) - logger.error("hemen nao") else: self.scrollbar = False self.load_new_item_position(0) @@ -49,7 +48,7 @@ class ListView(): else: width = self.size[0] while i < self.list_size and z < self.max_rows: - item = TouchAndTextItem(self.fonts['dejavusans'], self.list[i], (self.pos[0], self.pos[1]+self.base_size*z), (width, self.base_size)) + item = TouchAndTextItem(self.fonts['dejavusans'], self.list[i], (self.pos[0], self.pos[1]+self.base_size*z), (width, -1)) self.screen_objects.set_touch_object(str(i), item) i += 1 z += 1 @@ -66,6 +65,8 @@ class ListView(): direction = self.screen_objects.get_touch_object(key).touch(touch_event.current_pos) if direction != 0: self.move_to(direction) + else: + return int(key) elif touch_event.type == TouchManager.swipe: if touch_event.direction == TouchManager.up: self.move_to(-1) diff --git a/mopidy_touchscreen/playlist_screen.py b/mopidy_touchscreen/playlist_screen.py new file mode 100644 index 0000000..0dfc7aa --- /dev/null +++ b/mopidy_touchscreen/playlist_screen.py @@ -0,0 +1,30 @@ +from .list_view import ListView + + +class PlaylistScreen(): + + def __init__(self, size, base_size, manager): + self.size = size + self.base_size = base_size + self.manager = manager + self.list_view = ListView((0,self.base_size),(self.size[0],self.size[1]-2*self.base_size), self.base_size, manager.fonts) + self.playlists_strings = [] + self.playlists = [] + self.playlists_loaded() + + def update(self, screen): + self.list_view.render(screen) + + def playlists_loaded(self): + self.playlists_strings = [] + self.playlists = [] + for playlist in self.manager.core.playlists.playlists.get(): + self.playlists.append(playlist) + self.playlists_strings.append(playlist.name) + self.list_view.set_list(self.playlists_strings) + + def touch_event(self, touch_event): + clicked = self.list_view.touch_event(touch_event) + if clicked is not None: + self.manager.core.tracklist.clear() + self.manager.core.tracklist.add(uri=self.playlists[clicked].uri) diff --git a/mopidy_touchscreen/screen_manager.py b/mopidy_touchscreen/screen_manager.py index e727a54..dcf1339 100644 --- a/mopidy_touchscreen/screen_manager.py +++ b/mopidy_touchscreen/screen_manager.py @@ -2,6 +2,7 @@ from .main_screen import MainScreen from .touch_manager import TouchManager from .screen_objects import * from .tracklist import Tracklist +from .playlist_screen import PlaylistScreen from .dynamic_background import DynamicBackground import pygame import logging @@ -24,7 +25,8 @@ class ScreenManager(): self.fonts['dejavusans'] = pygame.font.SysFont("dejavusans", self.base_size) try: self.screens = [MainScreen(size, self, "/home/ander", core, self.fonts), - Tracklist(size, self.base_size, self)] + Tracklist(size, self.base_size, self), + PlaylistScreen(size, self.base_size, self)] except: traceback.print_exc() self.track = None @@ -64,12 +66,17 @@ class ScreenManager(): #Main button button = TouchAndTextItem(self.fonts['dejavusans'], "Main", (0, self.base_size * 7), None) - self.screen_objects_manager.set_touch_object("menu_main", button) + self.screen_objects_manager.set_touch_object("menu_0", button) x = button.get_right_pos() #Tracklist button button = TouchAndTextItem(self.fonts['dejavusans'], "Tracklist", (x, self.base_size * 7), None) - self.screen_objects_manager.set_touch_object("menu_tracklist", button) + self.screen_objects_manager.set_touch_object("menu_1", button) + x = button.get_right_pos() + + #Playlist button + button = TouchAndTextItem(self.fonts['dejavusans'], "Playlist", (x, self.base_size * 7), None) + self.screen_objects_manager.set_touch_object("menu_2", button) #Down bar self.down_bar = pygame.Surface((self.size[0], self.base_size), pygame.SRCALPHA) @@ -77,6 +84,7 @@ class ScreenManager(): self.options_changed() self.playback_state_changed(self.core.playback.state.get(), self.core.playback.state.get()) + self.change_screen(self.current_screen) def update(self): surface = pygame.Surface(self.size) @@ -121,10 +129,8 @@ class ScreenManager(): self.options_changed() elif key == "repeat": self.change_repeat_single() - elif key == "menu_main": - self.current_screen = 0 - elif key == "menu_tracklist": - self.current_screen = 1 + elif key[:-1] == "menu_": + self.change_screen(int(key[-1:])) self.screens[self.current_screen].touch_event(touch_event) def volume_changed(self, volume): @@ -173,3 +179,11 @@ class ScreenManager(): self.core.tracklist.set_repeat(repeat) self.core.tracklist.set_single(single) self.options_changed() + + def change_screen(self, new_screen): + self.screen_objects_manager.get_touch_object("menu_"+str(self.current_screen)).set_active(False) + self.current_screen = new_screen + self.screen_objects_manager.get_touch_object("menu_"+str(new_screen)).set_active(True) + + def playlists_loaded(self): + self.screens[2].playlists_loaded() \ No newline at end of file diff --git a/mopidy_touchscreen/screen_objects.py b/mopidy_touchscreen/screen_objects.py index 18d8b2c..b91c47b 100644 --- a/mopidy_touchscreen/screen_objects.py +++ b/mopidy_touchscreen/screen_objects.py @@ -71,7 +71,10 @@ class TextItem(BaseItem): self.color = (255, 255, 255) self.box = self.font.render(text, True, self.color) if size is not None: - BaseItem.__init__(self, pos, size) + if size[1] == -1: + BaseItem.__init__(self, pos, (size[0], self.font.size(text)[1])) + else: + BaseItem.__init__(self, pos, size) else: BaseItem.__init__(self, pos, self.font.size(text)) if size is not None: @@ -140,7 +143,7 @@ class TouchAndTextItem(TouchObject, TextItem): def __init__(self, font, text, pos, size): TextItem.__init__(self, font, text, pos, size) TouchObject.__init__(self, pos, self.size) - self.active_color = (255, 0, 255) + self.active_color = (0, 150, 255) self.active_box = self.font.render(text, True, self.active_color) def update(self): @@ -159,6 +162,7 @@ class TouchAndTextItem(TouchObject, TextItem): else: surface.blit(self.box, self.pos, area=self.rect) + class Progressbar(TouchObject): def __init__(self, font, text, pos, size, max_value, value_text): @@ -211,15 +215,15 @@ class ScrollBar(TouchObject): self.max = max_value self.items_on_screen = items_on_screen self.current_item = 0 - self.back_bar = pygame.Surface(self.size) - self.back_bar.fill((255, 255, 255)) + self.back_bar = pygame.Surface(self.size, pygame.SRCALPHA) + self.back_bar.fill((255, 255, 255, 128)) self.bar_pos = 0 if self.max < 1: self.bar_size = self.size[1] else: self.bar_size = math.ceil(float(self.items_on_screen)/float(self.max) * float(self.size[1])) self.bar = pygame.Surface((self.size[0], self.bar_size)) - self.bar.fill((255, 255, 0)) + self.bar.fill((255, 255, 255)) def render(self, surface): surface.blit(self.back_bar, self.pos) diff --git a/mopidy_touchscreen/touch_screen.py b/mopidy_touchscreen/touch_screen.py index 4c11c34..3f676d6 100644 --- a/mopidy_touchscreen/touch_screen.py +++ b/mopidy_touchscreen/touch_screen.py @@ -78,3 +78,6 @@ class TouchScreen(pykka.ThreadingActor, core.CoreListener): self.screen_manager.options_changed() except: traceback.print_exc() + + def playlists_loaded(self): + self.screen_manager.playlists_loaded()