CList sorter

svn: r1018
This commit is contained in:
Don Allingham 2002-06-01 02:09:00 +00:00
parent 2c3b6a611a
commit 305917f9b3

122
gramps/src/Sorter.py Normal file
View File

@ -0,0 +1,122 @@
#! /usr/bin/python -O
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2000 Donald N. Allingham
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
#-------------------------------------------------------------------------
#
# GTK/Gnome modules
#
#-------------------------------------------------------------------------
import GTK
import gtk
#-------------------------------------------------------------------------
#
# GRAMPS modules
#
#-------------------------------------------------------------------------
import GrampsCfg
import ListColors
class Sorter:
def __init__(self, clist, column_map, key, top_window):
self.clist = clist
self.column_map = column_map
self.key = key
self.top_window = top_window
(self.col,self.sort) = GrampsCfg.get_sort_cols(self.key,0,GTK.SORT_DESCENDING)
self.change_sort(0)
self.clist.connect('click-column',self.click)
def sort_col(self):
return self.col
def sort_direction(self):
return self.sort
def click(self,obj,column):
self.change_sort(column)
def sort_list(self):
self.clist.freeze()
self.clist.sort()
self.clist.sort()
if ListColors.get_enable():
try:
loddbg = ListColors.oddbg
loddfg = ListColors.oddfg
levenbg = ListColors.evenbg
levenfg = ListColors.evenfg
cmap = self.top_window.get_colormap()
oddbg = cmap.alloc(loddbg[0],loddbg[1],loddbg[2])
oddfg = cmap.alloc(loddfg[0],loddfg[1],loddfg[2])
evenbg = cmap.alloc(levenbg[0],levenbg[1],levenbg[2])
evenfg = cmap.alloc(levenfg[0],levenfg[1],levenfg[2])
rows = self.clist.rows
for i in range(0,rows,2):
self.clist.set_background(i,oddbg)
self.clist.set_foreground(i,oddfg)
if i != rows:
self.clist.set_background(i+1,evenbg)
self.clist.set_foreground(i+1,evenfg)
except OverflowError:
pass
self.clist.thaw()
def change_sort(self,column,change=1):
try:
(sort_col,arrow) = self.column_map[column]
except:
return
for (i,a) in self.column_map:
if arrow != a:
a.hide()
arrow.show()
self.clist.set_sort_column(sort_col)
self.clist.set_sort_type(self.sort)
self.sort_list()
if change:
if self.col == column:
if self.sort == GTK.SORT_DESCENDING:
self.sort = GTK.SORT_ASCENDING
arrow.set(GTK.ARROW_DOWN,2)
else:
self.sort = GTK.SORT_DESCENDING
arrow.set(GTK.ARROW_UP,2)
else:
self.sort = GTK.SORT_ASCENDING
arrow.set(GTK.ARROW_DOWN,2)
self.col = column
if len(self.clist.selection) > 1:
row = self.clist.selection[0]
self.clist.moveto(row)
GrampsCfg.save_sort_cols(self.key,self.col,self.sort)
class ChildSorter(Sorter):
def change_sort(self,column,change=1):
Sorter.change_sort(self,column,change)
self.clist.set_reorderable(self.col == 0)