diff options
Diffstat (limited to 'addressbook/gui/component')
-rw-r--r-- | addressbook/gui/component/.cvsignore | 8 | ||||
-rw-r--r-- | addressbook/gui/component/Makefile.am | 36 | ||||
-rw-r--r-- | addressbook/gui/component/addressbook-factory.c | 47 | ||||
-rw-r--r-- | addressbook/gui/component/addressbook.c | 275 | ||||
-rw-r--r-- | addressbook/gui/component/addressbook.gnorba | 11 | ||||
-rw-r--r-- | addressbook/gui/component/addressbook.h | 8 |
6 files changed, 385 insertions, 0 deletions
diff --git a/addressbook/gui/component/.cvsignore b/addressbook/gui/component/.cvsignore new file mode 100644 index 0000000000..a0427f184f --- /dev/null +++ b/addressbook/gui/component/.cvsignore @@ -0,0 +1,8 @@ +.deps +.libs +Makefile +Makefile.in +*.lo +*.la +evolution-addressbook +test-addressbook
\ No newline at end of file diff --git a/addressbook/gui/component/Makefile.am b/addressbook/gui/component/Makefile.am new file mode 100644 index 0000000000..f5269071c4 --- /dev/null +++ b/addressbook/gui/component/Makefile.am @@ -0,0 +1,36 @@ +INCLUDES = \ + $(EXTRA_GNOME_CFLAGS) \ + $(GNOME_INCLUDEDIR) \ + -I$(top_srcdir)/widgets/e-text \ + -I$(top_srcdir)/e-util \ + -I$(top_srcdir) \ + -I$(top_srcdir)/addressbook/gui/minicard \ + -I$(top_srcdir)/addressbook/backend/ebook \ + $(BONOBO_HTML_GNOME_CFLAGS) \ + -DEVOLUTION_VERSION=\""$(VERSION)"\" \ + -DEVOLUTION_GLADEDIR=\""$(gladedir)"\" \ + -DEVOLUTION_ICONSDIR=\""$(iconsdir)"\" \ + -DEVOLUTION_LOCALEDIR=\""$(datadir)/locale"\" \ + -DCAMEL_PROVIDERDIR=\""$(providerdir)"\" + +bin_PROGRAMS = \ + evolution-addressbook + +evolution_addressbook_SOURCES = \ + addressbook-factory.c \ + addressbook.c \ + addressbook.h + +evolution_addressbook_LDADD = \ + $(EXTRA_GNOME_LIBS) \ + $(BONOBO_HTML_GNOME_LIBS) \ + $(top_builddir)/addressbook/gui/minicard/libeminicard.a \ + $(top_builddir)/widgets/e-text/libetext.a \ + $(top_builddir)/e-util/libeutil.la \ + $(top_builddir)/addressbook/backend/ebook/libebook.la \ + $(top_builddir)/libversit/libversit.la + +evolution_addressbook_LDFLAGS = `gnome-config --libs gdk_pixbuf` + +gnorbadir = $(sysconfdir)/CORBA/servers +gnorba_DATA = addressbook.gnorba diff --git a/addressbook/gui/component/addressbook-factory.c b/addressbook/gui/component/addressbook-factory.c new file mode 100644 index 0000000000..cf59177f84 --- /dev/null +++ b/addressbook/gui/component/addressbook-factory.c @@ -0,0 +1,47 @@ +/** + * sample-control-factory.c + * + * Copyright 1999, Helix Code, Inc. + * + * Author: + * Nat Friedman (nat@nat.org) + * + */ + +#include <config.h> +#include <gnome.h> +#include <libgnorba/gnorba.h> +#include <bonobo.h> + +#include "addressbook.h" + +CORBA_Environment ev; +CORBA_ORB orb; + +static void +init_bonobo (int argc, char **argv) +{ + + gnome_CORBA_init_with_popt_table ( + "evolution-addressbook", "0.0", + &argc, argv, NULL, 0, NULL, GNORBA_INIT_SERVER_FUNC, &ev); + + orb = gnome_CORBA_ORB (); + + if (bonobo_init (orb, NULL, NULL) == FALSE) + g_error (_("Could not initialize Bonobo")); +} + +int +main (int argc, char **argv) +{ + CORBA_exception_init (&ev); + + init_bonobo (argc, argv); + + addressbook_factory_init (); + + bonobo_main (); + + return 0; +} diff --git a/addressbook/gui/component/addressbook.c b/addressbook/gui/component/addressbook.c new file mode 100644 index 0000000000..3fb9a036ca --- /dev/null +++ b/addressbook/gui/component/addressbook.c @@ -0,0 +1,275 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * folder-browser-factory.c: A Bonobo Control factory for Folder Browsers + * + * Author: + * Miguel de Icaza (miguel@helixcode.com) + * + * (C) 2000 Helix Code, Inc. + */ +/* + * bonobo-clock-control.c + * + * Copyright 1999, Helix Code, Inc. + * + * Author: + * Nat Friedman (nat@nat.org) + */ + +#include <config.h> +#include <gnome.h> +#include <libgnorba/gnorba.h> +#include <bonobo.h> + +#include "addressbook.h" + +#include "e-book.h" +#include "e-canvas.h" +#include "e-minicard-view.h" + +static void +control_deactivate (BonoboControl *control, BonoboUIHandler *uih) +{ + /* how to remove a menu item */ + bonobo_ui_handler_menu_remove (uih, "/Actions/New Contact"); + + /* remove our toolbar */ + bonobo_ui_handler_dock_remove (uih, "/Toolbar"); +} + +static void +do_nothing_cb (BonoboUIHandler *uih, void *user_data, const char *path) +{ + printf ("Yow! I am called back!\n"); +} + +static GnomeUIInfo gnome_toolbar [] = { + GNOMEUIINFO_ITEM_STOCK (N_("New"), N_("Create a new contact"), do_nothing_cb, GNOME_STOCK_PIXMAP_NEW), + + GNOMEUIINFO_SEPARATOR, + + GNOMEUIINFO_ITEM_STOCK (N_("Find"), N_("Find a contact"), do_nothing_cb, GNOME_STOCK_PIXMAP_SEARCH), + GNOMEUIINFO_ITEM_STOCK (N_("Print"), N_("Print contacts"), do_nothing_cb, GNOME_STOCK_PIXMAP_PRINT), + GNOMEUIINFO_ITEM_STOCK (N_("Delete"), N_("Delete a contact"), do_nothing_cb, GNOME_STOCK_PIXMAP_TRASH), + + GNOMEUIINFO_END +}; + + + + +static void +control_activate (BonoboControl *control, BonoboUIHandler *uih) +{ + Bonobo_UIHandler remote_uih; + GtkWidget *toolbar; + BonoboControl *toolbar_control; + + remote_uih = bonobo_control_get_remote_ui_handler (control); + bonobo_ui_handler_set_container (uih, remote_uih); + + bonobo_ui_handler_menu_new_item (uih, "/Actions/New Contact", N_("_New Contact"), + NULL, -1, + BONOBO_UI_HANDLER_PIXMAP_NONE, NULL, + 0, 0, do_nothing_cb, NULL); + + toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, + GTK_TOOLBAR_BOTH); + + gnome_app_fill_toolbar (GTK_TOOLBAR (toolbar), + gnome_toolbar, + NULL); + + gtk_widget_show_all (toolbar); + + toolbar_control = bonobo_control_new (toolbar); + bonobo_ui_handler_dock_add ( + uih, "/Toolbar", + bonobo_object_corba_objref (BONOBO_OBJECT (toolbar_control)), + GNOME_DOCK_ITEM_BEH_LOCKED | + GNOME_DOCK_ITEM_BEH_EXCLUSIVE, + GNOME_DOCK_TOP, + 1, 1, 0); +} + +static void +control_activate_cb (BonoboControl *control, + gboolean activate, + gpointer user_data) +{ + BonoboUIHandler *uih; + + uih = bonobo_control_get_ui_handler (control); + g_assert (uih); + + if (activate) + control_activate (control, uih); + else + control_deactivate (control, uih); +} + +typedef struct { + GtkWidget *canvas; + GnomeCanvasItem *view; + GnomeCanvasItem *rect; + GtkAllocation last_alloc; +} AddressbookView; + +static void +book_open_cb (EBook *book, EBookStatus status, gpointer closure) +{ + AddressbookView *view = closure; + if (status == E_BOOK_STATUS_SUCCESS) + gnome_canvas_item_set(view->view, + "book", book, + NULL); +} + +static EBook * +ebook_create (AddressbookView *view) +{ + EBook *book; + + book = e_book_new (); + + if (!book) { + printf ("%s: %s(): Couldn't create EBook, bailing.\n", + __FILE__, + __FUNCTION__); + return NULL; + } + + + if (! e_book_load_uri (book, "file:/tmp/test.db", book_open_cb, view)) { + printf ("error calling load_uri!\n"); + } + + + return book; +} + +static void destroy_callback(GtkWidget *widget, gpointer data) +{ + AddressbookView *view = data; + g_free(view); +} + +static void allocate_callback(GtkWidget *canvas, GtkAllocation *allocation, gpointer data) +{ + double width; + AddressbookView *view = data; + view->last_alloc = *allocation; + gnome_canvas_item_set( view->view, + "height", (double) allocation->height, + NULL ); + gnome_canvas_item_set( view->view, + "minimum_width", (double) allocation->width, + NULL ); + gtk_object_get(GTK_OBJECT(view->view), + "width", &width, + NULL); + width = MAX(width, allocation->width); + gnome_canvas_set_scroll_region(GNOME_CANVAS( view->canvas ), 0, 0, width, allocation->height ); + gnome_canvas_item_set( view->rect, + "x2", (double) width, + "y2", (double) allocation->height, + NULL ); +} + +static void resize(GnomeCanvas *canvas, gpointer data) +{ + double width; + AddressbookView *view = data; + gtk_object_get(GTK_OBJECT(view->view), + "width", &width, + NULL); + width = MAX(width, view->last_alloc.width); + gnome_canvas_set_scroll_region(GNOME_CANVAS(view->canvas), 0, 0, width, view->last_alloc.height ); + gnome_canvas_item_set( view->rect, + "x2", (double) width, + "y2", (double) view->last_alloc.height, + NULL ); +} + +static BonoboObject * +addressbook_factory (BonoboGenericFactory *Factory, void *closure) +{ + BonoboControl *control; + EBook *book; + GtkWidget *vbox, *scrollbar; + AddressbookView *view; + view = g_new (AddressbookView, 1); + + vbox = gtk_vbox_new(FALSE, 0); + + view->canvas = e_canvas_new(); + view->rect = gnome_canvas_item_new( gnome_canvas_root( GNOME_CANVAS( view->canvas ) ), + gnome_canvas_rect_get_type(), + "x1", (double) 0, + "y1", (double) 0, + "x2", (double) 100, + "y2", (double) 100, + "fill_color", "white", + NULL ); + view->view = gnome_canvas_item_new( gnome_canvas_root( GNOME_CANVAS( view->canvas ) ), + e_minicard_view_get_type(), + "height", (double) 100, + "minimum_width", (double) 100, + NULL ); + gtk_signal_connect( GTK_OBJECT( view->canvas ), "reflow", + GTK_SIGNAL_FUNC( resize ), + view); + + gnome_canvas_set_scroll_region ( GNOME_CANVAS( view->canvas ), + 0, 0, + 100, 100 ); + + gtk_box_pack_start(GTK_BOX(vbox), view->canvas, TRUE, TRUE, 0); + + scrollbar = gtk_hscrollbar_new(gtk_layout_get_hadjustment(GTK_LAYOUT(view->canvas))); + + gtk_box_pack_start(GTK_BOX(vbox), scrollbar, FALSE, FALSE, 0); + + /* Connect the signals */ + gtk_signal_connect( GTK_OBJECT( vbox ), "destroy", + GTK_SIGNAL_FUNC( destroy_callback ), + ( gpointer ) view ); + + gtk_signal_connect( GTK_OBJECT( view->canvas ), "size_allocate", + GTK_SIGNAL_FUNC( allocate_callback ), + ( gpointer ) view ); + + gtk_widget_show_all( vbox ); +#if 0 + gdk_window_set_back_pixmap( GTK_LAYOUT(view->canvas)->bin_window, NULL, FALSE); +#endif + + + book = ebook_create(view); + + /* Create the control. */ + control = bonobo_control_new(vbox); + + gtk_signal_connect (GTK_OBJECT (control), "activate", + control_activate_cb, NULL); + + return BONOBO_OBJECT (control); +} + +void +addressbook_factory_init (void) +{ + static BonoboGenericFactory *addressbook_control_factory = NULL; + + if (addressbook_control_factory != NULL) + return; + + addressbook_control_factory = + bonobo_generic_factory_new ( + "control-factory:addressbook", + addressbook_factory, NULL); + + if (addressbook_control_factory == NULL) { + g_error ("I could not register a Addressbook factory."); + } +} diff --git a/addressbook/gui/component/addressbook.gnorba b/addressbook/gui/component/addressbook.gnorba new file mode 100644 index 0000000000..7114b1c332 --- /dev/null +++ b/addressbook/gui/component/addressbook.gnorba @@ -0,0 +1,11 @@ +[control-factory:addressbook] +type=exe +repo_id=IDL:GNOME/GenericFactory:1.0 +description=Factory for the sample Addressbook control +location_info=evolution-addressbook + +[control:addressbook] +type=factory +repo_id=IDL:BonoboControl/addressbook-control:1.0 IDL:GNOME/Control:1.0 +description=A sample Bonobo control which displays an addressbook. +location_info=control-factory:addressbook diff --git a/addressbook/gui/component/addressbook.h b/addressbook/gui/component/addressbook.h new file mode 100644 index 0000000000..e9289128a6 --- /dev/null +++ b/addressbook/gui/component/addressbook.h @@ -0,0 +1,8 @@ +#ifndef __ADDRESSBOOK_H__ +#define __ADDRESSBOOK_H__ + +#include <bonobo/bonobo-control.h> + +void addressbook_factory_init (void); + +#endif /* __ADDRESSBOOK_H__ */ |