/*
 * E-shell-view.c: Implements a Shell View of Evolution
 *
 * Authors:
 *   Miguel de Icaza (miguel@helixcode.com)
 *
 * (C) 2000 Helix Code, Inc.
 */
#include <config.h>
#include <gnome.h>
#include "shortcut-bar/e-shortcut-bar.h"
#include "e-util/e-util.h"
#include "e-shell-view.h"
#include "e-shell-view-menu.h"
#include "e-shell-shortcut.h"

#define PARENT_TYPE gnome_app_get_type ()

static GtkObjectClass *parent_class;

static void
esv_destroy (GtkObject *object)
{
	EShellView *eshell_view = E_SHELL_VIEW (object);

	e_shell_unregister_view (eshell_view->eshell, eshell_view);

	parent_class->destroy (object);
}

static void
e_shell_view_class_init (GtkObjectClass *object_class)
{
	object_class->destroy = esv_destroy;

	parent_class = gtk_type_class (PARENT_TYPE);
}

static void
e_shell_view_setup (EShellView *eshell_view)
{
	/*
	 * FIXME, should load the config if (load_config)....
	 */
	gtk_window_set_default_size (GTK_WINDOW (eshell_view), 600, 400);
}

static void
e_shell_view_setup_shortcut_display (EShellView *eshell_view)
{
	gtk_widget_push_visual (gdk_rgb_get_visual ());
	gtk_widget_push_colormap (gdk_rgb_get_cmap ());

	eshell_view->shortcut_hpaned = gtk_hpaned_new ();
	gtk_widget_show (eshell_view->shortcut_hpaned);
	
	eshell_view->shortcut_bar = e_shortcut_bar_new ();
	gtk_paned_set_position (GTK_PANED (eshell_view->shortcut_hpaned), 100);

	gtk_paned_pack1 (GTK_PANED (eshell_view->shortcut_hpaned),
			 eshell_view->shortcut_bar, FALSE, TRUE);
	gtk_widget_show (eshell_view->shortcut_bar);

	gtk_widget_pop_visual ();
	gtk_widget_pop_colormap ();

	gnome_app_set_contents (GNOME_APP (eshell_view), eshell_view->shortcut_hpaned);

	gtk_signal_connect (
		GTK_OBJECT (eshell_view->shortcut_bar), "item_selected",
		GTK_SIGNAL_FUNC (shortcut_bar_item_selected), eshell_view);

}

static void
e_shell_view_load_group (EShell *eshell, EShellView *eshell_view, EShortcutGroup *esg)
{
	EShortcutBar *bar = E_SHORTCUT_BAR (eshell_view->shortcut_bar);
	int group_num, i;
	const int items = esg->shortcuts->len;

	group_num = e_shortcut_bar_add_group (bar, esg->title);
	if (esg->small_icons)
		e_shortcut_bar_set_view_type (bar, group_num, E_ICON_BAR_SMALL_ICONS);

	for (i = 0; i < items; i++){
		EShortcut *shortcut = E_SHORTCUT (g_array_index (esg->shortcuts, EShortcut *, i));
		EFolder *folder = shortcut->efolder;
		char *type = NULL;
		
		switch (folder->type){
		case E_FOLDER_MAIL:
			type = "folder:";
			break;
			
		case E_FOLDER_CONTACTS:
			type = "contacts:";
			break;
			
		case E_FOLDER_CALENDAR:
			type = "calendar:";
			break;
			
		case E_FOLDER_TASKS:
			type = "todo:";
			break;
			
		case E_FOLDER_OTHER:
			type = "file:";
			break;

		default:
			g_assert_not_reached ();
		}
		
		e_shortcut_bar_add_item (bar, group_num, type, folder->name);
	}
}

static void
e_shell_view_load_shortcut_bar (EShellView *eshell_view)
{
	EShell *eshell = eshell_view->eshell;
	const int groups = eshell->shortcut_groups->len;
	int i;
	
	for (i = 0; i < groups; i++){
		EShortcutGroup *esg;

		esg = g_array_index (eshell->shortcut_groups, EShortcutGroup *, i);

		e_shell_view_load_group (eshell, eshell_view, esg);
	}
}

GtkWidget *
e_shell_view_new (EShell *eshell, gboolean show_shortcut_bar)
{
	EShellView *eshell_view;

	eshell_view = gtk_type_new (e_shell_view_get_type ());

	gnome_app_construct (GNOME_APP (eshell_view), "Evolution", "Evolution");

	eshell_view->eshell = eshell;
	e_shell_view_setup (eshell_view);
	e_shell_view_setup_menus (eshell_view);

	if (show_shortcut_bar){
		e_shell_view_setup_shortcut_display (eshell_view);
		e_shell_view_load_shortcut_bar (eshell_view);
	} else {
		g_error ("Non-shortcut bar code not written yet");
	}

	e_shell_register_view (eshell, eshell_view);

	eshell_view->shortcut_displayed = show_shortcut_bar;
	
	return (GtkWidget *) eshell_view;
}

void
e_shell_view_set_view (EShellView *eshell_view, EFolder *efolder)
{
	if (efolder == NULL){
		printf ("Display executive summary");
	}  else {
		
	}
}

void
e_shell_view_display_shortcut_bar (EShellView *eshell_view, gboolean display)
{
	g_return_if_fail (eshell_view != NULL);
	g_return_if_fail (E_IS_SHELL_VIEW (eshell_view));

	g_error ("Switching code for the shortcut bar is not written yet");
}

E_MAKE_TYPE (e_shell_view, "EShellView", EShellView, e_shell_view_class_init, NULL, PARENT_TYPE);

void
e_shell_view_new_folder (EShellView *esv)
{
	g_return_if_fail (esv != NULL);
	g_return_if_fail (E_IS_SHELL_VIEW (esv));
}

void
e_shell_view_new_shortcut (EShellView *esv)
{
	g_return_if_fail (esv != NULL);
	g_return_if_fail (E_IS_SHELL_VIEW (esv));
}