aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Lahey <clahey@src.gnome.org>2000-01-21 08:35:45 +0800
committerChris Lahey <clahey@src.gnome.org>2000-01-21 08:35:45 +0800
commit07af9adcd6731f65e158d8807e85a19dab7bb736 (patch)
treed06237f56820a6c4bd8200be622559b101fa6a2f
parent73107b49d42b02754e6facd890c3ed16eebe0a47 (diff)
downloadgsoc2013-evolution-07af9adcd6731f65e158d8807e85a19dab7bb736.tar
gsoc2013-evolution-07af9adcd6731f65e158d8807e85a19dab7bb736.tar.gz
gsoc2013-evolution-07af9adcd6731f65e158d8807e85a19dab7bb736.tar.bz2
gsoc2013-evolution-07af9adcd6731f65e158d8807e85a19dab7bb736.tar.lz
gsoc2013-evolution-07af9adcd6731f65e158d8807e85a19dab7bb736.tar.xz
gsoc2013-evolution-07af9adcd6731f65e158d8807e85a19dab7bb736.tar.zst
gsoc2013-evolution-07af9adcd6731f65e158d8807e85a19dab7bb736.zip
Changed some line spacing.
* widgets/e-text-event-processor-types.h: Changed some line spacing. * widgets/test-reflow.c: Connected to the resize signal of the reflow. * widgets/e-minicard.c: Made width argument set function only update if width is different. * widgets/e-reflow.h, widgets/e-reflow.c: Added draggable column dividers. * addressbook/contact-editor/test-editor.c: Open two dialogs for more interesting testing. * addressbook/contact-editor/e-contact-editor.h, addressbook/contact-editor/e-contact-editor.c: Modified to use glade. Added menus to change which phone/address/email entries to view. Added images to the dialog. * addressbook/contact-editor/e-contact-editor-strings.h, addressbook/contact-editor/contact-editor.glade: Glade files for the contact editor dialog. * addressbook/contact-editor/Makefile.am: Added images and added glade stuff. * addressbook/contact-editor/arrow.png, addressbook/contact-editor/briefcase.png, addressbook/contact-editor/netfreebusy.png, addressbook/contact-editor/netmeeting.png: Image files for the contact editor dialog. svn path=/trunk/; revision=1599
-rw-r--r--ChangeLog34
-rw-r--r--addressbook/contact-editor/Makefile.am17
-rw-r--r--addressbook/contact-editor/arrow.pngbin0 -> 122 bytes
-rw-r--r--addressbook/contact-editor/briefcase.pngbin0 -> 390 bytes
-rw-r--r--addressbook/contact-editor/contact-editor.glade2198
-rw-r--r--addressbook/contact-editor/e-contact-editor-strings.h48
-rw-r--r--addressbook/contact-editor/e-contact-editor.c676
-rw-r--r--addressbook/contact-editor/e-contact-editor.h16
-rw-r--r--addressbook/contact-editor/netfreebusy.pngbin0 -> 755 bytes
-rw-r--r--addressbook/contact-editor/netmeeting.pngbin0 -> 803 bytes
-rw-r--r--addressbook/contact-editor/test-editor.c22
-rw-r--r--addressbook/gui/contact-editor/Makefile.am17
-rw-r--r--addressbook/gui/contact-editor/arrow.pngbin0 -> 122 bytes
-rw-r--r--addressbook/gui/contact-editor/briefcase.pngbin0 -> 390 bytes
-rw-r--r--addressbook/gui/contact-editor/contact-editor.glade2198
-rw-r--r--addressbook/gui/contact-editor/e-contact-editor-strings.h48
-rw-r--r--addressbook/gui/contact-editor/e-contact-editor.c676
-rw-r--r--addressbook/gui/contact-editor/e-contact-editor.h16
-rw-r--r--addressbook/gui/contact-editor/netfreebusy.pngbin0 -> 755 bytes
-rw-r--r--addressbook/gui/contact-editor/netmeeting.pngbin0 -> 803 bytes
-rw-r--r--addressbook/gui/contact-editor/test-editor.c22
-rw-r--r--addressbook/gui/minicard/e-minicard.c8
-rw-r--r--addressbook/gui/minicard/e-reflow.c175
-rw-r--r--addressbook/gui/minicard/e-reflow.h6
-rw-r--r--addressbook/gui/minicard/test-reflow.c19
-rw-r--r--addressbook/gui/widgets/e-minicard.c8
-rw-r--r--addressbook/gui/widgets/test-reflow.c19
-rw-r--r--e-util/e-text-event-processor-types.h2
-rw-r--r--widgets/e-minicard.c8
-rw-r--r--widgets/e-minicard/e-minicard.c8
-rw-r--r--widgets/e-minicard/e-reflow.c175
-rw-r--r--widgets/e-minicard/e-reflow.h6
-rw-r--r--widgets/e-minicard/test-reflow.c19
-rw-r--r--widgets/e-reflow.c175
-rw-r--r--widgets/e-reflow.h6
-rw-r--r--widgets/e-reflow/e-reflow.c175
-rw-r--r--widgets/e-reflow/e-reflow.h6
-rw-r--r--widgets/e-text-event-processor-types.h2
-rw-r--r--widgets/e-text/e-text-event-processor-types.h2
-rw-r--r--widgets/misc/e-reflow.c175
-rw-r--r--widgets/misc/e-reflow.h6
-rw-r--r--widgets/test-reflow.c19
-rw-r--r--widgets/text/e-text-event-processor-types.h2
43 files changed, 6388 insertions, 621 deletions
diff --git a/ChangeLog b/ChangeLog
index 39b8d3e2aa..027d2f34bc 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,37 @@
+2000-01-20 Christopher James Lahey <clahey@helixcode.com>
+
+ * widgets/e-text-event-processor-types.h: Changed some line
+ spacing.
+
+ * widgets/test-reflow.c: Connected to the resize signal of the
+ reflow.
+
+ * widgets/e-minicard.c: Made width argument set function only
+ update if width is different.
+
+ * widgets/e-reflow.h, widgets/e-reflow.c: Added draggable column dividers.
+
+ * addressbook/contact-editor/test-editor.c: Open two dialogs for
+ more interesting testing.
+
+ * addressbook/contact-editor/e-contact-editor.h,
+ addressbook/contact-editor/e-contact-editor.c: Modified to use
+ glade. Added menus to change which phone/address/email entries to
+ view. Added images to the dialog.
+
+ * addressbook/contact-editor/e-contact-editor-strings.h,
+ addressbook/contact-editor/contact-editor.glade: Glade files for
+ the contact editor dialog.
+
+ * addressbook/contact-editor/Makefile.am: Added images and added
+ glade stuff.
+
+ * addressbook/contact-editor/arrow.png,
+ addressbook/contact-editor/briefcase.png,
+ addressbook/contact-editor/netfreebusy.png,
+ addressbook/contact-editor/netmeeting.png: Image files for the
+ contact editor dialog.
+
2000-01-19 bertrand <bertrand@helixcode.com>
* camel/providers/mbox/camel-mbox-folder.c (_get_message_count):
diff --git a/addressbook/contact-editor/Makefile.am b/addressbook/contact-editor/Makefile.am
index 0286af7c49..4892d51bbb 100644
--- a/addressbook/contact-editor/Makefile.am
+++ b/addressbook/contact-editor/Makefile.am
@@ -1,4 +1,13 @@
+images = email.png head.png phone.png snailmail.png web.png arrow.png briefcase.png netmeeting.png netfreebusy.png
+
+EXTRA_DIST = $(images)
+pkgdata_DATA = $(images)
+
+CPPFLAGS = \
+ -DEVOLUTION_GLADEDIR=\""$(gladedir)"\" \
+ -DDATADIR=\""$(datadir)"\"
+
INCLUDES = \
$(GNOME_INCLUDEDIR)
@@ -17,4 +26,10 @@ contact_editor_test_SOURCES = \
contact_editor_test_LDADD = \
$(EXTRA_GNOME_LIBS) \
- libecontacteditor.a
+ libecontacteditor.a
+
+gladedir = $(datadir)/evolution/glade
+
+glade_DATA = \
+ contact-editor.glade
+
diff --git a/addressbook/contact-editor/arrow.png b/addressbook/contact-editor/arrow.png
new file mode 100644
index 0000000000..b7f782c1e5
--- /dev/null
+++ b/addressbook/contact-editor/arrow.png
Binary files differ
diff --git a/addressbook/contact-editor/briefcase.png b/addressbook/contact-editor/briefcase.png
new file mode 100644
index 0000000000..dd59b8fd39
--- /dev/null
+++ b/addressbook/contact-editor/briefcase.png
Binary files differ
diff --git a/addressbook/contact-editor/contact-editor.glade b/addressbook/contact-editor/contact-editor.glade
new file mode 100644
index 0000000000..87251a6f6f
--- /dev/null
+++ b/addressbook/contact-editor/contact-editor.glade
@@ -0,0 +1,2198 @@
+<?xml version="1.0"?>
+<GTK-Interface>
+
+<project>
+ <name>Contact-editor</name>
+ <program_name>contact-editor</program_name>
+ <directory></directory>
+ <source_directory>src</source_directory>
+ <pixmaps_directory>pixmaps</pixmaps_directory>
+ <language>C</language>
+ <gnome_support>True</gnome_support>
+ <gettext_support>True</gettext_support>
+ <use_widget_names>True</use_widget_names>
+ <output_main_file>False</output_main_file>
+ <output_support_files>False</output_support_files>
+ <output_build_files>False</output_build_files>
+ <backup_source_files>False</backup_source_files>
+ <main_source_file>interface.c</main_source_file>
+ <main_header_file>interface.h</main_header_file>
+ <handler_source_file>callbacks.c</handler_source_file>
+ <handler_header_file>callbacks.h</handler_header_file>
+ <support_source_file>support.c</support_source_file>
+ <support_header_file>support.h</support_header_file>
+ <output_translatable_strings>True</output_translatable_strings>
+ <translatable_strings_file>e-contact-editor-strings.h</translatable_strings_file>
+</project>
+
+<widget>
+ <class>GtkWindow</class>
+ <name>contact editor</name>
+ <visible>False</visible>
+ <title>Contact Editor</title>
+ <type>GTK_WINDOW_TOPLEVEL</type>
+ <position>GTK_WIN_POS_NONE</position>
+ <allow_shrink>False</allow_shrink>
+ <allow_grow>True</allow_grow>
+ <auto_shrink>False</auto_shrink>
+
+ <widget>
+ <class>GtkNotebook</class>
+ <name>notebook-contact-editor</name>
+ <can_focus>True</can_focus>
+ <show_tabs>True</show_tabs>
+ <show_border>True</show_border>
+ <tab_pos>GTK_POS_TOP</tab_pos>
+ <scrollable>False</scrollable>
+ <tab_hborder>2</tab_hborder>
+ <tab_vborder>2</tab_vborder>
+ <popup_enable>False</popup_enable>
+ <num_pages>5</num_pages>
+
+ <widget>
+ <class>GtkTable</class>
+ <name>table-contact-editor-general</name>
+ <border_width>7</border_width>
+ <rows>12</rows>
+ <columns>8</columns>
+ <homogeneous>False</homogeneous>
+ <row_spacing>4</row_spacing>
+ <column_spacing>4</column_spacing>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry-phone1</name>
+ <child>
+ <left_attach>7</left_attach>
+ <right_attach>8</right_attach>
+ <top_attach>0</top_attach>
+ <bottom_attach>1</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry-phone2</name>
+ <child>
+ <left_attach>7</left_attach>
+ <right_attach>8</right_attach>
+ <top_attach>1</top_attach>
+ <bottom_attach>2</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry-phone3</name>
+ <child>
+ <left_attach>7</left_attach>
+ <right_attach>8</right_attach>
+ <top_attach>2</top_attach>
+ <bottom_attach>3</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry-phone4</name>
+ <child>
+ <left_attach>7</left_attach>
+ <right_attach>8</right_attach>
+ <top_attach>3</top_attach>
+ <bottom_attach>4</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry-fullname</name>
+ <child>
+ <left_attach>3</left_attach>
+ <right_attach>4</right_attach>
+ <top_attach>0</top_attach>
+ <bottom_attach>1</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry-web</name>
+ <child>
+ <left_attach>3</left_attach>
+ <right_attach>4</right_attach>
+ <top_attach>8</top_attach>
+ <bottom_attach>9</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label-phone3</name>
+ <child>
+ <left_attach>5</left_attach>
+ <right_attach>6</right_attach>
+ <top_attach>2</top_attach>
+ <bottom_attach>3</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <label>Business Fax</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label-phone2</name>
+ <child>
+ <left_attach>5</left_attach>
+ <right_attach>6</right_attach>
+ <top_attach>1</top_attach>
+ <bottom_attach>2</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <label>Home</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label-phone1</name>
+ <child>
+ <left_attach>5</left_attach>
+ <right_attach>6</right_attach>
+ <top_attach>0</top_attach>
+ <bottom_attach>1</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <label>Business</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label-phone4</name>
+ <child>
+ <left_attach>5</left_attach>
+ <right_attach>6</right_attach>
+ <top_attach>3</top_attach>
+ <bottom_attach>4</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <label>Mobile</label>
+ <justify>GTK_JUSTIFY_LEFT</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkText</class>
+ <name>text-address</name>
+ <child>
+ <left_attach>7</left_attach>
+ <right_attach>8</right_attach>
+ <top_attach>5</top_attach>
+ <bottom_attach>9</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <width>1</width>
+ <height>1</height>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label-email1</name>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>2</right_attach>
+ <top_attach>5</top_attach>
+ <bottom_attach>6</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <label>Email</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button-fullname</name>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>3</right_attach>
+ <top_attach>0</top_attach>
+ <bottom_attach>1</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <label> Full Name...</label>
+ </widget>
+
+ <widget>
+ <class>GtkAccelLabel</class>
+ <name>accellabel-jobtitle</name>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>3</right_attach>
+ <top_attach>1</top_attach>
+ <bottom_attach>2</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <label>Job Title:</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkAccelLabel</class>
+ <name>accellabel-company</name>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>3</right_attach>
+ <top_attach>2</top_attach>
+ <bottom_attach>3</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <label>Company:</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkAccelLabel</class>
+ <name>accellabel-fileas</name>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>3</right_attach>
+ <top_attach>3</top_attach>
+ <bottom_attach>4</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <label>File As:</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkAccelLabel</class>
+ <name>accellabel-web</name>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>3</right_attach>
+ <top_attach>8</top_attach>
+ <bottom_attach>9</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <label>Web page address:</label>
+ <justify>GTK_JUSTIFY_LEFT</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkHBox</class>
+ <name>hbox5</name>
+ <child>
+ <left_attach>0</left_attach>
+ <right_attach>8</right_attach>
+ <top_attach>10</top_attach>
+ <bottom_attach>11</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>True</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <homogeneous>False</homogeneous>
+ <spacing>0</spacing>
+
+ <widget>
+ <class>GtkText</class>
+ <name>text-comments</name>
+ <child>
+ <padding>0</padding>
+ <expand>True</expand>
+ <fill>True</fill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkVScrollbar</class>
+ <name>vscrollbar-comments</name>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>False</fill>
+ </child>
+ <policy>GTK_UPDATE_CONTINUOUS</policy>
+ <vvalue>0</vvalue>
+ <vlower>0</vlower>
+ <vupper>0</vupper>
+ <vstep>0</vstep>
+ <vpage>0</vpage>
+ <vpage_size>0</vpage_size>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkHBox</class>
+ <name>hbox3</name>
+ <child>
+ <left_attach>0</left_attach>
+ <right_attach>8</right_attach>
+ <top_attach>11</top_attach>
+ <bottom_attach>12</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <homogeneous>False</homogeneous>
+ <spacing>6</spacing>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button-contacts</name>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>False</fill>
+ </child>
+ <can_focus>True</can_focus>
+ <label>Contacts...</label>
+ </widget>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry-contacts</name>
+ <child>
+ <padding>0</padding>
+ <expand>True</expand>
+ <fill>True</fill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button-categories</name>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>False</fill>
+ </child>
+ <can_focus>True</can_focus>
+ <label>Categories...</label>
+ </widget>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry-categories</name>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>False</fill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkAlignment</class>
+ <name>alignment2</name>
+ <child>
+ <left_attach>7</left_attach>
+ <right_attach>8</right_attach>
+ <top_attach>9</top_attach>
+ <bottom_attach>10</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <xalign>0</xalign>
+ <yalign>0</yalign>
+ <xscale>0</xscale>
+ <yscale>0</yscale>
+
+ <widget>
+ <class>GtkCheckButton</class>
+ <name>checkbutton-mailingaddress</name>
+ <can_focus>True</can_focus>
+ <label>This is the mailing address</label>
+ <active>False</active>
+ <draw_indicator>True</draw_indicator>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button-address</name>
+ <child>
+ <left_attach>5</left_attach>
+ <right_attach>7</right_attach>
+ <top_attach>5</top_attach>
+ <bottom_attach>6</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <label>A_ddress...</label>
+ </widget>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry-jobtitle</name>
+ <child>
+ <left_attach>3</left_attach>
+ <right_attach>4</right_attach>
+ <top_attach>1</top_attach>
+ <bottom_attach>2</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry-company</name>
+ <child>
+ <left_attach>3</left_attach>
+ <right_attach>4</right_attach>
+ <top_attach>2</top_attach>
+ <bottom_attach>3</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkCombo</class>
+ <name>combo-fileas</name>
+ <child>
+ <left_attach>3</left_attach>
+ <right_attach>4</right_attach>
+ <top_attach>3</top_attach>
+ <bottom_attach>4</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <case_sensitive>True</case_sensitive>
+ <use_arrows>True</use_arrows>
+ <use_arrows_always>False</use_arrows_always>
+ <items></items>
+ </widget>
+
+ <widget>
+ <class>GtkHBox</class>
+ <name>hbox4</name>
+ <child>
+ <left_attach>3</left_attach>
+ <right_attach>4</right_attach>
+ <top_attach>5</top_attach>
+ <bottom_attach>6</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <homogeneous>False</homogeneous>
+ <spacing>4</spacing>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry-email1</name>
+ <child>
+ <padding>0</padding>
+ <expand>True</expand>
+ <fill>True</fill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button23</name>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>False</fill>
+ </child>
+
+ <widget>
+ <class>Placeholder</class>
+ </widget>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkAlignment</class>
+ <name>alignment3</name>
+ <child>
+ <left_attach>2</left_attach>
+ <right_attach>3</right_attach>
+ <top_attach>5</top_attach>
+ <bottom_attach>6</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <xalign>1</xalign>
+ <yalign>0.5</yalign>
+ <xscale>0</xscale>
+ <yscale>1</yscale>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button-email1</name>
+ <can_focus>True</can_focus>
+
+ <widget>
+ <class>Placeholder</class>
+ </widget>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkAlignment</class>
+ <name>alignment4</name>
+ <child>
+ <left_attach>6</left_attach>
+ <right_attach>7</right_attach>
+ <top_attach>6</top_attach>
+ <bottom_attach>7</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <xalign>1</xalign>
+ <yalign>0.5</yalign>
+ <xscale>0</xscale>
+ <yscale>1</yscale>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button-address1</name>
+ <can_focus>True</can_focus>
+
+ <widget>
+ <class>Placeholder</class>
+ </widget>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkAlignment</class>
+ <name>alignment5</name>
+ <child>
+ <left_attach>6</left_attach>
+ <right_attach>7</right_attach>
+ <top_attach>3</top_attach>
+ <bottom_attach>4</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <xalign>1</xalign>
+ <yalign>0.5</yalign>
+ <xscale>0</xscale>
+ <yscale>0</yscale>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button-phone4</name>
+ <can_focus>True</can_focus>
+
+ <widget>
+ <class>Placeholder</class>
+ </widget>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkAlignment</class>
+ <name>alignment7</name>
+ <child>
+ <left_attach>6</left_attach>
+ <right_attach>7</right_attach>
+ <top_attach>1</top_attach>
+ <bottom_attach>2</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <xalign>1</xalign>
+ <yalign>0.5</yalign>
+ <xscale>0</xscale>
+ <yscale>0</yscale>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button-phone2</name>
+ <can_focus>True</can_focus>
+
+ <widget>
+ <class>Placeholder</class>
+ </widget>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkAlignment</class>
+ <name>alignment8</name>
+ <child>
+ <left_attach>6</left_attach>
+ <right_attach>7</right_attach>
+ <top_attach>0</top_attach>
+ <bottom_attach>1</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <xalign>1</xalign>
+ <yalign>0.5</yalign>
+ <xscale>0</xscale>
+ <yscale>0</yscale>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button-phone1</name>
+ <can_focus>True</can_focus>
+
+ <widget>
+ <class>Placeholder</class>
+ </widget>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label-address1</name>
+ <child>
+ <left_attach>5</left_attach>
+ <right_attach>6</right_attach>
+ <top_attach>6</top_attach>
+ <bottom_attach>7</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <label>Business</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkHSeparator</class>
+ <name>hseparator6</name>
+ <child>
+ <left_attach>0</left_attach>
+ <right_attach>4</right_attach>
+ <top_attach>7</top_attach>
+ <bottom_attach>8</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>2</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ </widget>
+
+ <widget>
+ <class>GtkHSeparator</class>
+ <name>hseparator4</name>
+ <child>
+ <left_attach>4</left_attach>
+ <right_attach>8</right_attach>
+ <top_attach>4</top_attach>
+ <bottom_attach>5</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>2</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ </widget>
+
+ <widget>
+ <class>GtkHSeparator</class>
+ <name>hseparator5</name>
+ <child>
+ <left_attach>0</left_attach>
+ <right_attach>4</right_attach>
+ <top_attach>4</top_attach>
+ <bottom_attach>5</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>2</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ </widget>
+
+ <widget>
+ <class>GtkAlignment</class>
+ <name>alignment6</name>
+ <child>
+ <left_attach>6</left_attach>
+ <right_attach>7</right_attach>
+ <top_attach>2</top_attach>
+ <bottom_attach>3</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <xalign>1</xalign>
+ <yalign>0.5</yalign>
+ <xscale>0</xscale>
+ <yscale>0</yscale>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button-phone3</name>
+ <can_focus>True</can_focus>
+
+ <widget>
+ <class>Placeholder</class>
+ </widget>
+ </widget>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <child_name>Notebook:tab</child_name>
+ <name>label15</name>
+ <label>General</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0.5</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkTable</class>
+ <name>table-contact-editor-details</name>
+ <border_width>7</border_width>
+ <rows>12</rows>
+ <columns>6</columns>
+ <homogeneous>False</homogeneous>
+ <row_spacing>4</row_spacing>
+ <column_spacing>4</column_spacing>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label21</name>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>2</right_attach>
+ <top_attach>0</top_attach>
+ <bottom_attach>1</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <label>Department:</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label22</name>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>2</right_attach>
+ <top_attach>1</top_attach>
+ <bottom_attach>2</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <label>Office:</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label23</name>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>2</right_attach>
+ <top_attach>2</top_attach>
+ <bottom_attach>3</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <label>Profession:</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label24</name>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>2</right_attach>
+ <top_attach>4</top_attach>
+ <bottom_attach>5</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <label>Nickname:</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label25</name>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>2</right_attach>
+ <top_attach>5</top_attach>
+ <bottom_attach>6</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <label>Spouse's name:</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label26</name>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>2</right_attach>
+ <top_attach>7</top_attach>
+ <bottom_attach>8</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <label>Directory Server:</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label27</name>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>2</right_attach>
+ <top_attach>8</top_attach>
+ <bottom_attach>9</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <label>Email alias:</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label28</name>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>2</right_attach>
+ <top_attach>10</top_attach>
+ <bottom_attach>11</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <label>Address:</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label31</name>
+ <child>
+ <left_attach>3</left_attach>
+ <right_attach>4</right_attach>
+ <top_attach>4</top_attach>
+ <bottom_attach>5</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <label>Birthday:</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label30</name>
+ <child>
+ <left_attach>3</left_attach>
+ <right_attach>4</right_attach>
+ <top_attach>1</top_attach>
+ <bottom_attach>2</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <label>Assistant's name:</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label29</name>
+ <child>
+ <left_attach>3</left_attach>
+ <right_attach>4</right_attach>
+ <top_attach>0</top_attach>
+ <bottom_attach>1</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <label>Manager's name:</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label32</name>
+ <child>
+ <left_attach>3</left_attach>
+ <right_attach>4</right_attach>
+ <top_attach>5</top_attach>
+ <bottom_attach>6</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <label>Anniversary:</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry4</name>
+ <child>
+ <left_attach>2</left_attach>
+ <right_attach>3</right_attach>
+ <top_attach>5</top_attach>
+ <bottom_attach>6</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry5</name>
+ <child>
+ <left_attach>2</left_attach>
+ <right_attach>3</right_attach>
+ <top_attach>0</top_attach>
+ <bottom_attach>1</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry6</name>
+ <child>
+ <left_attach>2</left_attach>
+ <right_attach>3</right_attach>
+ <top_attach>1</top_attach>
+ <bottom_attach>2</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry7</name>
+ <child>
+ <left_attach>2</left_attach>
+ <right_attach>3</right_attach>
+ <top_attach>2</top_attach>
+ <bottom_attach>3</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry8</name>
+ <child>
+ <left_attach>2</left_attach>
+ <right_attach>3</right_attach>
+ <top_attach>4</top_attach>
+ <bottom_attach>5</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry9</name>
+ <child>
+ <left_attach>2</left_attach>
+ <right_attach>6</right_attach>
+ <top_attach>7</top_attach>
+ <bottom_attach>8</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry10</name>
+ <child>
+ <left_attach>2</left_attach>
+ <right_attach>5</right_attach>
+ <top_attach>8</top_attach>
+ <bottom_attach>9</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry11</name>
+ <child>
+ <left_attach>2</left_attach>
+ <right_attach>6</right_attach>
+ <top_attach>10</top_attach>
+ <bottom_attach>11</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GnomeDateEdit</class>
+ <name>dateedit2</name>
+ <child>
+ <left_attach>4</left_attach>
+ <right_attach>6</right_attach>
+ <top_attach>5</top_attach>
+ <bottom_attach>6</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <show_time>False</show_time>
+ <use_24_format>False</use_24_format>
+ <week_start_monday>False</week_start_monday>
+ <lower_hour>7</lower_hour>
+ <upper_hour>19</upper_hour>
+ </widget>
+
+ <widget>
+ <class>GnomeDateEdit</class>
+ <name>dateedit1</name>
+ <child>
+ <left_attach>4</left_attach>
+ <right_attach>6</right_attach>
+ <top_attach>4</top_attach>
+ <bottom_attach>5</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <show_time>False</show_time>
+ <use_24_format>False</use_24_format>
+ <week_start_monday>False</week_start_monday>
+ <lower_hour>7</lower_hour>
+ <upper_hour>19</upper_hour>
+ </widget>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry13</name>
+ <child>
+ <left_attach>4</left_attach>
+ <right_attach>6</right_attach>
+ <top_attach>1</top_attach>
+ <bottom_attach>2</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry12</name>
+ <child>
+ <left_attach>4</left_attach>
+ <right_attach>6</right_attach>
+ <top_attach>0</top_attach>
+ <bottom_attach>1</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button-callnow</name>
+ <child>
+ <left_attach>5</left_attach>
+ <right_attach>6</right_attach>
+ <top_attach>8</top_attach>
+ <bottom_attach>9</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <label>Call Now</label>
+ </widget>
+
+ <widget>
+ <class>GtkHBox</class>
+ <name>hbox7</name>
+ <child>
+ <left_attach>0</left_attach>
+ <right_attach>6</right_attach>
+ <top_attach>9</top_attach>
+ <bottom_attach>10</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <homogeneous>False</homogeneous>
+ <spacing>6</spacing>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label33</name>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>False</fill>
+ </child>
+ <label>Internet Free-Busy</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0.5</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>2</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkHSeparator</class>
+ <name>hseparator8</name>
+ <child>
+ <padding>0</padding>
+ <expand>True</expand>
+ <fill>True</fill>
+ </child>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkHBox</class>
+ <name>hbox8</name>
+ <child>
+ <left_attach>0</left_attach>
+ <right_attach>6</right_attach>
+ <top_attach>6</top_attach>
+ <bottom_attach>7</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <homogeneous>False</homogeneous>
+ <spacing>6</spacing>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label34</name>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>False</fill>
+ </child>
+ <label>Online NetMeeting settings</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0.5</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>2</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkHSeparator</class>
+ <name>hseparator9</name>
+ <child>
+ <padding>0</padding>
+ <expand>True</expand>
+ <fill>True</fill>
+ </child>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkHSeparator</class>
+ <name>hseparator7</name>
+ <child>
+ <left_attach>0</left_attach>
+ <right_attach>6</right_attach>
+ <top_attach>3</top_attach>
+ <bottom_attach>4</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>2</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <child_name>Notebook:tab</child_name>
+ <name>label16</name>
+ <label>Details</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0.5</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkText</class>
+ <name>text3</name>
+ <can_focus>True</can_focus>
+ <editable>False</editable>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <child_name>Notebook:tab</child_name>
+ <name>label17</name>
+ <label>Activities</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0.5</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkText</class>
+ <name>text2</name>
+ <can_focus>True</can_focus>
+ <editable>False</editable>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <child_name>Notebook:tab</child_name>
+ <name>label18</name>
+ <label>Certificates</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0.5</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkText</class>
+ <name>text4</name>
+ <can_focus>True</can_focus>
+ <editable>False</editable>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <child_name>Notebook:tab</child_name>
+ <name>label19</name>
+ <label>All Fields</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0.5</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+ </widget>
+</widget>
+
+<widget>
+ <class>GnomeDialog</class>
+ <name>dialog2</name>
+ <visible>False</visible>
+ <auto_close>False</auto_close>
+ <hide_on_close>False</hide_on_close>
+ <allow_shrink>False</allow_shrink>
+ <allow_grow>False</allow_grow>
+ <auto_shrink>False</auto_shrink>
+
+ <widget>
+ <class>GtkVBox</class>
+ <child_name>GnomeDialog:vbox</child_name>
+ <name>dialog-vbox2</name>
+ <child>
+ <padding>4</padding>
+ <expand>True</expand>
+ <fill>True</fill>
+ </child>
+ <homogeneous>False</homogeneous>
+ <spacing>8</spacing>
+
+ <widget>
+ <class>GtkTable</class>
+ <name>table2</name>
+ <child>
+ <padding>0</padding>
+ <expand>True</expand>
+ <fill>True</fill>
+ </child>
+ <rows>2</rows>
+ <columns>2</columns>
+ <homogeneous>False</homogeneous>
+ <row_spacing>0</row_spacing>
+ <column_spacing>0</column_spacing>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry2</name>
+ <child>
+ <left_attach>0</left_attach>
+ <right_attach>2</right_attach>
+ <top_attach>1</top_attach>
+ <bottom_attach>2</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkVBox</class>
+ <name>vbox1</name>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>2</right_attach>
+ <top_attach>0</top_attach>
+ <bottom_attach>1</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>True</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <homogeneous>False</homogeneous>
+ <spacing>0</spacing>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button31</name>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>False</fill>
+ </child>
+ <can_focus>True</can_focus>
+ <label>Add</label>
+ </widget>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button32</name>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>False</fill>
+ </child>
+ <can_focus>True</can_focus>
+ <label>Delete</label>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkScrolledWindow</class>
+ <name>scrolledwindow1</name>
+ <child>
+ <left_attach>0</left_attach>
+ <right_attach>1</right_attach>
+ <top_attach>0</top_attach>
+ <bottom_attach>1</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>True</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <height>200</height>
+ <hscrollbar_policy>GTK_POLICY_ALWAYS</hscrollbar_policy>
+ <vscrollbar_policy>GTK_POLICY_ALWAYS</vscrollbar_policy>
+ <hupdate_policy>GTK_UPDATE_CONTINUOUS</hupdate_policy>
+ <vupdate_policy>GTK_UPDATE_CONTINUOUS</vupdate_policy>
+
+ <widget>
+ <class>GtkCList</class>
+ <name>clist1</name>
+ <can_focus>True</can_focus>
+ <columns>1</columns>
+ <column_widths>80</column_widths>
+ <selection_mode>GTK_SELECTION_SINGLE</selection_mode>
+ <show_titles>True</show_titles>
+ <shadow_type>GTK_SHADOW_NONE</shadow_type>
+
+ <widget>
+ <class>GtkLabel</class>
+ <child_name>CList:title</child_name>
+ <name>label20</name>
+ <label>Phone Types</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0.5</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+ </widget>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkHButtonBox</class>
+ <child_name>GnomeDialog:action_area</child_name>
+ <name>dialog-action_area2</name>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>True</fill>
+ <pack>GTK_PACK_END</pack>
+ </child>
+ <layout_style>GTK_BUTTONBOX_END</layout_style>
+ <spacing>8</spacing>
+ <child_min_width>85</child_min_width>
+ <child_min_height>27</child_min_height>
+ <child_ipad_x>7</child_ipad_x>
+ <child_ipad_y>0</child_ipad_y>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button28</name>
+ <can_default>True</can_default>
+ <can_focus>True</can_focus>
+ <stock_button>GNOME_STOCK_BUTTON_OK</stock_button>
+ </widget>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button29</name>
+ <can_default>True</can_default>
+ <can_focus>True</can_focus>
+ <stock_button>GNOME_STOCK_BUTTON_APPLY</stock_button>
+ </widget>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button30</name>
+ <can_default>True</can_default>
+ <can_focus>True</can_focus>
+ <stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button>
+ </widget>
+ </widget>
+ </widget>
+</widget>
+
+<widget>
+ <class>GnomeDialog</class>
+ <name>dialog-add-phone</name>
+ <visible>False</visible>
+ <title>New phone type</title>
+ <auto_close>False</auto_close>
+ <hide_on_close>False</hide_on_close>
+ <allow_shrink>False</allow_shrink>
+ <allow_grow>False</allow_grow>
+ <auto_shrink>False</auto_shrink>
+
+ <widget>
+ <class>GtkVBox</class>
+ <child_name>GnomeDialog:vbox</child_name>
+ <name>vbox2</name>
+ <child>
+ <padding>4</padding>
+ <expand>True</expand>
+ <fill>True</fill>
+ </child>
+ <homogeneous>False</homogeneous>
+ <spacing>8</spacing>
+
+ <widget>
+ <class>GtkFrame</class>
+ <name>frame-add-phone</name>
+ <border_width>4</border_width>
+ <child>
+ <padding>0</padding>
+ <expand>True</expand>
+ <fill>True</fill>
+ </child>
+ <label>New phone type</label>
+ <label_xalign>0</label_xalign>
+ <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
+
+ <widget>
+ <class>GtkAlignment</class>
+ <name>alignment9</name>
+ <border_width>9</border_width>
+ <xalign>0.5</xalign>
+ <yalign>0.5</yalign>
+ <xscale>1</xscale>
+ <yscale>1</yscale>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry-add-phone</name>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkHButtonBox</class>
+ <child_name>GnomeDialog:action_area</child_name>
+ <name>hbuttonbox1</name>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>True</fill>
+ <pack>GTK_PACK_END</pack>
+ </child>
+ <layout_style>GTK_BUTTONBOX_END</layout_style>
+ <spacing>8</spacing>
+ <child_min_width>85</child_min_width>
+ <child_min_height>27</child_min_height>
+ <child_ipad_x>7</child_ipad_x>
+ <child_ipad_y>0</child_ipad_y>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button43</name>
+ <can_default>True</can_default>
+ <can_focus>True</can_focus>
+ <label>Add</label>
+ <stock_pixmap>GNOME_STOCK_PIXMAP_ADD</stock_pixmap>
+ </widget>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button44</name>
+ <can_default>True</can_default>
+ <can_focus>True</can_focus>
+ <stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button>
+ </widget>
+ </widget>
+ </widget>
+</widget>
+
+</GTK-Interface>
diff --git a/addressbook/contact-editor/e-contact-editor-strings.h b/addressbook/contact-editor/e-contact-editor-strings.h
new file mode 100644
index 0000000000..131dd6fdf4
--- /dev/null
+++ b/addressbook/contact-editor/e-contact-editor-strings.h
@@ -0,0 +1,48 @@
+/*
+ * 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_("Contact Editor");
+gchar *s = N_("Business Fax");
+gchar *s = N_("Home");
+gchar *s = N_("Business");
+gchar *s = N_("Mobile");
+gchar *s = N_("Email");
+gchar *s = N_("\tFull Name...");
+gchar *s = N_("Job Title:");
+gchar *s = N_("Company:");
+gchar *s = N_("File As:");
+gchar *s = N_("Web page address:");
+gchar *s = N_("Contacts...");
+gchar *s = N_("Categories...");
+gchar *s = N_("This is the mailing address");
+gchar *s = N_("A_ddress...");
+gchar *s = N_("Business");
+gchar *s = N_("General");
+gchar *s = N_("Department:");
+gchar *s = N_("Office:");
+gchar *s = N_("Profession:");
+gchar *s = N_("Nickname:");
+gchar *s = N_("Spouse's name:");
+gchar *s = N_("Directory Server:");
+gchar *s = N_("Email alias:");
+gchar *s = N_("Address:");
+gchar *s = N_("Birthday:");
+gchar *s = N_("Assistant's name:");
+gchar *s = N_("Manager's name:");
+gchar *s = N_("Anniversary:");
+gchar *s = N_("Call Now");
+gchar *s = N_("Internet Free-Busy");
+gchar *s = N_("Online NetMeeting settings");
+gchar *s = N_("Details");
+gchar *s = N_("Activities");
+gchar *s = N_("Certificates");
+gchar *s = N_("All Fields");
+gchar *s = N_("Add");
+gchar *s = N_("Delete");
+gchar *s = N_("Phone Types");
+gchar *s = N_("New phone type");
+gchar *s = N_("New phone type");
+gchar *s = N_("Add");
diff --git a/addressbook/contact-editor/e-contact-editor.c b/addressbook/contact-editor/e-contact-editor.c
index 73b48a7eb8..6a6c6d982e 100644
--- a/addressbook/contact-editor/e-contact-editor.c
+++ b/addressbook/contact-editor/e-contact-editor.c
@@ -26,8 +26,14 @@ static void e_contact_editor_init (EContactEditor *card);
static void e_contact_editor_class_init (EContactEditorClass *klass);
static void e_contact_editor_set_arg (GtkObject *o, GtkArg *arg, guint arg_id);
static void e_contact_editor_get_arg (GtkObject *object, GtkArg *arg, guint arg_id);
+static void e_contact_editor_destroy (GtkObject *object);
-static GtkNotebookClass *parent_class = NULL;
+static GtkWidget *e_contact_editor_build_dialog(EContactEditor *editor, gchar *entry_id, gchar *label_id, gchar *title, GList **list, GnomeUIInfo **info);
+static void _email_arrow_pressed (GtkWidget *widget, GdkEventButton *button, EContactEditor *editor);
+static void _phone_arrow_pressed (GtkWidget *widget, GdkEventButton *button, EContactEditor *editor);
+static void _address_arrow_pressed (GtkWidget *widget, GdkEventButton *button, EContactEditor *editor);
+
+static GtkVBoxClass *parent_class = NULL;
#if 0
enum {
@@ -44,6 +50,12 @@ enum {
ARG_CARD
};
+enum {
+ DYNAMIC_LIST_EMAIL,
+ DYNAMIC_LIST_PHONE,
+ DYNAMIC_LIST_ADDRESS
+};
+
GtkType
e_contact_editor_get_type (void)
{
@@ -63,7 +75,7 @@ e_contact_editor_get_type (void)
(GtkClassInitFunc) NULL,
};
- contact_editor_type = gtk_type_unique (gtk_notebook_get_type (), &contact_editor_info);
+ contact_editor_type = gtk_type_unique (gtk_vbox_get_type (), &contact_editor_info);
}
return contact_editor_type;
@@ -73,12 +85,12 @@ static void
e_contact_editor_class_init (EContactEditorClass *klass)
{
GtkObjectClass *object_class;
- GtkNotebookClass *notebook_class;
+ GtkVBoxClass *vbox_class;
object_class = (GtkObjectClass*) klass;
- notebook_class = (GtkNotebookClass *) klass;
+ vbox_class = (GtkVBoxClass *) klass;
- parent_class = gtk_type_class (gtk_notebook_get_type ());
+ parent_class = gtk_type_class (gtk_vbox_get_type ());
#if 0
e_contact_editor_signals[E_CONTACT_EDITOR_RESIZE] =
@@ -98,300 +110,140 @@ e_contact_editor_class_init (EContactEditorClass *klass)
object_class->set_arg = e_contact_editor_set_arg;
object_class->get_arg = e_contact_editor_get_arg;
+ object_class->destroy = e_contact_editor_destroy;
}
-static GtkWidget *
-_create_page_general_name(EContactEditor *e_contact_editor)
-{
- GtkWidget *table;
- GtkWidget *alignment;
- table = gtk_table_new(3, 4, FALSE);
- alignment = gtk_alignment_new(0, 0, 0, 0);
- gtk_container_add(GTK_CONTAINER(alignment),
- gnome_pixmap_new_from_file("head.png"));
- gtk_table_attach(GTK_TABLE(table),
- alignment,
- 0, 1, 0, 4,
- 0, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_label_new(_("Full Name:")),
- 1, 2, 0, 1,
- 0, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_label_new(_("Job Title:")),
- 1, 2, 1, 2,
- 0, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_label_new(_("Company:")),
- 1, 2, 2, 3,
- 0, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_label_new(_("File as:")),
- 1, 2, 3, 4,
- 0, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_entry_new(),
- 2, 3, 0, 1,
- GTK_FILL | GTK_EXPAND, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_entry_new(),
- 2, 3, 1, 2,
- GTK_FILL | GTK_EXPAND, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_entry_new(),
- 2, 3, 2, 3,
- GTK_FILL | GTK_EXPAND, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_combo_new(),
- 2, 3, 3, 4,
- GTK_FILL | GTK_EXPAND, 0,
- 0, 0);
- return table;
-}
-
-static GtkWidget *
-_create_page_general_phone(EContactEditor *e_contact_editor)
-{
- GtkWidget *table;
- GtkWidget *alignment;
- table = gtk_table_new(3, 4, FALSE);
- alignment = gtk_alignment_new(0,0,0,0);
- gtk_container_add(GTK_CONTAINER(alignment),
- gnome_pixmap_new_from_file("phone.png"));
-
- gtk_table_attach(GTK_TABLE(table),
- alignment,
- 0, 1, 0, 4,
- 0, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_label_new(_("Home:")),
- 1, 2, 0, 1,
- 0, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_label_new(_("Car:")),
- 1, 2, 1, 2,
- 0, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_label_new(_("Mobile:")),
- 1, 2, 2, 3,
- 0, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_label_new(_("Business Fax:")),
- 1, 2, 3, 4,
- 0, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_entry_new(),
- 2, 3, 0, 1,
- GTK_FILL | GTK_EXPAND, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_entry_new(),
- 2, 3, 1, 2,
- GTK_FILL | GTK_EXPAND, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_entry_new(),
- 2, 3, 2, 3,
- GTK_FILL | GTK_EXPAND, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_entry_new(),
- 2, 3, 3, 4,
- GTK_FILL | GTK_EXPAND, 0,
- 0, 0);
- return table;
-}
-
-static GtkWidget *
-_create_page_general_email(EContactEditor *e_contact_editor)
-{
- GtkWidget *table;
- GtkWidget *alignment;
- table = gtk_table_new(3, 1, FALSE);
- alignment = gtk_alignment_new(0,0,0,0);
- gtk_container_add(GTK_CONTAINER(alignment),
- gnome_pixmap_new_from_file("email.png"));
-
- gtk_table_attach(GTK_TABLE(table),
- alignment,
- 0, 1, 0, 1,
- 0, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_label_new(_("Email:")),
- 1, 2, 0, 1,
- 0, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_entry_new(),
- 2, 3, 0, 1,
- GTK_FILL | GTK_EXPAND, 0,
- 0, 0);
- return table;
-}
-
-static GtkWidget *
-_create_page_general_web(EContactEditor *e_contact_editor)
+static void
+_add_image(GtkTable *table, gchar *image, int left, int right, int top, int bottom)
{
- GtkWidget *table;
- GtkWidget *alignment;
- table = gtk_table_new(3, 1, FALSE);
- alignment = gtk_alignment_new(0,0,0,0);
- gtk_container_add(GTK_CONTAINER(alignment),
- gnome_pixmap_new_from_file("web.png"));
-
- gtk_table_attach(GTK_TABLE(table),
- alignment,
- 0, 1, 0, 1,
- 0, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_label_new(_("Web page address:")),
- 1, 2, 0, 1,
- 0, 0,
+ gtk_table_attach(table,
+ gtk_widget_new(gtk_alignment_get_type(),
+ "child", gnome_pixmap_new_from_file(image),
+ "xalign", (double) 0,
+ "yalign", (double) 0,
+ "xscale", (double) 0,
+ "yscale", (double) 0,
+ NULL),
+ left, right, top, bottom,
+ GTK_FILL, GTK_FILL,
0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_entry_new(),
- 2, 3, 0, 1,
- GTK_FILL | GTK_EXPAND, 0,
- 0, 0);
- return table;
}
-static GtkWidget *
-_create_page_general_snailmail(EContactEditor *e_contact_editor)
+static void
+_add_images(GtkTable *table)
{
- GtkWidget *table;
- GtkWidget *alignment;
- GtkWidget *text;
- table = gtk_table_new(3, 3, FALSE);
- alignment = gtk_alignment_new(0,0,0,0);
- gtk_container_add(GTK_CONTAINER(alignment),
- gnome_pixmap_new_from_file("snailmail.png"));
-
- gtk_table_attach(GTK_TABLE(table),
- alignment,
- 0, 1, 0, 1,
- 0, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_label_new(_("Address:")),
- 1, 2, 0, 1,
- 0, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_label_new(_("Business:")),
- 1, 2, 1, 2,
- 0, 0,
- 0, 0);
- text = gtk_text_new(NULL, NULL);
- gtk_object_set(GTK_OBJECT(text),
- "editable", TRUE,
- NULL);
- gtk_table_attach(GTK_TABLE(table),
- text,
- 2, 3, 0, 2,
- GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_check_button_new_with_label(_("This is the mailing address")),
- 2, 3, 2, 3,
- 0, 0,
- 0, 0);
- return table;
+ _add_image(table, DATADIR "/evolution/head.png", 0, 1, 0, 4);
+ _add_image(table, DATADIR "/evolution/phone.png", 4, 5, 0, 4);
+ _add_image(table, DATADIR "/evolution/email.png", 0, 1, 5, 7);
+ _add_image(table, DATADIR "/evolution/web.png", 0, 1, 8, 10);
+ _add_image(table, DATADIR "/evolution/snailmail.png", 4, 5, 5, 10);
}
-static GtkWidget *
-_create_page_general_comments(EContactEditor *e_contact_editor)
+static void
+_add_details_images(GtkTable *table)
{
- GtkWidget *text;
- text = gtk_text_new(NULL, NULL);
- gtk_object_set (GTK_OBJECT(text),
- "editable", TRUE,
- NULL);
- return text;
+ _add_image(table, DATADIR "/evolution/briefcase.png", 0, 1, 0, 2);
+ _add_image(table, DATADIR "/evolution/head.png", 0, 1, 4, 6);
+ _add_image(table, DATADIR "/evolution/netmeeting.png", 0, 1, 7, 9);
+ _add_image(table, DATADIR "/evolution/netfreebusy.png", 0, 1, 10, 12);
}
-static GtkWidget *
-_create_page_general_extras(EContactEditor *e_contact_editor)
+static void
+_replace_button(EContactEditor *editor, gchar *button_xml, gchar *image, GtkSignalFunc func)
{
- return gtk_entry_new();
+ GladeXML *gui = editor->gui;
+ GtkWidget *button = glade_xml_get_widget(gui, button_xml);
+ gchar *image_temp;
+ image_temp = g_strdup_printf("%s%s", DATADIR "/evolution/", image);
+ gtk_container_add(GTK_CONTAINER(button),
+ gnome_pixmap_new_from_file(image_temp));
+ g_free(image_temp);
+ gtk_signal_connect(GTK_OBJECT(button), "button_press_event", func, editor);
+
}
-static GtkWidget *
-_create_page_general( EContactEditor *e_contact_editor )
+static void
+_replace_buttons(EContactEditor *editor)
{
- GtkWidget *table;
- table = gtk_table_new(2, 5, FALSE);
- gtk_table_attach(GTK_TABLE(table),
- _create_page_general_name(e_contact_editor),
- 0, 1,
- 0, 1,
- GTK_FILL | GTK_EXPAND, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- _create_page_general_phone(e_contact_editor),
- 1, 2,
- 0, 1,
- GTK_FILL | GTK_EXPAND, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- _create_page_general_email(e_contact_editor),
- 0, 1,
- 1, 2,
- GTK_FILL | GTK_EXPAND, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- _create_page_general_web(e_contact_editor),
- 0, 1,
- 2, 3,
- GTK_FILL | GTK_EXPAND, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- _create_page_general_snailmail(e_contact_editor),
- 1, 2,
- 1, 3,
- GTK_FILL | GTK_EXPAND, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- _create_page_general_comments(e_contact_editor),
- 0, 2,
- 3, 4,
- GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- _create_page_general_extras(e_contact_editor),
- 0, 2,
- 4, 5,
- GTK_FILL | GTK_EXPAND, 0,
- 0, 0);
- return table;
+ _replace_button(editor, "button-phone1", "arrow.png", _phone_arrow_pressed);
+ _replace_button(editor, "button-phone2", "arrow.png", _phone_arrow_pressed);
+ _replace_button(editor, "button-phone3", "arrow.png", _phone_arrow_pressed);
+ _replace_button(editor, "button-phone4", "arrow.png", _phone_arrow_pressed);
+ _replace_button(editor, "button-address1", "arrow.png", _address_arrow_pressed);
+ _replace_button(editor, "button-email1", "arrow.png", _email_arrow_pressed);
}
static void
e_contact_editor_init (EContactEditor *e_contact_editor)
{
- GtkNotebook *notebook = GTK_NOTEBOOK (e_contact_editor);
+ GladeXML *gui;
+ GtkAdjustment *adjustment;
/* e_contact_editor->card = NULL;*/
- e_contact_editor->fields = NULL;
+ gui = glade_xml_new (EVOLUTION_GLADEDIR "/contact-editor.glade", NULL);
+ e_contact_editor->gui = gui;
+ gtk_widget_reparent(glade_xml_get_widget(gui, "notebook-contact-editor"),
+ GTK_WIDGET(e_contact_editor));
+
+ _add_images(GTK_TABLE(glade_xml_get_widget(gui, "table-contact-editor-general")));
+ _add_details_images(GTK_TABLE(glade_xml_get_widget(gui, "table-contact-editor-details")));
+ _replace_buttons(e_contact_editor);
+
+ gtk_object_get(GTK_OBJECT(glade_xml_get_widget(gui, "text-comments")),
+ "vadjustment", &adjustment,
+ NULL);
+ gtk_range_set_adjustment(GTK_RANGE(glade_xml_get_widget(gui, "vscrollbar-comments")),
+ adjustment);
+
+ e_contact_editor->email_info = NULL;
+ e_contact_editor->phone_info = NULL;
+ e_contact_editor->address_info = NULL;
+ e_contact_editor->email_popup = NULL;
+ e_contact_editor->phone_popup = NULL;
+ e_contact_editor->address_popup = NULL;
+ e_contact_editor->email_list = NULL;
+ e_contact_editor->phone_list = NULL;
+ e_contact_editor->address_list = NULL;
+}
+
+void
+e_contact_editor_destroy (GtkObject *object) {
+ EContactEditor *e_contact_editor = E_CONTACT_EDITOR(object);
+
+ if (e_contact_editor->email_list) {
+ g_list_foreach(e_contact_editor->email_list, (GFunc) g_free, NULL);
+ g_list_free(e_contact_editor->email_list);
+ }
+ if (e_contact_editor->email_info) {
+ g_free(e_contact_editor->email_info);
+ }
+ if (e_contact_editor->email_popup) {
+ gtk_widget_unref(e_contact_editor->email_popup);
+ }
+
+ if (e_contact_editor->phone_list) {
+ g_list_foreach(e_contact_editor->phone_list, (GFunc) g_free, NULL);
+ g_list_free(e_contact_editor->phone_list);
+ }
+ if (e_contact_editor->phone_info) {
+ g_free(e_contact_editor->phone_info);
+ }
+ if (e_contact_editor->phone_popup) {
+ gtk_widget_unref(e_contact_editor->phone_popup);
+ }
+
+ if (e_contact_editor->address_list) {
+ g_list_foreach(e_contact_editor->address_list, (GFunc) g_free, NULL);
+ g_list_free(e_contact_editor->address_list);
+ }
+ if (e_contact_editor->address_info) {
+ g_free(e_contact_editor->address_info);
+ }
+ if (e_contact_editor->address_popup) {
+ gtk_widget_unref(e_contact_editor->address_popup);
+ }
- gtk_notebook_append_page (notebook,
- _create_page_general(e_contact_editor),
- gtk_label_new(_("General")));
+ gtk_object_unref(GTK_OBJECT(e_contact_editor->gui));
}
GtkWidget*
@@ -436,3 +288,277 @@ e_contact_editor_get_arg (GtkObject *object, GtkArg *arg, guint arg_id)
break;
}
}
+
+static void
+_popup_position(GtkMenu *menu,
+ gint *x,
+ gint *y,
+ gpointer data)
+{
+ GtkWidget *button = GTK_WIDGET(data);
+ int mh, mw;
+ gdk_window_get_origin (button->window, x, y);
+ *x += button->allocation.width;
+ *y += button->allocation.height;
+
+ mh = GTK_WIDGET(menu)->allocation.height;
+ mw = GTK_WIDGET(menu)->allocation.width;
+
+ *x -= mw;
+ if (*x < 0)
+ *x = 0;
+
+ if (*y < 0)
+ *y = 0;
+
+ if ((*x + mw) > gdk_screen_width ())
+ *x = gdk_screen_width () - mw;
+
+ if ((*y + mh) > gdk_screen_height ())
+ *y = gdk_screen_height () - mh;
+}
+
+static void
+_arrow_pressed (GtkWidget *widget, GdkEventButton *button, EContactEditor *editor, GtkWidget *popup, GList **list, GnomeUIInfo **info, gchar *label, gchar *entry, gchar *dialog_title)
+{
+ gint menu_item;
+ gtk_signal_emit_stop_by_name(GTK_OBJECT(widget), "button_press_event");
+ gtk_widget_realize(popup);
+ menu_item = gnome_popup_menu_do_popup_modal(popup, _popup_position, widget, button, editor);
+ if ( menu_item != -1 ) {
+ if (menu_item == g_list_length (*list)) {
+ e_contact_editor_build_dialog(editor, entry, label, dialog_title, list, info);
+ } else {
+ gtk_object_set(GTK_OBJECT(glade_xml_get_widget(editor->gui, label)),
+ "label", g_list_nth_data(*list, menu_item),
+ NULL);
+ }
+ }
+}
+
+static void
+e_contact_editor_build_ui_info(GList *list, GnomeUIInfo **infop)
+{
+ GnomeUIInfo *info;
+ GnomeUIInfo singleton = { GNOME_APP_UI_ITEM, NULL, NULL, NULL, NULL, NULL, GNOME_APP_PIXMAP_NONE, 0, 0, 0, NULL };
+ GnomeUIInfo end = GNOMEUIINFO_END;
+ int length;
+ int i;
+
+ info = *infop;
+
+ if ( info )
+ g_free(info);
+ length = g_list_length( list );
+ info = g_new(GnomeUIInfo, length + 2);
+ for (i = 0; i < length; i++) {
+ info[i] = singleton;
+ info[i].label = _(list->data);
+ list = list->next;
+ }
+ info[i] = singleton;
+ info[i].label = N_("Other...");
+ i++;
+ info[i] = end;
+
+ *infop = info;
+}
+
+static void
+_dialog_clicked(GtkWidget *dialog, gint button, EContactEditor *editor)
+{
+ GtkWidget *label = gtk_object_get_data(GTK_OBJECT(dialog),
+ "e_contact_editor_label");
+ GtkWidget *entry = gtk_object_get_data(GTK_OBJECT(dialog),
+ "e_contact_editor_entry");
+ GtkWidget *dialog_entry = gtk_object_get_data(GTK_OBJECT(dialog),
+ "e_contact_editor_dialog_entry");
+ GList **list = gtk_object_get_data(GTK_OBJECT(dialog),
+ "e_contact_editor_list");
+ GList **info = gtk_object_get_data(GTK_OBJECT(dialog),
+ "e_contact_editor_info");
+ switch (button) {
+ case 0:
+ gtk_object_set(GTK_OBJECT(label),
+ "label", gtk_entry_get_text(GTK_ENTRY(dialog_entry)),
+ NULL);
+ *list = g_list_append(*list, g_strdup(gtk_entry_get_text(GTK_ENTRY(dialog_entry))));
+ g_free(*info);
+ *info = NULL;
+ break;
+ }
+ gnome_dialog_close(GNOME_DIALOG(dialog));
+}
+
+static void
+_dialog_destroy(EContactEditor *editor, GtkWidget *dialog)
+{
+ gnome_dialog_close(GNOME_DIALOG(dialog));
+}
+
+static GtkWidget *
+e_contact_editor_build_dialog(EContactEditor *editor, gchar *entry_id, gchar *label_id, gchar *title, GList **list, GnomeUIInfo **info)
+{
+ GtkWidget *dialog_entry = gtk_entry_new();
+ GtkWidget *entry = glade_xml_get_widget(editor->gui, entry_id);
+ GtkWidget *label = glade_xml_get_widget(editor->gui, label_id);
+
+ GtkWidget *dialog = gnome_dialog_new(title,
+ NULL);
+
+ gtk_container_add(GTK_CONTAINER(GNOME_DIALOG(dialog)->vbox),
+ gtk_widget_new (gtk_frame_get_type(),
+ "border_width", 4,
+ "label", title,
+ "child", gtk_widget_new(gtk_alignment_get_type(),
+ "child", dialog_entry,
+ "xalign", .5,
+ "yalign", .5,
+ "xscale", 1.0,
+ "yscale", 1.0,
+ "border_width", 9,
+ NULL),
+ NULL));
+
+ gnome_dialog_append_button_with_pixmap(GNOME_DIALOG(dialog),
+ "Add",
+ GNOME_STOCK_PIXMAP_ADD);
+ gnome_dialog_append_button(GNOME_DIALOG(dialog), GNOME_STOCK_BUTTON_CANCEL);
+ gnome_dialog_set_default(GNOME_DIALOG(dialog), 0);
+
+ gtk_signal_connect(GTK_OBJECT(dialog), "clicked",
+ _dialog_clicked, editor);
+ gtk_signal_connect_while_alive(GTK_OBJECT(editor), "destroy",
+ _dialog_destroy, GTK_OBJECT(dialog), GTK_OBJECT(dialog));
+
+ gtk_object_set_data(GTK_OBJECT(dialog),
+ "e_contact_editor_entry", entry);
+ gtk_object_set_data(GTK_OBJECT(dialog),
+ "e_contact_editor_label", label);
+ gtk_object_set_data(GTK_OBJECT(dialog),
+ "e_contact_editor_dialog_entry", dialog_entry);
+ gtk_object_set_data(GTK_OBJECT(dialog),
+ "e_contact_editor_list", list);
+ gtk_object_set_data(GTK_OBJECT(dialog),
+ "e_contact_editor_info", info);
+
+ gtk_widget_show_all(dialog);
+ return dialog;
+}
+
+static void
+_phone_arrow_pressed (GtkWidget *widget, GdkEventButton *button, EContactEditor *editor)
+{
+ int which;
+ int i;
+ gchar *label;
+ gchar *entry;
+ if ( widget == glade_xml_get_widget(editor->gui, "button-phone1") ) {
+ which = 1;
+ } else if ( widget == glade_xml_get_widget(editor->gui, "button-phone2") ) {
+ which = 2;
+ } else if ( widget == glade_xml_get_widget(editor->gui, "button-phone3") ) {
+ which = 3;
+ } else if ( widget == glade_xml_get_widget(editor->gui, "button-phone4") ) {
+ which = 4;
+ } else
+ return;
+
+ label = g_strdup_printf("label-phone%d", which);
+ entry = g_strdup_printf("entry-phone%d", which);
+
+ if (editor->phone_list == NULL) {
+ static char *info[] = {
+ N_("Assistant"),
+ N_("Business"),
+ N_("Business 2"),
+ N_("Business Fax"),
+ N_("Callback"),
+ N_("Car"),
+ N_("Company"),
+ N_("Home"),
+ N_("Home 2"),
+ N_("Home Fax"),
+ N_("ISDN"),
+ N_("Mobile"),
+ N_("Other"),
+ N_("Other Fax"),
+ N_("Pager"),
+ N_("Primary"),
+ N_("Radio"),
+ N_("Telex"),
+ N_("TTY/TDD")
+ };
+
+ for (i = 0; i < sizeof(info) / sizeof(info[0]); i++) {
+ editor->phone_list = g_list_append(editor->phone_list, g_strdup(info[i]));
+ }
+ }
+ if (editor->phone_info == NULL) {
+ e_contact_editor_build_ui_info(editor->phone_list, &editor->phone_info);
+
+ if ( editor->phone_popup )
+ gtk_widget_unref(editor->phone_popup);
+
+ editor->phone_popup = gnome_popup_menu_new(editor->phone_info);
+ }
+
+ _arrow_pressed (widget, button, editor, editor->phone_popup, &editor->phone_list, &editor->phone_info, label, entry, "Add new phone number type");
+
+ g_free(label);
+ g_free(entry);
+}
+
+static void
+_email_arrow_pressed (GtkWidget *widget, GdkEventButton *button, EContactEditor *editor)
+{
+ int i;
+ if (editor->email_list == NULL) {
+ static char *info[] = {
+ N_("Email"),
+ N_("Email 2"),
+ N_("Email 3")
+ };
+
+ for (i = 0; i < sizeof(info) / sizeof(info[0]); i++) {
+ editor->email_list = g_list_append(editor->email_list, g_strdup(info[i]));
+ }
+ }
+ if (editor->email_info == NULL) {
+ e_contact_editor_build_ui_info(editor->email_list, &editor->email_info);
+
+ if ( editor->email_popup )
+ gtk_widget_unref(editor->email_popup);
+
+ editor->email_popup = gnome_popup_menu_new(editor->email_info);
+ }
+
+ _arrow_pressed (widget, button, editor, editor->email_popup, &editor->email_list, &editor->email_info, "label-email1", "entry-email1", "Add new Email type");
+}
+
+static void
+_address_arrow_pressed (GtkWidget *widget, GdkEventButton *button, EContactEditor *editor)
+{
+ int i;
+ if (editor->address_list == NULL) {
+ static char *info[] = {
+ N_("Business"),
+ N_("Home"),
+ N_("Other")
+ };
+
+ for (i = 0; i < sizeof(info) / sizeof(info[0]); i++) {
+ editor->address_list = g_list_append(editor->address_list, g_strdup(info[i]));
+ }
+ }
+ if (editor->address_info == NULL) {
+ e_contact_editor_build_ui_info(editor->address_list, &editor->address_info);
+
+ if ( editor->address_popup )
+ gtk_widget_unref(editor->address_popup);
+
+ editor->address_popup = gnome_popup_menu_new(editor->address_info);
+ }
+
+ _arrow_pressed (widget, button, editor, editor->address_popup, &editor->address_list, &editor->address_info, "label-address1", "entry-address1", "Add new Address type");
+}
diff --git a/addressbook/contact-editor/e-contact-editor.h b/addressbook/contact-editor/e-contact-editor.h
index 45f3ae5597..7b914967ee 100644
--- a/addressbook/contact-editor/e-contact-editor.h
+++ b/addressbook/contact-editor/e-contact-editor.h
@@ -22,6 +22,7 @@
#define __E_CONTACT_EDITOR_H__
#include <gnome.h>
+#include <glade/glade.h>
#ifdef __cplusplus
extern "C" {
@@ -49,17 +50,26 @@ typedef struct _EContactEditorClass EContactEditorClass;
struct _EContactEditor
{
- GtkNotebook parent;
+ GtkVBox parent;
/* item specific fields */
/* ECard *card; */
- GList *fields; /* Of type GnomeCanvasItem. */
+ GladeXML *gui;
+ GnomeUIInfo *email_info;
+ GnomeUIInfo *phone_info;
+ GnomeUIInfo *address_info;
+ GtkWidget *email_popup;
+ GtkWidget *phone_popup;
+ GtkWidget *address_popup;
+ GList *email_list;
+ GList *phone_list;
+ GList *address_list;
};
struct _EContactEditorClass
{
- GtkNotebookClass parent_class;
+ GtkVBoxClass parent_class;
};
diff --git a/addressbook/contact-editor/netfreebusy.png b/addressbook/contact-editor/netfreebusy.png
new file mode 100644
index 0000000000..09ec8a2a5c
--- /dev/null
+++ b/addressbook/contact-editor/netfreebusy.png
Binary files differ
diff --git a/addressbook/contact-editor/netmeeting.png b/addressbook/contact-editor/netmeeting.png
new file mode 100644
index 0000000000..4cb90c121e
--- /dev/null
+++ b/addressbook/contact-editor/netmeeting.png
Binary files differ
diff --git a/addressbook/contact-editor/test-editor.c b/addressbook/contact-editor/test-editor.c
index 737c3028c4..49ed7e48bf 100644
--- a/addressbook/contact-editor/test-editor.c
+++ b/addressbook/contact-editor/test-editor.c
@@ -23,6 +23,7 @@
#include "config.h"
#include <gnome.h>
+#include <glade/glade.h>
#include "e-contact-editor.h"
/* This is a horrible thing to do, but it is just a test. */
@@ -30,7 +31,10 @@ GtkWidget *editor;
static void destroy_callback(GtkWidget *app, gpointer data)
{
- exit(0);
+ static int count = 2;
+ count --;
+ if ( count <= 0 )
+ exit(0);
}
static void about_callback( GtkWidget *widget, gpointer data )
@@ -59,6 +63,22 @@ int main( int argc, char *argv[] )
textdomain (PACKAGE);*/
gnome_init( "Contact Editor Test", VERSION, argc, argv);
+
+ glade_gnome_init ();
+
+ app = gnome_app_new("Contact Editor Test", NULL);
+
+ editor = e_contact_editor_new(NULL);
+
+ gnome_app_set_contents( GNOME_APP( app ), editor );
+
+ /* Connect the signals */
+ gtk_signal_connect( GTK_OBJECT( app ), "destroy",
+ GTK_SIGNAL_FUNC( destroy_callback ),
+ ( gpointer ) app );
+
+ gtk_widget_show_all( app );
+
app = gnome_app_new("Contact Editor Test", NULL);
editor = e_contact_editor_new(NULL);
diff --git a/addressbook/gui/contact-editor/Makefile.am b/addressbook/gui/contact-editor/Makefile.am
index 0286af7c49..4892d51bbb 100644
--- a/addressbook/gui/contact-editor/Makefile.am
+++ b/addressbook/gui/contact-editor/Makefile.am
@@ -1,4 +1,13 @@
+images = email.png head.png phone.png snailmail.png web.png arrow.png briefcase.png netmeeting.png netfreebusy.png
+
+EXTRA_DIST = $(images)
+pkgdata_DATA = $(images)
+
+CPPFLAGS = \
+ -DEVOLUTION_GLADEDIR=\""$(gladedir)"\" \
+ -DDATADIR=\""$(datadir)"\"
+
INCLUDES = \
$(GNOME_INCLUDEDIR)
@@ -17,4 +26,10 @@ contact_editor_test_SOURCES = \
contact_editor_test_LDADD = \
$(EXTRA_GNOME_LIBS) \
- libecontacteditor.a
+ libecontacteditor.a
+
+gladedir = $(datadir)/evolution/glade
+
+glade_DATA = \
+ contact-editor.glade
+
diff --git a/addressbook/gui/contact-editor/arrow.png b/addressbook/gui/contact-editor/arrow.png
new file mode 100644
index 0000000000..b7f782c1e5
--- /dev/null
+++ b/addressbook/gui/contact-editor/arrow.png
Binary files differ
diff --git a/addressbook/gui/contact-editor/briefcase.png b/addressbook/gui/contact-editor/briefcase.png
new file mode 100644
index 0000000000..dd59b8fd39
--- /dev/null
+++ b/addressbook/gui/contact-editor/briefcase.png
Binary files differ
diff --git a/addressbook/gui/contact-editor/contact-editor.glade b/addressbook/gui/contact-editor/contact-editor.glade
new file mode 100644
index 0000000000..87251a6f6f
--- /dev/null
+++ b/addressbook/gui/contact-editor/contact-editor.glade
@@ -0,0 +1,2198 @@
+<?xml version="1.0"?>
+<GTK-Interface>
+
+<project>
+ <name>Contact-editor</name>
+ <program_name>contact-editor</program_name>
+ <directory></directory>
+ <source_directory>src</source_directory>
+ <pixmaps_directory>pixmaps</pixmaps_directory>
+ <language>C</language>
+ <gnome_support>True</gnome_support>
+ <gettext_support>True</gettext_support>
+ <use_widget_names>True</use_widget_names>
+ <output_main_file>False</output_main_file>
+ <output_support_files>False</output_support_files>
+ <output_build_files>False</output_build_files>
+ <backup_source_files>False</backup_source_files>
+ <main_source_file>interface.c</main_source_file>
+ <main_header_file>interface.h</main_header_file>
+ <handler_source_file>callbacks.c</handler_source_file>
+ <handler_header_file>callbacks.h</handler_header_file>
+ <support_source_file>support.c</support_source_file>
+ <support_header_file>support.h</support_header_file>
+ <output_translatable_strings>True</output_translatable_strings>
+ <translatable_strings_file>e-contact-editor-strings.h</translatable_strings_file>
+</project>
+
+<widget>
+ <class>GtkWindow</class>
+ <name>contact editor</name>
+ <visible>False</visible>
+ <title>Contact Editor</title>
+ <type>GTK_WINDOW_TOPLEVEL</type>
+ <position>GTK_WIN_POS_NONE</position>
+ <allow_shrink>False</allow_shrink>
+ <allow_grow>True</allow_grow>
+ <auto_shrink>False</auto_shrink>
+
+ <widget>
+ <class>GtkNotebook</class>
+ <name>notebook-contact-editor</name>
+ <can_focus>True</can_focus>
+ <show_tabs>True</show_tabs>
+ <show_border>True</show_border>
+ <tab_pos>GTK_POS_TOP</tab_pos>
+ <scrollable>False</scrollable>
+ <tab_hborder>2</tab_hborder>
+ <tab_vborder>2</tab_vborder>
+ <popup_enable>False</popup_enable>
+ <num_pages>5</num_pages>
+
+ <widget>
+ <class>GtkTable</class>
+ <name>table-contact-editor-general</name>
+ <border_width>7</border_width>
+ <rows>12</rows>
+ <columns>8</columns>
+ <homogeneous>False</homogeneous>
+ <row_spacing>4</row_spacing>
+ <column_spacing>4</column_spacing>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry-phone1</name>
+ <child>
+ <left_attach>7</left_attach>
+ <right_attach>8</right_attach>
+ <top_attach>0</top_attach>
+ <bottom_attach>1</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry-phone2</name>
+ <child>
+ <left_attach>7</left_attach>
+ <right_attach>8</right_attach>
+ <top_attach>1</top_attach>
+ <bottom_attach>2</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry-phone3</name>
+ <child>
+ <left_attach>7</left_attach>
+ <right_attach>8</right_attach>
+ <top_attach>2</top_attach>
+ <bottom_attach>3</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry-phone4</name>
+ <child>
+ <left_attach>7</left_attach>
+ <right_attach>8</right_attach>
+ <top_attach>3</top_attach>
+ <bottom_attach>4</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry-fullname</name>
+ <child>
+ <left_attach>3</left_attach>
+ <right_attach>4</right_attach>
+ <top_attach>0</top_attach>
+ <bottom_attach>1</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry-web</name>
+ <child>
+ <left_attach>3</left_attach>
+ <right_attach>4</right_attach>
+ <top_attach>8</top_attach>
+ <bottom_attach>9</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label-phone3</name>
+ <child>
+ <left_attach>5</left_attach>
+ <right_attach>6</right_attach>
+ <top_attach>2</top_attach>
+ <bottom_attach>3</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <label>Business Fax</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label-phone2</name>
+ <child>
+ <left_attach>5</left_attach>
+ <right_attach>6</right_attach>
+ <top_attach>1</top_attach>
+ <bottom_attach>2</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <label>Home</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label-phone1</name>
+ <child>
+ <left_attach>5</left_attach>
+ <right_attach>6</right_attach>
+ <top_attach>0</top_attach>
+ <bottom_attach>1</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <label>Business</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label-phone4</name>
+ <child>
+ <left_attach>5</left_attach>
+ <right_attach>6</right_attach>
+ <top_attach>3</top_attach>
+ <bottom_attach>4</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <label>Mobile</label>
+ <justify>GTK_JUSTIFY_LEFT</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkText</class>
+ <name>text-address</name>
+ <child>
+ <left_attach>7</left_attach>
+ <right_attach>8</right_attach>
+ <top_attach>5</top_attach>
+ <bottom_attach>9</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <width>1</width>
+ <height>1</height>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label-email1</name>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>2</right_attach>
+ <top_attach>5</top_attach>
+ <bottom_attach>6</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <label>Email</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button-fullname</name>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>3</right_attach>
+ <top_attach>0</top_attach>
+ <bottom_attach>1</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <label> Full Name...</label>
+ </widget>
+
+ <widget>
+ <class>GtkAccelLabel</class>
+ <name>accellabel-jobtitle</name>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>3</right_attach>
+ <top_attach>1</top_attach>
+ <bottom_attach>2</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <label>Job Title:</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkAccelLabel</class>
+ <name>accellabel-company</name>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>3</right_attach>
+ <top_attach>2</top_attach>
+ <bottom_attach>3</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <label>Company:</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkAccelLabel</class>
+ <name>accellabel-fileas</name>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>3</right_attach>
+ <top_attach>3</top_attach>
+ <bottom_attach>4</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <label>File As:</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkAccelLabel</class>
+ <name>accellabel-web</name>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>3</right_attach>
+ <top_attach>8</top_attach>
+ <bottom_attach>9</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <label>Web page address:</label>
+ <justify>GTK_JUSTIFY_LEFT</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkHBox</class>
+ <name>hbox5</name>
+ <child>
+ <left_attach>0</left_attach>
+ <right_attach>8</right_attach>
+ <top_attach>10</top_attach>
+ <bottom_attach>11</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>True</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <homogeneous>False</homogeneous>
+ <spacing>0</spacing>
+
+ <widget>
+ <class>GtkText</class>
+ <name>text-comments</name>
+ <child>
+ <padding>0</padding>
+ <expand>True</expand>
+ <fill>True</fill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkVScrollbar</class>
+ <name>vscrollbar-comments</name>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>False</fill>
+ </child>
+ <policy>GTK_UPDATE_CONTINUOUS</policy>
+ <vvalue>0</vvalue>
+ <vlower>0</vlower>
+ <vupper>0</vupper>
+ <vstep>0</vstep>
+ <vpage>0</vpage>
+ <vpage_size>0</vpage_size>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkHBox</class>
+ <name>hbox3</name>
+ <child>
+ <left_attach>0</left_attach>
+ <right_attach>8</right_attach>
+ <top_attach>11</top_attach>
+ <bottom_attach>12</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <homogeneous>False</homogeneous>
+ <spacing>6</spacing>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button-contacts</name>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>False</fill>
+ </child>
+ <can_focus>True</can_focus>
+ <label>Contacts...</label>
+ </widget>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry-contacts</name>
+ <child>
+ <padding>0</padding>
+ <expand>True</expand>
+ <fill>True</fill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button-categories</name>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>False</fill>
+ </child>
+ <can_focus>True</can_focus>
+ <label>Categories...</label>
+ </widget>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry-categories</name>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>False</fill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkAlignment</class>
+ <name>alignment2</name>
+ <child>
+ <left_attach>7</left_attach>
+ <right_attach>8</right_attach>
+ <top_attach>9</top_attach>
+ <bottom_attach>10</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <xalign>0</xalign>
+ <yalign>0</yalign>
+ <xscale>0</xscale>
+ <yscale>0</yscale>
+
+ <widget>
+ <class>GtkCheckButton</class>
+ <name>checkbutton-mailingaddress</name>
+ <can_focus>True</can_focus>
+ <label>This is the mailing address</label>
+ <active>False</active>
+ <draw_indicator>True</draw_indicator>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button-address</name>
+ <child>
+ <left_attach>5</left_attach>
+ <right_attach>7</right_attach>
+ <top_attach>5</top_attach>
+ <bottom_attach>6</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <label>A_ddress...</label>
+ </widget>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry-jobtitle</name>
+ <child>
+ <left_attach>3</left_attach>
+ <right_attach>4</right_attach>
+ <top_attach>1</top_attach>
+ <bottom_attach>2</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry-company</name>
+ <child>
+ <left_attach>3</left_attach>
+ <right_attach>4</right_attach>
+ <top_attach>2</top_attach>
+ <bottom_attach>3</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkCombo</class>
+ <name>combo-fileas</name>
+ <child>
+ <left_attach>3</left_attach>
+ <right_attach>4</right_attach>
+ <top_attach>3</top_attach>
+ <bottom_attach>4</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <case_sensitive>True</case_sensitive>
+ <use_arrows>True</use_arrows>
+ <use_arrows_always>False</use_arrows_always>
+ <items></items>
+ </widget>
+
+ <widget>
+ <class>GtkHBox</class>
+ <name>hbox4</name>
+ <child>
+ <left_attach>3</left_attach>
+ <right_attach>4</right_attach>
+ <top_attach>5</top_attach>
+ <bottom_attach>6</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <homogeneous>False</homogeneous>
+ <spacing>4</spacing>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry-email1</name>
+ <child>
+ <padding>0</padding>
+ <expand>True</expand>
+ <fill>True</fill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button23</name>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>False</fill>
+ </child>
+
+ <widget>
+ <class>Placeholder</class>
+ </widget>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkAlignment</class>
+ <name>alignment3</name>
+ <child>
+ <left_attach>2</left_attach>
+ <right_attach>3</right_attach>
+ <top_attach>5</top_attach>
+ <bottom_attach>6</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <xalign>1</xalign>
+ <yalign>0.5</yalign>
+ <xscale>0</xscale>
+ <yscale>1</yscale>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button-email1</name>
+ <can_focus>True</can_focus>
+
+ <widget>
+ <class>Placeholder</class>
+ </widget>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkAlignment</class>
+ <name>alignment4</name>
+ <child>
+ <left_attach>6</left_attach>
+ <right_attach>7</right_attach>
+ <top_attach>6</top_attach>
+ <bottom_attach>7</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <xalign>1</xalign>
+ <yalign>0.5</yalign>
+ <xscale>0</xscale>
+ <yscale>1</yscale>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button-address1</name>
+ <can_focus>True</can_focus>
+
+ <widget>
+ <class>Placeholder</class>
+ </widget>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkAlignment</class>
+ <name>alignment5</name>
+ <child>
+ <left_attach>6</left_attach>
+ <right_attach>7</right_attach>
+ <top_attach>3</top_attach>
+ <bottom_attach>4</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <xalign>1</xalign>
+ <yalign>0.5</yalign>
+ <xscale>0</xscale>
+ <yscale>0</yscale>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button-phone4</name>
+ <can_focus>True</can_focus>
+
+ <widget>
+ <class>Placeholder</class>
+ </widget>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkAlignment</class>
+ <name>alignment7</name>
+ <child>
+ <left_attach>6</left_attach>
+ <right_attach>7</right_attach>
+ <top_attach>1</top_attach>
+ <bottom_attach>2</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <xalign>1</xalign>
+ <yalign>0.5</yalign>
+ <xscale>0</xscale>
+ <yscale>0</yscale>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button-phone2</name>
+ <can_focus>True</can_focus>
+
+ <widget>
+ <class>Placeholder</class>
+ </widget>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkAlignment</class>
+ <name>alignment8</name>
+ <child>
+ <left_attach>6</left_attach>
+ <right_attach>7</right_attach>
+ <top_attach>0</top_attach>
+ <bottom_attach>1</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <xalign>1</xalign>
+ <yalign>0.5</yalign>
+ <xscale>0</xscale>
+ <yscale>0</yscale>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button-phone1</name>
+ <can_focus>True</can_focus>
+
+ <widget>
+ <class>Placeholder</class>
+ </widget>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label-address1</name>
+ <child>
+ <left_attach>5</left_attach>
+ <right_attach>6</right_attach>
+ <top_attach>6</top_attach>
+ <bottom_attach>7</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <label>Business</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkHSeparator</class>
+ <name>hseparator6</name>
+ <child>
+ <left_attach>0</left_attach>
+ <right_attach>4</right_attach>
+ <top_attach>7</top_attach>
+ <bottom_attach>8</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>2</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ </widget>
+
+ <widget>
+ <class>GtkHSeparator</class>
+ <name>hseparator4</name>
+ <child>
+ <left_attach>4</left_attach>
+ <right_attach>8</right_attach>
+ <top_attach>4</top_attach>
+ <bottom_attach>5</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>2</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ </widget>
+
+ <widget>
+ <class>GtkHSeparator</class>
+ <name>hseparator5</name>
+ <child>
+ <left_attach>0</left_attach>
+ <right_attach>4</right_attach>
+ <top_attach>4</top_attach>
+ <bottom_attach>5</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>2</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ </widget>
+
+ <widget>
+ <class>GtkAlignment</class>
+ <name>alignment6</name>
+ <child>
+ <left_attach>6</left_attach>
+ <right_attach>7</right_attach>
+ <top_attach>2</top_attach>
+ <bottom_attach>3</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <xalign>1</xalign>
+ <yalign>0.5</yalign>
+ <xscale>0</xscale>
+ <yscale>0</yscale>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button-phone3</name>
+ <can_focus>True</can_focus>
+
+ <widget>
+ <class>Placeholder</class>
+ </widget>
+ </widget>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <child_name>Notebook:tab</child_name>
+ <name>label15</name>
+ <label>General</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0.5</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkTable</class>
+ <name>table-contact-editor-details</name>
+ <border_width>7</border_width>
+ <rows>12</rows>
+ <columns>6</columns>
+ <homogeneous>False</homogeneous>
+ <row_spacing>4</row_spacing>
+ <column_spacing>4</column_spacing>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label21</name>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>2</right_attach>
+ <top_attach>0</top_attach>
+ <bottom_attach>1</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <label>Department:</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label22</name>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>2</right_attach>
+ <top_attach>1</top_attach>
+ <bottom_attach>2</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <label>Office:</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label23</name>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>2</right_attach>
+ <top_attach>2</top_attach>
+ <bottom_attach>3</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <label>Profession:</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label24</name>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>2</right_attach>
+ <top_attach>4</top_attach>
+ <bottom_attach>5</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <label>Nickname:</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label25</name>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>2</right_attach>
+ <top_attach>5</top_attach>
+ <bottom_attach>6</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <label>Spouse's name:</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label26</name>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>2</right_attach>
+ <top_attach>7</top_attach>
+ <bottom_attach>8</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <label>Directory Server:</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label27</name>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>2</right_attach>
+ <top_attach>8</top_attach>
+ <bottom_attach>9</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <label>Email alias:</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label28</name>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>2</right_attach>
+ <top_attach>10</top_attach>
+ <bottom_attach>11</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <label>Address:</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label31</name>
+ <child>
+ <left_attach>3</left_attach>
+ <right_attach>4</right_attach>
+ <top_attach>4</top_attach>
+ <bottom_attach>5</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <label>Birthday:</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label30</name>
+ <child>
+ <left_attach>3</left_attach>
+ <right_attach>4</right_attach>
+ <top_attach>1</top_attach>
+ <bottom_attach>2</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <label>Assistant's name:</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label29</name>
+ <child>
+ <left_attach>3</left_attach>
+ <right_attach>4</right_attach>
+ <top_attach>0</top_attach>
+ <bottom_attach>1</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <label>Manager's name:</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label32</name>
+ <child>
+ <left_attach>3</left_attach>
+ <right_attach>4</right_attach>
+ <top_attach>5</top_attach>
+ <bottom_attach>6</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <label>Anniversary:</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry4</name>
+ <child>
+ <left_attach>2</left_attach>
+ <right_attach>3</right_attach>
+ <top_attach>5</top_attach>
+ <bottom_attach>6</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry5</name>
+ <child>
+ <left_attach>2</left_attach>
+ <right_attach>3</right_attach>
+ <top_attach>0</top_attach>
+ <bottom_attach>1</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry6</name>
+ <child>
+ <left_attach>2</left_attach>
+ <right_attach>3</right_attach>
+ <top_attach>1</top_attach>
+ <bottom_attach>2</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry7</name>
+ <child>
+ <left_attach>2</left_attach>
+ <right_attach>3</right_attach>
+ <top_attach>2</top_attach>
+ <bottom_attach>3</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry8</name>
+ <child>
+ <left_attach>2</left_attach>
+ <right_attach>3</right_attach>
+ <top_attach>4</top_attach>
+ <bottom_attach>5</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry9</name>
+ <child>
+ <left_attach>2</left_attach>
+ <right_attach>6</right_attach>
+ <top_attach>7</top_attach>
+ <bottom_attach>8</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry10</name>
+ <child>
+ <left_attach>2</left_attach>
+ <right_attach>5</right_attach>
+ <top_attach>8</top_attach>
+ <bottom_attach>9</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry11</name>
+ <child>
+ <left_attach>2</left_attach>
+ <right_attach>6</right_attach>
+ <top_attach>10</top_attach>
+ <bottom_attach>11</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GnomeDateEdit</class>
+ <name>dateedit2</name>
+ <child>
+ <left_attach>4</left_attach>
+ <right_attach>6</right_attach>
+ <top_attach>5</top_attach>
+ <bottom_attach>6</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <show_time>False</show_time>
+ <use_24_format>False</use_24_format>
+ <week_start_monday>False</week_start_monday>
+ <lower_hour>7</lower_hour>
+ <upper_hour>19</upper_hour>
+ </widget>
+
+ <widget>
+ <class>GnomeDateEdit</class>
+ <name>dateedit1</name>
+ <child>
+ <left_attach>4</left_attach>
+ <right_attach>6</right_attach>
+ <top_attach>4</top_attach>
+ <bottom_attach>5</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <show_time>False</show_time>
+ <use_24_format>False</use_24_format>
+ <week_start_monday>False</week_start_monday>
+ <lower_hour>7</lower_hour>
+ <upper_hour>19</upper_hour>
+ </widget>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry13</name>
+ <child>
+ <left_attach>4</left_attach>
+ <right_attach>6</right_attach>
+ <top_attach>1</top_attach>
+ <bottom_attach>2</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry12</name>
+ <child>
+ <left_attach>4</left_attach>
+ <right_attach>6</right_attach>
+ <top_attach>0</top_attach>
+ <bottom_attach>1</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button-callnow</name>
+ <child>
+ <left_attach>5</left_attach>
+ <right_attach>6</right_attach>
+ <top_attach>8</top_attach>
+ <bottom_attach>9</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <label>Call Now</label>
+ </widget>
+
+ <widget>
+ <class>GtkHBox</class>
+ <name>hbox7</name>
+ <child>
+ <left_attach>0</left_attach>
+ <right_attach>6</right_attach>
+ <top_attach>9</top_attach>
+ <bottom_attach>10</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <homogeneous>False</homogeneous>
+ <spacing>6</spacing>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label33</name>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>False</fill>
+ </child>
+ <label>Internet Free-Busy</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0.5</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>2</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkHSeparator</class>
+ <name>hseparator8</name>
+ <child>
+ <padding>0</padding>
+ <expand>True</expand>
+ <fill>True</fill>
+ </child>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkHBox</class>
+ <name>hbox8</name>
+ <child>
+ <left_attach>0</left_attach>
+ <right_attach>6</right_attach>
+ <top_attach>6</top_attach>
+ <bottom_attach>7</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <homogeneous>False</homogeneous>
+ <spacing>6</spacing>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label34</name>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>False</fill>
+ </child>
+ <label>Online NetMeeting settings</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0.5</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>2</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkHSeparator</class>
+ <name>hseparator9</name>
+ <child>
+ <padding>0</padding>
+ <expand>True</expand>
+ <fill>True</fill>
+ </child>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkHSeparator</class>
+ <name>hseparator7</name>
+ <child>
+ <left_attach>0</left_attach>
+ <right_attach>6</right_attach>
+ <top_attach>3</top_attach>
+ <bottom_attach>4</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>2</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <child_name>Notebook:tab</child_name>
+ <name>label16</name>
+ <label>Details</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0.5</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkText</class>
+ <name>text3</name>
+ <can_focus>True</can_focus>
+ <editable>False</editable>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <child_name>Notebook:tab</child_name>
+ <name>label17</name>
+ <label>Activities</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0.5</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkText</class>
+ <name>text2</name>
+ <can_focus>True</can_focus>
+ <editable>False</editable>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <child_name>Notebook:tab</child_name>
+ <name>label18</name>
+ <label>Certificates</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0.5</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+
+ <widget>
+ <class>GtkText</class>
+ <name>text4</name>
+ <can_focus>True</can_focus>
+ <editable>False</editable>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <child_name>Notebook:tab</child_name>
+ <name>label19</name>
+ <label>All Fields</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0.5</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+ </widget>
+</widget>
+
+<widget>
+ <class>GnomeDialog</class>
+ <name>dialog2</name>
+ <visible>False</visible>
+ <auto_close>False</auto_close>
+ <hide_on_close>False</hide_on_close>
+ <allow_shrink>False</allow_shrink>
+ <allow_grow>False</allow_grow>
+ <auto_shrink>False</auto_shrink>
+
+ <widget>
+ <class>GtkVBox</class>
+ <child_name>GnomeDialog:vbox</child_name>
+ <name>dialog-vbox2</name>
+ <child>
+ <padding>4</padding>
+ <expand>True</expand>
+ <fill>True</fill>
+ </child>
+ <homogeneous>False</homogeneous>
+ <spacing>8</spacing>
+
+ <widget>
+ <class>GtkTable</class>
+ <name>table2</name>
+ <child>
+ <padding>0</padding>
+ <expand>True</expand>
+ <fill>True</fill>
+ </child>
+ <rows>2</rows>
+ <columns>2</columns>
+ <homogeneous>False</homogeneous>
+ <row_spacing>0</row_spacing>
+ <column_spacing>0</column_spacing>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry2</name>
+ <child>
+ <left_attach>0</left_attach>
+ <right_attach>2</right_attach>
+ <top_attach>1</top_attach>
+ <bottom_attach>2</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+
+ <widget>
+ <class>GtkVBox</class>
+ <name>vbox1</name>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>2</right_attach>
+ <top_attach>0</top_attach>
+ <bottom_attach>1</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>True</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <homogeneous>False</homogeneous>
+ <spacing>0</spacing>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button31</name>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>False</fill>
+ </child>
+ <can_focus>True</can_focus>
+ <label>Add</label>
+ </widget>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button32</name>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>False</fill>
+ </child>
+ <can_focus>True</can_focus>
+ <label>Delete</label>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkScrolledWindow</class>
+ <name>scrolledwindow1</name>
+ <child>
+ <left_attach>0</left_attach>
+ <right_attach>1</right_attach>
+ <top_attach>0</top_attach>
+ <bottom_attach>1</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>True</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ <height>200</height>
+ <hscrollbar_policy>GTK_POLICY_ALWAYS</hscrollbar_policy>
+ <vscrollbar_policy>GTK_POLICY_ALWAYS</vscrollbar_policy>
+ <hupdate_policy>GTK_UPDATE_CONTINUOUS</hupdate_policy>
+ <vupdate_policy>GTK_UPDATE_CONTINUOUS</vupdate_policy>
+
+ <widget>
+ <class>GtkCList</class>
+ <name>clist1</name>
+ <can_focus>True</can_focus>
+ <columns>1</columns>
+ <column_widths>80</column_widths>
+ <selection_mode>GTK_SELECTION_SINGLE</selection_mode>
+ <show_titles>True</show_titles>
+ <shadow_type>GTK_SHADOW_NONE</shadow_type>
+
+ <widget>
+ <class>GtkLabel</class>
+ <child_name>CList:title</child_name>
+ <name>label20</name>
+ <label>Phone Types</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0.5</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+ </widget>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkHButtonBox</class>
+ <child_name>GnomeDialog:action_area</child_name>
+ <name>dialog-action_area2</name>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>True</fill>
+ <pack>GTK_PACK_END</pack>
+ </child>
+ <layout_style>GTK_BUTTONBOX_END</layout_style>
+ <spacing>8</spacing>
+ <child_min_width>85</child_min_width>
+ <child_min_height>27</child_min_height>
+ <child_ipad_x>7</child_ipad_x>
+ <child_ipad_y>0</child_ipad_y>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button28</name>
+ <can_default>True</can_default>
+ <can_focus>True</can_focus>
+ <stock_button>GNOME_STOCK_BUTTON_OK</stock_button>
+ </widget>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button29</name>
+ <can_default>True</can_default>
+ <can_focus>True</can_focus>
+ <stock_button>GNOME_STOCK_BUTTON_APPLY</stock_button>
+ </widget>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button30</name>
+ <can_default>True</can_default>
+ <can_focus>True</can_focus>
+ <stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button>
+ </widget>
+ </widget>
+ </widget>
+</widget>
+
+<widget>
+ <class>GnomeDialog</class>
+ <name>dialog-add-phone</name>
+ <visible>False</visible>
+ <title>New phone type</title>
+ <auto_close>False</auto_close>
+ <hide_on_close>False</hide_on_close>
+ <allow_shrink>False</allow_shrink>
+ <allow_grow>False</allow_grow>
+ <auto_shrink>False</auto_shrink>
+
+ <widget>
+ <class>GtkVBox</class>
+ <child_name>GnomeDialog:vbox</child_name>
+ <name>vbox2</name>
+ <child>
+ <padding>4</padding>
+ <expand>True</expand>
+ <fill>True</fill>
+ </child>
+ <homogeneous>False</homogeneous>
+ <spacing>8</spacing>
+
+ <widget>
+ <class>GtkFrame</class>
+ <name>frame-add-phone</name>
+ <border_width>4</border_width>
+ <child>
+ <padding>0</padding>
+ <expand>True</expand>
+ <fill>True</fill>
+ </child>
+ <label>New phone type</label>
+ <label_xalign>0</label_xalign>
+ <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
+
+ <widget>
+ <class>GtkAlignment</class>
+ <name>alignment9</name>
+ <border_width>9</border_width>
+ <xalign>0.5</xalign>
+ <yalign>0.5</yalign>
+ <xscale>1</xscale>
+ <yscale>1</yscale>
+
+ <widget>
+ <class>GtkEntry</class>
+ <name>entry-add-phone</name>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkHButtonBox</class>
+ <child_name>GnomeDialog:action_area</child_name>
+ <name>hbuttonbox1</name>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>True</fill>
+ <pack>GTK_PACK_END</pack>
+ </child>
+ <layout_style>GTK_BUTTONBOX_END</layout_style>
+ <spacing>8</spacing>
+ <child_min_width>85</child_min_width>
+ <child_min_height>27</child_min_height>
+ <child_ipad_x>7</child_ipad_x>
+ <child_ipad_y>0</child_ipad_y>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button43</name>
+ <can_default>True</can_default>
+ <can_focus>True</can_focus>
+ <label>Add</label>
+ <stock_pixmap>GNOME_STOCK_PIXMAP_ADD</stock_pixmap>
+ </widget>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button44</name>
+ <can_default>True</can_default>
+ <can_focus>True</can_focus>
+ <stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button>
+ </widget>
+ </widget>
+ </widget>
+</widget>
+
+</GTK-Interface>
diff --git a/addressbook/gui/contact-editor/e-contact-editor-strings.h b/addressbook/gui/contact-editor/e-contact-editor-strings.h
new file mode 100644
index 0000000000..131dd6fdf4
--- /dev/null
+++ b/addressbook/gui/contact-editor/e-contact-editor-strings.h
@@ -0,0 +1,48 @@
+/*
+ * 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_("Contact Editor");
+gchar *s = N_("Business Fax");
+gchar *s = N_("Home");
+gchar *s = N_("Business");
+gchar *s = N_("Mobile");
+gchar *s = N_("Email");
+gchar *s = N_("\tFull Name...");
+gchar *s = N_("Job Title:");
+gchar *s = N_("Company:");
+gchar *s = N_("File As:");
+gchar *s = N_("Web page address:");
+gchar *s = N_("Contacts...");
+gchar *s = N_("Categories...");
+gchar *s = N_("This is the mailing address");
+gchar *s = N_("A_ddress...");
+gchar *s = N_("Business");
+gchar *s = N_("General");
+gchar *s = N_("Department:");
+gchar *s = N_("Office:");
+gchar *s = N_("Profession:");
+gchar *s = N_("Nickname:");
+gchar *s = N_("Spouse's name:");
+gchar *s = N_("Directory Server:");
+gchar *s = N_("Email alias:");
+gchar *s = N_("Address:");
+gchar *s = N_("Birthday:");
+gchar *s = N_("Assistant's name:");
+gchar *s = N_("Manager's name:");
+gchar *s = N_("Anniversary:");
+gchar *s = N_("Call Now");
+gchar *s = N_("Internet Free-Busy");
+gchar *s = N_("Online NetMeeting settings");
+gchar *s = N_("Details");
+gchar *s = N_("Activities");
+gchar *s = N_("Certificates");
+gchar *s = N_("All Fields");
+gchar *s = N_("Add");
+gchar *s = N_("Delete");
+gchar *s = N_("Phone Types");
+gchar *s = N_("New phone type");
+gchar *s = N_("New phone type");
+gchar *s = N_("Add");
diff --git a/addressbook/gui/contact-editor/e-contact-editor.c b/addressbook/gui/contact-editor/e-contact-editor.c
index 73b48a7eb8..6a6c6d982e 100644
--- a/addressbook/gui/contact-editor/e-contact-editor.c
+++ b/addressbook/gui/contact-editor/e-contact-editor.c
@@ -26,8 +26,14 @@ static void e_contact_editor_init (EContactEditor *card);
static void e_contact_editor_class_init (EContactEditorClass *klass);
static void e_contact_editor_set_arg (GtkObject *o, GtkArg *arg, guint arg_id);
static void e_contact_editor_get_arg (GtkObject *object, GtkArg *arg, guint arg_id);
+static void e_contact_editor_destroy (GtkObject *object);
-static GtkNotebookClass *parent_class = NULL;
+static GtkWidget *e_contact_editor_build_dialog(EContactEditor *editor, gchar *entry_id, gchar *label_id, gchar *title, GList **list, GnomeUIInfo **info);
+static void _email_arrow_pressed (GtkWidget *widget, GdkEventButton *button, EContactEditor *editor);
+static void _phone_arrow_pressed (GtkWidget *widget, GdkEventButton *button, EContactEditor *editor);
+static void _address_arrow_pressed (GtkWidget *widget, GdkEventButton *button, EContactEditor *editor);
+
+static GtkVBoxClass *parent_class = NULL;
#if 0
enum {
@@ -44,6 +50,12 @@ enum {
ARG_CARD
};
+enum {
+ DYNAMIC_LIST_EMAIL,
+ DYNAMIC_LIST_PHONE,
+ DYNAMIC_LIST_ADDRESS
+};
+
GtkType
e_contact_editor_get_type (void)
{
@@ -63,7 +75,7 @@ e_contact_editor_get_type (void)
(GtkClassInitFunc) NULL,
};
- contact_editor_type = gtk_type_unique (gtk_notebook_get_type (), &contact_editor_info);
+ contact_editor_type = gtk_type_unique (gtk_vbox_get_type (), &contact_editor_info);
}
return contact_editor_type;
@@ -73,12 +85,12 @@ static void
e_contact_editor_class_init (EContactEditorClass *klass)
{
GtkObjectClass *object_class;
- GtkNotebookClass *notebook_class;
+ GtkVBoxClass *vbox_class;
object_class = (GtkObjectClass*) klass;
- notebook_class = (GtkNotebookClass *) klass;
+ vbox_class = (GtkVBoxClass *) klass;
- parent_class = gtk_type_class (gtk_notebook_get_type ());
+ parent_class = gtk_type_class (gtk_vbox_get_type ());
#if 0
e_contact_editor_signals[E_CONTACT_EDITOR_RESIZE] =
@@ -98,300 +110,140 @@ e_contact_editor_class_init (EContactEditorClass *klass)
object_class->set_arg = e_contact_editor_set_arg;
object_class->get_arg = e_contact_editor_get_arg;
+ object_class->destroy = e_contact_editor_destroy;
}
-static GtkWidget *
-_create_page_general_name(EContactEditor *e_contact_editor)
-{
- GtkWidget *table;
- GtkWidget *alignment;
- table = gtk_table_new(3, 4, FALSE);
- alignment = gtk_alignment_new(0, 0, 0, 0);
- gtk_container_add(GTK_CONTAINER(alignment),
- gnome_pixmap_new_from_file("head.png"));
- gtk_table_attach(GTK_TABLE(table),
- alignment,
- 0, 1, 0, 4,
- 0, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_label_new(_("Full Name:")),
- 1, 2, 0, 1,
- 0, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_label_new(_("Job Title:")),
- 1, 2, 1, 2,
- 0, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_label_new(_("Company:")),
- 1, 2, 2, 3,
- 0, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_label_new(_("File as:")),
- 1, 2, 3, 4,
- 0, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_entry_new(),
- 2, 3, 0, 1,
- GTK_FILL | GTK_EXPAND, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_entry_new(),
- 2, 3, 1, 2,
- GTK_FILL | GTK_EXPAND, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_entry_new(),
- 2, 3, 2, 3,
- GTK_FILL | GTK_EXPAND, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_combo_new(),
- 2, 3, 3, 4,
- GTK_FILL | GTK_EXPAND, 0,
- 0, 0);
- return table;
-}
-
-static GtkWidget *
-_create_page_general_phone(EContactEditor *e_contact_editor)
-{
- GtkWidget *table;
- GtkWidget *alignment;
- table = gtk_table_new(3, 4, FALSE);
- alignment = gtk_alignment_new(0,0,0,0);
- gtk_container_add(GTK_CONTAINER(alignment),
- gnome_pixmap_new_from_file("phone.png"));
-
- gtk_table_attach(GTK_TABLE(table),
- alignment,
- 0, 1, 0, 4,
- 0, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_label_new(_("Home:")),
- 1, 2, 0, 1,
- 0, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_label_new(_("Car:")),
- 1, 2, 1, 2,
- 0, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_label_new(_("Mobile:")),
- 1, 2, 2, 3,
- 0, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_label_new(_("Business Fax:")),
- 1, 2, 3, 4,
- 0, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_entry_new(),
- 2, 3, 0, 1,
- GTK_FILL | GTK_EXPAND, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_entry_new(),
- 2, 3, 1, 2,
- GTK_FILL | GTK_EXPAND, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_entry_new(),
- 2, 3, 2, 3,
- GTK_FILL | GTK_EXPAND, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_entry_new(),
- 2, 3, 3, 4,
- GTK_FILL | GTK_EXPAND, 0,
- 0, 0);
- return table;
-}
-
-static GtkWidget *
-_create_page_general_email(EContactEditor *e_contact_editor)
-{
- GtkWidget *table;
- GtkWidget *alignment;
- table = gtk_table_new(3, 1, FALSE);
- alignment = gtk_alignment_new(0,0,0,0);
- gtk_container_add(GTK_CONTAINER(alignment),
- gnome_pixmap_new_from_file("email.png"));
-
- gtk_table_attach(GTK_TABLE(table),
- alignment,
- 0, 1, 0, 1,
- 0, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_label_new(_("Email:")),
- 1, 2, 0, 1,
- 0, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_entry_new(),
- 2, 3, 0, 1,
- GTK_FILL | GTK_EXPAND, 0,
- 0, 0);
- return table;
-}
-
-static GtkWidget *
-_create_page_general_web(EContactEditor *e_contact_editor)
+static void
+_add_image(GtkTable *table, gchar *image, int left, int right, int top, int bottom)
{
- GtkWidget *table;
- GtkWidget *alignment;
- table = gtk_table_new(3, 1, FALSE);
- alignment = gtk_alignment_new(0,0,0,0);
- gtk_container_add(GTK_CONTAINER(alignment),
- gnome_pixmap_new_from_file("web.png"));
-
- gtk_table_attach(GTK_TABLE(table),
- alignment,
- 0, 1, 0, 1,
- 0, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_label_new(_("Web page address:")),
- 1, 2, 0, 1,
- 0, 0,
+ gtk_table_attach(table,
+ gtk_widget_new(gtk_alignment_get_type(),
+ "child", gnome_pixmap_new_from_file(image),
+ "xalign", (double) 0,
+ "yalign", (double) 0,
+ "xscale", (double) 0,
+ "yscale", (double) 0,
+ NULL),
+ left, right, top, bottom,
+ GTK_FILL, GTK_FILL,
0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_entry_new(),
- 2, 3, 0, 1,
- GTK_FILL | GTK_EXPAND, 0,
- 0, 0);
- return table;
}
-static GtkWidget *
-_create_page_general_snailmail(EContactEditor *e_contact_editor)
+static void
+_add_images(GtkTable *table)
{
- GtkWidget *table;
- GtkWidget *alignment;
- GtkWidget *text;
- table = gtk_table_new(3, 3, FALSE);
- alignment = gtk_alignment_new(0,0,0,0);
- gtk_container_add(GTK_CONTAINER(alignment),
- gnome_pixmap_new_from_file("snailmail.png"));
-
- gtk_table_attach(GTK_TABLE(table),
- alignment,
- 0, 1, 0, 1,
- 0, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_label_new(_("Address:")),
- 1, 2, 0, 1,
- 0, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_label_new(_("Business:")),
- 1, 2, 1, 2,
- 0, 0,
- 0, 0);
- text = gtk_text_new(NULL, NULL);
- gtk_object_set(GTK_OBJECT(text),
- "editable", TRUE,
- NULL);
- gtk_table_attach(GTK_TABLE(table),
- text,
- 2, 3, 0, 2,
- GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- gtk_check_button_new_with_label(_("This is the mailing address")),
- 2, 3, 2, 3,
- 0, 0,
- 0, 0);
- return table;
+ _add_image(table, DATADIR "/evolution/head.png", 0, 1, 0, 4);
+ _add_image(table, DATADIR "/evolution/phone.png", 4, 5, 0, 4);
+ _add_image(table, DATADIR "/evolution/email.png", 0, 1, 5, 7);
+ _add_image(table, DATADIR "/evolution/web.png", 0, 1, 8, 10);
+ _add_image(table, DATADIR "/evolution/snailmail.png", 4, 5, 5, 10);
}
-static GtkWidget *
-_create_page_general_comments(EContactEditor *e_contact_editor)
+static void
+_add_details_images(GtkTable *table)
{
- GtkWidget *text;
- text = gtk_text_new(NULL, NULL);
- gtk_object_set (GTK_OBJECT(text),
- "editable", TRUE,
- NULL);
- return text;
+ _add_image(table, DATADIR "/evolution/briefcase.png", 0, 1, 0, 2);
+ _add_image(table, DATADIR "/evolution/head.png", 0, 1, 4, 6);
+ _add_image(table, DATADIR "/evolution/netmeeting.png", 0, 1, 7, 9);
+ _add_image(table, DATADIR "/evolution/netfreebusy.png", 0, 1, 10, 12);
}
-static GtkWidget *
-_create_page_general_extras(EContactEditor *e_contact_editor)
+static void
+_replace_button(EContactEditor *editor, gchar *button_xml, gchar *image, GtkSignalFunc func)
{
- return gtk_entry_new();
+ GladeXML *gui = editor->gui;
+ GtkWidget *button = glade_xml_get_widget(gui, button_xml);
+ gchar *image_temp;
+ image_temp = g_strdup_printf("%s%s", DATADIR "/evolution/", image);
+ gtk_container_add(GTK_CONTAINER(button),
+ gnome_pixmap_new_from_file(image_temp));
+ g_free(image_temp);
+ gtk_signal_connect(GTK_OBJECT(button), "button_press_event", func, editor);
+
}
-static GtkWidget *
-_create_page_general( EContactEditor *e_contact_editor )
+static void
+_replace_buttons(EContactEditor *editor)
{
- GtkWidget *table;
- table = gtk_table_new(2, 5, FALSE);
- gtk_table_attach(GTK_TABLE(table),
- _create_page_general_name(e_contact_editor),
- 0, 1,
- 0, 1,
- GTK_FILL | GTK_EXPAND, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- _create_page_general_phone(e_contact_editor),
- 1, 2,
- 0, 1,
- GTK_FILL | GTK_EXPAND, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- _create_page_general_email(e_contact_editor),
- 0, 1,
- 1, 2,
- GTK_FILL | GTK_EXPAND, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- _create_page_general_web(e_contact_editor),
- 0, 1,
- 2, 3,
- GTK_FILL | GTK_EXPAND, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- _create_page_general_snailmail(e_contact_editor),
- 1, 2,
- 1, 3,
- GTK_FILL | GTK_EXPAND, 0,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- _create_page_general_comments(e_contact_editor),
- 0, 2,
- 3, 4,
- GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND,
- 0, 0);
- gtk_table_attach(GTK_TABLE(table),
- _create_page_general_extras(e_contact_editor),
- 0, 2,
- 4, 5,
- GTK_FILL | GTK_EXPAND, 0,
- 0, 0);
- return table;
+ _replace_button(editor, "button-phone1", "arrow.png", _phone_arrow_pressed);
+ _replace_button(editor, "button-phone2", "arrow.png", _phone_arrow_pressed);
+ _replace_button(editor, "button-phone3", "arrow.png", _phone_arrow_pressed);
+ _replace_button(editor, "button-phone4", "arrow.png", _phone_arrow_pressed);
+ _replace_button(editor, "button-address1", "arrow.png", _address_arrow_pressed);
+ _replace_button(editor, "button-email1", "arrow.png", _email_arrow_pressed);
}
static void
e_contact_editor_init (EContactEditor *e_contact_editor)
{
- GtkNotebook *notebook = GTK_NOTEBOOK (e_contact_editor);
+ GladeXML *gui;
+ GtkAdjustment *adjustment;
/* e_contact_editor->card = NULL;*/
- e_contact_editor->fields = NULL;
+ gui = glade_xml_new (EVOLUTION_GLADEDIR "/contact-editor.glade", NULL);
+ e_contact_editor->gui = gui;
+ gtk_widget_reparent(glade_xml_get_widget(gui, "notebook-contact-editor"),
+ GTK_WIDGET(e_contact_editor));
+
+ _add_images(GTK_TABLE(glade_xml_get_widget(gui, "table-contact-editor-general")));
+ _add_details_images(GTK_TABLE(glade_xml_get_widget(gui, "table-contact-editor-details")));
+ _replace_buttons(e_contact_editor);
+
+ gtk_object_get(GTK_OBJECT(glade_xml_get_widget(gui, "text-comments")),
+ "vadjustment", &adjustment,
+ NULL);
+ gtk_range_set_adjustment(GTK_RANGE(glade_xml_get_widget(gui, "vscrollbar-comments")),
+ adjustment);
+
+ e_contact_editor->email_info = NULL;
+ e_contact_editor->phone_info = NULL;
+ e_contact_editor->address_info = NULL;
+ e_contact_editor->email_popup = NULL;
+ e_contact_editor->phone_popup = NULL;
+ e_contact_editor->address_popup = NULL;
+ e_contact_editor->email_list = NULL;
+ e_contact_editor->phone_list = NULL;
+ e_contact_editor->address_list = NULL;
+}
+
+void
+e_contact_editor_destroy (GtkObject *object) {
+ EContactEditor *e_contact_editor = E_CONTACT_EDITOR(object);
+
+ if (e_contact_editor->email_list) {
+ g_list_foreach(e_contact_editor->email_list, (GFunc) g_free, NULL);
+ g_list_free(e_contact_editor->email_list);
+ }
+ if (e_contact_editor->email_info) {
+ g_free(e_contact_editor->email_info);
+ }
+ if (e_contact_editor->email_popup) {
+ gtk_widget_unref(e_contact_editor->email_popup);
+ }
+
+ if (e_contact_editor->phone_list) {
+ g_list_foreach(e_contact_editor->phone_list, (GFunc) g_free, NULL);
+ g_list_free(e_contact_editor->phone_list);
+ }
+ if (e_contact_editor->phone_info) {
+ g_free(e_contact_editor->phone_info);
+ }
+ if (e_contact_editor->phone_popup) {
+ gtk_widget_unref(e_contact_editor->phone_popup);
+ }
+
+ if (e_contact_editor->address_list) {
+ g_list_foreach(e_contact_editor->address_list, (GFunc) g_free, NULL);
+ g_list_free(e_contact_editor->address_list);
+ }
+ if (e_contact_editor->address_info) {
+ g_free(e_contact_editor->address_info);
+ }
+ if (e_contact_editor->address_popup) {
+ gtk_widget_unref(e_contact_editor->address_popup);
+ }
- gtk_notebook_append_page (notebook,
- _create_page_general(e_contact_editor),
- gtk_label_new(_("General")));
+ gtk_object_unref(GTK_OBJECT(e_contact_editor->gui));
}
GtkWidget*
@@ -436,3 +288,277 @@ e_contact_editor_get_arg (GtkObject *object, GtkArg *arg, guint arg_id)
break;
}
}
+
+static void
+_popup_position(GtkMenu *menu,
+ gint *x,
+ gint *y,
+ gpointer data)
+{
+ GtkWidget *button = GTK_WIDGET(data);
+ int mh, mw;
+ gdk_window_get_origin (button->window, x, y);
+ *x += button->allocation.width;
+ *y += button->allocation.height;
+
+ mh = GTK_WIDGET(menu)->allocation.height;
+ mw = GTK_WIDGET(menu)->allocation.width;
+
+ *x -= mw;
+ if (*x < 0)
+ *x = 0;
+
+ if (*y < 0)
+ *y = 0;
+
+ if ((*x + mw) > gdk_screen_width ())
+ *x = gdk_screen_width () - mw;
+
+ if ((*y + mh) > gdk_screen_height ())
+ *y = gdk_screen_height () - mh;
+}
+
+static void
+_arrow_pressed (GtkWidget *widget, GdkEventButton *button, EContactEditor *editor, GtkWidget *popup, GList **list, GnomeUIInfo **info, gchar *label, gchar *entry, gchar *dialog_title)
+{
+ gint menu_item;
+ gtk_signal_emit_stop_by_name(GTK_OBJECT(widget), "button_press_event");
+ gtk_widget_realize(popup);
+ menu_item = gnome_popup_menu_do_popup_modal(popup, _popup_position, widget, button, editor);
+ if ( menu_item != -1 ) {
+ if (menu_item == g_list_length (*list)) {
+ e_contact_editor_build_dialog(editor, entry, label, dialog_title, list, info);
+ } else {
+ gtk_object_set(GTK_OBJECT(glade_xml_get_widget(editor->gui, label)),
+ "label", g_list_nth_data(*list, menu_item),
+ NULL);
+ }
+ }
+}
+
+static void
+e_contact_editor_build_ui_info(GList *list, GnomeUIInfo **infop)
+{
+ GnomeUIInfo *info;
+ GnomeUIInfo singleton = { GNOME_APP_UI_ITEM, NULL, NULL, NULL, NULL, NULL, GNOME_APP_PIXMAP_NONE, 0, 0, 0, NULL };
+ GnomeUIInfo end = GNOMEUIINFO_END;
+ int length;
+ int i;
+
+ info = *infop;
+
+ if ( info )
+ g_free(info);
+ length = g_list_length( list );
+ info = g_new(GnomeUIInfo, length + 2);
+ for (i = 0; i < length; i++) {
+ info[i] = singleton;
+ info[i].label = _(list->data);
+ list = list->next;
+ }
+ info[i] = singleton;
+ info[i].label = N_("Other...");
+ i++;
+ info[i] = end;
+
+ *infop = info;
+}
+
+static void
+_dialog_clicked(GtkWidget *dialog, gint button, EContactEditor *editor)
+{
+ GtkWidget *label = gtk_object_get_data(GTK_OBJECT(dialog),
+ "e_contact_editor_label");
+ GtkWidget *entry = gtk_object_get_data(GTK_OBJECT(dialog),
+ "e_contact_editor_entry");
+ GtkWidget *dialog_entry = gtk_object_get_data(GTK_OBJECT(dialog),
+ "e_contact_editor_dialog_entry");
+ GList **list = gtk_object_get_data(GTK_OBJECT(dialog),
+ "e_contact_editor_list");
+ GList **info = gtk_object_get_data(GTK_OBJECT(dialog),
+ "e_contact_editor_info");
+ switch (button) {
+ case 0:
+ gtk_object_set(GTK_OBJECT(label),
+ "label", gtk_entry_get_text(GTK_ENTRY(dialog_entry)),
+ NULL);
+ *list = g_list_append(*list, g_strdup(gtk_entry_get_text(GTK_ENTRY(dialog_entry))));
+ g_free(*info);
+ *info = NULL;
+ break;
+ }
+ gnome_dialog_close(GNOME_DIALOG(dialog));
+}
+
+static void
+_dialog_destroy(EContactEditor *editor, GtkWidget *dialog)
+{
+ gnome_dialog_close(GNOME_DIALOG(dialog));
+}
+
+static GtkWidget *
+e_contact_editor_build_dialog(EContactEditor *editor, gchar *entry_id, gchar *label_id, gchar *title, GList **list, GnomeUIInfo **info)
+{
+ GtkWidget *dialog_entry = gtk_entry_new();
+ GtkWidget *entry = glade_xml_get_widget(editor->gui, entry_id);
+ GtkWidget *label = glade_xml_get_widget(editor->gui, label_id);
+
+ GtkWidget *dialog = gnome_dialog_new(title,
+ NULL);
+
+ gtk_container_add(GTK_CONTAINER(GNOME_DIALOG(dialog)->vbox),
+ gtk_widget_new (gtk_frame_get_type(),
+ "border_width", 4,
+ "label", title,
+ "child", gtk_widget_new(gtk_alignment_get_type(),
+ "child", dialog_entry,
+ "xalign", .5,
+ "yalign", .5,
+ "xscale", 1.0,
+ "yscale", 1.0,
+ "border_width", 9,
+ NULL),
+ NULL));
+
+ gnome_dialog_append_button_with_pixmap(GNOME_DIALOG(dialog),
+ "Add",
+ GNOME_STOCK_PIXMAP_ADD);
+ gnome_dialog_append_button(GNOME_DIALOG(dialog), GNOME_STOCK_BUTTON_CANCEL);
+ gnome_dialog_set_default(GNOME_DIALOG(dialog), 0);
+
+ gtk_signal_connect(GTK_OBJECT(dialog), "clicked",
+ _dialog_clicked, editor);
+ gtk_signal_connect_while_alive(GTK_OBJECT(editor), "destroy",
+ _dialog_destroy, GTK_OBJECT(dialog), GTK_OBJECT(dialog));
+
+ gtk_object_set_data(GTK_OBJECT(dialog),
+ "e_contact_editor_entry", entry);
+ gtk_object_set_data(GTK_OBJECT(dialog),
+ "e_contact_editor_label", label);
+ gtk_object_set_data(GTK_OBJECT(dialog),
+ "e_contact_editor_dialog_entry", dialog_entry);
+ gtk_object_set_data(GTK_OBJECT(dialog),
+ "e_contact_editor_list", list);
+ gtk_object_set_data(GTK_OBJECT(dialog),
+ "e_contact_editor_info", info);
+
+ gtk_widget_show_all(dialog);
+ return dialog;
+}
+
+static void
+_phone_arrow_pressed (GtkWidget *widget, GdkEventButton *button, EContactEditor *editor)
+{
+ int which;
+ int i;
+ gchar *label;
+ gchar *entry;
+ if ( widget == glade_xml_get_widget(editor->gui, "button-phone1") ) {
+ which = 1;
+ } else if ( widget == glade_xml_get_widget(editor->gui, "button-phone2") ) {
+ which = 2;
+ } else if ( widget == glade_xml_get_widget(editor->gui, "button-phone3") ) {
+ which = 3;
+ } else if ( widget == glade_xml_get_widget(editor->gui, "button-phone4") ) {
+ which = 4;
+ } else
+ return;
+
+ label = g_strdup_printf("label-phone%d", which);
+ entry = g_strdup_printf("entry-phone%d", which);
+
+ if (editor->phone_list == NULL) {
+ static char *info[] = {
+ N_("Assistant"),
+ N_("Business"),
+ N_("Business 2"),
+ N_("Business Fax"),
+ N_("Callback"),
+ N_("Car"),
+ N_("Company"),
+ N_("Home"),
+ N_("Home 2"),
+ N_("Home Fax"),
+ N_("ISDN"),
+ N_("Mobile"),
+ N_("Other"),
+ N_("Other Fax"),
+ N_("Pager"),
+ N_("Primary"),
+ N_("Radio"),
+ N_("Telex"),
+ N_("TTY/TDD")
+ };
+
+ for (i = 0; i < sizeof(info) / sizeof(info[0]); i++) {
+ editor->phone_list = g_list_append(editor->phone_list, g_strdup(info[i]));
+ }
+ }
+ if (editor->phone_info == NULL) {
+ e_contact_editor_build_ui_info(editor->phone_list, &editor->phone_info);
+
+ if ( editor->phone_popup )
+ gtk_widget_unref(editor->phone_popup);
+
+ editor->phone_popup = gnome_popup_menu_new(editor->phone_info);
+ }
+
+ _arrow_pressed (widget, button, editor, editor->phone_popup, &editor->phone_list, &editor->phone_info, label, entry, "Add new phone number type");
+
+ g_free(label);
+ g_free(entry);
+}
+
+static void
+_email_arrow_pressed (GtkWidget *widget, GdkEventButton *button, EContactEditor *editor)
+{
+ int i;
+ if (editor->email_list == NULL) {
+ static char *info[] = {
+ N_("Email"),
+ N_("Email 2"),
+ N_("Email 3")
+ };
+
+ for (i = 0; i < sizeof(info) / sizeof(info[0]); i++) {
+ editor->email_list = g_list_append(editor->email_list, g_strdup(info[i]));
+ }
+ }
+ if (editor->email_info == NULL) {
+ e_contact_editor_build_ui_info(editor->email_list, &editor->email_info);
+
+ if ( editor->email_popup )
+ gtk_widget_unref(editor->email_popup);
+
+ editor->email_popup = gnome_popup_menu_new(editor->email_info);
+ }
+
+ _arrow_pressed (widget, button, editor, editor->email_popup, &editor->email_list, &editor->email_info, "label-email1", "entry-email1", "Add new Email type");
+}
+
+static void
+_address_arrow_pressed (GtkWidget *widget, GdkEventButton *button, EContactEditor *editor)
+{
+ int i;
+ if (editor->address_list == NULL) {
+ static char *info[] = {
+ N_("Business"),
+ N_("Home"),
+ N_("Other")
+ };
+
+ for (i = 0; i < sizeof(info) / sizeof(info[0]); i++) {
+ editor->address_list = g_list_append(editor->address_list, g_strdup(info[i]));
+ }
+ }
+ if (editor->address_info == NULL) {
+ e_contact_editor_build_ui_info(editor->address_list, &editor->address_info);
+
+ if ( editor->address_popup )
+ gtk_widget_unref(editor->address_popup);
+
+ editor->address_popup = gnome_popup_menu_new(editor->address_info);
+ }
+
+ _arrow_pressed (widget, button, editor, editor->address_popup, &editor->address_list, &editor->address_info, "label-address1", "entry-address1", "Add new Address type");
+}
diff --git a/addressbook/gui/contact-editor/e-contact-editor.h b/addressbook/gui/contact-editor/e-contact-editor.h
index 45f3ae5597..7b914967ee 100644
--- a/addressbook/gui/contact-editor/e-contact-editor.h
+++ b/addressbook/gui/contact-editor/e-contact-editor.h
@@ -22,6 +22,7 @@
#define __E_CONTACT_EDITOR_H__
#include <gnome.h>
+#include <glade/glade.h>
#ifdef __cplusplus
extern "C" {
@@ -49,17 +50,26 @@ typedef struct _EContactEditorClass EContactEditorClass;
struct _EContactEditor
{
- GtkNotebook parent;
+ GtkVBox parent;
/* item specific fields */
/* ECard *card; */
- GList *fields; /* Of type GnomeCanvasItem. */
+ GladeXML *gui;
+ GnomeUIInfo *email_info;
+ GnomeUIInfo *phone_info;
+ GnomeUIInfo *address_info;
+ GtkWidget *email_popup;
+ GtkWidget *phone_popup;
+ GtkWidget *address_popup;
+ GList *email_list;
+ GList *phone_list;
+ GList *address_list;
};
struct _EContactEditorClass
{
- GtkNotebookClass parent_class;
+ GtkVBoxClass parent_class;
};
diff --git a/addressbook/gui/contact-editor/netfreebusy.png b/addressbook/gui/contact-editor/netfreebusy.png
new file mode 100644
index 0000000000..09ec8a2a5c
--- /dev/null
+++ b/addressbook/gui/contact-editor/netfreebusy.png
Binary files differ
diff --git a/addressbook/gui/contact-editor/netmeeting.png b/addressbook/gui/contact-editor/netmeeting.png
new file mode 100644
index 0000000000..4cb90c121e
--- /dev/null
+++ b/addressbook/gui/contact-editor/netmeeting.png
Binary files differ
diff --git a/addressbook/gui/contact-editor/test-editor.c b/addressbook/gui/contact-editor/test-editor.c
index 737c3028c4..49ed7e48bf 100644
--- a/addressbook/gui/contact-editor/test-editor.c
+++ b/addressbook/gui/contact-editor/test-editor.c
@@ -23,6 +23,7 @@
#include "config.h"
#include <gnome.h>
+#include <glade/glade.h>
#include "e-contact-editor.h"
/* This is a horrible thing to do, but it is just a test. */
@@ -30,7 +31,10 @@ GtkWidget *editor;
static void destroy_callback(GtkWidget *app, gpointer data)
{
- exit(0);
+ static int count = 2;
+ count --;
+ if ( count <= 0 )
+ exit(0);
}
static void about_callback( GtkWidget *widget, gpointer data )
@@ -59,6 +63,22 @@ int main( int argc, char *argv[] )
textdomain (PACKAGE);*/
gnome_init( "Contact Editor Test", VERSION, argc, argv);
+
+ glade_gnome_init ();
+
+ app = gnome_app_new("Contact Editor Test", NULL);
+
+ editor = e_contact_editor_new(NULL);
+
+ gnome_app_set_contents( GNOME_APP( app ), editor );
+
+ /* Connect the signals */
+ gtk_signal_connect( GTK_OBJECT( app ), "destroy",
+ GTK_SIGNAL_FUNC( destroy_callback ),
+ ( gpointer ) app );
+
+ gtk_widget_show_all( app );
+
app = gnome_app_new("Contact Editor Test", NULL);
editor = e_contact_editor_new(NULL);
diff --git a/addressbook/gui/minicard/e-minicard.c b/addressbook/gui/minicard/e-minicard.c
index bef929b36c..f656d98b40 100644
--- a/addressbook/gui/minicard/e-minicard.c
+++ b/addressbook/gui/minicard/e-minicard.c
@@ -141,9 +141,11 @@ e_minicard_set_arg (GtkObject *o, GtkArg *arg, guint arg_id)
switch (arg_id){
case ARG_WIDTH:
- e_minicard->width = GTK_VALUE_DOUBLE (*arg);
- _update_card(e_minicard);
- gnome_canvas_item_request_update (item);
+ if (e_minicard->width != GTK_VALUE_DOUBLE (*arg)) {
+ e_minicard->width = GTK_VALUE_DOUBLE (*arg);
+ _update_card(e_minicard);
+ gnome_canvas_item_request_update (item);
+ }
break;
case ARG_HAS_FOCUS:
if (e_minicard->fields)
diff --git a/addressbook/gui/minicard/e-reflow.c b/addressbook/gui/minicard/e-reflow.c
index ce2e92e530..e9ff1b6eaa 100644
--- a/addressbook/gui/minicard/e-reflow.c
+++ b/addressbook/gui/minicard/e-reflow.c
@@ -32,6 +32,8 @@ static void e_reflow_realize (GnomeCanvasItem *item);
static void e_reflow_unrealize (GnomeCanvasItem *item);
static void e_reflow_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
int x, int y, int width, int height);
+static void e_reflow_update (GnomeCanvasItem *item, double affine[6], ArtSVP *clip_path, gint flags);
+static double e_reflow_point (GnomeCanvasItem *item, double x, double y, int cx, int cy, GnomeCanvasItem **actual_item);
static void _update_reflow ( EReflow *reflow );
static void _resize( GtkObject *object, gpointer data );
@@ -112,7 +114,9 @@ e_reflow_class_init (EReflowClass *klass)
item_class->event = e_reflow_event;
item_class->realize = e_reflow_realize;
item_class->unrealize = e_reflow_unrealize;
- /* item_class->draw = e_reflow_draw;*/
+ item_class->draw = e_reflow_draw;
+ item_class->update = e_reflow_update;
+ item_class->point = e_reflow_point;
}
static void
@@ -126,6 +130,8 @@ e_reflow_init (EReflow *reflow)
reflow->width = 10;
reflow->height = 10;
reflow->idle = 0;
+
+ reflow->column_drag = FALSE;
}
static void
@@ -214,6 +220,14 @@ e_reflow_unrealize (GnomeCanvasItem *item)
(* GNOME_CANVAS_ITEM_CLASS(parent_class)->unrealize) (item);
}
+static gint
+e_reflow_pick_line (EReflow *e_reflow, gint x)
+{
+ x += 6;
+ x /= e_reflow->column_width + 16;
+ return x;
+}
+
static gboolean
e_reflow_event (GnomeCanvasItem *item, GdkEvent *event)
{
@@ -249,8 +263,56 @@ e_reflow_event (GnomeCanvasItem *item, GdkEvent *event)
}
}
}
+ break;
+ case GDK_BUTTON_PRESS:
+ {
+ GdkEventButton *button = (GdkEventButton *) event;
+ int n_x;
+ n_x = button->x;
+ n_x += 3;
+ n_x %= (int)(e_reflow->column_width + 16);
+ if ( button->y >= 7 && button->y <= e_reflow->height - 7 && n_x < 4 ) {
+ e_reflow->which_column_dragged = e_reflow_pick_line(e_reflow, button->x);
+ e_reflow->start_x = button->x;
+ e_reflow->temp_column_width = e_reflow->column_width;
+ e_reflow->column_drag = TRUE;
+ gnome_canvas_item_request_update(item);
+ return TRUE;
+ }
+ }
+ break;
+ case GDK_BUTTON_RELEASE:
+ if (e_reflow->column_drag) {
+ GdkEventButton *button = (GdkEventButton *) event;
+ GtkAdjustment *adjustment = gtk_layout_get_hadjustment(GTK_LAYOUT(item->canvas));
+ e_reflow->temp_column_width = e_reflow->column_width +
+ (button->x - e_reflow->start_x)/(e_reflow->which_column_dragged - e_reflow_pick_line(e_reflow, adjustment->value));
+ if ( e_reflow->temp_column_width < 50 )
+ e_reflow->temp_column_width = 50;
+ gtk_adjustment_set_value(adjustment, adjustment->value + e_reflow_pick_line(e_reflow, adjustment->value) * (e_reflow->temp_column_width - e_reflow->column_width));
+ e_reflow->column_width = e_reflow->temp_column_width;
+ e_reflow->column_drag = FALSE;
+ _update_reflow(e_reflow);
+ gnome_canvas_item_request_update(item);
+ return TRUE;
+ }
+ break;
+ case GDK_MOTION_NOTIFY:
+ if (e_reflow->column_drag) {
+ double old_width = e_reflow->temp_column_width;
+ GdkEventMotion *motion = (GdkEventMotion *) event;
+ GtkAdjustment *adjustment = gtk_layout_get_hadjustment(GTK_LAYOUT(item->canvas));
+ e_reflow->temp_column_width = e_reflow->column_width +
+ (motion->x - e_reflow->start_x)/(e_reflow->which_column_dragged - e_reflow_pick_line(e_reflow, adjustment->value));
+ if (e_reflow->temp_column_width < 50)
+ e_reflow->temp_column_width = 50;
+ if (old_width != e_reflow->temp_column_width)
+ gnome_canvas_item_request_update(item);
+ return TRUE;
+ }
+ break;
default:
- break;
+ break;
}
if (GNOME_CANVAS_ITEM_CLASS( parent_class )->event)
@@ -275,7 +337,7 @@ e_reflow_add_item(EReflow *e_reflow, GnomeCanvasItem *item)
}
}
-#if 0
+
static void e_reflow_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
int x, int y, int width, int height)
{
@@ -283,17 +345,25 @@ static void e_reflow_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
gint running_width;
EReflow *e_reflow = E_REFLOW(item);
int i;
+ double column_width;
if (GNOME_CANVAS_ITEM_CLASS(parent_class)->draw)
GNOME_CANVAS_ITEM_CLASS(parent_class)->draw (item, drawable, x, y, width, height);
-
- running_width = 7 + e_reflow->column_width + 7;
+ column_width = e_reflow->column_width;
+ running_width = 7 + column_width + 7;
x_rect = running_width;
y_rect = 7;
width_rect = 2;
height_rect = e_reflow->height - 14;
- for (i = 0; i < e_reflow->column_count - 1; i++) {
+ /* Compute first column to draw. */
+ i = x;
+ i /= column_width + 16;
+ running_width += i * (column_width + 16);
+
+ for ( ; i < e_reflow->column_count - 1; i++) {
+ if ( running_width > x + width )
+ break;
x_rect = running_width;
gtk_paint_flat_box(GTK_WIDGET(item->canvas)->style,
drawable,
@@ -303,13 +373,94 @@ static void e_reflow_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
GTK_WIDGET(item->canvas),
"reflow",
x_rect - x,
- y_rect - x,
+ y_rect - y,
width_rect,
height_rect);
- running_width += 2 + 7 + e_reflow->column_width + 7;
+ running_width += 2 + 7 + column_width + 7;
+ }
+ if (e_reflow->column_drag) {
+ int start_line = e_reflow_pick_line(e_reflow,
+ gtk_layout_get_hadjustment(GTK_LAYOUT(item->canvas))->value);
+ i = x - start_line * (column_width + 16);
+ running_width = start_line * (column_width + 16);
+ column_width = e_reflow->temp_column_width;
+ running_width -= start_line * (column_width + 16);
+ i += start_line * (column_width + 16);
+ running_width += 7 + column_width + 7;
+ x_rect = running_width;
+ y_rect = 7;
+ width_rect = 2;
+ height_rect = e_reflow->height - 14;
+
+ /* Compute first column to draw. */
+ i /= column_width + 16;
+ running_width += i * (column_width + 16);
+
+ for ( ; i < e_reflow->column_count - 1; i++) {
+ if ( running_width > x + width )
+ break;
+ x_rect = running_width;
+ gdk_draw_rectangle(drawable,
+ GTK_WIDGET(item->canvas)->style->fg_gc[GTK_STATE_NORMAL],
+ TRUE,
+ x_rect - x,
+ y_rect - y,
+ width_rect - 1,
+ height_rect - 1);
+ running_width += 2 + 7 + column_width + 7;
+ }
+ }
+}
+
+static void
+e_reflow_update (GnomeCanvasItem *item, double affine[6], ArtSVP *clip_path, gint flags)
+{
+ double x0, x1, y0, y1;
+
+ if (GNOME_CANVAS_ITEM_CLASS(parent_class)->update)
+ GNOME_CANVAS_ITEM_CLASS(parent_class)->update (item, affine, clip_path, flags);
+
+ x0 = item->x1;
+ y0 = item->y1;
+ x1 = item->x2;
+ y1 = item->y2;
+ if ( x0 > 0 )
+ x0 = 0;
+ if ( y0 > 0 )
+ y0 = 0;
+ if ( x1 < E_REFLOW(item)->width )
+ x1 = E_REFLOW(item)->width;
+ if ( x1 < E_REFLOW(item)->height )
+ x1 = E_REFLOW(item)->height;
+
+ gnome_canvas_update_bbox(item, x0, y0, x1, y1);
+}
+
+static double
+e_reflow_point (GnomeCanvasItem *item,
+ double x, double y, int cx, int cy,
+ GnomeCanvasItem **actual_item)
+{
+ EReflow *e_reflow = E_REFLOW(item);
+ double distance = 1;
+
+ if (GNOME_CANVAS_ITEM_CLASS(parent_class)->point)
+ distance = GNOME_CANVAS_ITEM_CLASS(parent_class)->point (item, x, y, cx, cy, actual_item);
+ if (*actual_item)
+ return 0;
+
+ if (y >= 7 && y <= e_reflow->height - 7) {
+ int n_x;
+ n_x = x;
+ n_x += 3;
+ n_x %= (int)(e_reflow->column_width + 16);
+ if (n_x < 4) {
+ *actual_item = item;
+ return 0;
+ }
}
+ return distance;
}
-#endif
static void
_reflow( EReflow *e_reflow )
@@ -380,6 +531,9 @@ _update_reflow( EReflow *e_reflow )
running_height = 7;
list = e_reflow->items;
+ gtk_object_set (GTK_OBJECT(list->data),
+ "width", e_reflow->column_width,
+ NULL);
gtk_object_get (GTK_OBJECT(list->data),
"height", &item_height,
NULL);
@@ -391,6 +545,9 @@ _update_reflow( EReflow *e_reflow )
list = g_list_next(list);
for( ; list; list = g_list_next(list)) {
+ gtk_object_set (GTK_OBJECT(list->data),
+ "width", e_reflow->column_width,
+ NULL);
gtk_object_get (GTK_OBJECT(list->data),
"height", &item_height,
NULL);
diff --git a/addressbook/gui/minicard/e-reflow.h b/addressbook/gui/minicard/e-reflow.h
index 0d0ab4251a..27b96645f8 100644
--- a/addressbook/gui/minicard/e-reflow.h
+++ b/addressbook/gui/minicard/e-reflow.h
@@ -65,6 +65,12 @@ struct _EReflow
double column_width;
int idle;
+
+ /* These are all for when the column is being dragged. */
+ gboolean column_drag;
+ gdouble start_x;
+ gint which_column_dragged;
+ double temp_column_width;
};
struct _EReflowClass
diff --git a/addressbook/gui/minicard/test-reflow.c b/addressbook/gui/minicard/test-reflow.c
index f03232c72d..067e520754 100644
--- a/addressbook/gui/minicard/test-reflow.c
+++ b/addressbook/gui/minicard/test-reflow.c
@@ -26,6 +26,7 @@
/* This is a horrible thing to do, but it is just a test. */
GnomeCanvasItem *reflow;
GnomeCanvasItem *rect;
+GtkAllocation last_alloc;
static void destroy_callback(GtkWidget *app, gpointer data)
{
@@ -35,6 +36,7 @@ static void destroy_callback(GtkWidget *app, gpointer data)
static void allocate_callback(GtkWidget *canvas, GtkAllocation *allocation, gpointer data)
{
double width;
+ last_alloc = *allocation;
gnome_canvas_item_set( reflow,
"height", (double) allocation->height,
NULL );
@@ -49,6 +51,20 @@ static void allocate_callback(GtkWidget *canvas, GtkAllocation *allocation, gpoi
NULL );
}
+static void resize(GnomeCanvasItem *item, gpointer data)
+{
+ double width;
+ gtk_object_get(GTK_OBJECT(reflow),
+ "width", &width,
+ NULL);
+ width = MAX(width, last_alloc.width);
+ gnome_canvas_set_scroll_region(item->canvas , 0, 0, width, last_alloc.height );
+ gnome_canvas_item_set( rect,
+ "x2", (double) width,
+ "y2", (double) last_alloc.height,
+ NULL );
+}
+
static void about_callback( GtkWidget *widget, gpointer data )
{
@@ -98,6 +114,9 @@ int main( int argc, char *argv[] )
"y", (double) 0,
"height", (double) 100,
NULL );
+ gtk_signal_connect( GTK_OBJECT( reflow ), "resize",
+ GTK_SIGNAL_FUNC( resize ),
+ ( gpointer ) app);
for ( i = 0; i < 200; i++ )
{
GnomeCanvasItem *item;
diff --git a/addressbook/gui/widgets/e-minicard.c b/addressbook/gui/widgets/e-minicard.c
index bef929b36c..f656d98b40 100644
--- a/addressbook/gui/widgets/e-minicard.c
+++ b/addressbook/gui/widgets/e-minicard.c
@@ -141,9 +141,11 @@ e_minicard_set_arg (GtkObject *o, GtkArg *arg, guint arg_id)
switch (arg_id){
case ARG_WIDTH:
- e_minicard->width = GTK_VALUE_DOUBLE (*arg);
- _update_card(e_minicard);
- gnome_canvas_item_request_update (item);
+ if (e_minicard->width != GTK_VALUE_DOUBLE (*arg)) {
+ e_minicard->width = GTK_VALUE_DOUBLE (*arg);
+ _update_card(e_minicard);
+ gnome_canvas_item_request_update (item);
+ }
break;
case ARG_HAS_FOCUS:
if (e_minicard->fields)
diff --git a/addressbook/gui/widgets/test-reflow.c b/addressbook/gui/widgets/test-reflow.c
index f03232c72d..067e520754 100644
--- a/addressbook/gui/widgets/test-reflow.c
+++ b/addressbook/gui/widgets/test-reflow.c
@@ -26,6 +26,7 @@
/* This is a horrible thing to do, but it is just a test. */
GnomeCanvasItem *reflow;
GnomeCanvasItem *rect;
+GtkAllocation last_alloc;
static void destroy_callback(GtkWidget *app, gpointer data)
{
@@ -35,6 +36,7 @@ static void destroy_callback(GtkWidget *app, gpointer data)
static void allocate_callback(GtkWidget *canvas, GtkAllocation *allocation, gpointer data)
{
double width;
+ last_alloc = *allocation;
gnome_canvas_item_set( reflow,
"height", (double) allocation->height,
NULL );
@@ -49,6 +51,20 @@ static void allocate_callback(GtkWidget *canvas, GtkAllocation *allocation, gpoi
NULL );
}
+static void resize(GnomeCanvasItem *item, gpointer data)
+{
+ double width;
+ gtk_object_get(GTK_OBJECT(reflow),
+ "width", &width,
+ NULL);
+ width = MAX(width, last_alloc.width);
+ gnome_canvas_set_scroll_region(item->canvas , 0, 0, width, last_alloc.height );
+ gnome_canvas_item_set( rect,
+ "x2", (double) width,
+ "y2", (double) last_alloc.height,
+ NULL );
+}
+
static void about_callback( GtkWidget *widget, gpointer data )
{
@@ -98,6 +114,9 @@ int main( int argc, char *argv[] )
"y", (double) 0,
"height", (double) 100,
NULL );
+ gtk_signal_connect( GTK_OBJECT( reflow ), "resize",
+ GTK_SIGNAL_FUNC( resize ),
+ ( gpointer ) app);
for ( i = 0; i < 200; i++ )
{
GnomeCanvasItem *item;
diff --git a/e-util/e-text-event-processor-types.h b/e-util/e-text-event-processor-types.h
index 3795058225..eb8e0d4a50 100644
--- a/e-util/e-text-event-processor-types.h
+++ b/e-util/e-text-event-processor-types.h
@@ -75,8 +75,8 @@ enum _ETextEventProcessorCommandAction {
E_TEP_MOVE,
E_TEP_SELECT,
E_TEP_DELETE,
-
E_TEP_INSERT,
+
E_TEP_COPY,
E_TEP_PASTE,
E_TEP_GET_SELECTION,
diff --git a/widgets/e-minicard.c b/widgets/e-minicard.c
index bef929b36c..f656d98b40 100644
--- a/widgets/e-minicard.c
+++ b/widgets/e-minicard.c
@@ -141,9 +141,11 @@ e_minicard_set_arg (GtkObject *o, GtkArg *arg, guint arg_id)
switch (arg_id){
case ARG_WIDTH:
- e_minicard->width = GTK_VALUE_DOUBLE (*arg);
- _update_card(e_minicard);
- gnome_canvas_item_request_update (item);
+ if (e_minicard->width != GTK_VALUE_DOUBLE (*arg)) {
+ e_minicard->width = GTK_VALUE_DOUBLE (*arg);
+ _update_card(e_minicard);
+ gnome_canvas_item_request_update (item);
+ }
break;
case ARG_HAS_FOCUS:
if (e_minicard->fields)
diff --git a/widgets/e-minicard/e-minicard.c b/widgets/e-minicard/e-minicard.c
index bef929b36c..f656d98b40 100644
--- a/widgets/e-minicard/e-minicard.c
+++ b/widgets/e-minicard/e-minicard.c
@@ -141,9 +141,11 @@ e_minicard_set_arg (GtkObject *o, GtkArg *arg, guint arg_id)
switch (arg_id){
case ARG_WIDTH:
- e_minicard->width = GTK_VALUE_DOUBLE (*arg);
- _update_card(e_minicard);
- gnome_canvas_item_request_update (item);
+ if (e_minicard->width != GTK_VALUE_DOUBLE (*arg)) {
+ e_minicard->width = GTK_VALUE_DOUBLE (*arg);
+ _update_card(e_minicard);
+ gnome_canvas_item_request_update (item);
+ }
break;
case ARG_HAS_FOCUS:
if (e_minicard->fields)
diff --git a/widgets/e-minicard/e-reflow.c b/widgets/e-minicard/e-reflow.c
index ce2e92e530..e9ff1b6eaa 100644
--- a/widgets/e-minicard/e-reflow.c
+++ b/widgets/e-minicard/e-reflow.c
@@ -32,6 +32,8 @@ static void e_reflow_realize (GnomeCanvasItem *item);
static void e_reflow_unrealize (GnomeCanvasItem *item);
static void e_reflow_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
int x, int y, int width, int height);
+static void e_reflow_update (GnomeCanvasItem *item, double affine[6], ArtSVP *clip_path, gint flags);
+static double e_reflow_point (GnomeCanvasItem *item, double x, double y, int cx, int cy, GnomeCanvasItem **actual_item);
static void _update_reflow ( EReflow *reflow );
static void _resize( GtkObject *object, gpointer data );
@@ -112,7 +114,9 @@ e_reflow_class_init (EReflowClass *klass)
item_class->event = e_reflow_event;
item_class->realize = e_reflow_realize;
item_class->unrealize = e_reflow_unrealize;
- /* item_class->draw = e_reflow_draw;*/
+ item_class->draw = e_reflow_draw;
+ item_class->update = e_reflow_update;
+ item_class->point = e_reflow_point;
}
static void
@@ -126,6 +130,8 @@ e_reflow_init (EReflow *reflow)
reflow->width = 10;
reflow->height = 10;
reflow->idle = 0;
+
+ reflow->column_drag = FALSE;
}
static void
@@ -214,6 +220,14 @@ e_reflow_unrealize (GnomeCanvasItem *item)
(* GNOME_CANVAS_ITEM_CLASS(parent_class)->unrealize) (item);
}
+static gint
+e_reflow_pick_line (EReflow *e_reflow, gint x)
+{
+ x += 6;
+ x /= e_reflow->column_width + 16;
+ return x;
+}
+
static gboolean
e_reflow_event (GnomeCanvasItem *item, GdkEvent *event)
{
@@ -249,8 +263,56 @@ e_reflow_event (GnomeCanvasItem *item, GdkEvent *event)
}
}
}
+ break;
+ case GDK_BUTTON_PRESS:
+ {
+ GdkEventButton *button = (GdkEventButton *) event;
+ int n_x;
+ n_x = button->x;
+ n_x += 3;
+ n_x %= (int)(e_reflow->column_width + 16);
+ if ( button->y >= 7 && button->y <= e_reflow->height - 7 && n_x < 4 ) {
+ e_reflow->which_column_dragged = e_reflow_pick_line(e_reflow, button->x);
+ e_reflow->start_x = button->x;
+ e_reflow->temp_column_width = e_reflow->column_width;
+ e_reflow->column_drag = TRUE;
+ gnome_canvas_item_request_update(item);
+ return TRUE;
+ }
+ }
+ break;
+ case GDK_BUTTON_RELEASE:
+ if (e_reflow->column_drag) {
+ GdkEventButton *button = (GdkEventButton *) event;
+ GtkAdjustment *adjustment = gtk_layout_get_hadjustment(GTK_LAYOUT(item->canvas));
+ e_reflow->temp_column_width = e_reflow->column_width +
+ (button->x - e_reflow->start_x)/(e_reflow->which_column_dragged - e_reflow_pick_line(e_reflow, adjustment->value));
+ if ( e_reflow->temp_column_width < 50 )
+ e_reflow->temp_column_width = 50;
+ gtk_adjustment_set_value(adjustment, adjustment->value + e_reflow_pick_line(e_reflow, adjustment->value) * (e_reflow->temp_column_width - e_reflow->column_width));
+ e_reflow->column_width = e_reflow->temp_column_width;
+ e_reflow->column_drag = FALSE;
+ _update_reflow(e_reflow);
+ gnome_canvas_item_request_update(item);
+ return TRUE;
+ }
+ break;
+ case GDK_MOTION_NOTIFY:
+ if (e_reflow->column_drag) {
+ double old_width = e_reflow->temp_column_width;
+ GdkEventMotion *motion = (GdkEventMotion *) event;
+ GtkAdjustment *adjustment = gtk_layout_get_hadjustment(GTK_LAYOUT(item->canvas));
+ e_reflow->temp_column_width = e_reflow->column_width +
+ (motion->x - e_reflow->start_x)/(e_reflow->which_column_dragged - e_reflow_pick_line(e_reflow, adjustment->value));
+ if (e_reflow->temp_column_width < 50)
+ e_reflow->temp_column_width = 50;
+ if (old_width != e_reflow->temp_column_width)
+ gnome_canvas_item_request_update(item);
+ return TRUE;
+ }
+ break;
default:
- break;
+ break;
}
if (GNOME_CANVAS_ITEM_CLASS( parent_class )->event)
@@ -275,7 +337,7 @@ e_reflow_add_item(EReflow *e_reflow, GnomeCanvasItem *item)
}
}
-#if 0
+
static void e_reflow_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
int x, int y, int width, int height)
{
@@ -283,17 +345,25 @@ static void e_reflow_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
gint running_width;
EReflow *e_reflow = E_REFLOW(item);
int i;
+ double column_width;
if (GNOME_CANVAS_ITEM_CLASS(parent_class)->draw)
GNOME_CANVAS_ITEM_CLASS(parent_class)->draw (item, drawable, x, y, width, height);
-
- running_width = 7 + e_reflow->column_width + 7;
+ column_width = e_reflow->column_width;
+ running_width = 7 + column_width + 7;
x_rect = running_width;
y_rect = 7;
width_rect = 2;
height_rect = e_reflow->height - 14;
- for (i = 0; i < e_reflow->column_count - 1; i++) {
+ /* Compute first column to draw. */
+ i = x;
+ i /= column_width + 16;
+ running_width += i * (column_width + 16);
+
+ for ( ; i < e_reflow->column_count - 1; i++) {
+ if ( running_width > x + width )
+ break;
x_rect = running_width;
gtk_paint_flat_box(GTK_WIDGET(item->canvas)->style,
drawable,
@@ -303,13 +373,94 @@ static void e_reflow_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
GTK_WIDGET(item->canvas),
"reflow",
x_rect - x,
- y_rect - x,
+ y_rect - y,
width_rect,
height_rect);
- running_width += 2 + 7 + e_reflow->column_width + 7;
+ running_width += 2 + 7 + column_width + 7;
+ }
+ if (e_reflow->column_drag) {
+ int start_line = e_reflow_pick_line(e_reflow,
+ gtk_layout_get_hadjustment(GTK_LAYOUT(item->canvas))->value);
+ i = x - start_line * (column_width + 16);
+ running_width = start_line * (column_width + 16);
+ column_width = e_reflow->temp_column_width;
+ running_width -= start_line * (column_width + 16);
+ i += start_line * (column_width + 16);
+ running_width += 7 + column_width + 7;
+ x_rect = running_width;
+ y_rect = 7;
+ width_rect = 2;
+ height_rect = e_reflow->height - 14;
+
+ /* Compute first column to draw. */
+ i /= column_width + 16;
+ running_width += i * (column_width + 16);
+
+ for ( ; i < e_reflow->column_count - 1; i++) {
+ if ( running_width > x + width )
+ break;
+ x_rect = running_width;
+ gdk_draw_rectangle(drawable,
+ GTK_WIDGET(item->canvas)->style->fg_gc[GTK_STATE_NORMAL],
+ TRUE,
+ x_rect - x,
+ y_rect - y,
+ width_rect - 1,
+ height_rect - 1);
+ running_width += 2 + 7 + column_width + 7;
+ }
+ }
+}
+
+static void
+e_reflow_update (GnomeCanvasItem *item, double affine[6], ArtSVP *clip_path, gint flags)
+{
+ double x0, x1, y0, y1;
+
+ if (GNOME_CANVAS_ITEM_CLASS(parent_class)->update)
+ GNOME_CANVAS_ITEM_CLASS(parent_class)->update (item, affine, clip_path, flags);
+
+ x0 = item->x1;
+ y0 = item->y1;
+ x1 = item->x2;
+ y1 = item->y2;
+ if ( x0 > 0 )
+ x0 = 0;
+ if ( y0 > 0 )
+ y0 = 0;
+ if ( x1 < E_REFLOW(item)->width )
+ x1 = E_REFLOW(item)->width;
+ if ( x1 < E_REFLOW(item)->height )
+ x1 = E_REFLOW(item)->height;
+
+ gnome_canvas_update_bbox(item, x0, y0, x1, y1);
+}
+
+static double
+e_reflow_point (GnomeCanvasItem *item,
+ double x, double y, int cx, int cy,
+ GnomeCanvasItem **actual_item)
+{
+ EReflow *e_reflow = E_REFLOW(item);
+ double distance = 1;
+
+ if (GNOME_CANVAS_ITEM_CLASS(parent_class)->point)
+ distance = GNOME_CANVAS_ITEM_CLASS(parent_class)->point (item, x, y, cx, cy, actual_item);
+ if (*actual_item)
+ return 0;
+
+ if (y >= 7 && y <= e_reflow->height - 7) {
+ int n_x;
+ n_x = x;
+ n_x += 3;
+ n_x %= (int)(e_reflow->column_width + 16);
+ if (n_x < 4) {
+ *actual_item = item;
+ return 0;
+ }
}
+ return distance;
}
-#endif
static void
_reflow( EReflow *e_reflow )
@@ -380,6 +531,9 @@ _update_reflow( EReflow *e_reflow )
running_height = 7;
list = e_reflow->items;
+ gtk_object_set (GTK_OBJECT(list->data),
+ "width", e_reflow->column_width,
+ NULL);
gtk_object_get (GTK_OBJECT(list->data),
"height", &item_height,
NULL);
@@ -391,6 +545,9 @@ _update_reflow( EReflow *e_reflow )
list = g_list_next(list);
for( ; list; list = g_list_next(list)) {
+ gtk_object_set (GTK_OBJECT(list->data),
+ "width", e_reflow->column_width,
+ NULL);
gtk_object_get (GTK_OBJECT(list->data),
"height", &item_height,
NULL);
diff --git a/widgets/e-minicard/e-reflow.h b/widgets/e-minicard/e-reflow.h
index 0d0ab4251a..27b96645f8 100644
--- a/widgets/e-minicard/e-reflow.h
+++ b/widgets/e-minicard/e-reflow.h
@@ -65,6 +65,12 @@ struct _EReflow
double column_width;
int idle;
+
+ /* These are all for when the column is being dragged. */
+ gboolean column_drag;
+ gdouble start_x;
+ gint which_column_dragged;
+ double temp_column_width;
};
struct _EReflowClass
diff --git a/widgets/e-minicard/test-reflow.c b/widgets/e-minicard/test-reflow.c
index f03232c72d..067e520754 100644
--- a/widgets/e-minicard/test-reflow.c
+++ b/widgets/e-minicard/test-reflow.c
@@ -26,6 +26,7 @@
/* This is a horrible thing to do, but it is just a test. */
GnomeCanvasItem *reflow;
GnomeCanvasItem *rect;
+GtkAllocation last_alloc;
static void destroy_callback(GtkWidget *app, gpointer data)
{
@@ -35,6 +36,7 @@ static void destroy_callback(GtkWidget *app, gpointer data)
static void allocate_callback(GtkWidget *canvas, GtkAllocation *allocation, gpointer data)
{
double width;
+ last_alloc = *allocation;
gnome_canvas_item_set( reflow,
"height", (double) allocation->height,
NULL );
@@ -49,6 +51,20 @@ static void allocate_callback(GtkWidget *canvas, GtkAllocation *allocation, gpoi
NULL );
}
+static void resize(GnomeCanvasItem *item, gpointer data)
+{
+ double width;
+ gtk_object_get(GTK_OBJECT(reflow),
+ "width", &width,
+ NULL);
+ width = MAX(width, last_alloc.width);
+ gnome_canvas_set_scroll_region(item->canvas , 0, 0, width, last_alloc.height );
+ gnome_canvas_item_set( rect,
+ "x2", (double) width,
+ "y2", (double) last_alloc.height,
+ NULL );
+}
+
static void about_callback( GtkWidget *widget, gpointer data )
{
@@ -98,6 +114,9 @@ int main( int argc, char *argv[] )
"y", (double) 0,
"height", (double) 100,
NULL );
+ gtk_signal_connect( GTK_OBJECT( reflow ), "resize",
+ GTK_SIGNAL_FUNC( resize ),
+ ( gpointer ) app);
for ( i = 0; i < 200; i++ )
{
GnomeCanvasItem *item;
diff --git a/widgets/e-reflow.c b/widgets/e-reflow.c
index ce2e92e530..e9ff1b6eaa 100644
--- a/widgets/e-reflow.c
+++ b/widgets/e-reflow.c
@@ -32,6 +32,8 @@ static void e_reflow_realize (GnomeCanvasItem *item);
static void e_reflow_unrealize (GnomeCanvasItem *item);
static void e_reflow_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
int x, int y, int width, int height);
+static void e_reflow_update (GnomeCanvasItem *item, double affine[6], ArtSVP *clip_path, gint flags);
+static double e_reflow_point (GnomeCanvasItem *item, double x, double y, int cx, int cy, GnomeCanvasItem **actual_item);
static void _update_reflow ( EReflow *reflow );
static void _resize( GtkObject *object, gpointer data );
@@ -112,7 +114,9 @@ e_reflow_class_init (EReflowClass *klass)
item_class->event = e_reflow_event;
item_class->realize = e_reflow_realize;
item_class->unrealize = e_reflow_unrealize;
- /* item_class->draw = e_reflow_draw;*/
+ item_class->draw = e_reflow_draw;
+ item_class->update = e_reflow_update;
+ item_class->point = e_reflow_point;
}
static void
@@ -126,6 +130,8 @@ e_reflow_init (EReflow *reflow)
reflow->width = 10;
reflow->height = 10;
reflow->idle = 0;
+
+ reflow->column_drag = FALSE;
}
static void
@@ -214,6 +220,14 @@ e_reflow_unrealize (GnomeCanvasItem *item)
(* GNOME_CANVAS_ITEM_CLASS(parent_class)->unrealize) (item);
}
+static gint
+e_reflow_pick_line (EReflow *e_reflow, gint x)
+{
+ x += 6;
+ x /= e_reflow->column_width + 16;
+ return x;
+}
+
static gboolean
e_reflow_event (GnomeCanvasItem *item, GdkEvent *event)
{
@@ -249,8 +263,56 @@ e_reflow_event (GnomeCanvasItem *item, GdkEvent *event)
}
}
}
+ break;
+ case GDK_BUTTON_PRESS:
+ {
+ GdkEventButton *button = (GdkEventButton *) event;
+ int n_x;
+ n_x = button->x;
+ n_x += 3;
+ n_x %= (int)(e_reflow->column_width + 16);
+ if ( button->y >= 7 && button->y <= e_reflow->height - 7 && n_x < 4 ) {
+ e_reflow->which_column_dragged = e_reflow_pick_line(e_reflow, button->x);
+ e_reflow->start_x = button->x;
+ e_reflow->temp_column_width = e_reflow->column_width;
+ e_reflow->column_drag = TRUE;
+ gnome_canvas_item_request_update(item);
+ return TRUE;
+ }
+ }
+ break;
+ case GDK_BUTTON_RELEASE:
+ if (e_reflow->column_drag) {
+ GdkEventButton *button = (GdkEventButton *) event;
+ GtkAdjustment *adjustment = gtk_layout_get_hadjustment(GTK_LAYOUT(item->canvas));
+ e_reflow->temp_column_width = e_reflow->column_width +
+ (button->x - e_reflow->start_x)/(e_reflow->which_column_dragged - e_reflow_pick_line(e_reflow, adjustment->value));
+ if ( e_reflow->temp_column_width < 50 )
+ e_reflow->temp_column_width = 50;
+ gtk_adjustment_set_value(adjustment, adjustment->value + e_reflow_pick_line(e_reflow, adjustment->value) * (e_reflow->temp_column_width - e_reflow->column_width));
+ e_reflow->column_width = e_reflow->temp_column_width;
+ e_reflow->column_drag = FALSE;
+ _update_reflow(e_reflow);
+ gnome_canvas_item_request_update(item);
+ return TRUE;
+ }
+ break;
+ case GDK_MOTION_NOTIFY:
+ if (e_reflow->column_drag) {
+ double old_width = e_reflow->temp_column_width;
+ GdkEventMotion *motion = (GdkEventMotion *) event;
+ GtkAdjustment *adjustment = gtk_layout_get_hadjustment(GTK_LAYOUT(item->canvas));
+ e_reflow->temp_column_width = e_reflow->column_width +
+ (motion->x - e_reflow->start_x)/(e_reflow->which_column_dragged - e_reflow_pick_line(e_reflow, adjustment->value));
+ if (e_reflow->temp_column_width < 50)
+ e_reflow->temp_column_width = 50;
+ if (old_width != e_reflow->temp_column_width)
+ gnome_canvas_item_request_update(item);
+ return TRUE;
+ }
+ break;
default:
- break;
+ break;
}
if (GNOME_CANVAS_ITEM_CLASS( parent_class )->event)
@@ -275,7 +337,7 @@ e_reflow_add_item(EReflow *e_reflow, GnomeCanvasItem *item)
}
}
-#if 0
+
static void e_reflow_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
int x, int y, int width, int height)
{
@@ -283,17 +345,25 @@ static void e_reflow_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
gint running_width;
EReflow *e_reflow = E_REFLOW(item);
int i;
+ double column_width;
if (GNOME_CANVAS_ITEM_CLASS(parent_class)->draw)
GNOME_CANVAS_ITEM_CLASS(parent_class)->draw (item, drawable, x, y, width, height);
-
- running_width = 7 + e_reflow->column_width + 7;
+ column_width = e_reflow->column_width;
+ running_width = 7 + column_width + 7;
x_rect = running_width;
y_rect = 7;
width_rect = 2;
height_rect = e_reflow->height - 14;
- for (i = 0; i < e_reflow->column_count - 1; i++) {
+ /* Compute first column to draw. */
+ i = x;
+ i /= column_width + 16;
+ running_width += i * (column_width + 16);
+
+ for ( ; i < e_reflow->column_count - 1; i++) {
+ if ( running_width > x + width )
+ break;
x_rect = running_width;
gtk_paint_flat_box(GTK_WIDGET(item->canvas)->style,
drawable,
@@ -303,13 +373,94 @@ static void e_reflow_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
GTK_WIDGET(item->canvas),
"reflow",
x_rect - x,
- y_rect - x,
+ y_rect - y,
width_rect,
height_rect);
- running_width += 2 + 7 + e_reflow->column_width + 7;
+ running_width += 2 + 7 + column_width + 7;
+ }
+ if (e_reflow->column_drag) {
+ int start_line = e_reflow_pick_line(e_reflow,
+ gtk_layout_get_hadjustment(GTK_LAYOUT(item->canvas))->value);
+ i = x - start_line * (column_width + 16);
+ running_width = start_line * (column_width + 16);
+ column_width = e_reflow->temp_column_width;
+ running_width -= start_line * (column_width + 16);
+ i += start_line * (column_width + 16);
+ running_width += 7 + column_width + 7;
+ x_rect = running_width;
+ y_rect = 7;
+ width_rect = 2;
+ height_rect = e_reflow->height - 14;
+
+ /* Compute first column to draw. */
+ i /= column_width + 16;
+ running_width += i * (column_width + 16);
+
+ for ( ; i < e_reflow->column_count - 1; i++) {
+ if ( running_width > x + width )
+ break;
+ x_rect = running_width;
+ gdk_draw_rectangle(drawable,
+ GTK_WIDGET(item->canvas)->style->fg_gc[GTK_STATE_NORMAL],
+ TRUE,
+ x_rect - x,
+ y_rect - y,
+ width_rect - 1,
+ height_rect - 1);
+ running_width += 2 + 7 + column_width + 7;
+ }
+ }
+}
+
+static void
+e_reflow_update (GnomeCanvasItem *item, double affine[6], ArtSVP *clip_path, gint flags)
+{
+ double x0, x1, y0, y1;
+
+ if (GNOME_CANVAS_ITEM_CLASS(parent_class)->update)
+ GNOME_CANVAS_ITEM_CLASS(parent_class)->update (item, affine, clip_path, flags);
+
+ x0 = item->x1;
+ y0 = item->y1;
+ x1 = item->x2;
+ y1 = item->y2;
+ if ( x0 > 0 )
+ x0 = 0;
+ if ( y0 > 0 )
+ y0 = 0;
+ if ( x1 < E_REFLOW(item)->width )
+ x1 = E_REFLOW(item)->width;
+ if ( x1 < E_REFLOW(item)->height )
+ x1 = E_REFLOW(item)->height;
+
+ gnome_canvas_update_bbox(item, x0, y0, x1, y1);
+}
+
+static double
+e_reflow_point (GnomeCanvasItem *item,
+ double x, double y, int cx, int cy,
+ GnomeCanvasItem **actual_item)
+{
+ EReflow *e_reflow = E_REFLOW(item);
+ double distance = 1;
+
+ if (GNOME_CANVAS_ITEM_CLASS(parent_class)->point)
+ distance = GNOME_CANVAS_ITEM_CLASS(parent_class)->point (item, x, y, cx, cy, actual_item);
+ if (*actual_item)
+ return 0;
+
+ if (y >= 7 && y <= e_reflow->height - 7) {
+ int n_x;
+ n_x = x;
+ n_x += 3;
+ n_x %= (int)(e_reflow->column_width + 16);
+ if (n_x < 4) {
+ *actual_item = item;
+ return 0;
+ }
}
+ return distance;
}
-#endif
static void
_reflow( EReflow *e_reflow )
@@ -380,6 +531,9 @@ _update_reflow( EReflow *e_reflow )
running_height = 7;
list = e_reflow->items;
+ gtk_object_set (GTK_OBJECT(list->data),
+ "width", e_reflow->column_width,
+ NULL);
gtk_object_get (GTK_OBJECT(list->data),
"height", &item_height,
NULL);
@@ -391,6 +545,9 @@ _update_reflow( EReflow *e_reflow )
list = g_list_next(list);
for( ; list; list = g_list_next(list)) {
+ gtk_object_set (GTK_OBJECT(list->data),
+ "width", e_reflow->column_width,
+ NULL);
gtk_object_get (GTK_OBJECT(list->data),
"height", &item_height,
NULL);
diff --git a/widgets/e-reflow.h b/widgets/e-reflow.h
index 0d0ab4251a..27b96645f8 100644
--- a/widgets/e-reflow.h
+++ b/widgets/e-reflow.h
@@ -65,6 +65,12 @@ struct _EReflow
double column_width;
int idle;
+
+ /* These are all for when the column is being dragged. */
+ gboolean column_drag;
+ gdouble start_x;
+ gint which_column_dragged;
+ double temp_column_width;
};
struct _EReflowClass
diff --git a/widgets/e-reflow/e-reflow.c b/widgets/e-reflow/e-reflow.c
index ce2e92e530..e9ff1b6eaa 100644
--- a/widgets/e-reflow/e-reflow.c
+++ b/widgets/e-reflow/e-reflow.c
@@ -32,6 +32,8 @@ static void e_reflow_realize (GnomeCanvasItem *item);
static void e_reflow_unrealize (GnomeCanvasItem *item);
static void e_reflow_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
int x, int y, int width, int height);
+static void e_reflow_update (GnomeCanvasItem *item, double affine[6], ArtSVP *clip_path, gint flags);
+static double e_reflow_point (GnomeCanvasItem *item, double x, double y, int cx, int cy, GnomeCanvasItem **actual_item);
static void _update_reflow ( EReflow *reflow );
static void _resize( GtkObject *object, gpointer data );
@@ -112,7 +114,9 @@ e_reflow_class_init (EReflowClass *klass)
item_class->event = e_reflow_event;
item_class->realize = e_reflow_realize;
item_class->unrealize = e_reflow_unrealize;
- /* item_class->draw = e_reflow_draw;*/
+ item_class->draw = e_reflow_draw;
+ item_class->update = e_reflow_update;
+ item_class->point = e_reflow_point;
}
static void
@@ -126,6 +130,8 @@ e_reflow_init (EReflow *reflow)
reflow->width = 10;
reflow->height = 10;
reflow->idle = 0;
+
+ reflow->column_drag = FALSE;
}
static void
@@ -214,6 +220,14 @@ e_reflow_unrealize (GnomeCanvasItem *item)
(* GNOME_CANVAS_ITEM_CLASS(parent_class)->unrealize) (item);
}
+static gint
+e_reflow_pick_line (EReflow *e_reflow, gint x)
+{
+ x += 6;
+ x /= e_reflow->column_width + 16;
+ return x;
+}
+
static gboolean
e_reflow_event (GnomeCanvasItem *item, GdkEvent *event)
{
@@ -249,8 +263,56 @@ e_reflow_event (GnomeCanvasItem *item, GdkEvent *event)
}
}
}
+ break;
+ case GDK_BUTTON_PRESS:
+ {
+ GdkEventButton *button = (GdkEventButton *) event;
+ int n_x;
+ n_x = button->x;
+ n_x += 3;
+ n_x %= (int)(e_reflow->column_width + 16);
+ if ( button->y >= 7 && button->y <= e_reflow->height - 7 && n_x < 4 ) {
+ e_reflow->which_column_dragged = e_reflow_pick_line(e_reflow, button->x);
+ e_reflow->start_x = button->x;
+ e_reflow->temp_column_width = e_reflow->column_width;
+ e_reflow->column_drag = TRUE;
+ gnome_canvas_item_request_update(item);
+ return TRUE;
+ }
+ }
+ break;
+ case GDK_BUTTON_RELEASE:
+ if (e_reflow->column_drag) {
+ GdkEventButton *button = (GdkEventButton *) event;
+ GtkAdjustment *adjustment = gtk_layout_get_hadjustment(GTK_LAYOUT(item->canvas));
+ e_reflow->temp_column_width = e_reflow->column_width +
+ (button->x - e_reflow->start_x)/(e_reflow->which_column_dragged - e_reflow_pick_line(e_reflow, adjustment->value));
+ if ( e_reflow->temp_column_width < 50 )
+ e_reflow->temp_column_width = 50;
+ gtk_adjustment_set_value(adjustment, adjustment->value + e_reflow_pick_line(e_reflow, adjustment->value) * (e_reflow->temp_column_width - e_reflow->column_width));
+ e_reflow->column_width = e_reflow->temp_column_width;
+ e_reflow->column_drag = FALSE;
+ _update_reflow(e_reflow);
+ gnome_canvas_item_request_update(item);
+ return TRUE;
+ }
+ break;
+ case GDK_MOTION_NOTIFY:
+ if (e_reflow->column_drag) {
+ double old_width = e_reflow->temp_column_width;
+ GdkEventMotion *motion = (GdkEventMotion *) event;
+ GtkAdjustment *adjustment = gtk_layout_get_hadjustment(GTK_LAYOUT(item->canvas));
+ e_reflow->temp_column_width = e_reflow->column_width +
+ (motion->x - e_reflow->start_x)/(e_reflow->which_column_dragged - e_reflow_pick_line(e_reflow, adjustment->value));
+ if (e_reflow->temp_column_width < 50)
+ e_reflow->temp_column_width = 50;
+ if (old_width != e_reflow->temp_column_width)
+ gnome_canvas_item_request_update(item);
+ return TRUE;
+ }
+ break;
default:
- break;
+ break;
}
if (GNOME_CANVAS_ITEM_CLASS( parent_class )->event)
@@ -275,7 +337,7 @@ e_reflow_add_item(EReflow *e_reflow, GnomeCanvasItem *item)
}
}
-#if 0
+
static void e_reflow_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
int x, int y, int width, int height)
{
@@ -283,17 +345,25 @@ static void e_reflow_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
gint running_width;
EReflow *e_reflow = E_REFLOW(item);
int i;
+ double column_width;
if (GNOME_CANVAS_ITEM_CLASS(parent_class)->draw)
GNOME_CANVAS_ITEM_CLASS(parent_class)->draw (item, drawable, x, y, width, height);
-
- running_width = 7 + e_reflow->column_width + 7;
+ column_width = e_reflow->column_width;
+ running_width = 7 + column_width + 7;
x_rect = running_width;
y_rect = 7;
width_rect = 2;
height_rect = e_reflow->height - 14;
- for (i = 0; i < e_reflow->column_count - 1; i++) {
+ /* Compute first column to draw. */
+ i = x;
+ i /= column_width + 16;
+ running_width += i * (column_width + 16);
+
+ for ( ; i < e_reflow->column_count - 1; i++) {
+ if ( running_width > x + width )
+ break;
x_rect = running_width;
gtk_paint_flat_box(GTK_WIDGET(item->canvas)->style,
drawable,
@@ -303,13 +373,94 @@ static void e_reflow_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
GTK_WIDGET(item->canvas),
"reflow",
x_rect - x,
- y_rect - x,
+ y_rect - y,
width_rect,
height_rect);
- running_width += 2 + 7 + e_reflow->column_width + 7;
+ running_width += 2 + 7 + column_width + 7;
+ }
+ if (e_reflow->column_drag) {
+ int start_line = e_reflow_pick_line(e_reflow,
+ gtk_layout_get_hadjustment(GTK_LAYOUT(item->canvas))->value);
+ i = x - start_line * (column_width + 16);
+ running_width = start_line * (column_width + 16);
+ column_width = e_reflow->temp_column_width;
+ running_width -= start_line * (column_width + 16);
+ i += start_line * (column_width + 16);
+ running_width += 7 + column_width + 7;
+ x_rect = running_width;
+ y_rect = 7;
+ width_rect = 2;
+ height_rect = e_reflow->height - 14;
+
+ /* Compute first column to draw. */
+ i /= column_width + 16;
+ running_width += i * (column_width + 16);
+
+ for ( ; i < e_reflow->column_count - 1; i++) {
+ if ( running_width > x + width )
+ break;
+ x_rect = running_width;
+ gdk_draw_rectangle(drawable,
+ GTK_WIDGET(item->canvas)->style->fg_gc[GTK_STATE_NORMAL],
+ TRUE,
+ x_rect - x,
+ y_rect - y,
+ width_rect - 1,
+ height_rect - 1);
+ running_width += 2 + 7 + column_width + 7;
+ }
+ }
+}
+
+static void
+e_reflow_update (GnomeCanvasItem *item, double affine[6], ArtSVP *clip_path, gint flags)
+{
+ double x0, x1, y0, y1;
+
+ if (GNOME_CANVAS_ITEM_CLASS(parent_class)->update)
+ GNOME_CANVAS_ITEM_CLASS(parent_class)->update (item, affine, clip_path, flags);
+
+ x0 = item->x1;
+ y0 = item->y1;
+ x1 = item->x2;
+ y1 = item->y2;
+ if ( x0 > 0 )
+ x0 = 0;
+ if ( y0 > 0 )
+ y0 = 0;
+ if ( x1 < E_REFLOW(item)->width )
+ x1 = E_REFLOW(item)->width;
+ if ( x1 < E_REFLOW(item)->height )
+ x1 = E_REFLOW(item)->height;
+
+ gnome_canvas_update_bbox(item, x0, y0, x1, y1);
+}
+
+static double
+e_reflow_point (GnomeCanvasItem *item,
+ double x, double y, int cx, int cy,
+ GnomeCanvasItem **actual_item)
+{
+ EReflow *e_reflow = E_REFLOW(item);
+ double distance = 1;
+
+ if (GNOME_CANVAS_ITEM_CLASS(parent_class)->point)
+ distance = GNOME_CANVAS_ITEM_CLASS(parent_class)->point (item, x, y, cx, cy, actual_item);
+ if (*actual_item)
+ return 0;
+
+ if (y >= 7 && y <= e_reflow->height - 7) {
+ int n_x;
+ n_x = x;
+ n_x += 3;
+ n_x %= (int)(e_reflow->column_width + 16);
+ if (n_x < 4) {
+ *actual_item = item;
+ return 0;
+ }
}
+ return distance;
}
-#endif
static void
_reflow( EReflow *e_reflow )
@@ -380,6 +531,9 @@ _update_reflow( EReflow *e_reflow )
running_height = 7;
list = e_reflow->items;
+ gtk_object_set (GTK_OBJECT(list->data),
+ "width", e_reflow->column_width,
+ NULL);
gtk_object_get (GTK_OBJECT(list->data),
"height", &item_height,
NULL);
@@ -391,6 +545,9 @@ _update_reflow( EReflow *e_reflow )
list = g_list_next(list);
for( ; list; list = g_list_next(list)) {
+ gtk_object_set (GTK_OBJECT(list->data),
+ "width", e_reflow->column_width,
+ NULL);
gtk_object_get (GTK_OBJECT(list->data),
"height", &item_height,
NULL);
diff --git a/widgets/e-reflow/e-reflow.h b/widgets/e-reflow/e-reflow.h
index 0d0ab4251a..27b96645f8 100644
--- a/widgets/e-reflow/e-reflow.h
+++ b/widgets/e-reflow/e-reflow.h
@@ -65,6 +65,12 @@ struct _EReflow
double column_width;
int idle;
+
+ /* These are all for when the column is being dragged. */
+ gboolean column_drag;
+ gdouble start_x;
+ gint which_column_dragged;
+ double temp_column_width;
};
struct _EReflowClass
diff --git a/widgets/e-text-event-processor-types.h b/widgets/e-text-event-processor-types.h
index 3795058225..eb8e0d4a50 100644
--- a/widgets/e-text-event-processor-types.h
+++ b/widgets/e-text-event-processor-types.h
@@ -75,8 +75,8 @@ enum _ETextEventProcessorCommandAction {
E_TEP_MOVE,
E_TEP_SELECT,
E_TEP_DELETE,
-
E_TEP_INSERT,
+
E_TEP_COPY,
E_TEP_PASTE,
E_TEP_GET_SELECTION,
diff --git a/widgets/e-text/e-text-event-processor-types.h b/widgets/e-text/e-text-event-processor-types.h
index 3795058225..eb8e0d4a50 100644
--- a/widgets/e-text/e-text-event-processor-types.h
+++ b/widgets/e-text/e-text-event-processor-types.h
@@ -75,8 +75,8 @@ enum _ETextEventProcessorCommandAction {
E_TEP_MOVE,
E_TEP_SELECT,
E_TEP_DELETE,
-
E_TEP_INSERT,
+
E_TEP_COPY,
E_TEP_PASTE,
E_TEP_GET_SELECTION,
diff --git a/widgets/misc/e-reflow.c b/widgets/misc/e-reflow.c
index ce2e92e530..e9ff1b6eaa 100644
--- a/widgets/misc/e-reflow.c
+++ b/widgets/misc/e-reflow.c
@@ -32,6 +32,8 @@ static void e_reflow_realize (GnomeCanvasItem *item);
static void e_reflow_unrealize (GnomeCanvasItem *item);
static void e_reflow_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
int x, int y, int width, int height);
+static void e_reflow_update (GnomeCanvasItem *item, double affine[6], ArtSVP *clip_path, gint flags);
+static double e_reflow_point (GnomeCanvasItem *item, double x, double y, int cx, int cy, GnomeCanvasItem **actual_item);
static void _update_reflow ( EReflow *reflow );
static void _resize( GtkObject *object, gpointer data );
@@ -112,7 +114,9 @@ e_reflow_class_init (EReflowClass *klass)
item_class->event = e_reflow_event;
item_class->realize = e_reflow_realize;
item_class->unrealize = e_reflow_unrealize;
- /* item_class->draw = e_reflow_draw;*/
+ item_class->draw = e_reflow_draw;
+ item_class->update = e_reflow_update;
+ item_class->point = e_reflow_point;
}
static void
@@ -126,6 +130,8 @@ e_reflow_init (EReflow *reflow)
reflow->width = 10;
reflow->height = 10;
reflow->idle = 0;
+
+ reflow->column_drag = FALSE;
}
static void
@@ -214,6 +220,14 @@ e_reflow_unrealize (GnomeCanvasItem *item)
(* GNOME_CANVAS_ITEM_CLASS(parent_class)->unrealize) (item);
}
+static gint
+e_reflow_pick_line (EReflow *e_reflow, gint x)
+{
+ x += 6;
+ x /= e_reflow->column_width + 16;
+ return x;
+}
+
static gboolean
e_reflow_event (GnomeCanvasItem *item, GdkEvent *event)
{
@@ -249,8 +263,56 @@ e_reflow_event (GnomeCanvasItem *item, GdkEvent *event)
}
}
}
+ break;
+ case GDK_BUTTON_PRESS:
+ {
+ GdkEventButton *button = (GdkEventButton *) event;
+ int n_x;
+ n_x = button->x;
+ n_x += 3;
+ n_x %= (int)(e_reflow->column_width + 16);
+ if ( button->y >= 7 && button->y <= e_reflow->height - 7 && n_x < 4 ) {
+ e_reflow->which_column_dragged = e_reflow_pick_line(e_reflow, button->x);
+ e_reflow->start_x = button->x;
+ e_reflow->temp_column_width = e_reflow->column_width;
+ e_reflow->column_drag = TRUE;
+ gnome_canvas_item_request_update(item);
+ return TRUE;
+ }
+ }
+ break;
+ case GDK_BUTTON_RELEASE:
+ if (e_reflow->column_drag) {
+ GdkEventButton *button = (GdkEventButton *) event;
+ GtkAdjustment *adjustment = gtk_layout_get_hadjustment(GTK_LAYOUT(item->canvas));
+ e_reflow->temp_column_width = e_reflow->column_width +
+ (button->x - e_reflow->start_x)/(e_reflow->which_column_dragged - e_reflow_pick_line(e_reflow, adjustment->value));
+ if ( e_reflow->temp_column_width < 50 )
+ e_reflow->temp_column_width = 50;
+ gtk_adjustment_set_value(adjustment, adjustment->value + e_reflow_pick_line(e_reflow, adjustment->value) * (e_reflow->temp_column_width - e_reflow->column_width));
+ e_reflow->column_width = e_reflow->temp_column_width;
+ e_reflow->column_drag = FALSE;
+ _update_reflow(e_reflow);
+ gnome_canvas_item_request_update(item);
+ return TRUE;
+ }
+ break;
+ case GDK_MOTION_NOTIFY:
+ if (e_reflow->column_drag) {
+ double old_width = e_reflow->temp_column_width;
+ GdkEventMotion *motion = (GdkEventMotion *) event;
+ GtkAdjustment *adjustment = gtk_layout_get_hadjustment(GTK_LAYOUT(item->canvas));
+ e_reflow->temp_column_width = e_reflow->column_width +
+ (motion->x - e_reflow->start_x)/(e_reflow->which_column_dragged - e_reflow_pick_line(e_reflow, adjustment->value));
+ if (e_reflow->temp_column_width < 50)
+ e_reflow->temp_column_width = 50;
+ if (old_width != e_reflow->temp_column_width)
+ gnome_canvas_item_request_update(item);
+ return TRUE;
+ }
+ break;
default:
- break;
+ break;
}
if (GNOME_CANVAS_ITEM_CLASS( parent_class )->event)
@@ -275,7 +337,7 @@ e_reflow_add_item(EReflow *e_reflow, GnomeCanvasItem *item)
}
}
-#if 0
+
static void e_reflow_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
int x, int y, int width, int height)
{
@@ -283,17 +345,25 @@ static void e_reflow_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
gint running_width;
EReflow *e_reflow = E_REFLOW(item);
int i;
+ double column_width;
if (GNOME_CANVAS_ITEM_CLASS(parent_class)->draw)
GNOME_CANVAS_ITEM_CLASS(parent_class)->draw (item, drawable, x, y, width, height);
-
- running_width = 7 + e_reflow->column_width + 7;
+ column_width = e_reflow->column_width;
+ running_width = 7 + column_width + 7;
x_rect = running_width;
y_rect = 7;
width_rect = 2;
height_rect = e_reflow->height - 14;
- for (i = 0; i < e_reflow->column_count - 1; i++) {
+ /* Compute first column to draw. */
+ i = x;
+ i /= column_width + 16;
+ running_width += i * (column_width + 16);
+
+ for ( ; i < e_reflow->column_count - 1; i++) {
+ if ( running_width > x + width )
+ break;
x_rect = running_width;
gtk_paint_flat_box(GTK_WIDGET(item->canvas)->style,
drawable,
@@ -303,13 +373,94 @@ static void e_reflow_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
GTK_WIDGET(item->canvas),
"reflow",
x_rect - x,
- y_rect - x,
+ y_rect - y,
width_rect,
height_rect);
- running_width += 2 + 7 + e_reflow->column_width + 7;
+ running_width += 2 + 7 + column_width + 7;
+ }
+ if (e_reflow->column_drag) {
+ int start_line = e_reflow_pick_line(e_reflow,
+ gtk_layout_get_hadjustment(GTK_LAYOUT(item->canvas))->value);
+ i = x - start_line * (column_width + 16);
+ running_width = start_line * (column_width + 16);
+ column_width = e_reflow->temp_column_width;
+ running_width -= start_line * (column_width + 16);
+ i += start_line * (column_width + 16);
+ running_width += 7 + column_width + 7;
+ x_rect = running_width;
+ y_rect = 7;
+ width_rect = 2;
+ height_rect = e_reflow->height - 14;
+
+ /* Compute first column to draw. */
+ i /= column_width + 16;
+ running_width += i * (column_width + 16);
+
+ for ( ; i < e_reflow->column_count - 1; i++) {
+ if ( running_width > x + width )
+ break;
+ x_rect = running_width;
+ gdk_draw_rectangle(drawable,
+ GTK_WIDGET(item->canvas)->style->fg_gc[GTK_STATE_NORMAL],
+ TRUE,
+ x_rect - x,
+ y_rect - y,
+ width_rect - 1,
+ height_rect - 1);
+ running_width += 2 + 7 + column_width + 7;
+ }
+ }
+}
+
+static void
+e_reflow_update (GnomeCanvasItem *item, double affine[6], ArtSVP *clip_path, gint flags)
+{
+ double x0, x1, y0, y1;
+
+ if (GNOME_CANVAS_ITEM_CLASS(parent_class)->update)
+ GNOME_CANVAS_ITEM_CLASS(parent_class)->update (item, affine, clip_path, flags);
+
+ x0 = item->x1;
+ y0 = item->y1;
+ x1 = item->x2;
+ y1 = item->y2;
+ if ( x0 > 0 )
+ x0 = 0;
+ if ( y0 > 0 )
+ y0 = 0;
+ if ( x1 < E_REFLOW(item)->width )
+ x1 = E_REFLOW(item)->width;
+ if ( x1 < E_REFLOW(item)->height )
+ x1 = E_REFLOW(item)->height;
+
+ gnome_canvas_update_bbox(item, x0, y0, x1, y1);
+}
+
+static double
+e_reflow_point (GnomeCanvasItem *item,
+ double x, double y, int cx, int cy,
+ GnomeCanvasItem **actual_item)
+{
+ EReflow *e_reflow = E_REFLOW(item);
+ double distance = 1;
+
+ if (GNOME_CANVAS_ITEM_CLASS(parent_class)->point)
+ distance = GNOME_CANVAS_ITEM_CLASS(parent_class)->point (item, x, y, cx, cy, actual_item);
+ if (*actual_item)
+ return 0;
+
+ if (y >= 7 && y <= e_reflow->height - 7) {
+ int n_x;
+ n_x = x;
+ n_x += 3;
+ n_x %= (int)(e_reflow->column_width + 16);
+ if (n_x < 4) {
+ *actual_item = item;
+ return 0;
+ }
}
+ return distance;
}
-#endif
static void
_reflow( EReflow *e_reflow )
@@ -380,6 +531,9 @@ _update_reflow( EReflow *e_reflow )
running_height = 7;
list = e_reflow->items;
+ gtk_object_set (GTK_OBJECT(list->data),
+ "width", e_reflow->column_width,
+ NULL);
gtk_object_get (GTK_OBJECT(list->data),
"height", &item_height,
NULL);
@@ -391,6 +545,9 @@ _update_reflow( EReflow *e_reflow )
list = g_list_next(list);
for( ; list; list = g_list_next(list)) {
+ gtk_object_set (GTK_OBJECT(list->data),
+ "width", e_reflow->column_width,
+ NULL);
gtk_object_get (GTK_OBJECT(list->data),
"height", &item_height,
NULL);
diff --git a/widgets/misc/e-reflow.h b/widgets/misc/e-reflow.h
index 0d0ab4251a..27b96645f8 100644
--- a/widgets/misc/e-reflow.h
+++ b/widgets/misc/e-reflow.h
@@ -65,6 +65,12 @@ struct _EReflow
double column_width;
int idle;
+
+ /* These are all for when the column is being dragged. */
+ gboolean column_drag;
+ gdouble start_x;
+ gint which_column_dragged;
+ double temp_column_width;
};
struct _EReflowClass
diff --git a/widgets/test-reflow.c b/widgets/test-reflow.c
index f03232c72d..067e520754 100644
--- a/widgets/test-reflow.c
+++ b/widgets/test-reflow.c
@@ -26,6 +26,7 @@
/* This is a horrible thing to do, but it is just a test. */
GnomeCanvasItem *reflow;
GnomeCanvasItem *rect;
+GtkAllocation last_alloc;
static void destroy_callback(GtkWidget *app, gpointer data)
{
@@ -35,6 +36,7 @@ static void destroy_callback(GtkWidget *app, gpointer data)
static void allocate_callback(GtkWidget *canvas, GtkAllocation *allocation, gpointer data)
{
double width;
+ last_alloc = *allocation;
gnome_canvas_item_set( reflow,
"height", (double) allocation->height,
NULL );
@@ -49,6 +51,20 @@ static void allocate_callback(GtkWidget *canvas, GtkAllocation *allocation, gpoi
NULL );
}
+static void resize(GnomeCanvasItem *item, gpointer data)
+{
+ double width;
+ gtk_object_get(GTK_OBJECT(reflow),
+ "width", &width,
+ NULL);
+ width = MAX(width, last_alloc.width);
+ gnome_canvas_set_scroll_region(item->canvas , 0, 0, width, last_alloc.height );
+ gnome_canvas_item_set( rect,
+ "x2", (double) width,
+ "y2", (double) last_alloc.height,
+ NULL );
+}
+
static void about_callback( GtkWidget *widget, gpointer data )
{
@@ -98,6 +114,9 @@ int main( int argc, char *argv[] )
"y", (double) 0,
"height", (double) 100,
NULL );
+ gtk_signal_connect( GTK_OBJECT( reflow ), "resize",
+ GTK_SIGNAL_FUNC( resize ),
+ ( gpointer ) app);
for ( i = 0; i < 200; i++ )
{
GnomeCanvasItem *item;
diff --git a/widgets/text/e-text-event-processor-types.h b/widgets/text/e-text-event-processor-types.h
index 3795058225..eb8e0d4a50 100644
--- a/widgets/text/e-text-event-processor-types.h
+++ b/widgets/text/e-text-event-processor-types.h
@@ -75,8 +75,8 @@ enum _ETextEventProcessorCommandAction {
E_TEP_MOVE,
E_TEP_SELECT,
E_TEP_DELETE,
-
E_TEP_INSERT,
+
E_TEP_COPY,
E_TEP_PASTE,
E_TEP_GET_SELECTION,