3
__author__ = "chrysn <chrysn@fsfe.org>"
4
__copyright__ = "Copyright 2007, chrysn"
2
stfl.create('{vbox @style_normal:bg=blue}').run(0)
13
def __init__(self,file,delimiter):
15
self.delimiter=delimiter
17
self.data=[l for l in csv.reader(open(self.file),delimiter=self.delimiter)]
18
maxlen=max([len(l) for l in self.data])
20
while len(l)<maxlen: l.append("")
23
def cellname(row,col): return "cell_%d_%d"%(row,col)
25
def valuename(row,col): return "value_%d_%d"%(row,col)
28
tag,row,col=name.split('_')
30
row,col=int(row),int(col)
34
return "{table .expand:1 %s}"%"{tablebr}".join([
36
"{input[%s] text[%s]:%s style_focus:bg=blue}"%(self.cellname(row,col),self.valuename(row,col),stfl.quote(x))
37
for col,x in zip(range(len(l)),l)
39
for row,l in zip(range(len(self.data)),self.data)
42
def updatefromstfl(self, f):
43
for row in range(len(self.data)):
44
for col in range(len(self.data[row])):
45
self.data[row][col]=f.get(self.valuename(row,col))
49
w=csv.writer(open(self.file,'w'),delimiter=self.delimiter)
50
w.writerows(self.data)
53
if __name__=="__main__":
54
if len(sys.argv) not in [2,3]:
55
print "Usage: %s file.csv [delimiter]"%sys.argv[0]
58
c=CSV(sys.argv[1], len(sys.argv)==3 and sys.argv[2] or ",")
62
form="{vbox %s {label} {hbox .expand:0 @style_normal:attr=reverse {label text[statusbar]:}{label text[help]: .tie:r}}"%table
67
f.set('statusbar',text)
71
return c.namecell(f.get_focus())
73
f.set_focus(c.cellname(row,col))
75
setstatus("editing %s"%c.file)
76
sethelp("^W = write, ^C = exit")
81
except KeyboardInterrupt:
82
e='^C' # other possible reasons?
84
setstatus("editing %s, row %d, col %d"%(c.file,row,col))
93
setstatus("saved to %s"%c.file)