aboutsummaryrefslogblamecommitdiffstats
path: root/addressbook/demo/addressbook.c
blob: 38cb6c712175af28022c23d4db57a3ccf43a5f73 (plain) (tree)



























                                                                           

 




























                                                                                          


















































































                                                                                                               












                                                                  


                                                             








































                                                                                                 
/* -*- 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 <libgnomeui/gtk-clock.h>

#include "addressbook-widget.h"
#include "addressbook.h"



#if 0
static void
bonobo_clock_control_prop_value_changed_cb (BonoboPropertyBag *pb, char *name, char *type,
                        gpointer old_value, gpointer new_value,
                        gpointer user_data)
{
    GtkClock *clock = user_data;

    if (! strcmp (name, "running")) {
        gboolean *b = new_value;

        if (*b)
            gtk_clock_start (clock);
        else
            gtk_clock_stop (clock);
    }
}

/*
 * Callback routine used to release any values we associated with the control
 * dynamically.
 */
static void
release_data (GtkObject *object, void *data)
{
    g_free (data);
}
#endif


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);
}


static BonoboObject *
addressbook_factory (BonoboGenericFactory *Factory, void *closure)
{
#if 0
    BonoboPropertyBag  *pb;
    CORBA_boolean     *running;
#endif
    BonoboControl      *control;
    View               *view;

    /* Create the control. */
    view = create_view();
    control = bonobo_control_new (view->widget);

    gtk_signal_connect (GTK_OBJECT (control), "activate",
                control_activate_cb, NULL); 
#if 0
    /* Create the properties. */
    pb = bonobo_property_bag_new ();
    bonobo_control_set_property_bag (control, pb);

    gtk_signal_connect (GTK_OBJECT (pb), "value_changed",
                bonobo_clock_control_prop_value_changed_cb,
                clock);

    running = g_new0 (CORBA_boolean, 1);
    *running = TRUE;
    bonobo_property_bag_add (pb, "running", "boolean",
                (gpointer) running,
                NULL, "Whether or not the clock is running", 0);

    /*
     * Release "running" when the object is destroyed
     */
    gtk_signal_connect (GTK_OBJECT (pb), "destroy", GTK_SIGNAL_FUNC (release_data), running);
#endif

    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.");
    }
}