Re: [evolution-patches] Contact list editor - select from addressbook add on...



ok, here goes the diff along with the change Log. 
All the callbacks are declared forward in the code. So, thought this
would be the right way. If it still needs to be changed, do let me
know :)

thanks,

- hp

On Wed, 2004-05-26 at 14:43 -0500, Hans Petter Jansson wrote:
> On Wed, 2004-05-26 at 13:52, HP Nadig wrote:
> 
> > 	I've tried my bit to include select names dialog in contact list
> > editor. Please do take a look at the code and let me know if it is ok. 
> > I'll despatch the patch again with change log if the code is ok. :)
> 
> Looks pretty good to me. Maybe you could declare select_cb() before it's
> used instead of using a forward declaration...
> 
> --
> Hans Petter
? gui/contact-list-editor/contact-list-editor.gladep
Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/evolution/addressbook/ChangeLog,v
retrieving revision 1.1704
diff -u -r1.1704 ChangeLog
--- ChangeLog	12 May 2004 17:22:22 -0000	1.1704
+++ ChangeLog	31 May 2004 17:03:13 -0000
@@ -1,3 +1,18 @@
+2004-05-31  H P Nadig  <hpnadig pacific net in>
+
+	* gui/contact-list-editor/e-contact-list-editor.h: Added few
+	headers needed for select names dialog.
+
+	* gui/contact-list-editor/e-contact-list-editor.c
+	(e_contact_list_editor_init): Added select button handler.
+	(select_cb): The callback function for Select Button.
+	(setup_corba): To setup corba for select names dialog.	
+	(select_names_ok_cb): Handle Select names dialog entries.
+	(add_to_model): Adds cards to the model. 
+
+	* gui/contact-list-editor/contact-list-editor.glade: New 'Select'
+	Button. Tooltips added for buttons in button Box.
+
 2004-05-12  Hans Petter Jansson  <hpj ximian com>
 
 	* gui/contact-editor/contact-editor.glade: Add PO box entries.
Index: gui/contact-list-editor/contact-list-editor.glade
===================================================================
RCS file: /cvs/gnome/evolution/addressbook/gui/contact-list-editor/contact-list-editor.glade,v
retrieving revision 1.11
diff -u -r1.11 contact-list-editor.glade
--- gui/contact-list-editor/contact-list-editor.glade	19 Apr 2004 15:19:05 -0000	1.11
+++ gui/contact-list-editor/contact-list-editor.glade	31 May 2004 17:03:16 -0000
@@ -239,6 +239,7 @@
 			  <child>
 			    <widget class="GtkButton" id="add-email-button">
 			      <property name="visible">True</property>
+			      <property name="tooltip" translatable="yes">Add an email to the List</property>
 			      <property name="can_default">True</property>
 			      <property name="can_focus">True</property>
 			      <property name="label">gtk-add</property>
@@ -250,10 +251,23 @@
 			  <child>
 			    <widget class="GtkButton" id="remove-button">
 			      <property name="visible">True</property>
+			      <property name="tooltip" translatable="yes">Remove an email address from the List</property>
 			      <property name="can_default">True</property>
 			      <property name="can_focus">True</property>
 			      <property name="label">gtk-remove</property>
 			      <property name="use_stock">True</property>
+			      <property name="relief">GTK_RELIEF_NORMAL</property>
+			    </widget>
+			  </child>
+
+			  <child>
+			    <widget class="GtkButton" id="select-button">
+			      <property name="visible">True</property>
+			      <property name="tooltip" translatable="yes">Insert email adresses from Adress Book</property>
+			      <property name="can_default">True</property>
+			      <property name="can_focus">True</property>
+			      <property name="label" translatable="yes">Select</property>
+			      <property name="use_underline">True</property>
 			      <property name="relief">GTK_RELIEF_NORMAL</property>
 			    </widget>
 			  </child>
Index: gui/contact-list-editor/e-contact-list-editor.c
===================================================================
RCS file: /cvs/gnome/evolution/addressbook/gui/contact-list-editor/e-contact-list-editor.c,v
retrieving revision 1.53
diff -u -r1.53 e-contact-list-editor.c
--- gui/contact-list-editor/e-contact-list-editor.c	19 Apr 2004 15:19:05 -0000	1.53
+++ gui/contact-list-editor/e-contact-list-editor.c	31 May 2004 17:03:22 -0000
@@ -33,6 +33,9 @@
 #include <bonobo/bonobo-ui-container.h>
 #include <bonobo/bonobo-ui-util.h>
 #include <bonobo/bonobo-window.h>
+#include <bonobo/bonobo-control.h>
+#include <bonobo/bonobo-widget.h>
+#include <bonobo/bonobo-exception.h>
 #include <gal/e-table/e-table-scrolled.h>
 #include <libgnomevfs/gnome-vfs-ops.h>
 #include "shell/evolution-shell-component-utils.h"
@@ -68,6 +71,7 @@
 
 static void add_email_cb (GtkWidget *w, EContactListEditor *editor);
 static void remove_entry_cb (GtkWidget *w, EContactListEditor *editor);
+static void select_cb (GtkWidget *w, EContactListEditor *editor);
 static void list_name_changed_cb (GtkWidget *w, EContactListEditor *editor);
 static void list_image_changed_cb (GtkWidget *w, EContactListEditor *editor);
 static void visible_addrs_toggled_cb (GtkWidget *w, EContactListEditor *editor);
@@ -205,6 +209,7 @@
 
 	editor->add_button = glade_xml_get_widget (editor->gui, "add-email-button");
 	editor->remove_button = glade_xml_get_widget (editor->gui, "remove-button");
+	editor->select_button = glade_xml_get_widget (editor->gui, "select-button");
 
 	editor->email_entry = glade_xml_get_widget (gui, "email-entry");
 	editor->list_name_entry = glade_xml_get_widget (gui, "list-name-entry");
@@ -253,6 +258,8 @@
 			  "activate", G_CALLBACK(add_email_cb), editor);
 	g_signal_connect (editor->remove_button,
 			  "clicked", G_CALLBACK(remove_entry_cb), editor);
+	g_signal_connect (editor->select_button,
+			  "clicked", G_CALLBACK(select_cb), editor);
 	g_signal_connect (editor->list_name_entry,
 			  "changed", G_CALLBACK(list_name_changed_cb), editor);
 	g_signal_connect (editor->visible_addrs_checkbutton,
@@ -708,6 +715,90 @@
 	g_object_set_data(G_OBJECT(table), "model", model);
 
 	return table;
+}
+
+static void
+add_to_model (EContactListEditor *editor, EDestination **cards)
+{
+	int i;
+
+	for (i = 0; cards[i] != NULL; i++) {
+		e_contact_list_model_add_destination (E_CONTACT_LIST_MODEL(editor->model), cards[i]);
+	}
+}
+
+static void
+select_names_ok_cb (BonoboListener *listener, const char *event_name, const CORBA_any *arg,
+CORBA_Environment *ev, gpointer data)
+{
+	EDestination **destv;
+
+	char *string = NULL;
+
+	EContactListEditor *ce;
+
+	ce = E_CONTACT_LIST_EDITOR (data);
+
+	Bonobo_Control corba_control = GNOME_Evolution_Addressbook_SelectNames_getEntryBySection
+			(ce->corba_select_names, "Members", ev);
+	GtkWidget *control_widget = bonobo_widget_new_control_from_objref (corba_control, CORBA_OBJECT_NIL);
+
+	bonobo_widget_get_property (BONOBO_WIDGET (control_widget), "destinations",
+					    TC_CORBA_string, &string, NULL);
+
+	destv = e_destination_importv (string);
+ 	if (destv) {
+		add_to_model (ce, destv);
+ 		g_free (destv);
+ 	}
+
+	ce->changed = TRUE;
+	command_state_changed (ce);
+}
+
+static gboolean
+setup_corba (EContactListEditor *editor)
+{
+
+	CORBA_Environment ev;
+
+	CORBA_exception_init (&ev);
+
+	editor->corba_select_names = bonobo_activation_activate_from_id (SELECT_NAMES_OAFIID, 0, NULL, &ev);
+
+	/* OAF seems to be broken -- it can return a CORBA_OBJECT_NIL without
+           raising an exception in `ev'.  */
+	if (ev._major != CORBA_NO_EXCEPTION || editor->corba_select_names == CORBA_OBJECT_NIL) {
+		CORBA_exception_free (&ev);
+		return FALSE;
+	}
+
+	GNOME_Evolution_Addressbook_SelectNames_addSection (
+					editor->corba_select_names, "Members", gettext ("Members"), &ev);
+
+	bonobo_event_source_client_add_listener (editor->corba_select_names,
+						 (BonoboListenerCallbackFn) select_names_ok_cb,
+						 "GNOME/Evolution:ok:dialog", NULL, editor);
+
+	CORBA_exception_free (&ev);
+
+	return TRUE;
+}
+
+static void
+select_cb (GtkWidget *w, EContactListEditor *editor)
+{
+ 	CORBA_Environment ev;
+
+	if(!setup_corba (editor))
+		return;
+
+	CORBA_exception_init (&ev);
+
+	GNOME_Evolution_Addressbook_SelectNames_activateDialog (
+		editor->corba_select_names, _("Required Participants"), &ev);
+
+	CORBA_exception_free (&ev);
 }
 
 static void
Index: gui/contact-list-editor/e-contact-list-editor.h
===================================================================
RCS file: /cvs/gnome/evolution/addressbook/gui/contact-list-editor/e-contact-list-editor.h,v
retrieving revision 1.14
diff -u -r1.14 e-contact-list-editor.h
--- gui/contact-list-editor/e-contact-list-editor.h	24 Mar 2004 20:18:46 -0000	1.14
+++ gui/contact-list-editor/e-contact-list-editor.h	31 May 2004 17:03:23 -0000
@@ -30,6 +30,8 @@
 
 #include <libebook/e-book-async.h>
 #include <libebook/e-contact.h>
+#include "addressbook/util/e-destination.h"
+#include "addressbook/gui/component/select-names/Evolution-Addressbook-SelectNames.h"
 
 G_BEGIN_DECLS
 
@@ -39,6 +41,7 @@
 #define E_IS_CONTACT_LIST_EDITOR(obj)	   (G_TYPE_CHECK_INSTANCE_TYPE ((obj), E_TYPE_CONTACT_LIST_EDITOR))
 #define E_IS_CONTACT_LIST_EDITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), E_TYPE_CONTACT_LIST_EDITOR))
 
+#define SELECT_NAMES_OAFIID "OAFIID:GNOME_Evolution_Addressbook_SelectNames:" BASE_VERSION
 
 typedef struct _EContactListEditor       EContactListEditor;
 typedef struct _EContactListEditorClass  EContactListEditorClass;
@@ -63,10 +66,12 @@
 	GtkWidget *list_name_entry;
 	GtkWidget *add_button;
 	GtkWidget *remove_button;
+	GtkWidget *select_button;
 	GtkWidget *list_image_button;
 	GtkWidget *visible_addrs_checkbutton;
 	GtkWidget *list_image;
 
+	GNOME_Evolution_Addressbook_SelectNames corba_select_names;
 	/* Whether we are editing a new contact or an existing one */
 	guint is_new_list : 1;
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]