We're basically functional now

This commit is contained in:
John Ladan 2012-03-20 13:12:33 -04:00
parent 1c04e6e7c5
commit 770b4f553b
3 changed files with 16 additions and 200 deletions

View File

@ -7,7 +7,7 @@ The book is a dictionary of the form { string : a, ... }
Keys:
required: (ideally)
title - Book/Article title
publishers - string containing semi-colon separated list eg. "UW Press; CSC, inc."
publisher - string containing semi-colon separated list eg. "UW Press; CSC, inc."
authors - as above. each name is of the form "First Initials. Last" eg. "Calum T. Dalek; Conan T.B. Ladan"
optional:
subtitle - string
@ -42,11 +42,11 @@ def openLibrary(ISBN):
for v in openBook["authors"]:
book['authors'] += "; " + v['name']
book['authors'] = book['authors'][2:]
book["publishers"]=""
book["publisher"]=""
if "publishers" in openBook:
for v in openBook["publishers"]:
book["publishers"] += "; " + v['name']
book['publishers'] = book['publishers'][2:]
book["publisher"] += "; " + v['name']
book['publisher'] = book['publisher'][2:]
if "publish_places" in openBook:
book["publish locations"]=""
for v in openBook["publish_places"]:
@ -69,5 +69,3 @@ def openLibrary(ISBN):
book["subtitle"]=openBook["subtitle"]
return book
book = openLibrary(9780865479104)
print dumps(book,indent=2)

View File

@ -12,7 +12,7 @@ class bookForm:
caption = "Add a Book"
blabel = "Add"
labels = ["ISBN", "LCCN", "Title", "Subtitle", "Authors", "Edition",
"Publishers", "Publish Date", "Publish Year", "Publish Month", "Publish location",
"Publisher", "Publish Date", "Publish Year", "Publish Month", "Publish location",
"Pages", "Pagination", "Weight"]
entries = []
@ -121,8 +121,7 @@ class bookForm:
self.drawRow(self.hl)
self.highlight()
def returnBook():
def returnBook(self):
book = {}
for k,v in zip(self.labels, self.entries):
if v!="" and k.lower()!="publish date":
@ -132,6 +131,7 @@ class bookForm:
def eventLoop(self):
self.w.keypad(1)
self.refresh()
self.mvCursor(+len(self.entries[self.hl]))
self.highlight()
ch = self.w.getch()

View File

@ -3,6 +3,8 @@
import curses
import dbLayer as db
import browser
import bookForm
import bookData
stdscr=0
@ -63,200 +65,16 @@ def redrawMenu(w,items,highlight):
w.chgat(highlight, 0, curses.A_REVERSE)
w.refresh()
# items is a list of (label, value) pairs
def redrawForm(w, caption, items, buttonlabel, m):
(y,x)=w.getmaxyx()
w.border()
curses.curs_set(1)
w.addstr(1,1,caption)
r=3
for l,v in items:
c = m-len(l)-2
w.addstr(r,c,l+":")
w.addstr(r,m,v)
r+=2
w.addstr(r,x-len(buttonlabel)-len("<cancel>")-6, "<cancel> <"+buttonlabel+">")
w.refresh()
def lists_to_dict(l1, l2):
book = {}
for k,v in zip(l1,l2):
if v!="" and k.lower()!="publish date":
book[k.lower()]=v
return book
#the final form for book data entry - takes caption and book info.
def bookForm(caption, book, buttonlabel):
labels = ["ISBN", "LCCN", "Title", "Subtitle", "Authors", "Edition",
"Publisher", "Publish Date", "Publish Year", "Publish Month", "Publish location",
"Pages", "Pagination", "Weight"]
entries = []
m = 0
for l in labels:
m = max(len(l),m)
if l.lower() in book:
entries.append(book[l.lower()])
else:
entries.append("")
m+=4
w=curses.newwin(34,70,1,10)
(y,x)=w.getmaxyx()
w.keypad(1)
redrawForm(w,caption,zip(labels,entries),buttonlabel,m)
bcol = [x-len(buttonlabel)-len("<cancel>")-6, x-len(buttonlabel)-4]
bwidth = [8,len(buttonlabel)+2]
highlight=0
b = -1
r=3
w.chgat(r,m,x-m-2,curses.A_UNDERLINE)
w.move(r,m+len(entries[highlight]))
cursor = len(entries[highlight])
ch = w.getch()
while (1==1):
if ch==27: #escape key
curses.curs_set(0)
w.clear()
w.refresh()
return {}
if ch==curses.KEY_UP:
if highlight == len(labels):
w.chgat(r,bcol[b],bwidth[b],curses.A_NORMAL)
highlight = len(labels)-1
b = -1
r=3+2*highlight
w.chgat(r,m,x-m-2,curses.A_UNDERLINE)
cursor = len(entries[highlight])
w.move(r,m+cursor)
curses.curs_set(1)
elif highlight!=0:
w.chgat(r,m,x-m-2,curses.A_NORMAL)
highlight -= 1
r=3+2*highlight
w.chgat(r,m,x-m-2,curses.A_UNDERLINE)
cursor = len(entries[highlight])
w.move(r,m+cursor)
elif ch==curses.KEY_PPAGE:
w.chgat(r,m,x-m-2,curses.A_NORMAL)
highlight=0
b=-1
r=3+2*highlight
w.chgat(r,m,x-m-2,curses.A_UNDERLINE)
cursor = len(entries[highlight])
w.move(r,m+cursor)
curses.curs_set(1)
elif ch==curses.KEY_DOWN:
if highlight >= len(labels) -1:
highlight = len(labels)
b += 1
b = min(b,1)
curses.curs_set(0)
w.chgat(r,m,x-m-2,curses.A_NORMAL)
r = y-3
w.chgat(r,bcol[b],bwidth[b],curses.A_REVERSE)
else:
w.chgat(r,m,x-m-2,curses.A_NORMAL)
highlight += 1
r=3+2*highlight
w.chgat(r,m,x-m-2,curses.A_UNDERLINE)
cursor = len(entries[highlight])
w.move(r,m+cursor)
elif ch==curses.KEY_NPAGE:
if highlight!=len(labels):
highlight = len(labels)
b += 1
b = min(b,1)
curses.curs_set(0)
w.chgat(r,m,x-m-2,curses.A_NORMAL)
r = y-3
w.chgat(r,bcol[b],bwidth[b],curses.A_REVERSE)
elif ch==curses.KEY_LEFT:
if highlight == len(labels):
w.chgat(r,bcol[b],bwidth[b],curses.A_NORMAL)
b=0
w.chgat(r,bcol[b],bwidth[b],curses.A_REVERSE)
else:
if cursor>0:
cursor-=1
w.move(r,m+cursor)
elif ch==curses.KEY_RIGHT:
if highlight == len(labels):
w.chgat(r,bcol[b],bwidth[b],curses.A_NORMAL)
b=1
w.chgat(r,bcol[b],bwidth[b],curses.A_REVERSE)
else:
if cursor < len(entries[highlight]):
cursor+=1
w.move(r,m+cursor)
elif ch>31 and ch<127:
if highlight != len(labels):
entries[highlight]=entries[highlight][:cursor] + curses.keyname(ch) + entries[highlight][cursor:]
cursor+=1
w.addnstr(r,m, entries[highlight]+(" "*40), x-m-2)
w.chgat(r,m,x-m-2,curses.A_UNDERLINE)
w.move(r,m+cursor)
elif ch==curses.KEY_BACKSPACE:
if highlight != len(labels) and cursor!=0:
cursor-=1
entries[highlight]=entries[highlight][:cursor] + entries[highlight][cursor+1:]
w.addnstr(r,m, entries[highlight]+(" "*40), x-m-2)
w.chgat(r,m,x-m-2,curses.A_UNDERLINE)
w.move(r,m+cursor)
elif ch==curses.KEY_DC:
if highlight != len(labels):
entries[highlight]=entries[highlight][:cursor] + entries[highlight][cursor+1:]
w.addnstr(r,m, entries[highlight]+(" "*40), x-m-2)
w.chgat(r,m,x-m-2,curses.A_UNDERLINE)
w.move(r,m+cursor)
elif ch==curses.KEY_HOME:
if highlight != len(labels):
cursor=0
w.move(r,m+cursor)
elif ch==curses.KEY_END:
if highlight != len(labels):
cursor=len(entries[highlight])
w.move(r,m+cursor)
elif ch==10:
if b != -1:
if b == 0:
w.clear()
w.refresh()
return {}
elif b == 1:
w.clear()
w.refresh()
return lists_to_dict(labels,entries)
elif highlight == len(labels)-1:
highlight = len(labels)
b=0
curses.curs_set(0)
w.chgat(r,m,x-m-2,curses.A_NORMAL)
r = y-3
w.chgat(r,bcol[b],bwidth[b],curses.A_REVERSE)
else:
w.chgat(r,m,x-m-2,curses.A_NORMAL)
highlight += 1
r=3+2*highlight
w.chgat(r,m,x-m-2,curses.A_UNDERLINE)
cursor = len(entries[highlight])
w.move(r,m+cursor)
w.refresh()
ch = w.getch()
curses.curs_set(0)
w.clear()
w.refresh()
return {}
def addForm():
book = {"title":"A Book of Tests", "pages":"123"}
book = bookForm("Add a book", book, "add")
#bookForm("View the book", book, "done")
w=curses.newwin(1,1,20,20)
bf = bookForm.bookForm(w)
bf.lookup=bookData.openLibrary
bf.caption='Add a Book'
bf.blabel = 'Add'
bf.updateEntries(book)
book = bf.eventLoop()
if len(book)!=0:
db.addBook(book)