2006-06-01 Don Allingham <don@gramps-project.org>
* configure.in: add FilterEditor subdir * src/DataViews/_PersonView.py: call filter editor with 'Person' argument * src/FilterEditor/_FilterEditor.py: get functional again * src/glade/rule.glade: clean up ui a bit * src/Filters/_FilterList.py: fix logical condition * src/Filters/_GenericFilter.py: fix inversion svn: r6840
This commit is contained in:
		@@ -1,3 +1,12 @@
 | 
			
		||||
2006-06-01  Don Allingham  <don@gramps-project.org>
 | 
			
		||||
	* configure.in: add FilterEditor subdir
 | 
			
		||||
	* src/DataViews/_PersonView.py: call filter editor with 'Person'
 | 
			
		||||
	argument
 | 
			
		||||
	* src/FilterEditor/_FilterEditor.py: get functional again
 | 
			
		||||
	* src/glade/rule.glade: clean up ui a bit
 | 
			
		||||
	* src/Filters/_FilterList.py: fix logical condition
 | 
			
		||||
	* src/Filters/_GenericFilter.py: fix inversion
 | 
			
		||||
 | 
			
		||||
2006-05-31  Brian Matherly  <brian@gramps-project.org>
 | 
			
		||||
	* src/plugins/vaious: upgrade to new report interface
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -193,6 +193,7 @@ src/const.py
 | 
			
		||||
src/Makefile
 | 
			
		||||
src/RelLib/Makefile
 | 
			
		||||
src/Config/Makefile
 | 
			
		||||
src/FilterEditor/Makefile
 | 
			
		||||
src/Mime/Makefile
 | 
			
		||||
src/DisplayTabs/Makefile
 | 
			
		||||
src/DisplayModels/Makefile
 | 
			
		||||
 
 | 
			
		||||
@@ -206,6 +206,7 @@ class PersonView(PageView.PersonNavView):
 | 
			
		||||
        from FilterEditor import FilterEditor
 | 
			
		||||
 | 
			
		||||
        FilterEditor(
 | 
			
		||||
            'Person',
 | 
			
		||||
            const.custom_filters,
 | 
			
		||||
            self.dbstate.db,
 | 
			
		||||
            self.uistate)
 | 
			
		||||
 
 | 
			
		||||
@@ -282,7 +282,6 @@ class MySelect(gtk.ComboBoxEntry):
 | 
			
		||||
class MyListSelect(gtk.ComboBox):
 | 
			
		||||
    
 | 
			
		||||
    def __init__(self,data_list):
 | 
			
		||||
        print data_list
 | 
			
		||||
        gtk.ComboBox.__init__(self)
 | 
			
		||||
        store = gtk.ListStore(str)
 | 
			
		||||
        self.set_model(store)
 | 
			
		||||
@@ -324,13 +323,14 @@ class MyEntry(gtk.Entry):
 | 
			
		||||
#
 | 
			
		||||
#-------------------------------------------------------------------------
 | 
			
		||||
class FilterEditor(ManagedWindow.ManagedWindow):
 | 
			
		||||
    def __init__(self, filterdb, db, uistate):
 | 
			
		||||
    def __init__(self, space, filterdb, db, uistate):
 | 
			
		||||
 | 
			
		||||
        ManagedWindow.ManagedWindow.__init__(self, uistate, [], FilterEditor)
 | 
			
		||||
        
 | 
			
		||||
        self.db = db
 | 
			
		||||
        self.filterdb = FilterList(filterdb)
 | 
			
		||||
        self.filterdb.load()
 | 
			
		||||
        self.space = space
 | 
			
		||||
 | 
			
		||||
        self.editor = gtk.glade.XML(const.rule_glade,'filter_list',"gramps")
 | 
			
		||||
        self.filter_list = self.editor.get_widget('filters')
 | 
			
		||||
@@ -338,9 +338,13 @@ class FilterEditor(ManagedWindow.ManagedWindow):
 | 
			
		||||
        self.delete = self.editor.get_widget('delete')
 | 
			
		||||
        self.test = self.editor.get_widget('test')
 | 
			
		||||
 | 
			
		||||
        self.edit.set_sensitive(False)
 | 
			
		||||
        self.delete.set_sensitive(False)
 | 
			
		||||
        self.test.set_sensitive(False)
 | 
			
		||||
 | 
			
		||||
        self.set_window(self.editor.get_widget('filter_list'),
 | 
			
		||||
                        self.editor.get_widget('title'),
 | 
			
		||||
                        _('User defined filters'))
 | 
			
		||||
                        _('%s filters') % _(self.space))
 | 
			
		||||
 | 
			
		||||
        self.editor.signal_autoconnect({
 | 
			
		||||
            'on_add_clicked' : self.add_new_filter,
 | 
			
		||||
@@ -377,48 +381,50 @@ class FilterEditor(ManagedWindow.ManagedWindow):
 | 
			
		||||
    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)
 | 
			
		||||
            self.edit.set_sensitive(True)
 | 
			
		||||
            self.delete.set_sensitive(True)
 | 
			
		||||
            self.test.set_sensitive(True)
 | 
			
		||||
        else:
 | 
			
		||||
            self.edit.set_sensitive(0)
 | 
			
		||||
            self.delete.set_sensitive(0)
 | 
			
		||||
            self.test.set_sensitive(0)
 | 
			
		||||
            self.edit.set_sensitive(False)
 | 
			
		||||
            self.delete.set_sensitive(False)
 | 
			
		||||
            self.test.set_sensitive(False)
 | 
			
		||||
    
 | 
			
		||||
    def close_filter_editor(self,obj):
 | 
			
		||||
        self.filterdb.save()
 | 
			
		||||
        self.window.destroy()
 | 
			
		||||
        reload_custom_filters()
 | 
			
		||||
        reload_system_filters()
 | 
			
		||||
        self.close()
 | 
			
		||||
        
 | 
			
		||||
    def draw_filters(self):
 | 
			
		||||
        self.clist.clear()
 | 
			
		||||
        for f in self.filterdb.get_filters():
 | 
			
		||||
        for f in self.filterdb.get_filters(self.space):
 | 
			
		||||
            self.clist.add([f.get_name(),f.get_comment()],f)
 | 
			
		||||
 | 
			
		||||
    def add_new_filter(self,obj):
 | 
			
		||||
        the_filter = GenericFilter()
 | 
			
		||||
        EditFilter(self.db, self.uistate, self.track, the_filter, self.filterdb)
 | 
			
		||||
        EditFilter(self.space, self.db, self.uistate, self.track,
 | 
			
		||||
                   the_filter, self.filterdb, self.draw_filters)
 | 
			
		||||
 | 
			
		||||
    def edit_filter(self,obj):
 | 
			
		||||
        store,iter = self.clist.get_selected()
 | 
			
		||||
        if iter:
 | 
			
		||||
            filter = self.clist.get_object(iter)
 | 
			
		||||
            EditFilter(self.db, self.uistate, self.track, filter, self.filterdb)
 | 
			
		||||
            EditFilter(self.space, self.db, self.uistate, self.track,
 | 
			
		||||
                       filter, self.filterdb, self.draw_filters)
 | 
			
		||||
 | 
			
		||||
    def test_clicked(self,obj):
 | 
			
		||||
        store,iter = self.clist.get_selected()
 | 
			
		||||
        if iter:
 | 
			
		||||
            filt = self.clist.get_object(iter)
 | 
			
		||||
            handle_list = filt.apply(self.db,self.db.get_person_handles(sort_handles=False))
 | 
			
		||||
            ShowResults(self,self.db,handle_list,filt.get_name())
 | 
			
		||||
            ShowResults(self.db, self.uistate, self.track, handle_list,
 | 
			
		||||
                        filt.get_name())
 | 
			
		||||
 | 
			
		||||
    def delete_filter(self,obj):
 | 
			
		||||
        store,iter = self.clist.get_selected()
 | 
			
		||||
        if iter:
 | 
			
		||||
            filter = self.clist.get_object(iter)
 | 
			
		||||
            self.filterdb.get_filters().remove(filter)
 | 
			
		||||
            self.filterdb.get_filters(self.space).remove(filter)
 | 
			
		||||
            self.draw_filters()
 | 
			
		||||
 | 
			
		||||
#-------------------------------------------------------------------------
 | 
			
		||||
@@ -428,10 +434,12 @@ class FilterEditor(ManagedWindow.ManagedWindow):
 | 
			
		||||
#-------------------------------------------------------------------------
 | 
			
		||||
class EditFilter(ManagedWindow.ManagedWindow):
 | 
			
		||||
    
 | 
			
		||||
    def __init__(self, db, uistate, track, filter, filterdb):
 | 
			
		||||
    def __init__(self, space, db, uistate, track, filter, filterdb, update):
 | 
			
		||||
 | 
			
		||||
        ManagedWindow.ManagedWindow.__init__(self, uistate, [], self)
 | 
			
		||||
 | 
			
		||||
        self.space = space
 | 
			
		||||
        self.update = update
 | 
			
		||||
        self.db = db
 | 
			
		||||
        self.filter = filter
 | 
			
		||||
        self.filterdb = filterdb
 | 
			
		||||
@@ -465,6 +473,7 @@ class EditFilter(ManagedWindow.ManagedWindow):
 | 
			
		||||
            "on_help_filtdef_clicked"  : self.on_help_clicked,
 | 
			
		||||
            'on_edit_clicked' : self.on_edit_clicked,
 | 
			
		||||
            })
 | 
			
		||||
        
 | 
			
		||||
        if self.filter.get_logical_op() == 'or':
 | 
			
		||||
            self.logical.set_active(1)
 | 
			
		||||
        elif self.filter.get_logical_op() == 'one':
 | 
			
		||||
@@ -492,11 +501,11 @@ class EditFilter(ManagedWindow.ManagedWindow):
 | 
			
		||||
    def select_row(self,obj):
 | 
			
		||||
        store,iter = self.rlist.get_selected()
 | 
			
		||||
        if iter:
 | 
			
		||||
            self.edit_btn.set_sensitive(1)
 | 
			
		||||
            self.del_btn.set_sensitive(1)
 | 
			
		||||
            self.edit_btn.set_sensitive(True)
 | 
			
		||||
            self.del_btn.set_sensitive(True)
 | 
			
		||||
        else:
 | 
			
		||||
            self.edit_btn.set_sensitive(0)
 | 
			
		||||
            self.del_btn.set_sensitive(0)
 | 
			
		||||
            self.edit_btn.set_sensitive(False)
 | 
			
		||||
            self.del_btn.set_sensitive(False)
 | 
			
		||||
 | 
			
		||||
    def draw_rules(self):
 | 
			
		||||
        self.rlist.clear()
 | 
			
		||||
@@ -509,31 +518,38 @@ class EditFilter(ManagedWindow.ManagedWindow):
 | 
			
		||||
            return
 | 
			
		||||
        self.filter.set_name(n)
 | 
			
		||||
        self.filter.set_comment(unicode(self.comment.get_text()).strip())
 | 
			
		||||
        for f in self.filterdb.get_filters()[:]:
 | 
			
		||||
        for f in self.filterdb.get_filters(self.space)[:]:
 | 
			
		||||
            if n == f.get_name():
 | 
			
		||||
                self.filterdb.get_filters().remove(f)
 | 
			
		||||
                self.filterdb.get_filters(self.space).remove(f)
 | 
			
		||||
                break
 | 
			
		||||
        if self.log_or.get_active():
 | 
			
		||||
        val = self.logical.get_active() 
 | 
			
		||||
        if val == 1:
 | 
			
		||||
            op = 'or'
 | 
			
		||||
        elif self.log_one.get_active():
 | 
			
		||||
        elif val == 2:
 | 
			
		||||
            op = 'one'
 | 
			
		||||
        else:
 | 
			
		||||
            op = 'and'
 | 
			
		||||
        self.filter.set_logical_op(op)
 | 
			
		||||
        self.filterdb.add(self.filter)
 | 
			
		||||
        self.parent.draw_filters()
 | 
			
		||||
        self.filterdb.add(self.space,self.filter)
 | 
			
		||||
        self.update()
 | 
			
		||||
        self.close()
 | 
			
		||||
        
 | 
			
		||||
    def on_add_clicked(self,obj):
 | 
			
		||||
        EditRule(self.db, self.uistate, self.track, self.filterdb,
 | 
			
		||||
                 None, _('Add Rule'))
 | 
			
		||||
                 None, _('Add Rule'), self.update_rule)
 | 
			
		||||
 | 
			
		||||
    def on_edit_clicked(self,obj):
 | 
			
		||||
        store,iter = self.rlist.get_selected()
 | 
			
		||||
        if iter:
 | 
			
		||||
            d = self.rlist.get_object(iter)
 | 
			
		||||
            EditRule(self.db, self.uistate, self.track, self.filterdb,
 | 
			
		||||
                     d, _('Edit Rule'))
 | 
			
		||||
                     d, _('Edit Rule'), self.update_rule)
 | 
			
		||||
 | 
			
		||||
    def update_rule(self, old_rule, new_rule):
 | 
			
		||||
        if old_rule:
 | 
			
		||||
            self.filter.delete_rule(old_rule)
 | 
			
		||||
        self.filter.add_rule(new_rule)
 | 
			
		||||
        self.draw_rules()
 | 
			
		||||
 | 
			
		||||
    def on_delete_clicked(self,obj):
 | 
			
		||||
        store,iter = self.rlist.get_selected()
 | 
			
		||||
@@ -548,12 +564,13 @@ class EditFilter(ManagedWindow.ManagedWindow):
 | 
			
		||||
#
 | 
			
		||||
#-------------------------------------------------------------------------
 | 
			
		||||
class EditRule(ManagedWindow.ManagedWindow):
 | 
			
		||||
    def __init__(self, db, uistate, track, filterdb, val, label):
 | 
			
		||||
    def __init__(self, db, uistate, track, filterdb, val, label, update):
 | 
			
		||||
 | 
			
		||||
        ManagedWindow.ManagedWindow.__init__(self, uistate, track, EditRule)
 | 
			
		||||
        
 | 
			
		||||
        self.db = db
 | 
			
		||||
        self.filterdb = filterdb
 | 
			
		||||
        self.update_rule = update
 | 
			
		||||
 | 
			
		||||
        self.active_rule = val
 | 
			
		||||
        self.rule = gtk.glade.XML(const.rule_glade,'rule_editor',"gramps")
 | 
			
		||||
@@ -609,7 +626,7 @@ class EditRule(ManagedWindow.ManagedWindow):
 | 
			
		||||
                elif v == _('Source ID:'):
 | 
			
		||||
                    t = MySource(self.db)
 | 
			
		||||
                elif v == _('Filter name:'):
 | 
			
		||||
                    t = MyFilters(self.filterdb.get_filters())
 | 
			
		||||
                    t = MyFilters(self.filterdb.get_filters(self.space))
 | 
			
		||||
                elif _name2list.has_key(v1):
 | 
			
		||||
                    data =_name2list[v1]
 | 
			
		||||
                    t = MySelect(data.values())
 | 
			
		||||
@@ -737,14 +754,10 @@ class EditRule(ManagedWindow.ManagedWindow):
 | 
			
		||||
            value_list = []
 | 
			
		||||
            for x in tlist:
 | 
			
		||||
                value_list.append(unicode(x.get_text()))
 | 
			
		||||
            store,iter = self.parent.rlist.get_selected()
 | 
			
		||||
            new_rule = class_obj(value_list)
 | 
			
		||||
            if self.active_rule:
 | 
			
		||||
                rule = self.parent.rlist.get_object(iter)
 | 
			
		||||
                self.parent.filter.delete_rule(rule)
 | 
			
		||||
            self.parent.filter.add_rule(new_rule)
 | 
			
		||||
            self.parent.draw_rules()
 | 
			
		||||
            self.window.destroy()
 | 
			
		||||
 | 
			
		||||
            self.update_rule(self.active_rule, new_rule)
 | 
			
		||||
            self.close()
 | 
			
		||||
        except KeyError:
 | 
			
		||||
            pass
 | 
			
		||||
                               
 | 
			
		||||
@@ -753,21 +766,23 @@ class EditRule(ManagedWindow.ManagedWindow):
 | 
			
		||||
#
 | 
			
		||||
#
 | 
			
		||||
#-------------------------------------------------------------------------
 | 
			
		||||
class ShowResults:
 | 
			
		||||
    def __init__(self,parent,db,handle_list,filtname):
 | 
			
		||||
        self.parent = parent
 | 
			
		||||
        self.win_key = self
 | 
			
		||||
class ShowResults(ManagedWindow.ManagedWindow):
 | 
			
		||||
    def __init__(self, db, uistate, track, handle_list, filtname):
 | 
			
		||||
 | 
			
		||||
        ManagedWindow.ManagedWindow.__init__(self, uistate, track, self)
 | 
			
		||||
 | 
			
		||||
        self.filtname = filtname
 | 
			
		||||
        self.glade = gtk.glade.XML(const.rule_glade,'test',"gramps")
 | 
			
		||||
        self.window = self.glade.get_widget('test')
 | 
			
		||||
 | 
			
		||||
        self.set_window(
 | 
			
		||||
            self.glade.get_widget('test'),
 | 
			
		||||
            self.glade.get_widget('title'),
 | 
			
		||||
            _('Filter Test'))
 | 
			
		||||
 | 
			
		||||
        text = self.glade.get_widget('text')
 | 
			
		||||
 | 
			
		||||
        Utils.set_titles(self.window, self.glade.get_widget('title'),
 | 
			
		||||
                         _('Filter Test'))
 | 
			
		||||
        
 | 
			
		||||
        self.glade.signal_autoconnect({
 | 
			
		||||
            'on_close_clicked' : self.close,
 | 
			
		||||
            "on_test_delete_event" : self.on_delete_event,
 | 
			
		||||
            'on_close_clicked' : self.close_window,
 | 
			
		||||
            })
 | 
			
		||||
 | 
			
		||||
        n = []
 | 
			
		||||
@@ -779,32 +794,10 @@ class ShowResults:
 | 
			
		||||
        n.sort ()
 | 
			
		||||
        text.get_buffer().set_text(''.join(n))
 | 
			
		||||
 | 
			
		||||
        self.window.set_transient_for(self.parent.window)
 | 
			
		||||
        self.add_itself_to_menu()
 | 
			
		||||
        self.window.show()
 | 
			
		||||
        self.show()
 | 
			
		||||
            
 | 
			
		||||
    def on_delete_event(self,obj,b):
 | 
			
		||||
        self.remove_itself_from_menu()
 | 
			
		||||
 | 
			
		||||
    def close(self,obj):
 | 
			
		||||
        self.remove_itself_from_menu()
 | 
			
		||||
        self.window.destroy()
 | 
			
		||||
 | 
			
		||||
    def add_itself_to_menu(self):
 | 
			
		||||
        self.parent.child_windows[self.win_key] = self
 | 
			
		||||
        label = self.filtname
 | 
			
		||||
        label = "%s: %s" % (_('Test'),label)
 | 
			
		||||
        self.parent_menu_item = gtk.MenuItem(label)
 | 
			
		||||
        self.parent_menu_item.connect("activate",self.present)
 | 
			
		||||
        self.parent_menu_item.show()
 | 
			
		||||
        self.parent.winsmenu.append(self.parent_menu_item)
 | 
			
		||||
 | 
			
		||||
    def remove_itself_from_menu(self):
 | 
			
		||||
        del self.parent.child_windows[self.win_key]
 | 
			
		||||
        self.parent_menu_item.destroy()
 | 
			
		||||
 | 
			
		||||
    def present(self,obj):
 | 
			
		||||
        self.window.present()
 | 
			
		||||
    def close_window(self,obj):
 | 
			
		||||
        self.close()
 | 
			
		||||
 | 
			
		||||
#-------------------------------------------------------------------------
 | 
			
		||||
#
 | 
			
		||||
 
 | 
			
		||||
@@ -57,6 +57,8 @@ class FilterList:
 | 
			
		||||
            return []
 | 
			
		||||
 | 
			
		||||
    def add(self,namespace,filt):
 | 
			
		||||
        assert(type(namespace)==str or type(namespace)==unicode)
 | 
			
		||||
        
 | 
			
		||||
        if namespace not in self.filter_namespaces.keys():
 | 
			
		||||
            self.filter_namespaces[namespace] = []
 | 
			
		||||
        self.filter_namespaces[namespace].append(filt)
 | 
			
		||||
 
 | 
			
		||||
@@ -98,13 +98,13 @@ class GenericFilter:
 | 
			
		||||
            while data:
 | 
			
		||||
                person = RelLib.Person()
 | 
			
		||||
                person.unserialize(data[1])
 | 
			
		||||
                if not task(db,person):
 | 
			
		||||
                if task(db,person):
 | 
			
		||||
                    final_list.append(data[0])
 | 
			
		||||
                data = cursor.next()
 | 
			
		||||
        else:
 | 
			
		||||
            for handle in id_list:
 | 
			
		||||
                person = db.get_person_from_handle(handle)
 | 
			
		||||
                if not task(db,person):
 | 
			
		||||
                if task(db,person):
 | 
			
		||||
                    final_list.append(handle)
 | 
			
		||||
        return final_list
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -544,74 +544,12 @@ Exactly one rule must apply</property>
 | 
			
		||||
	      <property name="visible">True</property>
 | 
			
		||||
	      <property name="can_default">True</property>
 | 
			
		||||
	      <property name="can_focus">True</property>
 | 
			
		||||
	      <property name="label">gtk-close</property>
 | 
			
		||||
	      <property name="use_stock">True</property>
 | 
			
		||||
	      <property name="relief">GTK_RELIEF_NORMAL</property>
 | 
			
		||||
	      <property name="focus_on_click">True</property>
 | 
			
		||||
	      <property name="response_id">0</property>
 | 
			
		||||
	      <property name="response_id">-7</property>
 | 
			
		||||
	      <signal name="clicked" handler="on_close_clicked"/>
 | 
			
		||||
 | 
			
		||||
	      <child>
 | 
			
		||||
		<widget class="GtkAlignment" id="alignment1">
 | 
			
		||||
		  <property name="visible">True</property>
 | 
			
		||||
		  <property name="xalign">0.5</property>
 | 
			
		||||
		  <property name="yalign">0.5</property>
 | 
			
		||||
		  <property name="xscale">0</property>
 | 
			
		||||
		  <property name="yscale">0</property>
 | 
			
		||||
		  <property name="top_padding">0</property>
 | 
			
		||||
		  <property name="bottom_padding">0</property>
 | 
			
		||||
		  <property name="left_padding">0</property>
 | 
			
		||||
		  <property name="right_padding">0</property>
 | 
			
		||||
 | 
			
		||||
		  <child>
 | 
			
		||||
		    <widget class="GtkHBox" id="hbox6">
 | 
			
		||||
		      <property name="visible">True</property>
 | 
			
		||||
		      <property name="homogeneous">False</property>
 | 
			
		||||
		      <property name="spacing">2</property>
 | 
			
		||||
 | 
			
		||||
		      <child>
 | 
			
		||||
			<widget class="GtkImage" id="image1">
 | 
			
		||||
			  <property name="visible">True</property>
 | 
			
		||||
			  <property name="stock">gtk-ok</property>
 | 
			
		||||
			  <property name="icon_size">4</property>
 | 
			
		||||
			  <property name="xalign">0.5</property>
 | 
			
		||||
			  <property name="yalign">0.5</property>
 | 
			
		||||
			  <property name="xpad">0</property>
 | 
			
		||||
			  <property name="ypad">0</property>
 | 
			
		||||
			</widget>
 | 
			
		||||
			<packing>
 | 
			
		||||
			  <property name="padding">0</property>
 | 
			
		||||
			  <property name="expand">False</property>
 | 
			
		||||
			  <property name="fill">False</property>
 | 
			
		||||
			</packing>
 | 
			
		||||
		      </child>
 | 
			
		||||
 | 
			
		||||
		      <child>
 | 
			
		||||
			<widget class="GtkLabel" id="label29">
 | 
			
		||||
			  <property name="visible">True</property>
 | 
			
		||||
			  <property name="label" translatable="yes">Apply and close</property>
 | 
			
		||||
			  <property name="use_underline">True</property>
 | 
			
		||||
			  <property name="use_markup">False</property>
 | 
			
		||||
			  <property name="justify">GTK_JUSTIFY_LEFT</property>
 | 
			
		||||
			  <property name="wrap">False</property>
 | 
			
		||||
			  <property name="selectable">False</property>
 | 
			
		||||
			  <property name="xalign">0.5</property>
 | 
			
		||||
			  <property name="yalign">0.5</property>
 | 
			
		||||
			  <property name="xpad">0</property>
 | 
			
		||||
			  <property name="ypad">0</property>
 | 
			
		||||
			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
 | 
			
		||||
			  <property name="width_chars">-1</property>
 | 
			
		||||
			  <property name="single_line_mode">False</property>
 | 
			
		||||
			  <property name="angle">0</property>
 | 
			
		||||
			</widget>
 | 
			
		||||
			<packing>
 | 
			
		||||
			  <property name="padding">0</property>
 | 
			
		||||
			  <property name="expand">False</property>
 | 
			
		||||
			  <property name="fill">False</property>
 | 
			
		||||
			</packing>
 | 
			
		||||
		      </child>
 | 
			
		||||
		    </widget>
 | 
			
		||||
		  </child>
 | 
			
		||||
		</widget>
 | 
			
		||||
	      </child>
 | 
			
		||||
	    </widget>
 | 
			
		||||
	  </child>
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user