UI improvements
Some are obvious and urgent (like adding *one* category instead of one for every letter), some are debatable (like changing the window size and the scrolling behavior).
This commit is contained in:
parent
1690ac87a8
commit
9b9e95be69
|
@ -13,7 +13,7 @@ class browserWindow:
|
|||
entries = []
|
||||
selected = list()
|
||||
commands = [(' /', 'search'), (' n', 'find next'), (' N', 'find previous'),
|
||||
('F6', 'Sort Column'), (' q', 'quit')]
|
||||
('F6', 'Sort Column'), (' q', 'quit'), ('Space', 'select'), ('Enter', 'view')]
|
||||
cs = []
|
||||
# column definitions are in (label, weight, specified width) triples
|
||||
columnDefs = [('something',1,None)]
|
||||
|
@ -134,7 +134,7 @@ class browserWindow:
|
|||
def scroll(self,delta):
|
||||
self.unHighlight()
|
||||
self.topline += delta
|
||||
self.topline = min(self.topline,len(self.entries)-1)
|
||||
self.topline = min(self.topline,len(self.entries)-self.pageSize)
|
||||
self.topline = max(self.topline,0)
|
||||
self.refresh()
|
||||
|
||||
|
@ -201,7 +201,7 @@ class browserWindow:
|
|||
ch = self.w.getch()
|
||||
self.hb.refresh()
|
||||
|
||||
def handleInput(self,ch):
|
||||
def handleInput(self,ch,isSortByColumn=False):
|
||||
if ch == curses.KEY_UP or ch == 107 or ch == 16:
|
||||
if self.hl == self.topline:
|
||||
self.scroll(-self.pageSize//2-1)
|
||||
|
@ -247,7 +247,7 @@ class browserWindow:
|
|||
self.mvHighlight(delta)
|
||||
else:
|
||||
self.hb.display(self.last_search+' not found')
|
||||
elif ch == 270: # F6 Sorts
|
||||
elif ch == 270 and not isSortByColumn: # F6 Sorts
|
||||
w = curses.newwin(1,1)
|
||||
cl = columnSelector(w,self.hb,40,20)
|
||||
self.centreChild(w)
|
||||
|
@ -256,7 +256,7 @@ class browserWindow:
|
|||
self.sortByColumn(col)
|
||||
self.clear()
|
||||
self.refresh()
|
||||
elif ch == 32:
|
||||
elif ch == 32 and not isSortByColumn:
|
||||
if len(self.selected)>0:
|
||||
self.selected[self.hl] = not self.selected[self.hl]
|
||||
self.displayRow(self.hl-self.topline)
|
||||
|
@ -338,7 +338,7 @@ class bookBrowser(browserWindow):
|
|||
('Authors',30,None),
|
||||
('Title',60,None)]
|
||||
|
||||
cs = [(' u', 'update'), (' d', 'delete selected')]
|
||||
cs = [(' u', 'update'), (' d', 'delete selected'), (' c', 'categorize')]
|
||||
|
||||
|
||||
# redefinable functions
|
||||
|
@ -368,7 +368,7 @@ class bookBrowser(browserWindow):
|
|||
|
||||
def categorizeSelection(self,book):
|
||||
w = curses.newwin(1,1)
|
||||
cs = categorySelector(w,self.hb,40,40)
|
||||
cs = categorySelector(w,self.hb)
|
||||
self.centreChild(w)
|
||||
cs.book = book
|
||||
cs.refreshCategories()
|
||||
|
@ -487,7 +487,7 @@ class categoryBrowser(browserWindow):
|
|||
|
||||
class categorySelector(browserWindow):
|
||||
columnDefs = [('Category',100,None)]
|
||||
cs = [(' a', 'add category'), (' c', 'commit')]
|
||||
cs = [(' a', 'commit & add category'), (' c', 'commit')]
|
||||
book = {'id':''}
|
||||
original=[]
|
||||
|
||||
|
@ -517,10 +517,9 @@ class categorySelector(browserWindow):
|
|||
w = curses.newwin(1,1,10,10)
|
||||
cf = CategoryForm(w,self.hb)
|
||||
self.centreChild(w)
|
||||
cats = cf.event_loop()
|
||||
for c in cats:
|
||||
db.addCategory(c)
|
||||
cat = cf.event_loop()
|
||||
cf.clear()
|
||||
db.addCategory(cat)
|
||||
|
||||
@catch_error
|
||||
def updateCategories(self):
|
||||
|
@ -541,6 +540,7 @@ class categorySelector(browserWindow):
|
|||
def handleInput(self,ch):
|
||||
browserWindow.handleInput(self,ch)
|
||||
if ch == 97:
|
||||
self.updateCategories()
|
||||
self.addCategory()
|
||||
self.refreshCategories()
|
||||
self.refresh()
|
||||
|
@ -552,6 +552,8 @@ class categorySelector(browserWindow):
|
|||
|
||||
class columnSelector(browserWindow):
|
||||
columnDefs = [('Column',100,None)]
|
||||
commands = [(' /', 'search'), (' n', 'find next'), (' N', 'find previous'),
|
||||
(' q', 'quit'), ('Enter', 'done')]
|
||||
entries = [
|
||||
{'column': 'id'}, {'column': 'isbn'}, {'column': 'lccn'},
|
||||
{'column': 'title'}, {'column': 'subtitle'}, {'column': 'authors'},
|
||||
|
@ -563,8 +565,7 @@ class columnSelector(browserWindow):
|
|||
]
|
||||
|
||||
def __init__(self,window,helpbar,height=40,width=20):
|
||||
self.selected = [False,False,False,False,False,False,False,
|
||||
False,False,False,False,False,False,False,False]
|
||||
self.selected = [False for _ in self.entries]
|
||||
browserWindow.__init__(self,window,helpbar,height,width)
|
||||
|
||||
|
||||
|
@ -583,5 +584,5 @@ class columnSelector(browserWindow):
|
|||
self.hb.refresh()
|
||||
|
||||
def handleInput(self,ch):
|
||||
browserWindow.handleInput(self,ch)
|
||||
browserWindow.handleInput(self,ch,True)
|
||||
return ch
|
||||
|
|
|
@ -183,13 +183,11 @@ class FormWindow:
|
|||
self.bwidth = [8,len(self.blabel)+2]
|
||||
|
||||
def _set_entries(self,book):
|
||||
e = 0
|
||||
for l in self.labels:
|
||||
for (e, l) in enumerate(self.labels):
|
||||
if l.lower() in book:
|
||||
self.entries[e].value = str(book[l.lower()])
|
||||
else:
|
||||
self.entries[e].value = ""
|
||||
e += 1
|
||||
|
||||
def redraw(self):
|
||||
self.w.box()
|
||||
|
|
|
@ -14,8 +14,12 @@ class helpBar:
|
|||
def updateGeometry(self):
|
||||
(self.my, self.mx) = self.w.getmaxyx()
|
||||
(self.y, self.x) = self.w.getbegyx()
|
||||
self.numCols = self.mx//self.colWidth
|
||||
self.numCols = min(len(self.commands), self.mx//self.colWidth)
|
||||
self.extraHspace = self.mx - self.colWidth*self.numCols
|
||||
if self.commands:
|
||||
numRows = len(self.commands)//self.numCols +1
|
||||
else:
|
||||
numRows = 1
|
||||
self.y += self.my - numRows
|
||||
self.my = numRows
|
||||
self.w.mvwin(0,0)
|
||||
|
@ -25,16 +29,17 @@ class helpBar:
|
|||
def refresh(self):
|
||||
self.clear()
|
||||
self.updateGeometry()
|
||||
r=0
|
||||
c=0
|
||||
r=0; i=0
|
||||
c=self.extraHspace//2
|
||||
for key,command in self.commands:
|
||||
self.w.addnstr(r,c,key+" "+command+" "*self.colWidth,
|
||||
self.colWidth-1)
|
||||
self.w.chgat(r,c,2,curses.A_REVERSE)
|
||||
c+=self.colWidth
|
||||
if c > self.colWidth*self.numCols:
|
||||
c=0
|
||||
r+=1
|
||||
i+=1
|
||||
if i >= self.numCols:
|
||||
c=self.extraHspace//2
|
||||
r+=1; i=0
|
||||
self.w.refresh()
|
||||
|
||||
def clear(self):
|
||||
|
|
Loading…
Reference in New Issue