diff --git a/gramps2/ChangeLog b/gramps2/ChangeLog index 1b8569b11..fc7136eb1 100644 --- a/gramps2/ChangeLog +++ b/gramps2/ChangeLog @@ -1,4 +1,7 @@ 2006-02-01 Don Allingham + * src/EditPerson.py: unused code + * src/ImgManip.py: convienence code + * src/Sources.py: DisplayManager-ize the SourceEditor * src/DisplayTabs.py: Hook up editors * src/EditFamily.py: Add _DND_TYPE * src/UrlEdit.py: Add type selector diff --git a/gramps2/src/DisplayTabs.py b/gramps2/src/DisplayTabs.py index 1569e84db..c0901ba9b 100644 --- a/gramps2/src/DisplayTabs.py +++ b/gramps2/src/DisplayTabs.py @@ -53,6 +53,7 @@ import RelLib import Utils import GrampsMime import const +import ImgManip from DdTargets import DdTargets from GrampsWidgets import SimpleButton @@ -906,17 +907,26 @@ class NoteTab(GrampsTab): GrampsTab.__init__(self, dbstate, uistate, track, _('Note')) self.show_all() + def _update_label(self,*obj): + cc = self.buf.get_char_count() + if cc == 0 and not self.empty: + self.empty = True + self._set_label() + elif cc != 0 and self.empty: + self.empty = False + self._set_label() + def is_empty(self): """ Indicates if the tab contains any data. This is used to determine how the label should be displayed. """ - buf = self.text.get_buffer() - return len(buf.get_text(buf.get_start_iter(),buf.get_end_iter())) == 0 + return self.buf.get_char_count() == 0 def build_interface(self): vbox = gtk.VBox() self.text = gtk.TextView() + self.flowed = gtk.RadioButton(None,_('Flowed')) self.format = gtk.RadioButton(self.flowed,_('Formatted')) @@ -944,8 +954,14 @@ class NoteTab(GrampsTab): vbox.pack_start(hbox,False) self.pack_start(vbox,True) + self.buf = self.text.get_buffer() if self.note_obj: - self.text.get_buffer().insert_at_cursor(self.note_obj.get()) + self.empty = False + self.buf.insert_at_cursor(self.note_obj.get()) + else: + self.empty = True + + self.buf.connect('changed',self._update_label) self.rebuild() def flow_changed(self,obj): @@ -974,6 +990,9 @@ class GalleryTab(ButtonTab): def get_icon_name(self): return 'gramps-media' + def is_empty(self): + return len(self.media_list)==0 + def build_interface(self): self.iconmodel= gtk.ListStore(gtk.gdk.Pixbuf,str) self.iconlist = gtk.IconView() @@ -995,23 +1014,11 @@ class GalleryTab(ButtonTab): for ref in self.media_list: handle = ref.get_reference_handle() obj = self.dbstate.db.get_object_from_handle(handle) - pixbuf = self.get_image(obj) + pixbuf = ImgManip.get_thumb_from_obj(obj) self.iconmodel.append(row=[pixbuf,obj.get_description()]) self.iconlist.set_model(self.iconmodel) self._set_label() - def get_image(self,obj): - import ImgManip - - mtype = obj.get_mime_type() - if mtype[0:5] == "image": - image = ImgManip.get_thumbnail_image(obj.get_path()) - else: - image = GrampsMime.find_mime_type_pixbuf(mtype) - if not image: - image = gtk.gdk.pixbuf_new_from_file(const.icon) - return image - def get_selected(self): node = self.iconlist.get_selected_items() if len(node) > 0: @@ -1062,19 +1069,28 @@ class SourceEmbedList(EmbeddedList): return ((1,0),(1,1),(1,2),(1,3)) def add_button_clicked(self,obj): - pass + from Sources import SourceEditor + + sref = RelLib.SourceRef() + SourceEditor(self.dbstate, self.uistate, self.track, sref, + self.add_callback) - def del_button_clicked(self,obj): - ref = self.get_selected() - if ref: - ref_list = self.obj.get_event_ref_list() - ref_list.remove(ref) - self.rebuild() + def add_callback(self,obj): + self.get_data().append(name) + self.changed = True + self.rebuild() def edit_button_clicked(self,obj): - ref = self.get_selected() - if ref: - print ref + from Sources import SourceEditor + + sref = self.get_selected() + if sref: + SourceEditor(self.dbstate, self.uistate, self.track, sref, + self.edit_callback) + + def edit_callback(self,name): + self.changed = True + self.rebuild() #------------------------------------------------------------------------- # diff --git a/gramps2/src/EditPerson.py b/gramps2/src/EditPerson.py index 3836e754b..953c4595d 100644 --- a/gramps2/src/EditPerson.py +++ b/gramps2/src/EditPerson.py @@ -26,10 +26,7 @@ # #------------------------------------------------------------------------- import os -import gc import locale -import ListBox -import sets from gettext import gettext as _ from cgi import escape @@ -55,14 +52,10 @@ import GrampsMime import ImageSelect import AutoComp import RelLib -import Sources -import DateEdit -import Date import DateHandler import NameDisplay import NameEdit import NoteEdit -import Spell import DisplayState import GrampsDisplay from DisplayTabs import * @@ -126,7 +119,7 @@ class EditPerson(DisplayState.ManagedWindow): self.callback = callback self.path = self.db.get_save_path() self.not_loaded = True - self.lds_not_loaded = True +# self.lds_not_loaded = True self.lists_changed = False self.pdmap = {} self.add_places = [] @@ -331,18 +324,6 @@ class EditPerson(DisplayState.ManagedWindow): data = cursor.next() cursor.close() - def get_image(self,obj): - import ImgManip - - mtype = obj.get_mime_type() - if mtype[0:5] == "image": - image = ImgManip.get_thumbnail_image(obj.get_path()) - else: - image = GrampsMime.find_mime_type_pixbuf(mtype) - if not image: - image = gtk.gdk.pixbuf_new_from_file(const.icon) - return image - def image_button_press(self,obj,event): if event.type == gtk.gdk._2BUTTON_PRESS and event.button == 1: @@ -482,10 +463,6 @@ class EditPerson(DisplayState.ManagedWindow): given = unicode(self.given.get_text()) title = unicode(self.title.get_text()) - start = self.notes_buffer.get_start_iter() - end = self.notes_buffer.get_end_iter() - text = unicode(self.notes_buffer.get_text(start, end, False)) - format = self.preform.get_active() idval = unicode(self.gid.get_text()) if idval == "": idval = None @@ -493,11 +470,6 @@ class EditPerson(DisplayState.ManagedWindow): changed = False name = self.person.get_primary_name() - for item in [ self.event_box, self.attr_box, self.addr_box, - self.name_box, self.url_box] : - if len(item.get_changed_objects()) > 0: - changed = True - #TODO#if self.complete.get_active() != self.person.get_complete_flag(): # changed = True if self.private.get_active() != self.person.get_privacy(): @@ -522,8 +494,8 @@ class EditPerson(DisplayState.ManagedWindow): changed = True if self.pname.get_note() != name.get_note(): changed = True - if not self.lds_not_loaded and self.check_lds(): - changed = True +# if not self.lds_not_loaded and self.check_lds(): +# changed = True (female,male,unknown) = _select_gender[self.gender.get_active()] @@ -535,49 +507,47 @@ class EditPerson(DisplayState.ManagedWindow): changed = True if text != self.person.get_note(): changed = True - if format != self.person.get_note_format(): - changed = True - if not self.lds_not_loaded: - if not self.lds_baptism.are_equal(self.person.get_lds_baptism()): - changed= True +# if not self.lds_not_loaded: +# if not self.lds_baptism.are_equal(self.person.get_lds_baptism()): +# changed= True - if not self.lds_endowment.are_equal(self.person.get_lds_endowment()): - changed = True +# if not self.lds_endowment.are_equal(self.person.get_lds_endowment()): +# changed = True - if not self.lds_sealing.are_equal(self.person.get_lds_sealing()): - changed = True +# if not self.lds_sealing.are_equal(self.person.get_lds_sealing()): +# changed = True return changed - def check_lds(self): - date_str = unicode(self.ldsbap_date.get_text()) - DateHandler.set_date(self.lds_baptism,date_str) - temple = _temple_names[self.ldsbap_temple.get_active()] - if const.lds_temple_codes.has_key(temple): - self.lds_baptism.set_temple(const.lds_temple_codes[temple]) - else: - self.lds_baptism.set_temple("") - self.lds_baptism.set_place_handle(self.get_place(self.ldsbapplace,1)) +# def check_lds(self): +# date_str = unicode(self.ldsbap_date.get_text()) +# DateHandler.set_date(self.lds_baptism,date_str) +# temple = _temple_names[self.ldsbap_temple.get_active()] +# if const.lds_temple_codes.has_key(temple): +# self.lds_baptism.set_temple(const.lds_temple_codes[temple]) +# else: +# self.lds_baptism.set_temple("") +# self.lds_baptism.set_place_handle(self.get_place(self.ldsbapplace,1)) - date_str = unicode(self.ldsend_date.get_text()) - DateHandler.set_date(self.lds_endowment,date_str) - temple = _temple_names[self.ldsend_temple.get_active()] - if const.lds_temple_codes.has_key(temple): - self.lds_endowment.set_temple(const.lds_temple_codes[temple]) - else: - self.lds_endowment.set_temple("") - self.lds_endowment.set_place_handle(self.get_place(self.ldsendowplace,1)) +# date_str = unicode(self.ldsend_date.get_text()) +# DateHandler.set_date(self.lds_endowment,date_str) +# temple = _temple_names[self.ldsend_temple.get_active()] +# if const.lds_temple_codes.has_key(temple): +# self.lds_endowment.set_temple(const.lds_temple_codes[temple]) +# else: +# self.lds_endowment.set_temple("") +# self.lds_endowment.set_place_handle(self.get_place(self.ldsendowplace,1)) - date_str = unicode(self.ldsseal_date.get_text()) - DateHandler.set_date(self.lds_sealing,date_str) - temple = _temple_names[self.ldsseal_temple.get_active()] - if const.lds_temple_codes.has_key(temple): - self.lds_sealing.set_temple(const.lds_temple_codes[temple]) - else: - self.lds_sealing.set_temple("") - self.lds_sealing.set_family_handle(self.ldsfam) - self.lds_sealing.set_place_handle(self.get_place(self.ldssealplace,1)) +# date_str = unicode(self.ldsseal_date.get_text()) +# DateHandler.set_date(self.lds_sealing,date_str) +# temple = _temple_names[self.ldsseal_temple.get_active()] +# if const.lds_temple_codes.has_key(temple): +# self.lds_sealing.set_temple(const.lds_temple_codes[temple]) +# else: +# self.lds_sealing.set_temple("") +# self.lds_sealing.set_family_handle(self.ldsfam) +# self.lds_sealing.set_place_handle(self.get_place(self.ldssealplace,1)) def load_photo(self,photo): """loads, scales, and displays the person's main photo""" @@ -727,33 +697,22 @@ class EditPerson(DisplayState.ManagedWindow): "the person's marriages.") ErrorDialog(msg) - start = self.notes_buffer.get_start_iter() - stop = self.notes_buffer.get_end_iter() - text = unicode(self.notes_buffer.get_text(start,stop,False)) - - if text != self.person.get_note(): - self.person.set_note(text) - - format = self.preform.get_active() - if format != self.person.get_note_format(): - self.person.set_note_format(format) - self.person.set_marker(self.marker_type_selector.get_values()) self.person.set_privacy(self.private.get_active()) - if not self.lds_not_loaded: - self.check_lds() - lds_ord = RelLib.LdsOrd(self.person.get_lds_baptism()) - if not self.lds_baptism.are_equal(lds_ord): - self.person.set_lds_baptism(self.lds_baptism) +# if not self.lds_not_loaded: +# self.check_lds() +# lds_ord = RelLib.LdsOrd(self.person.get_lds_baptism()) +# if not self.lds_baptism.are_equal(lds_ord): +# self.person.set_lds_baptism(self.lds_baptism) - lds_ord = RelLib.LdsOrd(self.person.get_lds_endowment()) - if not self.lds_endowment.are_equal(lds_ord): - self.person.set_lds_endowment(self.lds_endowment) +# lds_ord = RelLib.LdsOrd(self.person.get_lds_endowment()) +# if not self.lds_endowment.are_equal(lds_ord): +# self.person.set_lds_endowment(self.lds_endowment) - lds_ord = RelLib.LdsOrd(self.person.get_lds_sealing()) - if not self.lds_sealing.are_equal(lds_ord): - self.person.set_lds_sealing(self.lds_sealing) +# lds_ord = RelLib.LdsOrd(self.person.get_lds_sealing()) +# if not self.lds_sealing.are_equal(lds_ord): +# self.person.set_lds_sealing(self.lds_sealing) self.person.set_source_reference_list(self.srcreflist) self.update_lists() @@ -767,9 +726,6 @@ class EditPerson(DisplayState.ManagedWindow): n = self.nd.display(self.person) - for (event_ref,event) in self.event_box.get_changed_objects(): - self.db.commit_event(event,trans) - self.db.transaction_commit(trans,_("Edit Person (%s)") % n) if self.callback: self.callback(self,self.retval) @@ -812,44 +768,44 @@ class EditPerson(DisplayState.ManagedWindow): def update_name(self,name): self.write_primary_name() - def on_ldsbap_source_clicked(self,obj): - Sources.SourceSelector(self.dbstate, self.uistate, self.track, - self.lds_baptism.get_source_references(), - self,self.update_ldsbap_list) +# def on_ldsbap_source_clicked(self,obj): +# Sources.SourceSelector(self.dbstate, self.uistate, self.track, +# self.lds_baptism.get_source_references(), +# self,self.update_ldsbap_list) - def update_ldsbap_list(self,list): - self.lds_baptism.set_source_reference_list(list) - self.lists_changed = True +# def update_ldsbap_list(self,list): +# self.lds_baptism.set_source_reference_list(list) +# self.lists_changed = True - def on_ldsbap_note_clicked(self,obj): - NoteEdit.NoteEditor(self.lds_baptism,self,self.window, - readonly=self.db.readonly) +# def on_ldsbap_note_clicked(self,obj): +# NoteEdit.NoteEditor(self.lds_baptism,self,self.window, +# readonly=self.db.readonly) - def on_ldsendow_source_clicked(self,obj): - Sources.SourceSelector(self.dbstate, self.uitstate, self.track, - self.lds_endowment.get_source_references(), - self,self.set_ldsendow_list) +# def on_ldsendow_source_clicked(self,obj): +# Sources.SourceSelector(self.dbstate, self.uistate, self.track, +# self.lds_endowment.get_source_references(), +# self,self.set_ldsendow_list) - def set_ldsendow_list(self,list): - self.lds_endowment.set_source_reference_list(list) - self.lists_changed = True +# def set_ldsendow_list(self,list): +# self.lds_endowment.set_source_reference_list(list) +# self.lists_changed = True - def on_ldsendow_note_clicked(self,obj): - NoteEdit.NoteEditor(self.lds_endowment,self,self.window, - readonly=self.db.readonly) +# def on_ldsendow_note_clicked(self,obj): +# NoteEdit.NoteEditor(self.lds_endowment,self,self.window, +# readonly=self.db.readonly) - def on_ldsseal_source_clicked(self,obj): - Sources.SourceSelector(self.dbstate, self.uistate, self.track, - self.lds_sealing.get_source_references(), - self,self.lds_seal_list) +# def on_ldsseal_source_clicked(self,obj): +# Sources.SourceSelector(self.dbstate, self.uistate, self.track, +# self.lds_sealing.get_source_references(), +# self,self.lds_seal_list) - def lds_seal_list(self,list): - self.lds_sealing.set_source_reference_list(list) - self.lists_changed = True +# def lds_seal_list(self,list): +# self.lds_sealing.set_source_reference_list(list) +# self.lists_changed = True - def on_ldsseal_note_clicked(self,obj): - NoteEdit.NoteEditor(self.lds_sealing,self,self.window, - readonly=self.db.readonly) +# def on_ldsseal_note_clicked(self,obj): +# NoteEdit.NoteEditor(self.lds_sealing,self,self.window, +# readonly=self.db.readonly) def load_person_image(self): media_list = self.person.get_media_list() @@ -866,18 +822,6 @@ class EditPerson(DisplayState.ManagedWindow): else: self.load_photo(None) - def change_name(self,obj): - sel_objs = self.ntree.get_selected_objects() - if sel_objs: - old = self.pname - new = sel_objs[0] - self.nlist.remove(new) - self.nlist.append(old) - self.name_box.redraw() - self.pname = RelLib.Name(new) - self.lists_changed = True - self.write_primary_name() - def write_primary_name(self): # initial values self.suffix.set_text(self.pname.get_suffix()) @@ -888,8 +832,6 @@ class EditPerson(DisplayState.ManagedWindow): self.surname.set_text(self.pname.get_surname()) self.given.set_text(self.pname.get_first_name()) - - self.ntype_selector.set_values(self.pname.get_type()) self.title.set_text(self.pname.get_title()) def birth_dates_in_order(self,list): diff --git a/gramps2/src/ImgManip.py b/gramps2/src/ImgManip.py index 898b78d39..233636caa 100644 --- a/gramps2/src/ImgManip.py +++ b/gramps2/src/ImgManip.py @@ -162,3 +162,13 @@ def get_thumbnail_path(path,mtype=None): if not os.path.isfile(filename): set_thumbnail_image(path,mtype) return filename + +def get_thumb_from_obj(obj): + mtype = obj.get_mime_type() + if mtype[0:5] == "image": + image = get_thumbnail_image(obj.get_path()) + else: + image = GrampsMime.find_mime_type_pixbuf(mtype) + if not image: + image = gtk.gdk.pixbuf_new_from_file(const.icon) + return image diff --git a/gramps2/src/Sources.py b/gramps2/src/Sources.py index 8fdf92fc6..cdf9a6e74 100644 --- a/gramps2/src/Sources.py +++ b/gramps2/src/Sources.py @@ -537,7 +537,7 @@ class SourceEditor(DisplayState.ManagedWindow): self.source_ref.set_confidence_level(conf) self.source_ref.set_privacy(self.private.get_active()) - self.update(self.parent,self.source_ref) + self.update(self.source_ref) self.close(obj) def on_source_changed(self,obj): diff --git a/gramps2/src/gramps.glade b/gramps2/src/gramps.glade index 357ff6a61..7fb61453d 100644 --- a/gramps2/src/gramps.glade +++ b/gramps2/src/gramps.glade @@ -1720,9 +1720,6 @@ -1 False 0 - - - 1 @@ -1752,9 +1749,6 @@ -1 False 0 - - - 1 @@ -1816,9 +1810,6 @@ -1 False 0 - - - 1 @@ -16116,9 +16107,6 @@ Very High -1 False 0 - - - 0 @@ -16182,7 +16170,6 @@ Very High 0 Country: - @@ -16215,7 +16202,6 @@ Very High 0 State: - @@ -16597,6 +16583,423 @@ Very High + + + 12 + True + 5 + 7 + False + 6 + 12 + + + + True + _Date: + True + False + GTK_JUSTIFY_CENTER + False + False + 0 + 0.5 + 0 + 0 + address_start + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 0 + 1 + fill + + + + + + + True + Add_ress: + True + False + GTK_JUSTIFY_CENTER + False + False + 0 + 0.5 + 0 + 0 + street + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 1 + 2 + fill + + + + + + + True + _City/County: + True + False + GTK_JUSTIFY_CENTER + False + False + 0 + 0.5 + 0 + 0 + city + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 2 + 3 + fill + + + + + + + True + True + True + True + 0 + + True + * + False + + + 1 + 3 + 2 + 3 + + + + + + + True + _State/Province: + True + False + GTK_JUSTIFY_CENTER + False + False + 0 + 0.5 + 0 + 0 + state + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 4 + 5 + 2 + 3 + fill + + + + + + + True + _ZIP/Postal code: + True + False + GTK_JUSTIFY_CENTER + False + False + 0 + 0.5 + 0 + 0 + postal + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 3 + 4 + fill + + + + + + + True + True + True + True + 0 + + True + * + False + + + 1 + 3 + 3 + 4 + + + + + + + True + Cou_ntry: + True + False + GTK_JUSTIFY_CENTER + False + False + 0 + 0.5 + 0 + 0 + country + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 4 + 5 + 3 + 4 + fill + + + + + + + True + P_hone: + True + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + phone + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 4 + 5 + fill + + + + + + + True + True + True + True + 0 + + True + * + False + + + 1 + 3 + 4 + 5 + + + + + + + True + True + _Private record + True + GTK_RELIEF_NORMAL + True + False + False + True + + + 5 + 6 + 4 + 5 + fill + + + + + + + True + True + GTK_RELIEF_NONE + True + + + + True + 0.5 + 0.5 + 0 + 0 + + + + + 6 + 7 + 0 + 1 + fill + fill + + + + + + True + True + True + True + True + 0 + + True + * + False + + + 1 + 6 + 0 + 1 + + + + + + + True + True + True + True + 0 + + True + * + False + + + 1 + 7 + 1 + 2 + + + + + + + True + True + True + True + 0 + + True + * + False + + + 5 + 7 + 2 + 3 + + + + + + + True + True + True + True + 0 + + True + * + False + + + 5 + 7 + 3 + 4 + + + + + + 0 + True + True + + + True @@ -16608,490 +17011,6 @@ Very High False - - - 12 - True - 8 - 3 - False - 6 - 12 - - - - True - _Date: - True - False - GTK_JUSTIFY_CENTER - False - False - 0 - 0.5 - 0 - 0 - address_start - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - - - - 0 - 1 - 0 - 1 - fill - - - - - - - True - Add_ress: - True - False - GTK_JUSTIFY_CENTER - False - False - 0 - 0.5 - 0 - 0 - street - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - - - - 0 - 1 - 1 - 2 - fill - - - - - - - True - _City/County: - True - False - GTK_JUSTIFY_CENTER - False - False - 0 - 0.5 - 0 - 0 - city - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - - - - 0 - 1 - 2 - 3 - fill - - - - - - - True - _State/Province: - True - False - GTK_JUSTIFY_CENTER - False - False - 0 - 0.5 - 0 - 0 - state - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - - - - 0 - 1 - 3 - 4 - fill - - - - - - - True - Cou_ntry: - True - False - GTK_JUSTIFY_CENTER - False - False - 0 - 0.5 - 0 - 0 - country - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - - - - 0 - 1 - 4 - 5 - fill - - - - - - - True - _ZIP/Postal code: - True - False - GTK_JUSTIFY_CENTER - False - False - 0 - 0.5 - 0 - 0 - postal - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - - - - 0 - 1 - 5 - 6 - fill - - - - - - - True - True - True - True - True - 0 - - True - * - False - - - 1 - 2 - 0 - 1 - - - - - - - True - True - True - True - 0 - - True - * - False - - - 1 - 3 - 1 - 2 - - - - - - - True - True - True - True - 0 - - True - * - False - - - 1 - 3 - 2 - 3 - - - - - - - True - True - True - True - 0 - - True - * - False - - - 1 - 3 - 3 - 4 - - - - - - - True - True - True - True - 0 - - True - * - False - - - 1 - 3 - 4 - 5 - - - - - - - True - True - True - True - 0 - - True - * - False - - - 1 - 3 - 5 - 6 - - - - - - - True - P_hone: - True - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - phone - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 6 - 7 - fill - - - - - - - True - True - True - True - 0 - - True - * - False - - - 1 - 3 - 6 - 7 - - - - - - - True - True - GTK_RELIEF_NONE - True - - - - True - 0.5 - 0.5 - 0 - 0 - - - - - 2 - 3 - 0 - 1 - fill - fill - - - - - - True - True - _Private record - True - GTK_RELIEF_NORMAL - True - False - False - True - - - 1 - 3 - 7 - 8 - fill - - - - - - False - True - - - - - - True - False - 0 - - - - 0.5 - 0.5 - 0 - 0 - - - 0 - True - True - - - - - - True - General - False - True - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - tab - - - True