qmsk/pngtile/pngtile.py
changeset 238 2c62e4d70619
parent 236 4ca68e4eb386
child 115 ac2608e5a0b6
--- a/qmsk/pngtile/pngtile.py	Sat Oct 04 14:36:02 2014 +0300
+++ b/qmsk/pngtile/pngtile.py	Sat Oct 04 15:14:22 2014 +0300
@@ -12,11 +12,20 @@
         PNGTileStore,
 )
 
+import os.path
+
 class Store (PNGTileStore):
-    def __init__ (self, tileserver, **opts):
+    def __init__ (self, title, tileserver, **opts):
         super(Store, self).__init__(**opts)
+        
+        self._title = title
+        self.tileserver = tileserver
 
-        self.tileserver = tileserver
+    def title (self, name):
+        if name:
+            return os.path.basename(name)
+        else:
+            return self._title
 
     def breadcrumb (self, name):
         """
@@ -30,6 +39,56 @@
 
             yield '/'.join(path), part
 
+    def tree (self, name):
+        """
+            Yield [(item, name)] lists for given path.
+        """
+        
+        # always, starting from root
+        parts = []
+
+        if name:
+            # also including the dir itself... but not the root twice
+            name += '/'
+
+        # walk up the tree from root the dir itself
+        for tree_item in name.split('/'):
+            tree_name = '/'.join(parts)
+            
+            dirs = [ ]
+            items = [ ]
+            
+            # walk through the items within this tree node
+            for item, type in self.list(tree_name):
+                if tree_name:
+                    item_name = tree_name + '/' + item
+                else:
+                    item_name = item
+
+                if type:
+                    items.append((item, item_name))
+                else:
+                    dirs.append((item, item_name))
+            
+            # tree of parent + item within parent
+            yield sorted(dirs), tree_item
+
+            parts.append(tree_item)
+
+    def items (self, name):
+        """
+            Yield (item, name) for given path.
+        """
+
+        for item, type in self.list(name):
+            if name:
+                item_name = name + '/' + item
+            else:
+                item_name = item
+
+            if type:
+                yield item, item_name
+
     def tiles_url (self, name, **query):
         """
             Return a tileserver URL.
@@ -50,5 +109,6 @@
     image_root  = settings.QMSK_PNGTILE_ROOT,
     
     # Store
+    title       = settings.QMSK_PNGTILE_TITLE,
     tileserver  = settings.QMSK_PNGTILE_SERVER,
 )