From 8d848e0e56a38c4da1d9c47ebe2ac3e7d0a7da39 Mon Sep 17 00:00:00 2001 From: Christopher James Lahey Date: Sat, 29 Apr 2000 18:16:43 +0000 Subject: Added e_card_phone_new e_card_delivery_address_new, 2000-04-29 Christopher James Lahey * backend/ebook/e-card.c, backend/ebook/e-card.h: Added e_card_phone_new e_card_delivery_address_new, e_card_delivery_address_to_string, e_card_name_copy, e_card_name_new, e_card_name_to_string, and made e_card_name_free public. Removed some unused code. * backend/pas/pas-backend-file.c: Fixed a warning. * contact-editor/Makefile.am: Added e-contact-editor-fullname.[ch] and fullname.glade. Added e-name libs and includes. * contact-editor/e-contact-editor-fullname.c, contact-editor/e-contact-editor-fullname.h, contact-editor/fullname-strings.h, contact-editor/fullname.glade: New dialog for editing the fields of a name separately. * contact-editor/e-contact-editor.c, contact-editor/e-contact-editor.h: Create an EContactEditorFullname when you click on the Full Name button. Maintain a parsed name at all times. * gui/component/Makefile.am, gui/minicard/Makefile.am: Added e-name libs. svn path=/trunk/; revision=2683 --- addressbook/gui/contact-editor/Makefile.am | 7 +- .../gui/contact-editor/e-contact-editor-fullname.c | 214 +++++++++++ .../gui/contact-editor/e-contact-editor-fullname.h | 75 ++++ addressbook/gui/contact-editor/e-contact-editor.c | 73 +++- addressbook/gui/contact-editor/e-contact-editor.h | 2 + addressbook/gui/contact-editor/fullname-strings.h | 25 ++ addressbook/gui/contact-editor/fullname.glade | 421 +++++++++++++++++++++ 7 files changed, 809 insertions(+), 8 deletions(-) create mode 100644 addressbook/gui/contact-editor/e-contact-editor-fullname.c create mode 100644 addressbook/gui/contact-editor/e-contact-editor-fullname.h create mode 100644 addressbook/gui/contact-editor/fullname-strings.h create mode 100644 addressbook/gui/contact-editor/fullname.glade (limited to 'addressbook/gui/contact-editor') diff --git a/addressbook/gui/contact-editor/Makefile.am b/addressbook/gui/contact-editor/Makefile.am index 0a8b3a8489..a8fc308314 100644 --- a/addressbook/gui/contact-editor/Makefile.am +++ b/addressbook/gui/contact-editor/Makefile.am @@ -13,6 +13,7 @@ INCLUDES = \ -I$(top_srcdir) \ -I$(top_srcdir)/addressbook/ \ -I$(top_srcdir)/addressbook/backend \ + -I$(top_srcdir)/addressbook/ename \ -DEVOLUTION_IMAGES=\""$(imagesdir)"\" \ -DG_LOG_DOMAIN=\"contact-editor\" @@ -20,6 +21,8 @@ noinst_LIBRARIES = \ libecontacteditor.a libecontacteditor_a_SOURCES = \ + e-contact-editor-fullname.c \ + e-contact-editor-fullname.h \ e-contact-editor.c \ e-contact-editor.h @@ -31,6 +34,7 @@ contact_editor_test_SOURCES = \ contact_editor_test_LDADD = \ $(top_builddir)/addressbook/backend/ebook/libebook.la \ + $(top_builddir)/addressbook/ename/libename.la \ $(top_builddir)/libversit/libversit.la \ $(GNOMEGNORBA_LIBS) \ -lbonobo \ @@ -41,4 +45,5 @@ contact_editor_test_LDADD = \ gladedir = $(datadir)/evolution/glade glade_DATA = \ - contact-editor.glade + contact-editor.glade \ + fullname.glade diff --git a/addressbook/gui/contact-editor/e-contact-editor-fullname.c b/addressbook/gui/contact-editor/e-contact-editor-fullname.c new file mode 100644 index 0000000000..1b37280dc1 --- /dev/null +++ b/addressbook/gui/contact-editor/e-contact-editor-fullname.c @@ -0,0 +1,214 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * e-contact-editor-fullname.c + * Copyright (C) 2000 Helix Code, Inc. + * Author: Chris Lahey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include +#include +#include + +static void e_contact_editor_fullname_init (EContactEditorFullname *card); +static void e_contact_editor_fullname_class_init (EContactEditorFullnameClass *klass); +static void e_contact_editor_fullname_set_arg (GtkObject *o, GtkArg *arg, guint arg_id); +static void e_contact_editor_fullname_get_arg (GtkObject *object, GtkArg *arg, guint arg_id); +static void e_contact_editor_fullname_destroy (GtkObject *object); + +static void fill_in_info(EContactEditorFullname *editor); +static void extract_info(EContactEditorFullname *editor); + +static GnomeDialogClass *parent_class = NULL; + +/* The arguments we take */ +enum { + ARG_0, + ARG_NAME +}; + +GtkType +e_contact_editor_fullname_get_type (void) +{ + static GtkType contact_editor_fullname_type = 0; + + if (!contact_editor_fullname_type) + { + static const GtkTypeInfo contact_editor_fullname_info = + { + "EContactEditorFullname", + sizeof (EContactEditorFullname), + sizeof (EContactEditorFullnameClass), + (GtkClassInitFunc) e_contact_editor_fullname_class_init, + (GtkObjectInitFunc) e_contact_editor_fullname_init, + /* reserved_1 */ NULL, + /* reserved_2 */ NULL, + (GtkClassInitFunc) NULL, + }; + + contact_editor_fullname_type = gtk_type_unique (gnome_dialog_get_type (), &contact_editor_fullname_info); + } + + return contact_editor_fullname_type; +} + +static void +e_contact_editor_fullname_class_init (EContactEditorFullnameClass *klass) +{ + GtkObjectClass *object_class; + GnomeDialogClass *dialog_class; + + object_class = (GtkObjectClass*) klass; + dialog_class = (GnomeDialogClass *) klass; + + parent_class = gtk_type_class (gnome_dialog_get_type ()); + + gtk_object_add_arg_type ("EContactEditorFullname::name", GTK_TYPE_POINTER, + GTK_ARG_READWRITE, ARG_NAME); + + object_class->set_arg = e_contact_editor_fullname_set_arg; + object_class->get_arg = e_contact_editor_fullname_get_arg; + object_class->destroy = e_contact_editor_fullname_destroy; +} + +static void +e_contact_editor_fullname_init (EContactEditorFullname *e_contact_editor_fullname) +{ + GladeXML *gui; + GtkWidget *widget; + + gnome_dialog_append_button ( GNOME_DIALOG(e_contact_editor_fullname), + GNOME_STOCK_BUTTON_OK); + + gnome_dialog_append_button ( GNOME_DIALOG(e_contact_editor_fullname), + GNOME_STOCK_BUTTON_CANCEL); + + gtk_window_set_policy(GTK_WINDOW(e_contact_editor_fullname), TRUE, TRUE, FALSE); + + e_contact_editor_fullname->name = NULL; + gui = glade_xml_new (EVOLUTION_GLADEDIR "/fullname.glade", NULL); + e_contact_editor_fullname->gui = gui; + + widget = glade_xml_get_widget(gui, "vbox-checkfullname"); + gtk_widget_ref(widget); + gtk_container_remove(GTK_CONTAINER(widget->parent), widget); + gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (e_contact_editor_fullname)->vbox), widget, TRUE, TRUE, 0); + gtk_widget_unref(widget); +} + +void +e_contact_editor_fullname_destroy (GtkObject *object) +{ + EContactEditorFullname *e_contact_editor_fullname = E_CONTACT_EDITOR_FULLNAME(object); + + if (e_contact_editor_fullname->gui) + gtk_object_unref(GTK_OBJECT(e_contact_editor_fullname->gui)); + e_card_name_free(e_contact_editor_fullname->name); +} + +GtkWidget* +e_contact_editor_fullname_new (ECardName *name) +{ + GtkWidget *widget = GTK_WIDGET (gtk_type_new (e_contact_editor_fullname_get_type ())); + gtk_object_set (GTK_OBJECT(widget), + "name", name, + NULL); + return widget; +} + +static void +e_contact_editor_fullname_set_arg (GtkObject *o, GtkArg *arg, guint arg_id) +{ + EContactEditorFullname *e_contact_editor_fullname; + + e_contact_editor_fullname = E_CONTACT_EDITOR_FULLNAME (o); + + switch (arg_id){ + case ARG_NAME: + if (e_contact_editor_fullname->name) + e_card_name_free(e_contact_editor_fullname->name); + e_contact_editor_fullname->name = e_card_name_copy(GTK_VALUE_POINTER (*arg)); + fill_in_info(e_contact_editor_fullname); + break; + } +} + +static void +e_contact_editor_fullname_get_arg (GtkObject *object, GtkArg *arg, guint arg_id) +{ + EContactEditorFullname *e_contact_editor_fullname; + + e_contact_editor_fullname = E_CONTACT_EDITOR_FULLNAME (object); + + switch (arg_id) { + case ARG_NAME: + extract_info(e_contact_editor_fullname); + GTK_VALUE_POINTER (*arg) = e_card_name_copy(e_contact_editor_fullname->name); + break; + default: + arg->type = GTK_TYPE_INVALID; + break; + } +} + +static void +fill_in_field(EContactEditorFullname *editor, char *field, char *string) +{ + GtkEntry *entry = GTK_ENTRY(glade_xml_get_widget(editor->gui, field)); + if (entry) { + if (string) + gtk_entry_set_text(entry, string); + else + gtk_entry_set_text(entry, ""); + } +} + +static void +fill_in_info(EContactEditorFullname *editor) +{ + ECardName *name = editor->name; + if (name) { + fill_in_field(editor, "entry-title", name->prefix); + fill_in_field(editor, "entry-first", name->given); + fill_in_field(editor, "entry-middle", name->additional); + fill_in_field(editor, "entry-last", name->family); + fill_in_field(editor, "entry-suffix", name->suffix); + } +} + +static char * +extract_field(EContactEditorFullname *editor, char *field) +{ + GtkEntry *entry = GTK_ENTRY(glade_xml_get_widget(editor->gui, field)); + if (entry) + return g_strdup(gtk_entry_get_text(entry)); + else + return NULL; +} + +static void +extract_info(EContactEditorFullname *editor) +{ + ECardName *name = editor->name; + if (!name) + name = e_card_name_new(); + name->prefix = extract_field(editor, "entry-title" ); + name->given = extract_field(editor, "entry-first" ); + name->additional = extract_field(editor, "entry-middle"); + name->family = extract_field(editor, "entry-last" ); + name->suffix = extract_field(editor, "entry-suffix"); +} diff --git a/addressbook/gui/contact-editor/e-contact-editor-fullname.h b/addressbook/gui/contact-editor/e-contact-editor-fullname.h new file mode 100644 index 0000000000..409ffc72d0 --- /dev/null +++ b/addressbook/gui/contact-editor/e-contact-editor-fullname.h @@ -0,0 +1,75 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* e-contact-editor-fullname.h + * Copyright (C) 2000 Helix Code, Inc. + * Author: Chris Lahey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ +#ifndef __E_CONTACT_EDITOR_FULLNAME_H__ +#define __E_CONTACT_EDITOR_FULLNAME_H__ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#pragma } +#endif /* __cplusplus */ + +/* EContactEditorFullname - A dialog displaying information about a contact. + * + * The following arguments are available: + * + * name type read/write description + * -------------------------------------------------------------------------------- + * name ECardName * RW The card currently being edited. Returns a copy. + */ + +#define E_CONTACT_EDITOR_FULLNAME_TYPE (e_contact_editor_fullname_get_type ()) +#define E_CONTACT_EDITOR_FULLNAME(obj) (GTK_CHECK_CAST ((obj), E_CONTACT_EDITOR_FULLNAME_TYPE, EContactEditorFullname)) +#define E_CONTACT_EDITOR_FULLNAME_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_CONTACT_EDITOR_FULLNAME_TYPE, EContactEditorFullnameClass)) +#define E_IS_CONTACT_EDITOR_FULLNAME(obj) (GTK_CHECK_TYPE ((obj), E_CONTACT_EDITOR_FULLNAME_TYPE)) +#define E_IS_CONTACT_EDITOR_FULLNAME_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_CONTACT_EDITOR_FULLNAME_TYPE)) + + +typedef struct _EContactEditorFullname EContactEditorFullname; +typedef struct _EContactEditorFullnameClass EContactEditorFullnameClass; + +struct _EContactEditorFullname +{ + GnomeDialog parent; + + /* item specific fields */ + ECardName *name; + GladeXML *gui; +}; + +struct _EContactEditorFullnameClass +{ + GnomeDialogClass parent_class; +}; + + +GtkWidget *e_contact_editor_fullname_new(ECardName *name); +GtkType e_contact_editor_fullname_get_type (void); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + + +#endif /* __E_CONTACT_EDITOR_FULLNAME_H__ */ diff --git a/addressbook/gui/contact-editor/e-contact-editor.c b/addressbook/gui/contact-editor/e-contact-editor.c index 5665e0d217..a8bc443200 100644 --- a/addressbook/gui/contact-editor/e-contact-editor.c +++ b/addressbook/gui/contact-editor/e-contact-editor.c @@ -1,4 +1,3 @@ - /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* * e-contact-editor.c @@ -24,6 +23,8 @@ #include #include #include "e-contact-editor.h" +#include +#include static void e_contact_editor_init (EContactEditor *card); static void e_contact_editor_class_init (EContactEditorClass *klass); @@ -211,9 +212,7 @@ phone_entry_changed (GtkWidget *widget, EContactEditor *editor) g_free(editor->phone[editor->phone_choice[which - 1]]->number); editor->phone[editor->phone_choice[which - 1]]->number = NULL; } else { - editor->phone[editor->phone_choice[which - 1]] = g_new(ECardPhone, 1); - editor->phone[editor->phone_choice[which - 1]]->number = NULL; - editor->phone[editor->phone_choice[which - 1]]->flags = 0; + editor->phone[editor->phone_choice[which - 1]] = e_card_phone_new(); } editor->phone[editor->phone_choice[which - 1]]->number = g_strdup(string); set_fields(editor); @@ -252,14 +251,40 @@ address_text_changed (GtkWidget *widget, EContactEditor *editor) g_free(editor->address[editor->address_choice]->data); editor->address[editor->address_choice]->data = NULL; } else { - editor->address[editor->address_choice] = g_new(ECardAddrLabel, 1); - editor->address[editor->address_choice]->data = NULL; - editor->address[editor->address_choice]->flags = 0; + editor->address[editor->address_choice] = e_card_address_label_new(); } editor->address[editor->address_choice]->data = g_strdup(string); g_free(string); } +static void +name_entry_changed (GtkWidget *widget, EContactEditor *editor) +{ + char *string; + ECardName *name; + GtkEntry *entry = GTK_ENTRY(widget); + ENameWestern *western; + + name = editor->name; + if (name) + e_card_name_free(name); + + name = e_card_name_new(); + + string = gtk_entry_get_text(entry); + western = e_name_western_parse (string); + + name->prefix = g_strdup (western->prefix); + name->given = g_strdup (western->first ); + name->additional = g_strdup (western->middle); + name->family = g_strdup (western->last ); + name->suffix = g_strdup (western->suffix); + + e_name_western_free(western); + + editor->name = name; +} + static void set_entry_changed_signal_phone(EContactEditor *editor, char *id) { @@ -282,6 +307,32 @@ set_entry_changed_signals(EContactEditor *editor) widget = glade_xml_get_widget(editor->gui, "text-address"); gtk_signal_connect(GTK_OBJECT(widget), "changed", address_text_changed, editor); + widget = glade_xml_get_widget(editor->gui, "entry-fullname"); + gtk_signal_connect(GTK_OBJECT(widget), "changed", + name_entry_changed, editor); +} + +static void +full_name_clicked(GtkWidget *button, EContactEditor *editor) +{ + GnomeDialog *dialog = GNOME_DIALOG(e_contact_editor_fullname_new(editor->name)); + int result; + gtk_widget_show(GTK_WIDGET(dialog)); + gnome_dialog_close_hides (dialog, TRUE); + result = gnome_dialog_run_and_close (dialog); + if (result == 0) { + ECardName *name; + char *full_name; + gtk_object_get(GTK_OBJECT(dialog), + "name", &name, + NULL); + full_name = e_card_name_to_string(name); + gtk_entry_set_text(GTK_ENTRY(glade_xml_get_widget(editor->gui, "entry-fullname")), full_name); + g_free(full_name); + e_card_name_free(editor->name); + editor->name = e_card_name_copy(name); + } + gtk_object_unref(GTK_OBJECT(dialog)); } static void @@ -302,6 +353,9 @@ e_contact_editor_init (EContactEditor *e_contact_editor) _replace_buttons(e_contact_editor); set_entry_changed_signals(e_contact_editor); + gtk_signal_connect(GTK_OBJECT(glade_xml_get_widget(e_contact_editor->gui, "button-fullname")), "clicked", + full_name_clicked, e_contact_editor); + gtk_object_get(GTK_OBJECT(glade_xml_get_widget(gui, "text-comments")), "vadjustment", &adjustment, NULL); @@ -317,6 +371,7 @@ e_contact_editor_init (EContactEditor *e_contact_editor) e_contact_editor->email_list = NULL; e_contact_editor->phone_list = NULL; e_contact_editor->address_list = NULL; + e_contact_editor->name = NULL; for (i = 0; i < E_CONTACT_EDITOR_PHONE_ID_LAST; i++) { e_contact_editor->phone[i] = NULL; @@ -784,6 +839,7 @@ fill_in_info(EContactEditor *editor) if (card) { char *file_as; char *fname; + ECardName *name; ECardList *address_list; ECardList *phone_list; ECardList *email_list; @@ -811,6 +867,7 @@ fill_in_info(EContactEditor *editor) gtk_object_get(GTK_OBJECT(card), "file_as", &file_as, + "name", &name, "full_name", &fname, "address_label", &address_list, "phone", &phone_list, @@ -837,6 +894,8 @@ fill_in_info(EContactEditor *editor) if (fname) gtk_editable_insert_text(editable, fname, strlen(fname), &position); + + position = 0; editable = GTK_EDITABLE(glade_xml_get_widget(editor->gui, "entry-file-as")); gtk_editable_delete_text(editable, 0, -1); diff --git a/addressbook/gui/contact-editor/e-contact-editor.h b/addressbook/gui/contact-editor/e-contact-editor.h index 394d136eed..fa31e73bde 100644 --- a/addressbook/gui/contact-editor/e-contact-editor.h +++ b/addressbook/gui/contact-editor/e-contact-editor.h @@ -113,6 +113,8 @@ struct _EContactEditor ECardPhone *phone[E_CONTACT_EDITOR_PHONE_ID_LAST]; char *email[E_CONTACT_EDITOR_EMAIL_ID_LAST]; ECardAddrLabel *address[E_CONTACT_EDITOR_ADDRESS_ID_LAST]; + + ECardName *name; EContactEditorEmailId email_choice; EContactEditorPhoneId phone_choice[4]; diff --git a/addressbook/gui/contact-editor/fullname-strings.h b/addressbook/gui/contact-editor/fullname-strings.h new file mode 100644 index 0000000000..cd6b118547 --- /dev/null +++ b/addressbook/gui/contact-editor/fullname-strings.h @@ -0,0 +1,25 @@ +/* + * Translatable strings file generated by Glade. + * Add this file to your project's POTFILES.in. + * DO NOT compile it as part of your application. + */ + +gchar *s = N_("Check Full Name"); +gchar *s = N_("Title:"); +gchar *s = N_("First:"); +gchar *s = N_("Middle:"); +gchar *s = N_("Last:"); +gchar *s = N_("Suffix:"); +gchar *s = N_("\n" + "Mr.\n" + "Mrs.\n" + "Dr.\n" + ""); +gchar *s = N_("\n" + "Senior\n" + "Junior\n" + "II\n" + "III\n" + "Esquire\n" + ""); +gchar *s = N_("Show this again when name is incomplete or unclear"); diff --git a/addressbook/gui/contact-editor/fullname.glade b/addressbook/gui/contact-editor/fullname.glade new file mode 100644 index 0000000000..3f1fc58a50 --- /dev/null +++ b/addressbook/gui/contact-editor/fullname.glade @@ -0,0 +1,421 @@ + + + + + fullname + fullname + + src + pixmaps + C + True + True + True + False + False + False + True + fullname-strings.h + + + + GnomeDialog + dialog-checkfullname + False + Check Full Name + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_NONE + True + True + True + False + False + False + + + GtkVBox + GnomeDialog:vbox + vbox-container + False + 8 + + 4 + True + True + + + + GtkHButtonBox + GnomeDialog:action_area + hbuttonbox1 + GTK_BUTTONBOX_END + 8 + 85 + 27 + 7 + 0 + + 0 + False + True + GTK_PACK_END + + + + GtkButton + button1 + True + True + GNOME_STOCK_BUTTON_OK + + + + GtkButton + button2 + True + True + GNOME_STOCK_BUTTON_CANCEL + + + + + GtkVBox + vbox-checkfullname + False + 0 + + 0 + True + True + + + + GtkTable + table1 + 8 + 5 + 3 + False + 6 + 21 + + 0 + True + True + + + + GtkAccelLabel + accellabel1 + + GTK_JUSTIFY_CENTER + False + 0 + 0.5 + 0 + 0 + + 0 + 1 + 0 + 1 + 0 + 0 + False + False + False + False + True + True + + + + + GtkAccelLabel + accellabel2 + + GTK_JUSTIFY_CENTER + False + 0 + 0.5 + 0 + 0 + + 0 + 1 + 1 + 2 + 0 + 0 + False + False + False + False + True + True + + + + + GtkAccelLabel + accellabel3 + + GTK_JUSTIFY_CENTER + False + 0 + 0.5 + 0 + 0 + + 0 + 1 + 2 + 3 + 0 + 0 + False + False + False + False + True + True + + + + + GtkAccelLabel + accellabel4 + + GTK_JUSTIFY_CENTER + False + 0 + 0.5 + 0 + 0 + + 0 + 1 + 3 + 4 + 0 + 0 + False + False + False + False + True + True + + + + + GtkAccelLabel + accellabel5 + + GTK_JUSTIFY_CENTER + False + 0 + 0.5 + 0 + 0 + + 0 + 1 + 4 + 5 + 0 + 0 + False + False + False + False + True + True + + + + + GtkCombo + combo-title + False + True + False + True + False + +Mr. +Mrs. +Dr. + + + 1 + 2 + 0 + 1 + 0 + 0 + True + False + False + False + True + False + + + + GtkEntry + GtkCombo:entry + entry-title + True + True + True + 0 + + + + + + GtkCombo + combo-suffix + False + True + False + True + False + +Senior +Junior +II +III +Esquire + + + 1 + 2 + 4 + 5 + 0 + 0 + True + False + False + False + True + False + + + + GtkEntry + GtkCombo:entry + entry-suffix + True + True + True + 0 + + + + + + GtkEntry + entry-first + True + True + True + 0 + + + 1 + 3 + 1 + 2 + 0 + 0 + True + False + False + False + True + False + + + + + GtkEntry + entry-middle + True + True + True + 0 + + + 1 + 3 + 2 + 3 + 0 + 0 + True + False + False + False + True + False + + + + + GtkEntry + entry-last + True + True + True + 0 + + + 1 + 3 + 3 + 4 + 0 + 0 + True + False + False + False + True + False + + + + + + GtkVBox + vbox3 + False + 0 + + 0 + True + True + + + + GtkCheckButton + checkbutton-showagain + True + + False + True + + 0 + False + False + + + + + + + + -- cgit v1.2.3