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()