From 334576e7607fc2c5aba64fb4ba8663a644fbe9a7 Mon Sep 17 00:00:00 2001 From: 9and3r <9and3r@gmai.com> Date: Thu, 24 Jul 2014 21:14:09 +0200 Subject: [PATCH] Listview --- mopidy_touchscreen/.idea/workspace.xml | 147 +++++++++++++------------ mopidy_touchscreen/list_view.py | 41 +++++++ mopidy_touchscreen/main_screen.py | 2 +- mopidy_touchscreen/screen_manager.py | 23 ++-- mopidy_touchscreen/screen_objects.py | 11 +- mopidy_touchscreen/tracklist.py | 16 +++ 6 files changed, 156 insertions(+), 84 deletions(-) create mode 100644 mopidy_touchscreen/list_view.py create mode 100644 mopidy_touchscreen/tracklist.py diff --git a/mopidy_touchscreen/.idea/workspace.xml b/mopidy_touchscreen/.idea/workspace.xml index 01b7c9e..b95bc6b 100644 --- a/mopidy_touchscreen/.idea/workspace.xml +++ b/mopidy_touchscreen/.idea/workspace.xml @@ -23,41 +23,43 @@ - - - - - - - - - - - - - - - - - - - - - + - - + + + + + + + + + + + + + + - - + + + + + + + + + + + + @@ -77,10 +79,12 @@ @@ -307,13 +311,13 @@ - + - + @@ -350,22 +354,6 @@ - - - - - - - - - - - - - - - - @@ -697,34 +685,11 @@ - + - - - - - - - - - - - - - - - - - - - - - - - @@ -733,10 +698,52 @@ + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mopidy_touchscreen/list_view.py b/mopidy_touchscreen/list_view.py new file mode 100644 index 0000000..310dee8 --- /dev/null +++ b/mopidy_touchscreen/list_view.py @@ -0,0 +1,41 @@ +from .screen_objects import ScreenObjectsManager +import logging +import pygame + +logger = logging.getLogger(__name__) + +class ListView(): + + def __init__(self, pos, size, base_size,fonts): + self.size = size + self.pos = pos + self.base_size = base_size + self.screen_objects = ScreenObjectsManager(self.base_size) + self.max_rows = self.size[1] / self.base_size + self.current_item = 0 + self.fonts = fonts + self.list_size = 0 + self.list = [] + self.set_list([]) + self.scroll_bar_back = pygame.Surface((self.base_size,self.size[1])) + self.scroll_bar_back.fill((255,255,255)) + + + def set_list(self, item_list): + self.list = item_list + self.list_size = len(item_list) + self.load_new_item_position(0) + + def load_new_item_position(self, item_pos): + self.current_item = item_pos + i = self.current_item + logger.error(self.max_rows) + while i < self.list_size and i - self.current_item < self.max_rows: + self.screen_objects.add_touch_object(str(i),self.fonts['dejavusans'], str(self.list[i]), (self.pos[0],self.pos[1]+self.base_size*i),None, (255, 255, 255)) + i += 1 + def render(self, surface): + surface.blit(self.scroll_bar_back,(self.pos[0]+self.size[0]-self.base_size,self.pos[1])) + self.screen_objects.render(surface) + + + diff --git a/mopidy_touchscreen/main_screen.py b/mopidy_touchscreen/main_screen.py index 7ca472a..8cf42ff 100644 --- a/mopidy_touchscreen/main_screen.py +++ b/mopidy_touchscreen/main_screen.py @@ -27,7 +27,7 @@ class MainScreen(): self.track = None self.cache = cache self.image = None - self.touch_text_manager = ScreenObjectsManager(size,self.base_size) + self.touch_text_manager = ScreenObjectsManager(self.base_size) def update(self, screen): diff --git a/mopidy_touchscreen/screen_manager.py b/mopidy_touchscreen/screen_manager.py index 14d1566..35c6bf2 100644 --- a/mopidy_touchscreen/screen_manager.py +++ b/mopidy_touchscreen/screen_manager.py @@ -1,6 +1,7 @@ from .main_screen import MainScreen from .touch_manager import TouchManager from .screen_objects import ScreenObjectsManager +from .tracklist import Tracklist import pygame import logging import mopidy @@ -16,31 +17,39 @@ class ScreenManager(): self.core = core self.backend = backend self.fonts = {} + self.current_screen = 1 self.base_size = self.size[1] / 8 self.fonts['dejavuserif'] = pygame.font.SysFont("dejavuserif", self.base_size) self.fonts['dejavusans'] = pygame.font.SysFont("dejavusans", self.base_size) - self.screens = [MainScreen(size, self, "/home/ander", core,self.fonts)] + try: + self.screens = [MainScreen(size, self, "/home/ander", core,self.fonts),Tracklist(size,self.base_size,self)] + except: + traceback.print_exc() self.track = None self.touch_manager = TouchManager(size) - self.screen_objects_manager = ScreenObjectsManager(size,self.base_size) - x = self.screen_objects_manager.add_touch_object("pause_play",self.fonts['dejavusans']," ll",(0,0),(255,255,255)) + self.screen_objects_manager = ScreenObjectsManager(self.base_size) + x = self.screen_objects_manager.add_touch_object("pause_play",self.fonts['dejavusans']," ll",(0,0), None, (255,255,255)) x = x + self.base_size / 2 - x = self.screen_objects_manager.add_touch_object("random",self.fonts['dejavuserif'],u"\u2928",(x,0),(255,255,255)) + x = self.screen_objects_manager.add_touch_object("random",self.fonts['dejavuserif'],u"\u2928",(x,0),None,(255,255,255)) x = x + self.base_size / 2 - x = self.screen_objects_manager.add_touch_object("repeat",self.fonts['dejavuserif'],u"\u27F21",(x,0),(255,255,255)) + x = self.screen_objects_manager.add_touch_object("repeat",self.fonts['dejavuserif'],u"\u27F21",(x,0),None,(255,255,255)) x = x + self.base_size / 2 - x = self.screen_objects_manager.add_touch_object("mute",self.fonts['dejavusans'],"Mute",(x,0),(255,255,255)) + x = self.screen_objects_manager.add_touch_object("mute",self.fonts['dejavusans'],"Mute",(x,0),None,(255,255,255)) x = x + self.base_size / 2 self.screen_objects_manager.add_progressbar("volume",self.fonts['dejavusans'],"100", (x,0), (self.size[0],self.base_size),100, True) self.screen_objects_manager.get_touch_object("volume").set_value(self.core.playback.volume.get()) self.top_bar = pygame.Surface((self.size[0],self.base_size),pygame.SRCALPHA) self.top_bar.fill((0,0,0,128)) self.playback_state_changed(mopidy.core.PlaybackState.STOPPED, self.core.playback.state.get()) + self.down_bar = pygame.Surface((self.size[0], self.base_size),pygame.SRCALPHA) + self.down_bar.fill((0,0,0,128)) + x = self.screen_objects_manager.add_touch_object("menu_main",self.fonts['dejavusans'],"Main",(0,self.base_size*7),None,(255,255,255)) def update(self): surface = pygame.Surface(self.size) - self.screens[0].update(surface) + self.screens[self.current_screen].update(surface) surface.blit(self.top_bar,(0,0)) + surface.blit(self.top_bar,(0,self.base_size*7)) self.screen_objects_manager.render(surface) return surface diff --git a/mopidy_touchscreen/screen_objects.py b/mopidy_touchscreen/screen_objects.py index d8d677a..c70772f 100644 --- a/mopidy_touchscreen/screen_objects.py +++ b/mopidy_touchscreen/screen_objects.py @@ -7,8 +7,7 @@ class ScreenObjectsManager(): - def __init__(self,size,base_size): - self.size = size + def __init__(self,base_size): self.base_size = base_size self.touch_objects = {} self.text_objects = {} @@ -19,8 +18,8 @@ class ScreenObjectsManager(): def get_object(self, key): return self.text_objects[key] - def add_touch_object(self, key, font, text, pos, color): - self.touch_objects[key] = TouchAndTextItem(font, text, pos, color, self.base_size) + def add_touch_object(self, key, font, text, pos, pos2, color): + self.touch_objects[key] = TouchAndTextItem(font, text, pos, pos2, color, self.base_size) return self.touch_objects[key].get_right_pos() def get_touch_object(self,key): @@ -132,8 +131,8 @@ class TouchObject(BaseItem): class TouchAndTextItem(TouchObject, TextItem): - def __init__(self, font, text, pos, color,text_size): - TextItem.__init__(self, font, text, pos,None, color,text_size) + def __init__(self, font, text, pos, pos2, color,text_size): + TextItem.__init__(self, font, text, pos, pos2, color,text_size) TouchObject.__init__(self,pos,self.pos2) def update(self): diff --git a/mopidy_touchscreen/tracklist.py b/mopidy_touchscreen/tracklist.py new file mode 100644 index 0000000..da5c82c --- /dev/null +++ b/mopidy_touchscreen/tracklist.py @@ -0,0 +1,16 @@ +from .list_view import ListView + + +class Tracklist(): + + def __init__(self, size, base_size,manager): + self.size = size + self.base_size = base_size + self.list_view = ListView((0,self.base_size),(self.size[0],self.size[1]-2*self.base_size), self.base_size, manager.fonts) + self.list_view.set_list(["track 1","track 2"]) + + def update(self, screen): + pass + + def update(self, screen): + self.list_view.render(screen) \ No newline at end of file