Skip to content

Commit

Permalink
all commands work on SheetObject now according to test
Browse files Browse the repository at this point in the history
  • Loading branch information
saulpw committed Dec 19, 2016
1 parent a82b7b7 commit b195d71
Show file tree
Hide file tree
Showing 7 changed files with 189 additions and 88 deletions.
1 change: 1 addition & 0 deletions tox.ini
Expand Up @@ -3,6 +3,7 @@ envlist=py33,py34,py35

[testenv]
commands = {envpython} setup.py test
deps = python-dateutil

[testenv:py33]
basepython = python3.3
Expand Down
20 changes: 16 additions & 4 deletions visidata/Column.py
@@ -1,4 +1,4 @@
from . import anytype, vd, options, WrongTypeStr, CalcErrorStr
from . import anytype, vd, options, WrongTypeStr, CalcErrorStr, error

class Column:
def __init__(self, name, type=anytype, func=lambda r: r, width=None):
Expand Down Expand Up @@ -88,6 +88,18 @@ def __init__(self, attrname, valtype):
super().__init__(attrname, type=valtype, func=lambda_getattr(attrname))


class ColumnSourceAttr(Column):
'row is an attrname; this column getattr and setattr on the sheet source'
def __init__(self, name, source):
valfunc = lambda r,obj=source: getattr(obj, r)
valfunc.setter = lambda r,v,obj=source: setattr(obj, r, v)
super().__init__(name, func=valfunc)


class ColumnItem(Column):
def __init__(self, attrname, itemkey, **kwargs):
super().__init__(attrname, func=lambda_getitem(itemkey), **kwargs)

### common column setups and helpers
def setter(r, k, v): # needed for use in lambda
r[k] = v
Expand All @@ -97,7 +109,7 @@ def lambda_colname(colname):
func.setter = lambda r,v,b=colname: setter(r,b,v)
return func

def lambda_col(b):
def lambda_getitem(b):
func = lambda r,b=b: r[b]
func.setter = lambda r,v,b=b: setter(r,b,v)
return func
Expand Down Expand Up @@ -156,11 +168,11 @@ def PyobjColumns(exampleRow):

def ArrayColumns(n):
'columns that display r[0]..r[n]'
return [Column('', anytype, lambda_col(colnum)) for colnum in range(n)]
return [Column('', anytype, lambda_getitem(colnum)) for colnum in range(n)]

def ArrayNamedColumns(columns):
'columns is a list of column names, mapping to r[0]..r[n]'
return [Column(colname, anytype, lambda_col(i)) for i, colname in enumerate(columns)]
return [Column(colname, anytype, lambda_getitem(i)) for i, colname in enumerate(columns)]

def AttrColumns(colnames):
'colnames is list of attribute names'
Expand Down
10 changes: 6 additions & 4 deletions visidata/Sheet.py
@@ -1,8 +1,9 @@
import collections
import functools
import re

import visidata
from . import colors, options, date, anytype, WrongTypeStr, CalcErrorStr, vd
from . import colors, options, status, error, date, anytype, WrongTypeStr, CalcErrorStr, vd, moveListItem
from .tui import draw_clip
from .Column import Column

Expand All @@ -11,6 +12,7 @@
class Sheet:
def __init__(self, name, src=None):
self.name = name
self.filetype = None
self.source = src
self.rows = []
self.cursorRowIndex = 0 # absolute index of cursor into self.rows
Expand Down Expand Up @@ -339,7 +341,7 @@ def drawColHeader(self, vcolidx):
if len(N) > colwidth-1:
N = N[:colwidth-len(options.ch_Ellipsis)] + options.ch_Ellipsis
self.clipdraw(0, x, N, hdrattr, colwidth)
self.clipdraw(0, x+colwidth-1, T, hdrattr, 1)
self.clipdraw(0, x+colwidth-len(T), T, hdrattr, len(T))

if vcolidx == self.leftVisibleColIndex and vcolidx > self.nKeys:
A = options.ch_LeftMore
Expand Down Expand Up @@ -393,9 +395,9 @@ def draw(self, scr):
self.clipdraw(y, x, options.ch_ColumnFiller + cellval, attr, colwidth)

if isinstance(cellval, CalcErrorStr):
self.clipdraw(y, x+colwidth-1, options.ch_Error, colors[options.c_Error])
self.clipdraw(y, x+colwidth-len(options.ch_Error), options.ch_Error, colors[options.c_Error], len(options.ch_Error))
elif isinstance(cellval, WrongTypeStr):
self.clipdraw(y, x+colwidth-1, options.ch_WrongType, colors[options.c_WrongType])
self.clipdraw(y, x+colwidth-len(options.ch_WrongType), options.ch_WrongType, colors[options.c_WrongType], len(options.ch_WrongType))

if x+colwidth+len(sepchars) <= self.windowWidth:
self.scr.addstr(y, x+colwidth, sepchars, attr or colors[options.c_ColumnSep])
Expand Down

0 comments on commit b195d71

Please sign in to comment.