Removed Sorter.py

svn: r1162
This commit is contained in:
Don Allingham 2002-11-04 04:05:47 +00:00
parent a274422171
commit aa4b5ecbda
10 changed files with 38 additions and 559 deletions

View File

@ -47,7 +47,6 @@ import gtk.glade
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
import RelLib import RelLib
import const import const
import Sorter
import Utils import Utils
import GrampsCfg import GrampsCfg

View File

@ -1007,21 +1007,6 @@ class GrampsPreferences:
phone = self.top.get_widget("resphone").get_text() phone = self.top.get_widget("resphone").get_text()
email = self.top.get_widget("resemail").get_text() email = self.top.get_widget("resemail").get_text()
Sorter.set_enable(self.top.get_widget("enableColors").get_active())
set_bool("/gramps/color/enableColors",Sorter.get_enable())
Sorter.oddfg = self.top.get_widget(ODDFGCOLOR).get_i16()
Sorter.oddbg = self.top.get_widget(ODDBGCOLOR).get_i16()
Sorter.evenfg = self.top.get_widget(EVENFGCOLOR).get_i16()
Sorter.evenbg = self.top.get_widget(EVENBGCOLOR).get_i16()
Sorter.ancestorfg = self.top.get_widget(ANCESTORFGCOLOR).get_i16()
save_config_color(ODDFGCOLOR,Sorter.oddfg)
save_config_color(ODDBGCOLOR,Sorter.oddbg)
save_config_color(EVENFGCOLOR,Sorter.evenfg)
save_config_color(EVENBGCOLOR,Sorter.evenbg)
save_config_color(ANCESTORFGCOLOR,Sorter.ancestorfg)
set_string("/gramps/researcher/name",name) set_string("/gramps/researcher/name",name)
set_string("/gramps/researcher/addr",addr) set_string("/gramps/researcher/addr",addr)
set_string("/gramps/researcher/city",city) set_string("/gramps/researcher/city",city)

View File

@ -81,4 +81,26 @@ class ErrorDialog:
self.top.show_all() self.top.show_all()
self.top.run() self.top.run()
self.top.destroy() self.top.destroy()
class OkDialog:
def __init__(self,msg):
title = '%s - GRAMPS' % _('Error')
self.top = gtk.Dialog()
self.top.set_title(title)
label = gtk.Label(msg)
label.show()
hbox = gtk.HBox()
image = gtk.Image()
image.set_from_stock(gtk.STOCK_DIALOG_INFO,gtk.ICON_SIZE_DIALOG)
hbox.set_spacing(10)
hbox.pack_start(image)
hbox.add(label)
self.top.vbox.pack_start(hbox)
self.top.set_default_size(300,150)
self.top.add_button(gtk.STOCK_OK,0)
self.top.set_response_sensitive(0,gtk.TRUE)
self.top.show_all()
self.top.run()
self.top.destroy()

View File

@ -1,200 +0,0 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2002 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
#
"""
Provides a sorting interface to GtkCList widgets.
"""
__author__ = "Donald N. Allingham"
__version__ = "$Revision$"
#-------------------------------------------------------------------------
#
# GTK/Gnome modules
#
#-------------------------------------------------------------------------
import gtk
import gtk.gdk
#-------------------------------------------------------------------------
#
# GRAMPS modules
#
#-------------------------------------------------------------------------
import GrampsCfg
class Sorter:
"""Provides a sorting interface to a GtkCList. Instead of
providing a sorting function, the table should be built with ASCII
sorting information loaded into the table. If the sorting data
should not be visible, the column should be hidden.
Each column should have a column header that contains a
GtkArrow. The Sorter class with alter the GtkArrow based off
whether the column is sorted in ascending or descending order."""
def __init__(self, clist, column_map, key):
"""
Creates a sorter instance associated with the GtkCList.
clist - GtkCList with which the Sorter is associated
column_map - A list of tuples that assocates a column with its
sort column and the GtkArrow that should be altered
with the column.
key - text key used for storing the sort column and
direction in the configuration database.
"""
self.clist = clist
self.column_map = column_map
self.key = key
(self.col,self.sort) = GrampsCfg.get_sort_cols(self.key,0,gtk.SORT_ASCENDING)
self.change_sort(self.col,0)
#self.clist.connect('click-column',self.click)
def sort_col(self):
"""Returns the current column that is being sorted (not the acutal sort
column, but the user visable column"""
return self.col
def sort_direction(self):
"""Returns the current sort direction, either GTK.SORT_ASCENDING or
GTK.SORT_DESCENDING"""
return self.sort
def click(self,obj,column):
"""Callback function that is associated with the GtkCList, changing the
sort column"""
self.change_sort(column)
def sort_list(self):
"""
Sorts the GtkCList. If list colors have been enabled, set the foreground and
background colors of each row.
"""
self.clist.freeze()
self.clist.sort()
self.clist.sort()
if _enable:
try:
cmap = self.clist.get_colormap()
loddbg = cmap.alloc(to_signed(oddbg[0]),to_signed(oddbg[1]),
to_signed(oddbg[2]))
loddfg = cmap.alloc(to_signed(oddfg[0]),to_signed(oddfg[1]),
to_signed(oddfg[2]))
levenbg = cmap.alloc(to_signed(evenbg[0]),to_signed(evenbg[1]),
to_signed(evenbg[2]))
levenfg = cmap.alloc(to_signed(evenfg[0]),to_signed(evenfg[1]),
to_signed(evenfg[2]))
rows = self.clist.rows
for i in range(0,rows,2):
self.clist.set_background(i,loddbg)
self.clist.set_foreground(i,loddfg)
if i != rows:
self.clist.set_background(i+1,levenbg)
self.clist.set_foreground(i+1,levenfg)
except OverflowError:
pass
self.clist.thaw()
def change_sort(self,column,change=1):
"""
Changes the sort column of the GtkList if the requested column
is in the column map. If the column has changed, the sort direction
is set to ascending, if the column has not changed, the sort direction
is changed to the opposite sort direction
column - visible column that should be sorted
change - don't alter the direction
"""
return
try:
(sort_col,arrow) = self.column_map[column]
except:
return
for (i,a) in self.column_map:
if arrow != a:
a.hide()
arrow.show()
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.clist.set_sort_column(sort_col)
self.clist.set_sort_type(self.sort)
self.sort_list()
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):
"""
Derived from the basic Sorter class to allow the GtkList to be
manually reorderable by the user.
"""
def change_sort(self,column,change=1):
"""
If the column is the 0, set the list as reorderable.
"""
Sorter.change_sort(self,column,change)
self.clist.set_reorderable(self.col == 0)
#-------------------------------------------------------------------------
#
# Color management
#
#-------------------------------------------------------------------------
_enable = 0
oddbg = (0xffff,0xffff,0xffff)
evenbg = (0xffff,0xffff,0xffff)
oddfg = (0,0,0)
evenfg = (0,0,0)
ancestorfg = (0,0,0)
def to_signed(a):
if a & 0x8000:
return a - 0x10000
else:
return a
def set_enable(val):
global _enable
_enable = val
def get_enable():
return _enable

View File

@ -1,325 +0,0 @@
#
# 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 gobject
import gtk
import gtk.glade
#-------------------------------------------------------------------------
#
# gramps modules
#
#-------------------------------------------------------------------------
import const
import Utils
import Sorter
from RelLib import *
from intl import gettext as _
#-------------------------------------------------------------------------
#
# SourceSelector
#
#-------------------------------------------------------------------------
class SourceSelector:
def __init__(self,srclist,parent,update=None):
self.db = parent.db
self.parent = parent
self.orig = srclist
self.list = []
for s in self.orig:
self.list.append(SourceRef(s))
self.update=update
self.top = gtk.glade.XML(const.srcselFile,"sourcesel")
self.top.signal_autoconnect({
"destroy_passed_object" : Utils.destroy_passed_object,
"on_add_src_clicked" : self.add_src_clicked,
"on_del_src_clicked" : self.del_src_clicked,
"on_src_ok_clicked" : self.src_ok_clicked,
})
self.sourcesel = self.top.get_widget("sourcesel")
self.slist = self.top.get_widget("slist")
self.selection = self.slist.get_selection()
self.model = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING)
self.slist.set_model(self.model)
colno = 0
for title in [ (_('ID'),0,100), (_('Title'),1,150)]:
renderer = gtk.CellRendererText ()
column = gtk.TreeViewColumn (title[0], renderer, text=colno)
colno = colno + 1
column.set_clickable (gtk.TRUE)
column.set_resizable(gtk.TRUE)
column.set_sort_column_id(title[1])
column.set_min_width(title[2])
self.slist.append_column (column)
self.redraw()
self.sourcesel.show()
def redraw(self):
self.model.clear()
for s in self.list:
base = s.getBase()
iter = self.model.append()
self.model.set(iter,0,base.getId(),1,base.getTitle())
def src_ok_clicked(self,obj):
del self.orig[:]
for s in self.list:
self.orig.append(s)
if self.update:
self.update(self.orig)
Utils.destroy_passed_object(self.sourcesel)
def edit_src_clicked(self,obj):
store,iter = self.selection.get_selected()
if iter:
col = store.get_path(iter)
src = self.list[col[0]]
SourceEditor(src,self.db,self.update_clist,self)
def update_clist(self,inst,ref):
inst.redraw()
def add_src_clicked(self,obj):
src = SourceRef()
SourceEditor(src,self.db,self.add_ref,self)
def del_src_clicked(self,obj):
(store,iter) = self.selection.get_selected()
if iter:
path = store.get_path(iter)
del self.list[path[0]]
self.redraw()
def add_ref(self,inst,ref):
self.parent.lists_changed = 1
inst.list.append(ref)
inst.redraw()
#-------------------------------------------------------------------------
#
# SourceTab
#
#-------------------------------------------------------------------------
class SourceTab:
def __init__(self,srclist,parent,top,clist,add_btn,del_btn):
self.db = parent.db
self.parent = parent
self.list = srclist
self.top = top
self.slist = clist
self.selection = clist.get_selection()
self.model = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING)
colno = 0
for title in [ (_('ID'),0,100), (_('Title'),1,150)]:
renderer = gtk.CellRendererText ()
column = gtk.TreeViewColumn (title[0], renderer, text=colno)
colno = colno + 1
column.set_clickable (gtk.TRUE)
column.set_resizable(gtk.TRUE)
column.set_sort_column_id(title[1])
column.set_min_width(title[2])
self.slist.append_column (column)
self.slist.set_model(self.model)
add_btn.connect('clicked', self.add_src_clicked)
del_btn.connect('clicked', self.del_src_clicked)
self.slist.connect('button-press-event',self.double_click)
self.redraw()
def double_click(self,obj,event):
if event.type == gtk.gdk._2BUTTON_PRESS and event.button == 1:
self.edit_src_clicked(obj)
def redraw(self):
self.model.clear()
for s in self.list:
base = s.getBase()
iter = self.model.append()
self.model.set(iter,0,base.getId(),1,base.getTitle())
def update_clist(self,inst,ref):
inst.redraw()
self.parent.lists_changed = 1
def edit_src_clicked(self,obj):
store,iter = self.selection.get_selected()
if iter:
col = store.get_path(iter)
src = self.list[col[0]]
SourceEditor(src,self.db,self.update_clist,self)
def add_src_clicked(self,obj):
src = SourceRef()
SourceEditor(src,self.db,self.add_ref,self)
def add_ref(self,inst,ref):
self.parent.lists_changed = 1
inst.list.append(ref)
inst.redraw()
def del_src_clicked(self,obj):
(store,iter) = self.selection.get_selected()
if iter:
path = store.get_path(iter)
del self.list[path[0]]
self.redraw()
#-------------------------------------------------------------------------
#
# SourceEditor
#
#-------------------------------------------------------------------------
class SourceEditor:
def __init__(self,srcref,database,update=None,parent=None):
self.db = database
self.parent = parent
self.update = update
self.source_ref = srcref
self.showSource = gtk.glade.XML(const.srcselFile, "sourceDisplay")
self.showSource.signal_autoconnect({
"on_combo_insert_text" : Utils.combo_insert_text,
"on_sourceok_clicked" : self.on_sourceok_clicked,
"on_source_changed" : self.on_source_changed,
"destroy_passed_object" : Utils.destroy_passed_object
})
self.sourceDisplay = self.get_widget("sourceDisplay")
self.source_field = self.get_widget("sourceList")
self.title_menu = self.get_widget("source_title")
self.title_menu.set_data("o",self)
self.conf_menu = self.get_widget("conf")
Utils.build_confidence_menu(self.conf_menu)
self.conf_menu.set_history(srcref.getConfidence())
self.author_field = self.get_widget("sauthor")
self.pub_field = self.get_widget("spubinfo")
if self.source_ref:
self.active_source = self.source_ref.getBase()
else:
self.active_source = None
self.draw()
self.sourceDisplay.show()
def get_widget(self,name):
"""returns the widget associated with the specified name"""
return self.showSource.get_widget(name)
def draw(self):
if self.source_ref:
self.get_widget("spage").set_text(self.source_ref.getPage())
date = self.source_ref.getDate()
if date:
self.get_widget("sdate").set_text(date.getDate())
text = self.get_widget("stext")
text.get_buffer().set_text(self.source_ref.getText())
scom = self.get_widget("scomment")
scom.get_buffer().set_text(self.source_ref.getComments())
src = self.source_ref.getBase()
self.active_source = src
if src:
self.author_field.set_text(src.getAuthor())
self.pub_field.set_text(src.getPubInfo())
else:
self.author_field.set_text("")
self.pub_field.set_text("")
values = self.db.getSourceMap().values()
values.sort(by_title)
sel_child = None
list = []
for src in values:
l = gtk.Label("%s [%s]" % (src.getTitle(),src.getId()))
l.show()
l.set_alignment(0,0.5)
c = gtk.ListItem()
c.add(l)
c.set_data("s",src)
c.show()
list.append(c)
if self.active_source == src:
sel_child = c
self.title_menu.list.append_items(list)
if sel_child:
self.title_menu.list.select_child(sel_child)
def on_sourceok_clicked(self,obj):
if self.active_source != self.source_ref.getBase():
self.source_ref.setBase(self.active_source)
page = self.get_widget("spage").get_text()
date = self.get_widget("sdate").get_text()
conf = self.get_widget("conf").get_menu().get_active().get_data('a')
buffer = self.get_widget("scomment").get_buffer()
comments = buffer.get_text(buffer.get_start_iter(),
buffer.get_end_iter(),gtk.FALSE)
buffer = self.get_widget("stext").get_buffer()
text = buffer.get_text(buffer.get_start_iter(),
buffer.get_end_iter(),gtk.FALSE)
self.source_ref.setPage(page)
self.source_ref.getDate().set(date)
self.source_ref.setText(text)
self.source_ref.setComments(comments)
self.source_ref.setConfidence(conf)
if self.update:
self.update(self.parent,self.source_ref)
Utils.modified()
Utils.destroy_passed_object(obj)
def on_source_changed(self,obj):
self.active_source = obj.list.get_selection()[0].get_data("s")
if self.active_source:
self.author_field.set_text(self.active_source.getAuthor())
self.pub_field.set_text(self.active_source.getPubInfo())
#-------------------------------------------------------------------------
#
#
#
#-------------------------------------------------------------------------
def by_title(a,b):
return cmp(a.getTitle(),b.getTitle())

View File

@ -158,7 +158,7 @@ class XmlWriter:
total = person_len + family_len + place_len + source_len total = person_len + family_len + place_len + source_len
self.g.write('<?xml version="1.0" encoding="iso-8859-1"?>\n') self.g.write('<?xml version="1.0"?>\n')
self.g.write('<!DOCTYPE database SYSTEM "gramps.dtd" []>\n') self.g.write('<!DOCTYPE database SYSTEM "gramps.dtd" []>\n')
self.g.write("<database>\n") self.g.write("<database>\n")
self.g.write(" <header>\n") self.g.write(" <header>\n")

View File

@ -28,9 +28,8 @@ import gtk.glade
import const import const
import Utils import Utils
import intl from intl import gettext as _
from QuestionDialog import OkDialog
_ = intl.gettext
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
@ -79,7 +78,7 @@ class ChangeTypes:
else: else:
msg = _("%d event records were modified") % modified msg = _("%d event records were modified") % modified
gnome.ui.GnomeOkDialog(msg) OkDialog(msg)
Utils.destroy_passed_object(obj) Utils.destroy_passed_object(obj)
#------------------------------------------------------------------------ #------------------------------------------------------------------------

View File

@ -22,14 +22,14 @@
import RelLib import RelLib
import Utils import Utils
import intl from intl import gettext as _
_ = intl.gettext
import os import os
import gnome.ui import gnome.ui
import gtk import gtk
import gtk.glade import gtk.glade
from QuestionDialog import OkDialog
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
@ -145,7 +145,7 @@ class CheckIntegrity:
errors = blink + efam + photos + rel errors = blink + efam + photos + rel
if errors == 0: if errors == 0:
gnome.ui.GnomeOkDialog(_("No errors were found")) OkDialog(_("No errors were found"))
return return
text = "" text = ""

View File

@ -23,9 +23,8 @@
import RelLib import RelLib
import Utils import Utils
import soundex import soundex
import intl
import GrampsCfg import GrampsCfg
_ = intl.gettext from intl import gettext as _
import string import string
import os import os
@ -35,7 +34,6 @@ from gnome.ui import *
import gtk import gtk
import gtk.glade import gtk.glade
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
# #
@ -116,8 +114,8 @@ class Merge:
def progress_update(self,val): def progress_update(self,val):
self.progress.set_value(val) self.progress.set_value(val)
while events_pending(): while gtk.events_pending():
mainiteration() gtk.mainiteration()
def find_potentials(self,thresh): def find_potentials(self,thresh):
top = gtk.glade.XML(self.glade_file,"message") top = gtk.glade.XML(self.glade_file,"message")

View File

@ -25,12 +25,12 @@ import re
import intl import intl
import Utils import Utils
_ = intl.gettext from intl import gettext as _
import gtk import gtk
import gtk.glade import gtk.glade
from gnome.ui import * import gnome.ui
from QuestionDialog import OkDialog
_title_re = re.compile(r"^([A-Za-z][A-Za-z]+\.)\s+(.*)$") _title_re = re.compile(r"^([A-Za-z][A-Za-z]+\.)\s+(.*)$")
_nick_re = re.compile(r"(.+)[(\"](.*)[)\"]") _nick_re = re.compile(r"(.+)[(\"](.*)[)\"]")
@ -57,7 +57,7 @@ class PatchNames:
self.db = db self.db = db
self.title_list = [] self.title_list = []
self.nick_list = [] self.nick_list = []
for key in self.db.getPersonKeys(): for key in self.db.getPersonKeys():
person = self.db.getPerson(key) person = self.db.getPerson(key)
@ -72,6 +72,7 @@ class PatchNames:
self.nick_list.append((key,groups[0],groups[1])) self.nick_list.append((key,groups[0],groups[1]))
msg = "" msg = ""
if len(self.nick_list) > 0 or len(self.title_list) > 0: if len(self.nick_list) > 0 or len(self.title_list) > 0:
for (id,name,nick) in self.nick_list: for (id,name,nick) in self.nick_list:
p = self.db.getPerson(id) p = self.db.getPerson(id)
@ -93,7 +94,7 @@ class PatchNames:
}) })
self.top.get_widget("textwindow").show_string(msg) self.top.get_widget("textwindow").show_string(msg)
else: else:
GnomeOkDialog(_("No titles or nicknames were found")) OkDialog(_("No titles or nicknames were found"))
self.cb(0) self.cb(0)
def on_ok_clicked(self,obj): def on_ok_clicked(self,obj):