Переглянути джерело

Screen size and cursor on config file

9and3r 11 роки тому
батько
коміт
4d1420a15c

+ 3 - 1
README.rst

@@ -39,6 +39,9 @@ Mopidy-Touchscreen to your Mopidy configuration file::
 
     [touchscreen]
     enabled = true
+    screen_width = 800
+    screen_height = 600
+    cursor = False
 
 Features
 =============
@@ -56,7 +59,6 @@ Working
 Planned
 -------
 
-* Resolution on config file
 * Shuffle on/off
 * Repeat one/on/off
 * Playback list and control

+ 24 - 62
mopidy_touchscreen/.idea/workspace.xml

@@ -23,43 +23,11 @@
   </component>
   <component name="FileEditorManager">
     <leaf>
-      <file leaf-file-name="screen_manager.py" pinned="false" current="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/screen_manager.py">
+      <file leaf-file-name="touch_screen.py" pinned="false" current="true" current-in-tab="true">
+        <entry file="file://$PROJECT_DIR$/touch_screen.py">
           <provider selected="true" editor-type-id="text-editor">
-            <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="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="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_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.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="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.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" />
+            <state vertical-scroll-proportion="0.53699285" vertical-offset="30" max-vertical-offset="990">
+              <caret line="25" column="24" selection-start-line="25" selection-start-column="24" selection-end-line="25" selection-end-column="24" />
               <folding />
             </state>
           </provider>
@@ -78,13 +46,13 @@
         <option value="$PROJECT_DIR$/touch_text_manager.py" />
         <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$/screen_manager.py" />
+        <option value="$PROJECT_DIR$/screen_objects.py" />
         <option value="$PROJECT_DIR$/list_view.py" />
         <option value="$PROJECT_DIR$/tracklist.py" />
+        <option value="$PROJECT_DIR$/touch_screen.py" />
       </list>
     </option>
   </component>
@@ -120,7 +88,6 @@
       <sortByType />
     </navigator>
     <panes>
-      <pane id="Scope" />
       <pane id="ProjectPane">
         <subPane>
           <PATH>
@@ -141,6 +108,7 @@
           </PATH>
         </subPane>
       </pane>
+      <pane id="Scope" />
     </panes>
   </component>
   <component name="PropertiesComponent">
@@ -325,11 +293,11 @@
       <window_info id="Version Control" 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="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
       <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
-      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.32884902" sideWeight="0.49961567" order="1" side_tool="false" content_ui="tabs" />
       <window_info id="Ant Build" active="false" anchor="right" 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="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.32884902" sideWeight="0.49961567" order="1" side_tool="false" content_ui="tabs" />
       <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="SLIDING" type="SLIDING" visible="false" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
-      <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
       <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
+      <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
     </layout>
   </component>
   <component name="Vcs.Log.UiProperties">
@@ -374,7 +342,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.0" vertical-offset="75" max-vertical-offset="345">
           <caret line="5" column="0" selection-start-line="5" selection-start-column="0" selection-end-line="5" selection-end-column="0" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -413,7 +380,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.0" vertical-offset="75" max-vertical-offset="345">
           <caret line="5" column="0" selection-start-line="5" selection-start-column="0" selection-end-line="5" selection-end-column="0" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -694,7 +660,6 @@
       <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>
@@ -702,15 +667,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <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.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>
@@ -724,26 +680,32 @@
     </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="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" />
+        <state vertical-scroll-proportion="0.0" vertical-offset="2821" max-vertical-offset="3285">
+          <caret line="203" column="41" selection-start-line="203" selection-start-column="41" selection-end-line="203" selection-end-column="41" />
           <folding />
         </state>
       </provider>
     </entry>
     <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 vertical-scroll-proportion="0.0" vertical-offset="59" max-vertical-offset="720">
+          <caret line="36" column="0" selection-start-line="36" selection-start-column="0" selection-end-line="36" selection-end-column="0" />
+          <folding />
         </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/tracklist.py">
       <provider selected="true" editor-type-id="text-editor">
-        <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" />
+        <state vertical-scroll-proportion="0.33251232" vertical-offset="0" max-vertical-offset="406">
+          <caret line="9" column="132" selection-start-line="9" selection-start-column="132" selection-end-line="9" selection-end-column="132" />
+          <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.53699285" vertical-offset="30" max-vertical-offset="990">
+          <caret line="25" column="24" selection-start-line="25" selection-start-column="24" selection-end-line="25" selection-end-column="24" />
           <folding />
         </state>
       </provider>

+ 3 - 0
mopidy_touchscreen/__init__.py

@@ -26,6 +26,9 @@ class Extension(ext.Extension):
 
     def get_config_schema(self):
         schema = super(Extension, self).get_config_schema()
+	schema['screen_width'] = config.Integer()
+	schema['screen_height'] = config.Integer()
+	schema['cursor'] = config.Boolean()
         # TODO: Comment in and edit, or remove entirely
         #schema['username'] = config.String()
         #schema['password'] = config.Secret()

+ 4 - 3
mopidy_touchscreen/list_view.py

@@ -17,14 +17,15 @@ class ListView():
         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)
+        logger.error(self.list_size)
+        self.screen_objects.add_scroll_bar("scroll", (self.pos[0]+self.size[0]-self.base_size,self.pos[1]), (self.base_size, self.size[1]),self.list_size,self.max_rows)
 
     def load_new_item_position(self, item_pos):
         self.current_item = item_pos
@@ -33,8 +34,8 @@ class ListView():
         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)
 
 

+ 26 - 1
mopidy_touchscreen/screen_objects.py

@@ -28,6 +28,9 @@ class ScreenObjectsManager():
     def add_progressbar(self, key, font, text, pos, pos2, max,value_text):
         self.touch_objects[key] = Progressbar(font, text,pos,pos2,max,self.base_size,value_text)
 
+    def add_scroll_bar(self, key, pos, size, max, items_on_screen):
+        self.touch_objects[key] = ScrollBar(pos,size,max,items_on_screen)
+
     def render(self, surface):
         for key in self.text_objects:
             self.text_objects[key].update()
@@ -187,4 +190,26 @@ class Progressbar(TouchObject, TextItem):
         return x * self.max / self.size[0]
 
     def set_text(self, text):
-        self.text.set_text(text , True)
+        self.text.set_text(text , True)
+
+class ScrollBar(TouchObject):
+
+    def __init__(self, pos, size, max, items_on_screen):
+        self.pos = pos
+        self.size = size
+        self.max = max
+        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))
+        if self.max < 1:
+            self.barsize = self.size[1]
+        else:
+            self.barsize = float(self.items_on_screen)/float(self.max) * float(self.size[1])
+        logger.error(self.barsize)
+        self.bar = pygame.Surface((self.size[0],self.barsize))
+        self.bar.fill((255,255,0))
+
+    def render(self, surface):
+        surface.blit(self.back_bar, self.pos)
+        surface.blit(self.bar,self.pos)

+ 9 - 1
mopidy_touchscreen/touch_screen.py

@@ -21,8 +21,16 @@ class TouchScreen(pykka.ThreadingActor, core.CoreListener):
         self.core = core
         self.running = False
         #self.screen_size=(320, 240)
-        self.screen_size=(800, 600)
+        try:
+            self.screen_size = (config['touchscreen']['screen_width'],config['touchscreen']['screen_height'])
+        except KeyError:
+            self.screen_size=(320, 240)
+            logger.warning("Screen size not defined. Using default size: " + str(self.screen_size))
         pygame.init()
+        try:
+            pygame.mouse.set_visible(config['touchscreen']['cursor'])
+        except KeyError:
+            pygame.mouse.set_visible(True)
         self.screen_manager = ScreenManager(self.screen_size,self.core, self.backend)
 
     def start_thread(self):

+ 1 - 1
mopidy_touchscreen/tracklist.py

@@ -7,7 +7,7 @@ class Tracklist():
         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"])
+        self.list_view.set_list(["track 1","track 2","track 1","track 2","track 1","track 2","track 1","track 2","track 1","track 2"])
 
     def update(self, screen):
         pass