ListModel improvements, GenericFilter moved to GNOME 2
svn: r1188
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user