ListModel improvements, GenericFilter moved to GNOME 2

svn: r1188
This commit is contained in:
Don Allingham
2002-11-14 05:31:42 +00:00
parent 0869dbaa92
commit 70256ded9c
5 changed files with 1097 additions and 1197 deletions

View File

@@ -32,8 +32,8 @@ import const
from RelLib import *
import GenericFilter
import AutoComp
import intl
_ = intl.gettext
import ListModel
from intl import gettext as _
_name2list = {
_('Personal Event') : const.personalEvents,
@@ -49,7 +49,7 @@ class FilterEditor:
self.filterdb = GenericFilter.GenericFilterList(filterdb)
self.filterdb.load()
self.editor = libglade.GladeXML(const.filterFile,'filter_list')
self.editor = gtk.glade.XML(const.filterFile,'filter_list')
self.editor_top = self.editor.get_widget('filter_list')
self.filter_list = self.editor.get_widget('filters')
self.edit = self.editor.get_widget('edit')
@@ -59,24 +59,27 @@ class FilterEditor:
self.editor.signal_autoconnect({
'on_add_clicked' : self.add_new_filter,
'on_edit_clicked' : self.edit_filter,
'on_filters_select_row' : self.filter_select_row,
'on_filters_unselect_row' : self.filter_unselect_row,
'on_test_clicked' : self.test_clicked,
'on_close_clicked' : self.close_filter_editor,
'on_delete_clicked' : self.delete_filter,
})
self.clist = ListModel.ListModel(self.filter_list,
[(_('Filter'),0,150),(_('Comment'),1,150)],
self.filter_select_row,
self.edit_filter)
self.draw_filters()
def filter_select_row(self,obj,a,b,c):
self.edit.set_sensitive(1)
self.delete.set_sensitive(1)
self.test.set_sensitive(1)
def filter_unselect_row(self,obj,a,b,c):
enable = (len(obj.selection) > 0)
self.edit.set_sensitive(enable)
self.delete.set_sensitive(enable)
self.test.set_sensitive(enable)
def filter_select_row(self,obj):
store,iter = self.clist.get_selected()
if iter:
self.edit.set_sensitive(1)
self.delete.set_sensitive(1)
self.test.set_sensitive(1)
else:
self.edit.set_sensitive(0)
self.delete.set_sensitive(0)
self.test.set_sensitive(0)
def close_filter_editor(self,obj):
self.filterdb.save()
@@ -85,48 +88,44 @@ class FilterEditor:
GenericFilter.reload_system_filters()
def draw_filters(self):
row = 0
self.filter_list.freeze()
self.filter_list.clear()
self.clist.clear()
for f in self.filterdb.get_filters():
self.filter_list.append([f.get_name(),f.get_comment()])
self.filter_list.set_row_data(row,f)
row = row + 1
self.filter_list.sort()
self.filter_list.thaw()
self.clist.add([f.get_name(),f.get_comment()],f)
def add_new_filter(self,obj):
filter = GenericFilter.GenericFilter()
self.filter_editor(filter)
def edit_filter(self,obj):
sel = self.filter_list.selection
if len(sel) != 1:
return
filter = self.filter_list.get_row_data(sel[0])
self.filter_editor(GenericFilter.GenericFilter(filter))
store,iter = self.clist.get_selected()
if iter:
filter = self.clist.get_object(iter)
self.filter_editor(GenericFilter.GenericFilter(filter))
def test_clicked(self,obj):
sel = self.filter_list.selection
if len(sel) != 1:
return
filt = self.filter_list.get_row_data(sel[0])
list = filt.apply(self.db.getPersonMap().values())
ShowResults(list)
store,iter = self.clist.get_selected()
if iter:
filt = self.clist.get_object(iter)
list = filt.apply(self.db.getPersonMap().values())
ShowResults(list)
def delete_filter(self,obj):
sel = self.filter_list.selection
if len(sel) != 1:
return
filter = self.filter_list.get_row_data(sel[0])
self.filterdb.get_filters().remove(filter)
self.draw_filters()
store,iter = self.clist.get_selected()
if iter:
fil = self.clist.get_object(iter)
self.filterdb.get_filters().remove(filter)
self.draw_filters()
def filter_editor(self,filter):
self.filter = filter
self.glade = libglade.GladeXML(const.filterFile,'define_filter')
self.glade = gtk.glade.XML(const.filterFile,'define_filter')
self.top = self.glade.get_widget('define_filter')
self.rule_list = self.glade.get_widget('rule_list')
self.rlist = ListModel.ListModel(self.rule_list,
[(_('Name'),-1,150),(_('Value'),-1,150)],
self.select_row,
self.on_edit_clicked)
self.fname = self.glade.get_widget('filter_name')
self.log_not = self.glade.get_widget('logical_not')
self.log_and = self.glade.get_widget('logical_and')
@@ -139,8 +138,6 @@ class FilterEditor:
self.glade.signal_autoconnect({
'on_ok_clicked' : self.on_ok_clicked,
'on_cancel_clicked' : self.on_cancel_clicked,
'on_rule_select_row' : self.select_row,
'on_rule_unselect_row' : self.unselect_row,
'on_filter_name_changed' : self.filter_name_changed,
'on_delete_clicked' : self.on_delete_clicked,
'on_add_clicked' : self.on_add_clicked,
@@ -164,22 +161,19 @@ class FilterEditor:
name = self.fname.get_text()
self.ok.set_sensitive(len(name) != 0)
def select_row(self,obj,a,b,c):
self.edit_btn.set_sensitive(1)
self.del_btn.set_sensitive(1)
def select_row(self,obj):
store,iter = self.clist.get_selected()
if iter:
self.edit_btn.set_sensitive(1)
self.del_btn.set_sensitive(1)
else:
self.edit_btn.set_sensitive(0)
self.del_btn.set_sensitive(0)
def unselect_row(self,obj,a,b,c):
enable = (len(obj.selection) == 1)
self.edit_btn.set_sensitive(enable)
self.del_btn.set_sensitive(enable)
def draw_rules(self):
self.rule_list.clear()
row = 0
self.rlist.clear()
for r in self.filter.get_rules():
self.rule_list.append([r.trans_name(),r.display_values()])
self.rule_list.set_row_data(row,r)
row = row + 1
self.rlist.add([r.trans_name(),r.display_values()],r)
def on_cancel_clicked(self,obj):
self.top.destroy()
@@ -210,11 +204,10 @@ class FilterEditor:
self.edit_rule(None)
def on_edit_clicked(self,obj):
if len(self.rule_list.selection) != 1:
return
row = self.rule_list.selection[0]
d = self.rule_list.get_row_data(row)
self.edit_rule(d)
store,iter = self.rlist.get_selected()
if iter:
d = self.rlist.get_object(iter)
self.edit_rule(d)
def edit_rule(self,val):
self.pmap = {}
@@ -224,7 +217,7 @@ class FilterEditor:
self.pmap[p.get_title()] = p
self.active_rule = val
self.rule = libglade.GladeXML(const.filterFile,'add_rule')
self.rule = gtk.glade.XML(const.filterFile,'add_rule')
self.rule_top = self.rule.get_widget('add_rule')
self.frame = self.rule.get_widget('values')
self.rname = self.rule.get_widget('rule_name')
@@ -278,8 +271,8 @@ class FilterEditor:
t = gtk.Entry()
tlist.append(t)
t.show()
table.attach(l,0,1,pos,pos+1,gtk.gdk.FILL,0,5,5)
table.attach(t,1,2,pos,pos+1,gtk.gdk.EXPAND|gtk.gdk.FILL,0,5,5)
table.attach(l,0,1,pos,pos+1,gtk.FILL,0,5,5)
table.attach(t,1,2,pos,pos+1,gtk.EXPAND|gtk.FILL,0,5,5)
pos = pos + 1
self.notebook.append_page(table,gtk.Label(name))
self.name2page[name] = self.page_num
@@ -294,7 +287,7 @@ class FilterEditor:
if self.active_rule:
page = self.name2page[self.active_rule.name()]
self.rname.entry.set_text(self.active_rule.name())
self.notebook.set_page(page)
self.notebook.set_current_page(page)
(n,c,v,t) = self.page[page]
r = self.active_rule.values()
for i in range(0,len(t)):
@@ -305,16 +298,16 @@ class FilterEditor:
self.rule.get_widget('cancel').connect('clicked',self.rule_cancel)
def on_delete_clicked(self,obj):
if len(self.rule_list.selection) != 1:
return
row = self.rule_list.selection[0]
del self.filter.get_rules()[row]
self.draw_rules()
store,iter = self.rlist.get_selected()
if iter:
filter = self.rlist.get_object(iter)
self.filter.delete_rule(filter)
self.draw_rules()
def rule_changed(self,obj):
name = obj.get_text()
page = self.name2page[name]
self.notebook.set_page(page)
self.notebook.set_current_page(page)
def rule_ok(self,obj):
name = self.rname.entry.get_text()
@@ -324,11 +317,11 @@ class FilterEditor:
for x in t:
value_list.append(x.get_text())
new_rule = c(value_list)
if self.active_rule:
index = self.rule_list.selection[0]
self.filter.get_rules()[index] = new_rule
else:
self.filter.add_rule(new_rule)
store,iter = self.rlist.get_selected()
if iter:
rule = self.rlist.get_object(iter)
self.filter.delete_rule(rule)
self.filter.add_rule(new_rule)
self.draw_rules()
self.rule_top.destroy()
@@ -337,16 +330,18 @@ class FilterEditor:
class ShowResults:
def __init__(self,plist):
self.glade = libglade.GladeXML(const.filterFile,'test')
self.glade = gtk.glade.XML(const.filterFile,'test')
self.top = self.glade.get_widget('test')
text = self.glade.get_widget('text')
self.glade.signal_autoconnect({
'on_close_clicked' : self.close,
})
n = ""
for p in plist:
n = "%s [%s]\n" % (p.getPrimaryName().getName(),p.getId())
text.insert_defaults(n)
n = n + "%s [%s]\n" % (p.getPrimaryName().getName(),p.getId())
text.get_buffer().set_text(n)
def close(self,obj):
self.top.destroy()