aboutsummaryrefslogblamecommitdiffstats
path: root/notes/component-factory.c
blob: 48b81f407194686bb1c3c2c52e060a4c16e66f47 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12











                                      
                                                                                 






                                                                 
                                                                       








                                                                                                         

                                          
           
                                                                   




                                                        
                                                                 
 
                                      




                                                                    
                                                       




























                                                                                                 
                               








                                                      
      









                                                      
                               

                                                             
      






                                                       
                                                












































                                                                                                   
#include <config.h>

#include <gnome.h>
#include <bonobo.h>

#include "Evolution.h"
#include "evolution-storage.h"

#include "evolution-shell-component.h"

#include "e-util/e-gui-utils.h"

#define COMPONENT_FACTORY_ID "OAFIID:GNOME_Evolution_Notes_shellComponentFactory"

static const EvolutionShellComponentFolderType folder_types[] = {
    { "notes", "evolution-notes.png" },
    { NULL, NULL }
};

static void
new_note_cb (BonoboUIComponent *uih, void *user_data, const char *path)
{
    g_print ("new note!\n");
}

static GnomeUIInfo gnome_toolbar [] = {
    GNOMEUIINFO_ITEM_STOCK (N_("New"), N_("Create a new note"), new_note_cb, GNOME_STOCK_PIXMAP_NEW),
    GNOMEUIINFO_END
};

#ifdef THIS_NEEDS_UPDATING_FOR_NEW_BONOBOS

static void
control_deactivate (BonoboControl *control, BonoboUIComponent *uih)
{
    bonobo_ui_handler_dock_remove (uih, "/Toolbar");
}

static void
control_activate (BonoboControl *control, BonoboUIComponent *uih)
{
    Bonobo_UIContainer remote_uih;
    GtkWidget *toolbar, *toolbar_frame;
    BonoboControl *toolbar_control ;

    remote_uih = bonobo_control_get_remote_ui_handler (control);
    bonobo_ui_handler_set_container (uih, remote_uih);
    bonobo_object_release_unref (remote_uih, NULL);

    toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL,
                   GTK_TOOLBAR_BOTH);

    gnome_app_fill_toolbar_with_data (GTK_TOOLBAR (toolbar),
                      gnome_toolbar, 
                      NULL, NULL);

    toolbar_frame = gtk_frame_new (NULL);
    gtk_frame_set_shadow_type (GTK_FRAME (toolbar_frame), GTK_SHADOW_OUT);
    gtk_container_add (GTK_CONTAINER (toolbar_frame), toolbar);
    gtk_widget_show (toolbar_frame);

    gtk_widget_show_all (toolbar_frame);

    toolbar_control = bonobo_control_new (toolbar_frame);
    bonobo_ui_handler_dock_add (
                    uih, "/Toolbar",
                    bonobo_object_corba_objref (BONOBO_OBJECT (toolbar_control)),
                    GNOME_DOCK_ITEM_BEH_EXCLUSIVE,
                    GNOME_DOCK_TOP,
                    1, 1, 0);
}

          
static void
control_activate_cb (BonoboControl *control,
             gboolean activate)
{
    BonoboUIComponent *uih;

    uih = bonobo_control_get_ui_handler (control);
    g_assert (uih);

    if (activate)
        control_activate (control, uih);
    else
        control_deactivate (control, uih);
}
#endif

static BonoboControl *
create_view (EvolutionShellComponent *shell_component,
         const char *physical_uri,
         void *closure)
{
    BonoboControl * control;

    control = notes_factory_new_control ();

#ifdef THIS_CODE_IS_TOTALY_DEAD
    gtk_signal_connect (GTK_OBJECT (control), "activate",
                control_activate_cb, NULL);
#endif
    

    return control;
}

static void
owner_set_cb (EvolutionShellComponent *shell_component,
          EvolutionShellClient shell_client,
          gpointer user_data)
{
    g_print ("evolution-notes: Yeeeh! We have an owner!\n");    /* FIXME */
}

static void
owner_unset_cb (EvolutionShellComponent *shell_component, gpointer user_data)
{
    g_print ("No owner anymore\n");
}

/* The factory function */
static BonoboObject *
notes_component_factory (BonoboGenericFactory *factory,
             void *closure)
{
    EvolutionShellComponent *shell_component;

    shell_component = evolution_shell_component_new (folder_types, create_view, NULL);

    gtk_signal_connect (GTK_OBJECT (shell_component), "owner_set",
                GTK_SIGNAL_FUNC (owner_set_cb), NULL);
    gtk_signal_connect (GTK_OBJECT (shell_component), "owner_unset",
                GTK_SIGNAL_FUNC (owner_unset_cb), NULL);
    
    return BONOBO_OBJECT (shell_component);
}


void
component_factory_init (void)
{
    static BonoboGenericFactory *factory = NULL;

    if (factory != NULL)
        return;

    factory = bonobo_generic_factory_new (COMPONENT_FACTORY_ID, notes_component_factory, NULL);

    if (factory == NULL) {
        e_notice (NULL, GNOME_MESSAGE_BOX_ERROR,
              _("Cannot initialize Evolution's notes component."));
        exit (1);
    }
}