Add "select all" by clicking on (0,0) cell.
Redo setting the selection and setting the beacon to deal better with rows or columns -- these are now expressed by range (1, sys.maxint).
This commit is contained in:
parent
40cac739c2
commit
065627e15c
@ -581,7 +581,11 @@ class SheetGUI:
|
|||||||
self.rows = rows
|
self.rows = rows
|
||||||
self.columns = columns
|
self.columns = columns
|
||||||
self.gridcells = {}
|
self.gridcells = {}
|
||||||
# Create the top row of labels
|
# Create the top left corner cell (which selects all)
|
||||||
|
cell = Tk.Label(self.cellgrid, relief='raised')
|
||||||
|
cell.grid_configure(column=0, row=0, sticky='NSWE')
|
||||||
|
cell.bind("<ButtonPress-1>", self.selectall)
|
||||||
|
# Create the top row of labels, and confiure the grid columns
|
||||||
for x in range(1, columns+1):
|
for x in range(1, columns+1):
|
||||||
self.cellgrid.grid_columnconfigure(x, minsize=64)
|
self.cellgrid.grid_columnconfigure(x, minsize=64)
|
||||||
cell = Tk.Label(self.cellgrid, text=colnum2name(x), relief='raised')
|
cell = Tk.Label(self.cellgrid, text=colnum2name(x), relief='raised')
|
||||||
@ -609,7 +613,7 @@ class SheetGUI:
|
|||||||
for y in range(1, rows+1):
|
for y in range(1, rows+1):
|
||||||
cell = Tk.Label(self.cellgrid, relief='sunken',
|
cell = Tk.Label(self.cellgrid, relief='sunken',
|
||||||
bg='white', fg='black')
|
bg='white', fg='black')
|
||||||
cell.grid_configure(column=x, row=y, sticky='NWSE')
|
cell.grid_configure(column=x, row=y, sticky='NSWE')
|
||||||
self.gridcells[x, y] = cell
|
self.gridcells[x, y] = cell
|
||||||
cell.__x = x
|
cell.__x = x
|
||||||
cell.__y = y
|
cell.__y = y
|
||||||
@ -619,27 +623,31 @@ class SheetGUI:
|
|||||||
cell.bind("<ButtonRelease-1>", self.release)
|
cell.bind("<ButtonRelease-1>", self.release)
|
||||||
cell.bind("<Shift-Button-1>", self.release)
|
cell.bind("<Shift-Button-1>", self.release)
|
||||||
|
|
||||||
|
def selectall(self, event):
|
||||||
|
self.setcurrent(1, 1)
|
||||||
|
self.setcorner(sys.maxint, sys.maxint)
|
||||||
|
|
||||||
def selectcolumn(self, event):
|
def selectcolumn(self, event):
|
||||||
x, y = self.whichxy(event)
|
x, y = self.whichxy(event)
|
||||||
self.setcurrent(x, 1)
|
self.setcurrent(x, 1)
|
||||||
self.setcorner(x, self.rows)
|
self.setcorner(x, sys.maxint)
|
||||||
|
|
||||||
def extendcolumn(self, event):
|
def extendcolumn(self, event):
|
||||||
x, y = self.whichxy(event)
|
x, y = self.whichxy(event)
|
||||||
if x > 0:
|
if x > 0:
|
||||||
self.setcurrent(self.currentxy[0], 1)
|
self.setcurrent(self.currentxy[0], 1)
|
||||||
self.setcorner(x, self.rows)
|
self.setcorner(x, sys.maxint)
|
||||||
|
|
||||||
def selectrow(self, event):
|
def selectrow(self, event):
|
||||||
x, y = self.whichxy(event)
|
x, y = self.whichxy(event)
|
||||||
self.setcurrent(1, y)
|
self.setcurrent(1, y)
|
||||||
self.setcorner(self.columns, y)
|
self.setcorner(sys.maxint, y)
|
||||||
|
|
||||||
def extendrow(self, event):
|
def extendrow(self, event):
|
||||||
x, y = self.whichxy(event)
|
x, y = self.whichxy(event)
|
||||||
if y > 0:
|
if y > 0:
|
||||||
self.setcurrent(1, self.currentxy[1])
|
self.setcurrent(1, self.currentxy[1])
|
||||||
self.setcorner(self.columns, y)
|
self.setcorner(sys.maxint, y)
|
||||||
|
|
||||||
def press(self, event):
|
def press(self, event):
|
||||||
x, y = self.whichxy(event)
|
x, y = self.whichxy(event)
|
||||||
@ -691,17 +699,32 @@ class SheetGUI:
|
|||||||
x1, x2 = x2, x1
|
x1, x2 = x2, x1
|
||||||
if y1 > y2:
|
if y1 > y2:
|
||||||
y1, y2 = y2, y1
|
y1, y2 = y2, y1
|
||||||
for x in range(x1, x2+1):
|
for (x, y), cell in self.gridcells.iteritems():
|
||||||
for y in range(y1, y2+1):
|
if x1 <= x <= x2 and y1 <= y <= y2:
|
||||||
gridcell = self.gridcells.get((x, y))
|
cell['bg'] = 'lightBlue'
|
||||||
if gridcell is not None:
|
|
||||||
gridcell['bg'] = 'lightBlue'
|
|
||||||
gridcell = self.gridcells.get(self.currentxy)
|
gridcell = self.gridcells.get(self.currentxy)
|
||||||
if gridcell is not None:
|
if gridcell is not None:
|
||||||
gridcell['bg'] = 'yellow'
|
gridcell['bg'] = 'yellow'
|
||||||
|
self.setbeacon(x1, y1, x2, y2)
|
||||||
|
|
||||||
|
def setbeacon(self, x1, y1, x2, y2):
|
||||||
|
if x1 == y1 == 1 and x2 == y2 == sys.maxint:
|
||||||
|
name = ":"
|
||||||
|
elif (x1, x2) == (1, sys.maxint):
|
||||||
|
if y1 == y2:
|
||||||
|
name = "%d" % y1
|
||||||
|
else:
|
||||||
|
name = "%d:%d" % (y1, y2)
|
||||||
|
elif (y1, y2) == (1, sys.maxint):
|
||||||
|
if x1 == x2:
|
||||||
|
name = "%s" % colnum2name(x1)
|
||||||
|
else:
|
||||||
|
name = "%s:%s" % (colnum2name(x1), colnum2name(x2))
|
||||||
|
else:
|
||||||
name1 = cellname(*self.currentxy)
|
name1 = cellname(*self.currentxy)
|
||||||
name2 = cellname(*self.cornerxy)
|
name2 = cellname(*self.cornerxy)
|
||||||
self.beacon['text'] = "%s:%s" % (name1, name2)
|
name = "%s:%s" % (name1, name2)
|
||||||
|
self.beacon['text'] = name
|
||||||
|
|
||||||
|
|
||||||
def clearfocus(self):
|
def clearfocus(self):
|
||||||
@ -712,11 +735,9 @@ class SheetGUI:
|
|||||||
x1, x2 = x2, x1
|
x1, x2 = x2, x1
|
||||||
if y1 > y2:
|
if y1 > y2:
|
||||||
y1, y2 = y2, y1
|
y1, y2 = y2, y1
|
||||||
for x in range(x1, x2+1):
|
for (x, y), cell in self.gridcells.iteritems():
|
||||||
for y in range(y1, y2+1):
|
if x1 <= x <= x2 and y1 <= y <= y2:
|
||||||
gridcell = self.gridcells.get((x, y))
|
cell['bg'] = 'white'
|
||||||
if gridcell is not None:
|
|
||||||
gridcell['bg'] = 'white'
|
|
||||||
|
|
||||||
def return_event(self, event):
|
def return_event(self, event):
|
||||||
"Callback for the Return key."
|
"Callback for the Return key."
|
||||||
|
Loading…
x
Reference in New Issue
Block a user