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