17 commands = [('pU', 'top'),('pD', 'bottom'),('Es', 'cancel')]
23 def __init__(self,window,helpbar,book={}):
25 self.w.resize(len(self.labels)+6,50)
27 self.updateEntries(book)
30 def updateGeometry(self):
31 (self.my, self.mx) = self.w.getmaxyx()
34 self.left = max(len(l),self.left)
36 self.width = self.mx-self.left-2
39 self.bcol = [self.mx-len(self.blabel)-14, self.mx-len(self.blabel)-4]
40 self.bwidth = [8,len(self.blabel)+2]
42 def updateEntries(self,book):
46 self.entries.append(str(book[l.lower()]))
48 self.entries.append("")
51 self.hb.commands = self.commands
55 self.w.addstr(0,(self.mx-len(self.caption))/2,self.caption)
58 c = self.left-len(l)-2
59 self.w.addstr(r,c,l+":")
60 self.drawRow(r-self.top)
62 self.w.addstr(r+1,self.bcol[0], "<cancel> <"+self.blabel+">")
65 def drawRow(self,row):
67 self.w.addnstr(r,self.left, self.entries[row]+" "*self.width, self.width)
71 self.w.chgat(self.row, self.left, self.width, curses.A_UNDERLINE)
75 self.w.chgat(self.row, self.bcol[self.bt], self.bwidth[self.bt], curses.A_REVERSE)
78 def unHighlight(self):
79 self.w.chgat(self.row,1,self.mx-2,curses.A_NORMAL)
81 def mvHighlight(self,delta):
85 new = min(new,len(self.labels)) # the extra is for the buttons
87 self.row = self.hl + self.top
88 if new == len(self.labels):
90 self.bt = min(self.bt,1)
93 self.mvCursor(+len(self.entries[self.hl]))
97 def mvCursor(self,delta):
98 n = self.cursor + delta
100 n = min(n,len(self.entries[self.hl]))
102 col = self.left + self.cursor - self.textStart
103 if col >= self.left and col < self.left+self.width:
104 self.w.move(self.row,col)
108 self.entries[self.hl]=self.entries[self.hl][:c] +ch+ self.entries[self.hl][c:]
109 self.drawRow(self.hl)
115 self.entries[self.hl]=self.entries[self.hl][:self.cursor-1] + self.entries[self.hl][self.cursor:]
116 self.drawRow(self.hl)
122 self.entries[self.hl]=self.entries[self.hl][:c] + self.entries[self.hl][c+1:]
123 self.drawRow(self.hl)
126 def returnValues(self):
128 for k,v in zip(self.labels, self.entries):
129 if v!="" and k.lower()!="publish date":
136 self.mvCursor(+len(self.entries[self.hl]))
142 if ch==10 or ch==curses.KEY_ENTER:
146 return self.returnValues()
154 def handleInput(self,ch):
155 if ch==curses.KEY_UP:
157 elif ch==curses.KEY_PPAGE:
158 self.mvHighlight(-len(self.labels))
159 elif ch==curses.KEY_DOWN:
161 elif ch==curses.KEY_NPAGE:
162 self.mvHighlight(+len(self.labels))
164 elif ch==curses.KEY_LEFT:
169 elif ch==curses.KEY_HOME:
171 self.mvCursor(-len(self.entries[self.hl]))
172 elif ch==curses.KEY_RIGHT:
177 elif ch==curses.KEY_END:
179 self.mvCursor(+len(self.entries[self.hl]))
181 elif ch>=32 and ch<=126:
183 self.insert(curses.keyname(ch))
184 elif ch==curses.KEY_BACKSPACE:
187 elif ch==curses.KEY_DC:
193 class bookForm(formWindow):
194 caption = "Add a Book"
196 labels = ["ISBN", "LCCN", "Title", "Subtitle", "Authors", "Edition",
197 "Publisher", "Publish Date", "Publish Year", "Publish Month", "Publish location",
198 "Pages", "Pagination", "Weight"]
201 # redefineable functions lookup is called when 'enter' is pressed on ISBN
202 # and returns the looked-up book. Default returns nothing
203 def lookup(self,isbn):
206 def returnBook(self):
207 return self.returnValues()
209 def handleInput(self,ch):
210 if ch==10 or ch==curses.KEY_ENTER:
212 book = self.lookup(self.entries[0])
214 self.updateEntries(book)
216 formWindow.handleInput(self,ch)
218 class categoryForm(formWindow):
219 caption = "Add a Category"
221 labels = ["Category"]
223 def returnValues(self):