ground work for filters

svn: r5799
This commit is contained in:
Richard Taylor 2006-01-19 16:52:29 +00:00
parent d077387188
commit bb6b86ed01
5 changed files with 228 additions and 173 deletions

View File

@ -1,9 +1,14 @@
2006-01-17 Richard Taylor <rjt-gramps@thegrindstone.me.uk>
* src/ObjectSelector/_FamilyFilterFrame.py, src/ObjectSelector/_ObjectSelectorWindow.py
src/ObjectSelector/_PersonFilterFrame.py: ground work for filters
* src/ObjectSelector/_FilterFrameBase.py: new file
2006-01-19 Alex Roitman <shura@gramps-project.org>
* src/GrampsDb/_GrampsBSDDB.py (transaction_begin): Disconnect
unneeded secondary indices; (transaction_commit): Create new
secondary indices to replace the ones removed.
2006-01-17 Richard Taylor <rjt-gramps@thegrindstone.me.uk>
2006-01-19 Richard Taylor <rjt-gramps@thegrindstone.me.uk>
* src/ListBox.py: added import for gettext
* src/ObjectSelector/_Factories.py, src/ObjectSelector/_FamilyFrame.py
src/ObjectSelector/_ObjectFrameBase.py, src/ObjectSelector/_ObjectSelectorWindow.py

View File

@ -2,8 +2,9 @@ import gtk
import gobject
from GrampsWidgets import IntEdit
from _FilterFrameBase import FilterFrameBase
class FamilyFilterFrame(gtk.Frame):
class FamilyFilterFrame(FilterFrameBase):
__gproperties__ = {}
@ -13,9 +14,7 @@ class FamilyFilterFrame(gtk.Frame):
__default_border_width = 5
def __init__(self,dbstate,label="Filter"):
gtk.Frame.__init__(self,label)
align = gtk.Alignment()
FilterFrameBase.__init__(self,label)
# Gramps ID
id_check = gtk.CheckButton()
@ -86,65 +85,39 @@ class FamilyFilterFrame(gtk.Frame):
# table layout
table = gtk.Table(3,6,False)
table.set_row_spacings(5)
table.set_col_spacings(5)
label_col = 0
check_col = 1
control_col = 2
current_row = 0
table.attach(id_check,check_col,check_col+1,current_row,current_row+1,xoptions=False,yoptions=False)
table.attach(id_label,label_col,label_col+1,current_row,current_row+1,xoptions=gtk.FILL,yoptions=False)
table.attach(id_edit,control_col,control_col+1,current_row,current_row+1,xoptions=gtk.EXPAND|gtk.FILL,yoptions=False)
self._table.attach(id_check,self._check_col,self._check_col+1,current_row,current_row+1,xoptions=False,yoptions=False)
self._table.attach(id_label,self._label_col,self._label_col+1,current_row,current_row+1,xoptions=gtk.FILL,yoptions=False)
self._table.attach(id_edit,self._control_col,self._control_col+1,current_row,current_row+1,xoptions=gtk.EXPAND|gtk.FILL,yoptions=False)
current_row +=1
table.attach(name_check,check_col,check_col+1,current_row,current_row+1,xoptions=False,yoptions=False)
table.attach(name_label,label_col,label_col+1,current_row,current_row+1,xoptions=gtk.FILL,yoptions=False)
table.attach(name_edit,control_col,control_col+1,current_row,current_row+1,xoptions=gtk.EXPAND|gtk.FILL,yoptions=False)
self._table.attach(name_check,self._check_col,self._check_col+1,current_row,current_row+1,xoptions=False,yoptions=False)
self._table.attach(name_label,self._label_col,self._label_col+1,current_row,current_row+1,xoptions=gtk.FILL,yoptions=False)
self._table.attach(name_edit,self._control_col,self._control_col+1,current_row,current_row+1,xoptions=gtk.EXPAND|gtk.FILL,yoptions=False)
current_row +=1
table.attach(mar_check,check_col,check_col+1,current_row,current_row+1,xoptions=False,yoptions=False)
table.attach(m_label,label_col,label_col+1,current_row,current_row+1,xoptions=gtk.FILL,yoptions=False)
table.attach(m_edit,control_col,control_col+1,current_row,current_row+1,xoptions=gtk.EXPAND|gtk.FILL,yoptions=False)
self._table.attach(mar_check,self._check_col,self._check_col+1,current_row,current_row+1,xoptions=False,yoptions=False)
self._table.attach(m_label,self._label_col,self._label_col+1,current_row,current_row+1,xoptions=gtk.FILL,yoptions=False)
self._table.attach(m_edit,self._control_col,self._control_col+1,current_row,current_row+1,xoptions=gtk.EXPAND|gtk.FILL,yoptions=False)
current_row +=1
table.attach(m_inner_box,control_col,control_col+1,current_row,current_row+1,xoptions=gtk.EXPAND|gtk.FILL,yoptions=False)
self._table.attach(m_inner_box,self._control_col,self._control_col+1,current_row,current_row+1,xoptions=gtk.EXPAND|gtk.FILL,yoptions=False)
current_row +=1
table.attach(m_unknown,control_col,control_col+1,current_row,current_row+1,xoptions=gtk.EXPAND|gtk.FILL,yoptions=False)
self._table.attach(m_unknown,self._control_col,self._control_col+1,current_row,current_row+1,xoptions=gtk.EXPAND|gtk.FILL,yoptions=False)
current_row +=1
table.attach(filter_check,check_col,check_col+1,current_row,current_row+1,xoptions=False,yoptions=False)
table.attach(filter_label,label_col,label_col+1,current_row,current_row+1,xoptions=gtk.FILL,yoptions=False)
table.attach(filter_combo,control_col,control_col+1,current_row,current_row+1,xoptions=gtk.EXPAND|gtk.FILL,yoptions=False)
# Apply
apply_button = gtk.Button(stock=gtk.STOCK_APPLY)
# Outer box
outer_box = gtk.VBox()
outer_box.pack_start(table,True,True)
outer_box.pack_start(apply_button,False,False)
outer_box.set_border_width(self.__class__.__default_border_width/2)
outer_box.set_spacing(self.__class__.__default_border_width/2)
align.add(outer_box)
align.set_padding(self.__class__.__default_border_width,
self.__class__.__default_border_width,
self.__class__.__default_border_width,
self.__class__.__default_border_width)
self.add(align)
self._table.attach(filter_check,self._check_col,self._check_col+1,current_row,current_row+1,xoptions=False,yoptions=False)
self._table.attach(filter_label,self._label_col,self._label_col+1,current_row,current_row+1,xoptions=gtk.FILL,yoptions=False)
self._table.attach(filter_combo,self._control_col,self._control_col+1,current_row,current_row+1,xoptions=gtk.EXPAND|gtk.FILL,yoptions=False)
def on_apply(self,button):
pass
if gtk.pygtk_version < (2,8,0):
gobject.type_register(FamilyFilterFrame)

View File

@ -0,0 +1,73 @@
import gtk
import gobject
from GrampsWidgets import IntEdit
import GenericFilter
class FilterFrameBase(gtk.Frame):
__gproperties__ = {}
__gsignals__ = {
'apply-filter': (gobject.SIGNAL_RUN_LAST,
gobject.TYPE_NONE,
(gobject.TYPE_PYOBJECT,))
}
__default_border_width = 5
def __init__(self,dbstate,label="Filter"):
gtk.Frame.__init__(self,label)
align = gtk.Alignment()
# table layout
self._table = gtk.Table(3,6,False)
self._table.set_row_spacings(5)
self._table.set_col_spacings(5)
self._label_col = 0
self._check_col = 1
self._control_col = 2
# Apply
apply_button = gtk.Button(stock=gtk.STOCK_APPLY)
apply_button.connect('clicked',self.on_apply)
# Outer box
outer_box = gtk.VBox()
outer_box.pack_start(self._table,True,True)
outer_box.pack_start(apply_button,False,False)
outer_box.set_border_width(self.__class__.__default_border_width/2)
outer_box.set_spacing(self.__class__.__default_border_width/2)
align.add(outer_box)
align.set_padding(self.__class__.__default_border_width,
self.__class__.__default_border_width,
self.__class__.__default_border_width,
self.__class__.__default_border_width)
self.add(align)
def on_apply(self,button):
"""Build a GenericFilter object from the settings in the filter controls and
emit a 'apply-filter' signal with the GenericFilter object as the parameter."""
pass
if gtk.pygtk_version < (2,8,0):
gobject.type_register(FilterFrameBase)
if __name__ == "__main__":
w = gtk.Window()
f = PersonFilterFrame()
w.add(f)
w.show_all()
gtk.main()

View File

@ -336,7 +336,7 @@ if __name__ == "__main__":
w = ObjectSelectorWindow(dbstate=dbstate,
uistate=vm.uistate,
default_object_type = ObjectTypes.PERSON,
object_list=[ObjectTypes.PERSON])
object_list=[ObjectTypes.PERSON,ObjectTypes.FAMILY])
w.show()
w.connect("destroy", gtk.main_quit)

View File

@ -2,8 +2,10 @@ import gtk
import gobject
from GrampsWidgets import IntEdit
from _FilterFrameBase import FilterFrameBase
import GenericFilter
class PersonFilterFrame(gtk.Frame):
class PersonFilterFrame(FilterFrameBase):
__gproperties__ = {}
@ -13,198 +15,199 @@ class PersonFilterFrame(gtk.Frame):
__default_border_width = 5
def __init__(self,dbstate,label="Filter"):
gtk.Frame.__init__(self,label)
align = gtk.Alignment()
FilterFrameBase.__init__(self,label)
# Gramps ID
id_check = gtk.CheckButton()
self._id_check = gtk.CheckButton()
id_label = gtk.Label("Gramps ID")
id_label.set_alignment(xalign=0,yalign=0.5)
id_edit = gtk.Entry()
id_edit.set_sensitive(False)
self._id_edit = gtk.Entry()
self._id_edit.set_sensitive(False)
id_check.connect('toggled',lambda b: id_edit.set_sensitive(id_check.get_active()))
self._id_check.connect('toggled',lambda b: self._id_edit.set_sensitive(self._id_check.get_active()))
# Name
name_check = gtk.CheckButton()
self._name_check = gtk.CheckButton()
name_label = gtk.Label("Name")
name_label.set_alignment(xalign=0,yalign=0.5)
name_edit = gtk.Entry()
name_edit.set_sensitive(False)
self._name_edit = gtk.Entry()
self._name_edit.set_sensitive(False)
name_check.connect('toggled',lambda b: name_edit.set_sensitive(name_check.get_active()))
self._name_check.connect('toggled',lambda b: self._name_edit.set_sensitive(self._name_check.get_active()))
# Gender
gender_check = gtk.CheckButton()
self._gender_check = gtk.CheckButton()
gender_label = gtk.Label("Gender")
gender_label.set_alignment(xalign=0,yalign=0.5)
gender_combo = gtk.combo_box_new_text()
gender_combo.append_text("Male")
gender_combo.append_text("Female")
gender_combo.append_text("Unknown")
gender_combo.set_active(2)
gender_combo.set_sensitive(False)
self._gender_combo = gtk.combo_box_new_text()
self._gender_combo.append_text("Male")
self._gender_combo.append_text("Female")
self._gender_combo.append_text("Unknown")
self._gender_combo.set_active(2)
self._gender_combo.set_sensitive(False)
gender_check.connect('toggled',lambda b: gender_combo.set_sensitive(gender_check.get_active()))
self._gender_check.connect('toggled',lambda b: self._gender_combo.set_sensitive(self._gender_check.get_active()))
# Birth
birth_check = gtk.CheckButton()
birth_check.set_alignment(xalign=0,yalign=0)
self._birth_check = gtk.CheckButton()
self._birth_check.set_alignment(xalign=0,yalign=0)
b_label = gtk.Label("Birth Year")
b_label.set_alignment(xalign=0,yalign=0)
b_edit = IntEdit()
b_edit.set_sensitive(False)
self._b_edit = IntEdit()
self._b_edit.set_sensitive(False)
b_before = gtk.RadioButton(group=None,label="Before")
b_before.set_sensitive(False)
self._b_before = gtk.RadioButton(group=None,label="Before")
self._b_before.set_sensitive(False)
b_after = gtk.RadioButton(b_before,"After")
b_after.set_sensitive(False)
b_before.set_active(True)
self._b_after = gtk.RadioButton(self._b_before,"After")
self._b_after.set_sensitive(False)
self._b_before.set_active(True)
b_unknown = gtk.CheckButton("Include Unknown")
b_unknown.set_sensitive(False)
b_unknown.set_active(True)
self._b_unknown = gtk.CheckButton("Include Unknown")
self._b_unknown.set_sensitive(False)
self._b_unknown.set_active(True)
birth_check.connect('toggled',lambda b: b_edit.set_sensitive(birth_check.get_active()))
birth_check.connect('toggled',lambda b: b_before.set_sensitive(birth_check.get_active()))
birth_check.connect('toggled',lambda b: b_after.set_sensitive(birth_check.get_active()))
birth_check.connect('toggled',lambda b: b_unknown.set_sensitive(birth_check.get_active()))
self._birth_check.connect('toggled',lambda b: self._b_edit.set_sensitive(self._birth_check.get_active()))
self._birth_check.connect('toggled',lambda b: self._b_before.set_sensitive(self._birth_check.get_active()))
self._birth_check.connect('toggled',lambda b: self._b_after.set_sensitive(self._birth_check.get_active()))
self._birth_check.connect('toggled',lambda b: self._b_unknown.set_sensitive(self._birth_check.get_active()))
b_inner_box = gtk.HBox()
b_inner_box.pack_start(b_before)
b_inner_box.pack_start(b_after)
self._b_inner_box = gtk.HBox()
self._b_inner_box.pack_start(self._b_before)
self._b_inner_box.pack_start(self._b_after)
# Death
death_check = gtk.CheckButton()
self._death_check = gtk.CheckButton()
d_label = gtk.Label("Death Year")
d_label.set_alignment(xalign=0,yalign=0)
d_edit = IntEdit()
d_edit.set_sensitive(False)
self._d_edit = IntEdit()
self._d_edit.set_sensitive(False)
d_before = gtk.RadioButton(group=None,label="Before")
d_before.set_sensitive(False)
self._d_before = gtk.RadioButton(group=None,label="Before")
self._d_before.set_sensitive(False)
d_after = gtk.RadioButton(d_before,"After")
d_after.set_sensitive(False)
self._d_after = gtk.RadioButton(self._d_before,"After")
self._d_after.set_sensitive(False)
d_before.set_active(True)
d_before.set_sensitive(False)
self._d_before.set_active(True)
self._d_before.set_sensitive(False)
d_unknown = gtk.CheckButton("Include Unknown")
d_unknown.set_sensitive(False)
d_unknown.set_active(True)
self._d_unknown = gtk.CheckButton("Include Unknown")
self._d_unknown.set_sensitive(False)
self._d_unknown.set_active(True)
death_check.connect('toggled',lambda b: d_edit.set_sensitive(death_check.get_active()))
death_check.connect('toggled',lambda b: d_before.set_sensitive(death_check.get_active()))
death_check.connect('toggled',lambda b: d_after.set_sensitive(death_check.get_active()))
death_check.connect('toggled',lambda b: d_unknown.set_sensitive(death_check.get_active()))
self._death_check.connect('toggled',lambda b: self._d_edit.set_sensitive(self._death_check.get_active()))
self._death_check.connect('toggled',lambda b: self._d_before.set_sensitive(self._death_check.get_active()))
self._death_check.connect('toggled',lambda b: self._d_after.set_sensitive(self._death_check.get_active()))
self._death_check.connect('toggled',lambda b: self._d_unknown.set_sensitive(self._death_check.get_active()))
d_inner_box = gtk.HBox()
d_inner_box.pack_start(d_before)
d_inner_box.pack_start(d_after)
d_inner_box.pack_start(self._d_before)
d_inner_box.pack_start(self._d_after)
# Filter
filter_check = gtk.CheckButton()
self._filter_check = gtk.CheckButton()
filter_label = gtk.Label("Filter")
filter_label.set_alignment(xalign=0,yalign=0.5)
filter_combo = gtk.combo_box_new_text()
filter_combo.append_text("Male")
filter_combo.append_text("Female")
filter_combo.append_text("Unknown")
filter_combo.set_active(2)
filter_combo.set_sensitive(False)
self._filter_combo = gtk.combo_box_new_text()
self._filter_combo.append_text("Male")
self._filter_combo.append_text("Female")
self._filter_combo.append_text("Unknown")
self._filter_combo.set_active(2)
self._filter_combo.set_sensitive(False)
filter_check.connect('toggled',lambda b: filter_combo.set_sensitive(filter_check.get_active()))
self._filter_check.connect('toggled',lambda b: self._filter_combo.set_sensitive(self._filter_check.get_active()))
# table layout
table = gtk.Table(3,6,False)
table.set_row_spacings(5)
table.set_col_spacings(5)
label_col = 0
check_col = 1
control_col = 2
current_row = 0
table.attach(id_check,check_col,check_col+1,current_row,current_row+1,xoptions=False,yoptions=False)
table.attach(id_label,label_col,label_col+1,current_row,current_row+1,xoptions=gtk.FILL,yoptions=False)
table.attach(id_edit,control_col,control_col+1,current_row,current_row+1,xoptions=gtk.EXPAND|gtk.FILL,yoptions=False)
self._table.attach(self._id_check,self._check_col,self._check_col+1,
current_row,current_row+1,xoptions=False,yoptions=False)
self._table.attach(id_label,self._label_col,self._label_col+1,
current_row,current_row+1,xoptions=gtk.FILL,yoptions=False)
self._table.attach(self._id_edit,self._control_col,self._control_col+1,
current_row,current_row+1,xoptions=gtk.EXPAND|gtk.FILL,yoptions=False)
current_row +=1
table.attach(name_check,check_col,check_col+1,current_row,current_row+1,xoptions=False,yoptions=False)
table.attach(name_label,label_col,label_col+1,current_row,current_row+1,xoptions=gtk.FILL,yoptions=False)
table.attach(name_edit,control_col,control_col+1,current_row,current_row+1,xoptions=gtk.EXPAND|gtk.FILL,yoptions=False)
self._table.attach(self._name_check,self._check_col,self._check_col+1,
current_row,current_row+1,xoptions=False,yoptions=False)
self._table.attach(name_label,self._label_col,self._label_col+1,
current_row,current_row+1,xoptions=gtk.FILL,yoptions=False)
self._table.attach(self._name_edit,self._control_col,self._control_col+1,
current_row,current_row+1,xoptions=gtk.EXPAND|gtk.FILL,yoptions=False)
current_row +=1
table.attach(gender_check,check_col,check_col+1,current_row,current_row+1,xoptions=False,yoptions=False)
table.attach(gender_label,label_col,label_col+1,current_row,current_row+1,xoptions=gtk.FILL,yoptions=False)
table.attach(gender_combo,control_col,control_col+1,current_row,current_row+1,xoptions=gtk.EXPAND|gtk.FILL,yoptions=False)
self._table.attach(self._gender_check,self._check_col,self._check_col+1,
current_row,current_row+1,xoptions=False,yoptions=False)
self._table.attach(gender_label,self._label_col,self._label_col+1,
current_row,current_row+1,xoptions=gtk.FILL,yoptions=False)
self._table.attach(self._gender_combo,self._control_col,self._control_col+1,
current_row,current_row+1,xoptions=gtk.EXPAND|gtk.FILL,yoptions=False)
current_row +=1
table.attach(birth_check,check_col,check_col+1,current_row,current_row+1,xoptions=False,yoptions=False)
table.attach(b_label,label_col,label_col+1,current_row,current_row+1,xoptions=gtk.FILL,yoptions=False)
table.attach(b_edit,control_col,control_col+1,current_row,current_row+1,xoptions=gtk.EXPAND|gtk.FILL,yoptions=False)
self._table.attach(self._birth_check,self._check_col,self._check_col+1,
current_row,current_row+1,xoptions=False,yoptions=False)
self._table.attach(b_label,self._label_col,self._label_col+1,
current_row,current_row+1,xoptions=gtk.FILL,yoptions=False)
self._table.attach(self._b_edit,self._control_col,self._control_col+1,
current_row,current_row+1,xoptions=gtk.EXPAND|gtk.FILL,yoptions=False)
current_row +=1
table.attach(b_inner_box,control_col,control_col+1,current_row,current_row+1,xoptions=gtk.EXPAND|gtk.FILL,yoptions=False)
self._table.attach(self._b_inner_box,self._control_col,self._control_col+1,
current_row,current_row+1,xoptions=gtk.EXPAND|gtk.FILL,yoptions=False)
current_row +=1
table.attach(b_unknown,control_col,control_col+1,current_row,current_row+1,xoptions=gtk.EXPAND|gtk.FILL,yoptions=False)
self._table.attach(self._b_unknown,self._control_col,self._control_col+1,
current_row,current_row+1,xoptions=gtk.EXPAND|gtk.FILL,yoptions=False)
current_row +=1
table.attach(death_check,check_col,check_col+1,current_row,current_row+1,xoptions=False,yoptions=False)
table.attach(d_label,label_col,label_col+1,current_row,current_row+1,xoptions=gtk.FILL,yoptions=False)
table.attach(d_edit,control_col,control_col+1,current_row,current_row+1,xoptions=gtk.EXPAND|gtk.FILL,yoptions=False)
self._table.attach(self._death_check,self._check_col,self._check_col+1,
current_row,current_row+1,xoptions=False,yoptions=False)
self._table.attach(d_label,self._label_col,self._label_col+1,current_row,
current_row+1,xoptions=gtk.FILL,yoptions=False)
self._table.attach(self._d_edit,self._control_col,self._control_col+1,
current_row,current_row+1,xoptions=gtk.EXPAND|gtk.FILL,yoptions=False)
current_row +=1
table.attach(d_inner_box,control_col,control_col+1,current_row,current_row+1,xoptions=gtk.EXPAND|gtk.FILL,yoptions=False)
self._table.attach(d_inner_box,self._control_col,self._control_col+1,
current_row,current_row+1,xoptions=gtk.EXPAND|gtk.FILL,yoptions=False)
current_row +=1
table.attach(d_unknown,control_col,control_col+1,current_row,current_row+1,xoptions=gtk.EXPAND|gtk.FILL,yoptions=False)
self._table.attach(self._d_unknown,self._control_col,self._control_col+1,
current_row,current_row+1,xoptions=gtk.EXPAND|gtk.FILL,yoptions=False)
current_row +=1
table.attach(filter_check,check_col,check_col+1,current_row,current_row+1,xoptions=False,yoptions=False)
table.attach(filter_label,label_col,label_col+1,current_row,current_row+1,xoptions=gtk.FILL,yoptions=False)
table.attach(filter_combo,control_col,control_col+1,current_row,current_row+1,xoptions=gtk.EXPAND|gtk.FILL,yoptions=False)
self._table.attach(self._filter_check,self._check_col,self._check_col+1,
current_row,current_row+1,xoptions=False,yoptions=False)
self._table.attach(filter_label,self._label_col,self._label_col+1,
current_row,current_row+1,xoptions=gtk.FILL,yoptions=False)
self._table.attach(self._filter_combo,self._control_col,self._control_col+1,
current_row,current_row+1,xoptions=gtk.EXPAND|gtk.FILL,yoptions=False)
# Apply
apply_button = gtk.Button(stock=gtk.STOCK_APPLY)
# Outer box
outer_box = gtk.VBox()
outer_box.pack_start(table,True,True)
outer_box.pack_start(apply_button,False,False)
outer_box.set_border_width(self.__class__.__default_border_width/2)
outer_box.set_spacing(self.__class__.__default_border_width/2)
align.add(outer_box)
align.set_padding(self.__class__.__default_border_width,
self.__class__.__default_border_width,
self.__class__.__default_border_width,
self.__class__.__default_border_width)
self.add(align)
def on_apply(self,button):
filter = GenericFilter.GenericFilter()
if self._id_check.get_active():
filter.add_rule(GenericFilter.HasIdOf([self._id_edit.get_text()]))
self.emit('apply-filter',filter)
if gtk.pygtk_version < (2,8,0):
gobject.type_register(PersonFilterFrame)
@ -214,6 +217,7 @@ if __name__ == "__main__":
w = gtk.Window()
f = PersonFilterFrame()
w.add(f)
w.show_all()
gtk.main()