9and3r 11 years ago
parent
commit
334576e760

+ 57 - 50
mopidy_touchscreen/.idea/workspace.xml

@@ -23,41 +23,43 @@
   </component>
   <component name="FileEditorManager">
     <leaf>
-      <file leaf-file-name="touch_screen.py" pinned="false" current="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/touch_screen.py">
+      <file leaf-file-name="screen_manager.py" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/screen_manager.py">
           <provider selected="true" editor-type-id="text-editor">
-            <state vertical-scroll-proportion="0.0" vertical-offset="330" max-vertical-offset="990">
-              <caret line="22" column="9" selection-start-line="22" selection-start-column="9" selection-end-line="22" selection-end-column="9" />
+            <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="1440">
+              <caret line="13" column="0" selection-start-line="13" selection-start-column="0" selection-end-line="13" selection-end-column="0" />
               <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="touch_screen_backend.py" pinned="false" current="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/touch_screen_backend.py">
+      <file leaf-file-name="list_view.py" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/list_view.py">
           <provider selected="true" editor-type-id="text-editor">
-            <state vertical-scroll-proportion="0.0" vertical-offset="300" max-vertical-offset="390">
-              <caret line="20" column="33" selection-start-line="20" selection-start-column="33" selection-end-line="20" selection-end-column="33" />
-              <folding />
+            <state vertical-scroll-proportion="0.0" vertical-offset="270" max-vertical-offset="705">
+              <caret line="33" column="69" selection-start-line="33" selection-start-column="69" selection-end-line="33" selection-end-column="69" />
+              <folding>
+                <element signature="e#0#48#0" expanded="true" />
+              </folding>
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="screen_manager.py" pinned="false" current="true" current-in-tab="true">
-        <entry file="file://$PROJECT_DIR$/screen_manager.py">
+      <file leaf-file-name="screen_objects.py" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/screen_objects.py">
           <provider selected="true" editor-type-id="text-editor">
-            <state vertical-scroll-proportion="0.79802954" vertical-offset="681" max-vertical-offset="1320">
-              <caret line="73" column="14" selection-start-line="73" selection-start-column="14" selection-end-line="73" selection-end-column="14" />
+            <state vertical-scroll-proportion="0.0" vertical-offset="285" max-vertical-offset="2910">
+              <caret line="20" column="60" selection-start-line="20" selection-start-column="60" selection-end-line="20" selection-end-column="60" />
               <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="screen_objects.py" pinned="false" current="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/screen_objects.py">
+      <file leaf-file-name="tracklist.py" pinned="false" current="true" current-in-tab="true">
+        <entry file="file://$PROJECT_DIR$/tracklist.py">
           <provider selected="true" editor-type-id="text-editor">
-            <state vertical-scroll-proportion="0.0" vertical-offset="2205" max-vertical-offset="2940">
-              <caret line="147" column="70" selection-start-line="147" selection-start-column="70" selection-end-line="147" selection-end-column="70" />
+            <state vertical-scroll-proportion="0.50119334" vertical-offset="0" max-vertical-offset="419">
+              <caret line="14" column="29" selection-start-line="14" selection-start-column="29" selection-end-line="14" selection-end-column="29" />
               <folding />
             </state>
           </provider>
@@ -77,10 +79,12 @@
         <option value="$PROJECT_DIR$/__init__.py" />
         <option value="$PROJECT_DIR$/touch_manager.py" />
         <option value="$PROJECT_DIR$/touch_screen.py" />
+        <option value="$PROJECT_DIR$/touch_screen_backend.py" />
         <option value="$PROJECT_DIR$/main_screen.py" />
         <option value="$PROJECT_DIR$/screen_objects.py" />
-        <option value="$PROJECT_DIR$/touch_screen_backend.py" />
         <option value="$PROJECT_DIR$/screen_manager.py" />
+        <option value="$PROJECT_DIR$/list_view.py" />
+        <option value="$PROJECT_DIR$/tracklist.py" />
       </list>
     </option>
   </component>
@@ -307,13 +311,13 @@
   </component>
   <component name="ToolWindowManager">
     <frame x="65" y="24" width="1301" height="744" extended-state="6" />
-    <editor active="false" />
+    <editor active="true" />
     <layout>
       <window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
       <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
       <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
       <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
-      <window_info id="Project" active="true" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.24980783" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
+      <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.24980783" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
       <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
       <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
       <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.32884902" sideWeight="0.50038433" order="7" side_tool="true" content_ui="tabs" />
@@ -350,22 +354,6 @@
     </breakpoint-manager>
   </component>
   <component name="editorHistoryManager">
-    <entry file="file://$PROJECT_DIR$/touch_screen_backend.py">
-      <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.0" vertical-offset="300" max-vertical-offset="390">
-          <caret line="20" column="33" selection-start-line="20" selection-start-column="33" selection-end-line="20" selection-end-column="33" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/screen_manager.py">
-      <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.0" vertical-offset="899" max-vertical-offset="1305">
-          <caret line="83" column="22" selection-start-line="83" selection-start-column="22" selection-end-line="83" selection-end-column="22" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
     <entry file="file://$PROJECT_DIR$/screen_objects.py">
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.0" vertical-offset="2205" max-vertical-offset="2940">
@@ -697,46 +685,65 @@
     </entry>
     <entry file="file://$PROJECT_DIR$/touch_manager.py">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.46300715" vertical-offset="586" max-vertical-offset="1005">
+        <state vertical-scroll-proportion="1.646778" vertical-offset="90" max-vertical-offset="1005">
           <caret line="53" column="24" selection-start-line="53" selection-start-column="24" selection-end-line="53" selection-end-column="24" />
         </state>
       </provider>
     </entry>
+    <entry file="file://$PROJECT_DIR$/touch_screen_backend.py">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="360">
+          <caret line="20" column="33" selection-start-line="20" selection-start-column="33" selection-end-line="20" selection-end-column="33" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
     <entry file="file://$PROJECT_DIR$/main_screen.py">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.7413793" vertical-offset="1439" max-vertical-offset="1845">
-          <caret line="128" column="0" selection-start-line="128" selection-start-column="0" selection-end-line="128" selection-end-column="0" />
+        <state vertical-scroll-proportion="-0.03937008" vertical-offset="300" max-vertical-offset="1845">
+          <caret line="31" column="0" selection-start-line="31" selection-start-column="0" selection-end-line="31" selection-end-column="0" />
+          <folding />
         </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/touch_screen.py">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.0" vertical-offset="451" max-vertical-offset="870">
-          <caret line="22" column="9" selection-start-line="22" selection-start-column="9" selection-end-line="22" selection-end-column="9" />
+        <state vertical-scroll-proportion="-0.75179" vertical-offset="360" max-vertical-offset="870">
+          <caret line="11" column="36" selection-start-line="11" selection-start-column="0" selection-end-line="11" selection-end-column="36" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/screen_objects.py">
+    <entry file="file://$PROJECT_DIR$/screen_manager.py">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.0" vertical-offset="1831" max-vertical-offset="2925">
-          <caret line="147" column="70" selection-start-line="147" selection-start-column="70" selection-end-line="147" selection-end-column="70" />
+        <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="1440">
+          <caret line="13" column="0" selection-start-line="13" selection-start-column="0" selection-end-line="13" selection-end-column="0" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/touch_screen_backend.py">
+    <entry file="file://$PROJECT_DIR$/screen_objects.py">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="360">
-          <caret line="20" column="33" selection-start-line="20" selection-start-column="33" selection-end-line="20" selection-end-column="33" />
+        <state vertical-scroll-proportion="0.0" vertical-offset="196" max-vertical-offset="2910">
+          <caret line="20" column="60" selection-start-line="20" selection-start-column="60" selection-end-line="20" selection-end-column="60" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/screen_manager.py">
+    <entry file="file://$PROJECT_DIR$/list_view.py">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0" vertical-offset="270" max-vertical-offset="705">
+          <caret line="33" column="69" selection-start-line="33" selection-start-column="69" selection-end-line="33" selection-end-column="69" />
+          <folding>
+            <element signature="e#0#48#0" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/tracklist.py">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.79802954" vertical-offset="681" max-vertical-offset="1320">
-          <caret line="73" column="14" selection-start-line="73" selection-start-column="14" selection-end-line="73" selection-end-column="14" />
+        <state vertical-scroll-proportion="0.50119334" vertical-offset="0" max-vertical-offset="419">
+          <caret line="14" column="29" selection-start-line="14" selection-start-column="29" selection-end-line="14" selection-end-column="29" />
           <folding />
         </state>
       </provider>

+ 41 - 0
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)
+
+
+

+ 1 - 1
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):

+ 16 - 7
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
 

+ 5 - 6
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):

+ 16 - 0
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)