CList sorter
svn: r1018
This commit is contained in:
parent
2c3b6a611a
commit
305917f9b3
122
gramps/src/Sorter.py
Normal file
122
gramps/src/Sorter.py
Normal 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)
|
Loading…
Reference in New Issue
Block a user