browser window displays properly
authorJohn Ladan <jladan@uwaterloo.ca>
Tue, 20 Mar 2012 02:50:09 +0000 (22:50 -0400)
committerJohn Ladan <jladan@uwaterloo.ca>
Tue, 20 Mar 2012 02:50:49 +0000 (22:50 -0400)
browser.py
librarian.py

index 11fa0f6..a5b87b6 100644 (file)
@@ -2,23 +2,63 @@ import curses
 import dbLayer as db
 
 class browserWindow:
-    highlight = 0
+    hl = 0
     books = []
+    topline = 0
+    columns = [('Title',20),
+               ('Authors',10)]
+    mx = my = 0
+
+    def __init__(self,window):
+        self.w = window
+        self.updateGeometry()
+        self.refreshBooks()
+        self.sortByColumn('title')
 
     def refreshBooks(self):
         self.books = db.getBooks()
 
     def sortByColumn(self, col):
-        self.books.sort(key=get(col))
+        self.books.sort() # key=dict.get(col))
+
+    def updateGeometry(self):
+        (self.my,self.mx)=self.w.getmaxyx()
+        # maybe recalculate column widths here.
 
     def refresh(self):
-        (my,mx) = w.getmaxyx()
         self.displayHeader()
-        for r in range(2,my):
-            self.displayRow(my)
+        for r in range(0,self.my-2):
+            self.displayRow(r)
+        self.highlight(self.hl)
+        self.w.refresh()
+
+    def displayHeader(self):
+        cursor = 0
+        for header,width in self.columns:
+            self.w.addnstr(0,cursor,header,width)
+            self.w.addstr(1,cursor,"-"*width)
+            cursor += width+1
 
     def displayRow(self,row):
-        self.w.addstr(row,1,"Row to be updated")
+        if self.topline+row < len(self.books):
+            book = self.books[self.topline+row]
+            cursor = 0
+            for k,width in self.columns:
+                if k.lower() in book:
+                    self.w.addnstr(row+2,cursor,book[k.lower()],width)
+                cursor += width+1
+        else:
+            self.w.addstr(row,0," "*self.mx)
+
+    def highlight(self,row):
+        self.w.chgat(self.hl+2,0,self.mx,curses.A_NORMAL)
+        self.hl=row
+        self.w.chgat(self.hl+2,0,self.mx,curses.A_REVERSE)
+
+    def startBrowser(self):
+        self.refresh()
+        self.w.getch()
+
 
 
 
index 69ffede..012dc17 100755 (executable)
@@ -2,6 +2,7 @@
 
 import curses
 import dbLayer as db
+import browser
 
 stdscr=0
 
@@ -271,9 +272,10 @@ def deleteMenu():
     w.refresh()
 
 def browseMenu():
-    w=curses.newwin(1,50,10,10)
-    w.addstr("I will be used to browse book records")
-    w.refresh()
+    w=curses.newwin(50,50,10,10)
+    b = browser.browserWindow(w)
+    b.startBrowser()
+
 
 m = [("Browse Library", browseMenu),
      ("Add Book or other item", addForm),