diff --git a/mopidy_touchscreen/.idea/workspace.xml b/mopidy_touchscreen/.idea/workspace.xml index 78a6aa0..b188935 100644 --- a/mopidy_touchscreen/.idea/workspace.xml +++ b/mopidy_touchscreen/.idea/workspace.xml @@ -23,16 +23,70 @@ - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -47,13 +101,13 @@ @@ -319,7 +373,7 @@ - @@ -649,14 +703,6 @@ - - - - - - - - @@ -665,14 +711,6 @@ - - - - - - - - @@ -683,36 +721,56 @@ - - + + + + + + + + + + + + - + - - + + - - + + - + - - + + + + + + + + + + + + diff --git a/mopidy_touchscreen/dynamic_background.py b/mopidy_touchscreen/dynamic_background.py index 065cb7b..1417564 100644 --- a/mopidy_touchscreen/dynamic_background.py +++ b/mopidy_touchscreen/dynamic_background.py @@ -1,4 +1,7 @@ import random +import logging + +logger = logging.getLogger(__name__) class DynamicBackground(): @@ -12,7 +15,7 @@ class DynamicBackground(): for x in range(0, 3): if self.current[x] > self.target[x]: self.current[x] -= 1 - elif self.current[x] 0: i = random.randint(0, 2) - color[i] -= - extra + color[i] -= extra return color diff --git a/mopidy_touchscreen/list_view.py b/mopidy_touchscreen/list_view.py index 62cff23..5fa0a2a 100644 --- a/mopidy_touchscreen/list_view.py +++ b/mopidy_touchscreen/list_view.py @@ -38,7 +38,7 @@ class ListView(): def load_new_item_position(self, item_pos): self.current_item = item_pos if self.scrollbar: - self.screen_objects.clear_touch("scrollbar") + self.screen_objects.clear_touch(["scrollbar"]) else: self.screen_objects.clear_touch(None) i = self.current_item diff --git a/mopidy_touchscreen/main_screen.py b/mopidy_touchscreen/main_screen.py index 45d5cbd..cc7a326 100644 --- a/mopidy_touchscreen/main_screen.py +++ b/mopidy_touchscreen/main_screen.py @@ -9,7 +9,7 @@ import urllib2 import json from mopidy.audio import PlaybackState from .touch_manager import TouchManager -from .screen_objects import ScreenObjectsManager +from .screen_objects import * logger = logging.getLogger(__name__) @@ -41,10 +41,24 @@ class MainScreen(): def track_started(self, track): self.image = None x = self.base_size * 5 - self.touch_text_manager.set_object("track_name",self.fonts['dejavusans'],track.name,(x,self.base_size*2), (self.size[0]-self.base_size,self.size[1]), (255, 255, 255)) - self.touch_text_manager.set_object("album_name",self.fonts['dejavusans'],track.album.name,(x,self.base_size*3), (self.size[0]-self.base_size,self.size[1]), (255, 255, 255)) - self.touch_text_manager.set_object("artist_name",self.fonts['dejavusans'],self.getFirstArtist(track),(x,self.base_size*4), (self.size[0]-self.base_size,self.size[1]), (255, 255, 255)) - self.touch_text_manager.add_progressbar("time_progress", self.fonts['dejavusans'],time.strftime('%M:%S', time.gmtime(0))+"/"+time.strftime('%M:%S', time.gmtime(0)),(0,self.base_size*6), (self.size[0],self.base_size*7),track.length/1000, False) + width = self.size[0]-self.base_size / 2-x + + #Track name + label = TextItem(self.fonts['dejavusans'],track.name,(x,self.base_size*2), (width,self.size[1])) + self.touch_text_manager.set_object("track_name", label) + + #Album name + label = TextItem(self.fonts['dejavusans'],track.album.name,(x,self.base_size*3), (width,self.size[1])) + self.touch_text_manager.set_object("album_name",label) + + #Artist + label = TextItem(self.fonts['dejavusans'],self.getFirstArtist(track),(x,self.base_size*4), (width,self.size[1])) + self.touch_text_manager.set_object("artist_name",label) + + #Progress + progress = Progressbar(self.fonts['dejavusans'],time.strftime('%M:%S', time.gmtime(0))+"/"+time.strftime('%M:%S', time.gmtime(0)),(0,self.base_size*6), (self.size[0],self.base_size),track.length/1000, False) + self.touch_text_manager.set_touch_object("time_progress", progress) + self.track = track if not self.is_image_in_cache(): thread = Thread(target=self.downloadImage()) @@ -89,9 +103,19 @@ class MainScreen(): except: logger.warning("Cover could not be downloaded") logger.error(self.track.name) - self.touch_text_manager.set_object("track_name",self.fonts['dejavusans'],self.track.name,(self.base_size,self.base_size*2), (self.size[0]-self.base_size,self.size[1]), (255, 255, 255)) - self.touch_text_manager.set_object("album_name",self.fonts['dejavusans'],self.track.album.name,(self.base_size,self.base_size*3), (self.size[0]-self.base_size,self.size[1]), (255, 255, 255)) - self.touch_text_manager.set_object("artist_name",self.fonts['dejavusans'],self.getFirstArtist(self.track),(self.base_size,self.base_size*4), (self.size[0]-self.base_size,self.size[1]), (255, 255, 255)) + width = self.size[0] -self.base_size + + current = TextItem(self.fonts['dejavusans'],self.track.name,(self.base_size/2,self.base_size*2),(width, self.base_size)) + self.touch_text_manager.set_object("track_name", current) + + current = TextItem(self.fonts['dejavusans'],self.track.album.name,(self.base_size/2,self.base_size*3),(width, self.base_size)) + self.touch_text_manager.set_object("album_name", current) + + current = TextItem(self.fonts['dejavusans'],self.getFirstArtist(self.track),(self.base_size/2,self.base_size*4),(width, self.base_size)) + self.touch_text_manager.set_object("artist_name", current) + + #self.touch_text_manager.set_object("album_name",), (self.size[0]-self.base_size,self.size[1]), (255, 255, 255)) + #self.touch_text_manager.set_object("artist_name",self.fonts['dejavusans'],self.getFirstArtist(self.track),(self.base_size,self.base_size*4), (self.size[0]-self.base_size,self.size[1]), (255, 255, 255)) def loadImage(self): size = self.base_size * 4 diff --git a/mopidy_touchscreen/screen_manager.py b/mopidy_touchscreen/screen_manager.py index e6575bf..fdf90de 100644 --- a/mopidy_touchscreen/screen_manager.py +++ b/mopidy_touchscreen/screen_manager.py @@ -19,7 +19,7 @@ class ScreenManager(): self.backend = backend self.fonts = {} self.background = DynamicBackground() - self.current_screen = 1 + self.current_screen = 0 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) @@ -30,35 +30,51 @@ class ScreenManager(): self.track = None self.touch_manager = TouchManager(size) self.screen_objects_manager = ScreenObjectsManager() + + #Top bar + self.top_bar = pygame.Surface((self.size[0], self.base_size),pygame.SRCALPHA) + self.top_bar.fill((0, 0, 0, 128)) + + #Play/pause button = TouchAndTextItem(self.fonts['dejavusans']," ll",(0, 0), None) self.screen_objects_manager.set_touch_object("pause_play", button) - x = button.get_right_pos() + self.base_size / 2 + x = button.get_right_pos() + + #Random button = TouchAndTextItem(self.fonts['dejavuserif'],u"\u2928",(x,0),None) self.screen_objects_manager.set_touch_object("random",button) x = button.get_right_pos() + + #Repeat button = TouchAndTextItem(self.fonts['dejavuserif'],u"\u27F21",(x,0),None) self.screen_objects_manager.set_touch_object("repeat",button) - x = button.get_right_pos() + self.base_size / 2 + x = button.get_right_pos() + + #Mute button = TouchAndTextItem(self.fonts['dejavusans'],"Mute",(x,0),None) self.screen_objects_manager.set_touch_object("mute",button) - x = button.get_right_pos() + self.base_size / 2 - ''' - - x = x + self.base_size / 2 - 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()) + x = button.get_right_pos() + #Volume + progress = Progressbar(self.fonts['dejavusans'], "100", (x, 0), (self.size[0]-x, self.base_size), 100, True) + self.screen_objects_manager.set_touch_object("volume", progress) + progress.set_value(self.core.playback.volume.get()) self.playback_state_changed(mopidy.core.PlaybackState.STOPPED, self.core.playback.state.get()) - x = self.screen_objects_manager.add_touch_object("menu_main",self.fonts['dejavusans'],"Main",(0,self.base_size*7),None,(255,255,255)) - ''' - self.top_bar = pygame.Surface((self.size[0],self.base_size),pygame.SRCALPHA) - self.top_bar.fill((0,0,0,128)) + #Menu buttons + #Main button + button = TouchAndTextItem(self.fonts['dejavusans'],"Main",(0,self.base_size*7),None) + self.screen_objects_manager.set_touch_object("menu_main", 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) + + #Down bar self.down_bar = pygame.Surface((self.size[0], self.base_size),pygame.SRCALPHA) - self.down_bar.fill((0,0,0,128)) + self.down_bar.fill((0, 0, 0, 128)) def update(self): surface = pygame.Surface(self.size) @@ -98,6 +114,10 @@ class ScreenManager(): logger.error(self.core.tracklist.random) self.core.tracklist.random = not self.core.tracklist.random #self.backend.tell({'action':'random','value':random}) + elif key == "menu_main": + self.current_screen = 0 + elif key == "menu_tracklist": + self.current_screen = 1 self.screens[self.current_screen].touch_event(touch_event) def volume_changed(self, volume): diff --git a/mopidy_touchscreen/screen_objects.py b/mopidy_touchscreen/screen_objects.py index 00843a1..f4869d6 100644 --- a/mopidy_touchscreen/screen_objects.py +++ b/mopidy_touchscreen/screen_objects.py @@ -44,7 +44,8 @@ class ScreenObjectsManager(): for key in not_remove: new_touch[key] = self.get_touch_object(key) self.touch_objects = new_touch - self.touch_objects = {} + else: + self.touch_objects = {} class BaseItem(): @@ -72,7 +73,7 @@ class TextItem(BaseItem): if size is not None: BaseItem.__init__(self, pos, size) else: - BaseItem.__init__(self, pos, self.box.get_rect().size) + BaseItem.__init__(self, pos, self.font.size(text)) if size is not None: if self.pos[0] + self.box.get_rect().width > pos[0] + size[0]: self.fit_horizontal = False @@ -86,7 +87,6 @@ class TextItem(BaseItem): else: self.fit_vertical = True else: - BaseItem.__init__(self, pos, (pos[0] + self.box.get_rect().width, pos[1] + self.box.get_rect().height)) self.fit_horizontal = True self.fit_vertical = True @@ -220,6 +220,5 @@ class ScrollBar(TouchObject): return 0 def set_item(self, current_item): - logger.error(current_item) self.current_item = current_item self.bar_pos = float(self.current_item)/float(self.max) * float(self.size[1]) \ No newline at end of file