More work
svn path=/trunk/; revision=1628
This commit is contained in:
30
mail/Mail.idl
Normal file
30
mail/Mail.idl
Normal file
@ -0,0 +1,30 @@
|
||||
/*
|
||||
* mail.idl: Mail interfaces for Evolution
|
||||
*
|
||||
* Author:
|
||||
* Miguel de Icaza (miguel@helixcode.com)
|
||||
*
|
||||
* (C) 2000 Helix Code, Inc.
|
||||
*/
|
||||
|
||||
#include <bonobo.idl>
|
||||
|
||||
module Evolution {
|
||||
|
||||
interface MessageList : GNOME::Unknown {
|
||||
|
||||
void select_message (in long message_number);
|
||||
void open_message (in long message_number);
|
||||
};
|
||||
|
||||
/*
|
||||
* FolderBrowser object.
|
||||
*
|
||||
* configuration of this widget is done trough
|
||||
* Bonobo Properties
|
||||
*/
|
||||
interface FolderBrowser : GNOME::Unknown {
|
||||
MessageList get_message_list ();
|
||||
};
|
||||
};
|
||||
|
||||
@ -8,13 +8,27 @@ INCLUDES = \
|
||||
-I$(srcdir)/../widgets \
|
||||
$(BONOBO_GNOME_CFLAGS)
|
||||
|
||||
EVOLUTION_CORBA_GENERATED = \
|
||||
Mail.h \
|
||||
Mail-common.c \
|
||||
Mail-skels.c \
|
||||
Mail-stubs.c
|
||||
|
||||
evolution_mail_SOURCES = \
|
||||
html-stream.c \
|
||||
html-stream.h \
|
||||
mail-display.h \
|
||||
mail-display.c \
|
||||
main.c
|
||||
main.c \
|
||||
message-list.c \
|
||||
message-list.h \
|
||||
$(EVOLUTION_CORBA_GENERATED)
|
||||
|
||||
evolution_mail_LDADD = \
|
||||
../e-util/libeutil.a \
|
||||
$(BONOBO_GNOME_LIBS)
|
||||
|
||||
$(EVOLUTION_MAIL_CORBA_GENERATED): Mail.idl
|
||||
orbit-idl -I`$(GNOME_CONFIG) --datadir`/idl -I$(srcdir) $(srcdir)/Mail.idl
|
||||
|
||||
EXTRA_DIST = Mail.idl
|
||||
|
||||
90
mail/folder-browser.c
Normal file
90
mail/folder-browser.c
Normal file
@ -0,0 +1,90 @@
|
||||
/*
|
||||
* folder-browser.c: Folder browser top level component
|
||||
*
|
||||
* Author:
|
||||
* Miguel de Icaza (miguel@kernel.org)
|
||||
*
|
||||
* (C) 2000 Helix Code, Inc.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
#include "folder-browser.h"
|
||||
|
||||
#define PARENT_TYPE (gtk_table_get_type ())
|
||||
|
||||
static GtkObjectClass *folder_browser_parent_class;
|
||||
|
||||
#define PROPERTY_FOLDER_URI "folder_uri"
|
||||
|
||||
static void
|
||||
folder_browser_destroy (GtkObject *object)
|
||||
{
|
||||
FolderBrowser *folder_browser = FOLDER_BROWSER (object);
|
||||
|
||||
folder_browser_parent_class->destroy (object);
|
||||
}
|
||||
|
||||
static void
|
||||
folder_browser_class_init (GtkObjectClass *object_class)
|
||||
{
|
||||
object_class->destroy = folder_browser_destroy;
|
||||
|
||||
folder_browser_parent_class = gtk_type_class (PARENT_TYPE);
|
||||
}
|
||||
|
||||
#define EQUAL(a,b) (strcmp (a,b) == 0)
|
||||
|
||||
void
|
||||
folder_browser_set_uri (FolderBrowser *folder_browser, const char *uri)
|
||||
{
|
||||
g_free (folder_browser->uri);
|
||||
folder_browser->uri = g_strudp (uri);
|
||||
}
|
||||
|
||||
static void
|
||||
folder_browser_property_changed (GnomePropertyBag *properties,
|
||||
const char *name,
|
||||
const char *type,
|
||||
gpointer old_value,
|
||||
gpointer new_value,
|
||||
gpointer user_data)
|
||||
{
|
||||
FolderBrowser *folder_browser = FOLDER_BROWSER (user_data);
|
||||
|
||||
if (EQUAL (name, PROPERTY_FOLDER_URI)){
|
||||
folder_browser_set_uri (folder_browser, new_value);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
folder_browser_init (GtkObject *object)
|
||||
{
|
||||
FolderBrowser *fb = FOLDER_BROWSER (object);
|
||||
|
||||
fb->properties = gnome_property_bag_new ();
|
||||
|
||||
gnome_property_bag_add (
|
||||
fb->properties, PROPERTY_FOLDER_URI, "string",
|
||||
NULL, NULL, _("The URI that the Folder Browser will display", 0);
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (fb->properties), "value_changed",
|
||||
property_changed, fb);
|
||||
}
|
||||
|
||||
GtkWidget *
|
||||
folder_browser_new (void)
|
||||
{
|
||||
FolderBrowser *folder_browser = gtk_type_new (folder_browser_get_type ());
|
||||
GtkTable *table = GTK_TABLE (folder_browser);
|
||||
|
||||
table->homogeous = FALSE;
|
||||
gtk_table_resize (table, 1, 2);
|
||||
|
||||
return GTK_WIDGET (folder_browser);
|
||||
}
|
||||
|
||||
|
||||
E_MAKE_TYPE (folder_browser, "FolderBrowser", FolderBrowser, folder_browser_class_init, folder_browser_init, PARENT_TYPE);
|
||||
|
||||
|
||||
31
mail/folder-browser.h
Normal file
31
mail/folder-browser.h
Normal file
@ -0,0 +1,31 @@
|
||||
#ifndef _FOLDER_BROWSER_H_
|
||||
#define _FOLDER_BROWSER_H_
|
||||
|
||||
#include <gtk/gtktable.h>
|
||||
#include "camel/camel-stream.h"
|
||||
|
||||
#define FOLDER_BROWSER_TYPE (folder_browser_get_type ())
|
||||
#define FOLDER_BROWSER(o) (GTK_CHECK_CAST ((o), FOLDER_BROWSER_TYPE, FolderBrowser))
|
||||
#define FOLDER_BROWSER_CLASS(k) (GTK_CHECK_CLASS_CAST((k), FOLDER_BROWSER_TYPE, FolderBrowserClass))
|
||||
#define IS_FOLDER_BROWSER(o) (GTK_CHECK_TYPE ((o), FOLDER_BROWSER_TYPE))
|
||||
#define IS_FOLDER_BROWSER_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), FOLDER_BROWSER_TYPE))
|
||||
|
||||
typedef struct {
|
||||
GtkTable parent;
|
||||
|
||||
GnomePropertyBag *properties;
|
||||
|
||||
/*
|
||||
* The current URI being displayed by the FolderBrowser
|
||||
*/
|
||||
char *uri;
|
||||
} FolderBrowser;
|
||||
|
||||
typedef struct {
|
||||
GtkTableClass parent_class;
|
||||
} FolderBrowserClass;
|
||||
|
||||
GtkType folder_browser_get_type (void);
|
||||
GtkWidget *folder_browser_new (void);
|
||||
|
||||
#endif /* _FOLDER_BROWSER_H_ */
|
||||
48
mail/mail-component.c
Normal file
48
mail/mail-component.c
Normal file
@ -0,0 +1,48 @@
|
||||
/*
|
||||
* mail-component.c: The core of the mail component
|
||||
*
|
||||
* Author:
|
||||
* Miguel de Icaza (miguel@helixcode.com)
|
||||
*
|
||||
* (C) 2000 Helix Code, Inc.
|
||||
*/
|
||||
#include <config.h>
|
||||
#include <gnome.h>
|
||||
#include <bonobo/gnome-main.h>
|
||||
#include "e-util/e-gui-utils.h"
|
||||
|
||||
CORBA_Environment ev;
|
||||
CORBA_ORB orb;
|
||||
|
||||
static void
|
||||
init_bonobo (int argc, char **argv)
|
||||
{
|
||||
gnome_CORBA_init_with_popt_table (
|
||||
"evolution-mail-component", "1.0",
|
||||
&argc, argv, NULL, 0, NULL, GNORBA_INIT_SERVER_FUNC, &ev);
|
||||
|
||||
orb = gnome_CORBA_ORB ();
|
||||
|
||||
if (bonobo_init (orb, NULL, NULL) == FALSE){
|
||||
e_notice (NULL, GNOME_MESSAGE_BOX_ERROR,
|
||||
_("Mail Component: I could not initialize Bonobo"));
|
||||
exit (1);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
main (int argc, char *argv [])
|
||||
{
|
||||
bindtextdomain (PACKAGE, EVOLUTION_LOCALEDIR);
|
||||
textdomain (PACKAGE);
|
||||
|
||||
CORBA_exception_init (&ev);
|
||||
|
||||
init_bonobo (argc, argv);
|
||||
|
||||
mail_display_factory_init ();
|
||||
|
||||
bonobo_main ();
|
||||
|
||||
return 0;
|
||||
}
|
||||
68
mail/mail-display.c
Normal file
68
mail/mail-display.c
Normal file
@ -0,0 +1,68 @@
|
||||
/*
|
||||
* mail-display.c: Mail display widget
|
||||
*
|
||||
* Author:
|
||||
* Miguel de Icaza
|
||||
*
|
||||
* (C) 2000 Helix Code, Inc.
|
||||
*/
|
||||
#include <config.h>
|
||||
#include <gnome.h>
|
||||
#include "e-util/e-util.h"
|
||||
#include "mail-display.h"
|
||||
|
||||
#define PARENT_TYPE (gtk_table_get_type ())
|
||||
|
||||
static GtkObjectClass *mail_display_parent_class;
|
||||
|
||||
static void
|
||||
mail_display_init (GtkObject *object)
|
||||
{
|
||||
MailDisplay *mail_display = MAIL_DISPLAY (object);
|
||||
|
||||
mail_display->html = gtk_html_new ();
|
||||
gtk_widget_show (mail_display->html);
|
||||
}
|
||||
|
||||
static void
|
||||
mail_display_destroy (GtkObject *object)
|
||||
{
|
||||
MailDisplay *mail_display = MAIL_DISPLAY (object);
|
||||
|
||||
mail_display_parent_class->destroy (object);
|
||||
}
|
||||
|
||||
static void
|
||||
mail_display_class_init (GtkObjectClass *object_class)
|
||||
{
|
||||
object_class->destroy = mail_display_destroy;
|
||||
mail_display_parent_class = gtk_type_class (PARENT_TYPE);
|
||||
}
|
||||
|
||||
GtkWidget *
|
||||
mail_display_new (void)
|
||||
{
|
||||
MailDisplay *mail_display = gtk_type_new (mail_display_get_type ());
|
||||
GtkTable *table = GTK_TABLE (mail_display);
|
||||
|
||||
table->homogeous = FALSE;
|
||||
gtk_table_resize (table, 1, 2);
|
||||
|
||||
gtk_table_attach (table, mail_display->html,
|
||||
0, 1, 1, 2,
|
||||
GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL);
|
||||
return GTK_WIDGET (mail_display);
|
||||
}
|
||||
|
||||
CamelStream *
|
||||
mail_display_get_stream (MailDisplay *mail_display)
|
||||
{
|
||||
g_return_val_if_fail (mail_display != NULL, NULL);
|
||||
g_return_val_if_fail (IS_MAIL_DISPLAY (mail_display), NULL);
|
||||
|
||||
return html_stream_new (mail_display->html);
|
||||
}
|
||||
|
||||
E_MAKE_TYPE (mail_display, "MailDisplay", MailDisplay, mail_display_class_init, mail_display_init, PARENT_TYPE);
|
||||
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
#define _MAIL_DISPLAY_H_
|
||||
|
||||
#include <gtk/gtktable.h>
|
||||
#include "camel/camel-stream.h"
|
||||
|
||||
#define MAIL_DISPLAY_TYPE (mail_display_get_type ())
|
||||
#define MAIL_DISPLAY(o) (GTK_CHECK_CAST ((o), MAIL_DISPLAY_TYPE, MailDisplay))
|
||||
@ -19,5 +20,9 @@ typedef struct {
|
||||
GtkTableClass parent_class;
|
||||
} MailDisplayClass;
|
||||
|
||||
GtkType mail_display_get_type (void);
|
||||
GtkType mail_display_get_type (void);
|
||||
GtkWidget *mail_display_new (void);
|
||||
|
||||
CamelStream *mail_display_get_stream (MailDisplay *display);
|
||||
|
||||
#endif /* _MAIL_DISPLAY_H_ */
|
||||
|
||||
41
mail/main.c
41
mail/main.c
@ -1,14 +1,49 @@
|
||||
/*
|
||||
* main.c: Evolution mail reading component
|
||||
* mail-component.c: The core of the mail component
|
||||
*
|
||||
* Authors:
|
||||
* Author:
|
||||
* Miguel de Icaza (miguel@helixcode.com)
|
||||
*
|
||||
* (C) 2000 Helix Code, Inc.
|
||||
*/
|
||||
#include <config.h>
|
||||
#include <gnome.h>
|
||||
#include <bonobo/gnome-main.h>
|
||||
#include "e-util/e-gui-utils.h"
|
||||
#include "main.h"
|
||||
|
||||
main ()
|
||||
CORBA_Environment ev;
|
||||
CORBA_ORB orb;
|
||||
|
||||
static void
|
||||
init_bonobo (int argc, char **argv)
|
||||
{
|
||||
gnome_CORBA_init_with_popt_table (
|
||||
"evolution-mail-component", "1.0",
|
||||
&argc, argv, NULL, 0, NULL, GNORBA_INIT_SERVER_FUNC, &ev);
|
||||
|
||||
orb = gnome_CORBA_ORB ();
|
||||
|
||||
if (bonobo_init (orb, NULL, NULL) == FALSE){
|
||||
e_notice (NULL, GNOME_MESSAGE_BOX_ERROR,
|
||||
_("Mail Component: I could not initialize Bonobo"));
|
||||
exit (1);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
main (int argc, char *argv [])
|
||||
{
|
||||
bindtextdomain (PACKAGE, EVOLUTION_LOCALEDIR);
|
||||
textdomain (PACKAGE);
|
||||
|
||||
CORBA_exception_init (&ev);
|
||||
|
||||
init_bonobo (argc, argv);
|
||||
|
||||
mail_folder_browser_factory_init ();
|
||||
|
||||
bonobo_main ();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
394
mail/message-list.c
Normal file
394
mail/message-list.c
Normal file
@ -0,0 +1,394 @@
|
||||
/*
|
||||
* message-list.c: Displays the messages.
|
||||
* Implements CORBA's Evolution::MessageList
|
||||
*
|
||||
* Author:
|
||||
* Miguel de Icaza (miguel@helixcode.com)
|
||||
*
|
||||
* (C) 2000 Helix Code, Inc.
|
||||
*/
|
||||
#include <config.h>
|
||||
#include <gnome.h>
|
||||
#include <bonobo/gnome-main.h>
|
||||
#include "camel/camel-folder.h"
|
||||
#include "e-table/e-table.h"
|
||||
#include "e-table/e-table-simple.h"
|
||||
#include "e-table/e-cell-text.h"
|
||||
#include "e-table/e-cell-toggle.h"
|
||||
#include "e-table/e-cell-checkbox.h"
|
||||
#include "message-list.h"
|
||||
#include "Mail.h"
|
||||
|
||||
/*
|
||||
* Default sizes for the ETable display
|
||||
*
|
||||
*/
|
||||
#define N_CHARS(x) (CHAR_WIDTH * (x))
|
||||
|
||||
#define COL_ICON_WIDTH 16
|
||||
#define COL_FROM_WIDTH N_CHARS(24)
|
||||
#define COL_FROM_WIDTH_MIN 32
|
||||
#define COL_SUBJECT_WIDTH N_CHARS(30)
|
||||
#define COL_SUBJECT_WIDTH_MIN 32
|
||||
#define COL_SENT_WIDTH N_CHARS(20)
|
||||
#define COL_SENT_WIDTH_MIN 32
|
||||
#define COL_RECEIVE_WIDTH N_CHARS(20)
|
||||
#define COL_RECEIVE_WIDTH_MIN 32
|
||||
#define COL_TO_WIDTH N_CHARS(24)
|
||||
#define COL_TO_WIDTH_MIN 32
|
||||
#define COL_SIZE_WIDTH N_CHARS(6)
|
||||
#define COL_SIZE_WIDTH_MIN 32
|
||||
|
||||
#define PARENT_TYPE (gnome_object_get_type ())
|
||||
|
||||
static GnomeObjectClass *message_list_parent_class;
|
||||
static POA_Evolution_MessageList__vepv evolution_message_list_vepv;
|
||||
|
||||
/*
|
||||
* SimpleTableModel::col_count
|
||||
*/
|
||||
static int
|
||||
ml_col_count (ETableModel *etm, void *data)
|
||||
{
|
||||
return COL_LAST;
|
||||
}
|
||||
|
||||
/*
|
||||
* SimpleTableModel::row_count
|
||||
*/
|
||||
static int
|
||||
ml_row_count (ETableModel *etm, void *data)
|
||||
{
|
||||
MessageList *message_list = data;
|
||||
CamelException ex;
|
||||
|
||||
return camel_folder_get_message_count (message_list->folder, &ex);
|
||||
}
|
||||
|
||||
static void *
|
||||
ml_value_at (ETableModel *etm, int col, int row, void *data)
|
||||
{
|
||||
static char buffer [10];
|
||||
|
||||
switch (col){
|
||||
case COL_ONLINE_STATUS:
|
||||
return GINT_TO_POINTER (0);
|
||||
|
||||
case COL_MESSAGE_STATUS:
|
||||
return GINT_TO_POINTER (1);
|
||||
|
||||
case COL_PRIORITY:
|
||||
return GINT_TO_POINTER (10);
|
||||
|
||||
case COL_ATTACHMENT:
|
||||
return GINT_TO_POINTER (0);
|
||||
|
||||
case COL_FROM:
|
||||
return "miguel@dudical.com";
|
||||
|
||||
case COL_SUBJECT:
|
||||
return "MONEY FAST!";
|
||||
|
||||
case COL_SENT:
|
||||
return "sent";
|
||||
|
||||
case COL_RECEIVE:
|
||||
return "receive";
|
||||
|
||||
case COL_TO:
|
||||
return "dudes@server";
|
||||
|
||||
case COL_SIZE:
|
||||
sprintf (buffer, "%d", 20);
|
||||
return buffer;
|
||||
|
||||
default:
|
||||
g_assert_not_reached ();
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
ml_set_value_at (ETableModel *etm, int col, int row, const void *value, void *data)
|
||||
{
|
||||
}
|
||||
|
||||
static gboolean
|
||||
ml_is_cell_editable (ETableModel *etm, int col, int row, void *data)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
message_list_init_renderers (MessageList *message_list)
|
||||
{
|
||||
g_assert (message_list);
|
||||
g_assert (message_list->table_model);
|
||||
|
||||
message_list->render_text = e_cell_text_new (
|
||||
message_list->table_model,
|
||||
NULL, GTK_JUSTIFY_LEFT);
|
||||
|
||||
message_list->render_online_status = e_cell_checkbox_new ();
|
||||
message_list->render_message_status = e_cell_checkbox_new ();
|
||||
message_list->render_priority = e_cell_checkbox_new ();
|
||||
message_list->render_attachment = e_cell_checkbox_new ();
|
||||
}
|
||||
|
||||
static void
|
||||
message_list_init_header (MessageList *message_list)
|
||||
{
|
||||
/*
|
||||
* FIXME:
|
||||
*
|
||||
* Use the font metric to compute this.
|
||||
*/
|
||||
#define CHAR_WIDTH 10
|
||||
|
||||
message_list->header_model = e_table_header_new ();
|
||||
|
||||
message_list->table_cols [COL_ONLINE_STATUS] =
|
||||
e_table_col_new (COL_ONLINE_STATUS, _("Online status"),
|
||||
COL_ICON_WIDTH, COL_ICON_WIDTH,
|
||||
message_list->render_online_status,
|
||||
g_int_equal, FALSE);
|
||||
|
||||
message_list->table_cols [COL_MESSAGE_STATUS] =
|
||||
e_table_col_new (COL_MESSAGE_STATUS, _("Message status"),
|
||||
COL_ICON_WIDTH, COL_ICON_WIDTH,
|
||||
message_list->render_message_status,
|
||||
g_int_equal, FALSE);
|
||||
|
||||
message_list->table_cols [COL_PRIORITY] =
|
||||
e_table_col_new (COL_PRIORITY, _("Priority"),
|
||||
COL_ICON_WIDTH, COL_ICON_WIDTH,
|
||||
message_list->render_priority,
|
||||
g_int_equal, FALSE);
|
||||
|
||||
message_list->table_cols [COL_ATTACHMENT] =
|
||||
e_table_col_new (COL_ATTACHMENT, _("Attachment"),
|
||||
COL_ICON_WIDTH, COL_ICON_WIDTH,
|
||||
message_list->render_attachment,
|
||||
g_int_equal, FALSE);
|
||||
|
||||
message_list->table_cols [COL_FROM] =
|
||||
e_table_col_new (COL_FROM, _("From"),
|
||||
COL_FROM_WIDTH, COL_FROM_WIDTH_MIN,
|
||||
message_list->render_text,
|
||||
g_str_equal, TRUE);
|
||||
|
||||
message_list->table_cols [COL_SUBJECT] =
|
||||
e_table_col_new (COL_SUBJECT, _("Subject"),
|
||||
COL_SUBJECT_WIDTH, COL_SUBJECT_WIDTH_MIN,
|
||||
message_list->render_text,
|
||||
g_str_equal, TRUE);
|
||||
|
||||
message_list->table_cols [COL_SENT] =
|
||||
e_table_col_new (COL_SENT, _("Sent"),
|
||||
COL_SUBJECT_WIDTH, COL_SENT_WIDTH_MIN,
|
||||
message_list->render_text,
|
||||
g_str_equal, TRUE);
|
||||
|
||||
message_list->table_cols [COL_RECEIVE] =
|
||||
e_table_col_new (COL_SENT, _("Receive"),
|
||||
COL_RECEIVE_WIDTH, COL_RECEIVE_WIDTH_MIN,
|
||||
message_list->render_text,
|
||||
g_str_equal, TRUE);
|
||||
message_list->table_cols [COL_TO] =
|
||||
e_table_col_new (COL_TO, _("To"),
|
||||
COL_TO_WIDTH, COL_TO_WIDTH_MIN,
|
||||
message_list->render_text,
|
||||
g_str_equal, TRUE);
|
||||
|
||||
message_list->table_cols [COL_SIZE] =
|
||||
e_table_col_new (COL_SIZE, _("Size"),
|
||||
COL_SIZE_WIDTH, COL_SIZE_WIDTH_MIN,
|
||||
message_list->render_text,
|
||||
g_str_equal, TRUE);
|
||||
}
|
||||
|
||||
/*
|
||||
* GtkObject::init
|
||||
*/
|
||||
static void
|
||||
message_list_init (GtkObject *object)
|
||||
{
|
||||
MessageList *message_list = MESSAGE_LIST (object);
|
||||
|
||||
message_list->table_model = e_table_simple_new (
|
||||
ml_col_count, ml_row_count, ml_value_at,
|
||||
ml_set_value_at, ml_is_cell_editable, message_list);
|
||||
|
||||
message_list_init_renderers (message_list);
|
||||
message_list_init_header (message_list);
|
||||
|
||||
/*
|
||||
* The etable
|
||||
*/
|
||||
|
||||
message_list->etable = e_table_new (
|
||||
message_list->header_model,
|
||||
message_list->table_model,
|
||||
"1,2,3,4,5,6,7", NULL);
|
||||
|
||||
/*
|
||||
* We do own the Etable, not some widget container
|
||||
*/
|
||||
gtk_object_ref (GTK_OBJECT (message_list->etable));
|
||||
gtk_object_sink (GTK_OBJECT (message_list->etable));
|
||||
}
|
||||
|
||||
static void
|
||||
message_list_destroy (GtkObject *object)
|
||||
{
|
||||
MessageList *message_list = MESSAGE_LIST (object);
|
||||
int i;
|
||||
|
||||
gtk_object_unref (GTK_OBJECT (message_list->table_model));
|
||||
gtk_object_unref (GTK_OBJECT (message_list->header_model));
|
||||
|
||||
/*
|
||||
* Renderers
|
||||
*/
|
||||
gtk_object_unref (GTK_OBJECT (message_list->render_text));
|
||||
gtk_object_unref (GTK_OBJECT (message_list->render_online_status));
|
||||
gtk_object_unref (GTK_OBJECT (message_list->render_message_status));
|
||||
gtk_object_unref (GTK_OBJECT (message_list->render_priority));
|
||||
gtk_object_unref (GTK_OBJECT (message_list->render_attachment));
|
||||
|
||||
gtk_object_unref (GTK_OBJECT (message_list->etable));
|
||||
|
||||
for (i = 0; i < COL_LAST; i++)
|
||||
gtk_object_unref (GTK_OBJECT (message_list->table_cols [i]));
|
||||
|
||||
GTK_OBJECT_CLASS (message_list_parent_class)->destroy (object);
|
||||
}
|
||||
|
||||
/*
|
||||
* CORBA method: Evolution::MessageList::select_message
|
||||
*/
|
||||
static void
|
||||
MessageList_select_message (PortableServer_Servant _servant,
|
||||
const CORBA_long message_number,
|
||||
CORBA_Environment *ev)
|
||||
{
|
||||
printf ("FIXME: select message method\n");
|
||||
}
|
||||
|
||||
/*
|
||||
* CORBA method: Evolution::MessageList::open_message
|
||||
*/
|
||||
static void
|
||||
MessageList_open_message (PortableServer_Servant _servant,
|
||||
const CORBA_long message_number,
|
||||
CORBA_Environment *ev)
|
||||
{
|
||||
printf ("FIXME: open message method\n");
|
||||
}
|
||||
|
||||
static POA_Evolution_MessageList__epv *
|
||||
evolution_message_list_get_epv (void)
|
||||
{
|
||||
POA_Evolution_MessageList__epv *epv;
|
||||
|
||||
epv = g_new0 (POA_Evolution_MessageList__epv, 1);
|
||||
|
||||
epv->select_message = MessageList_select_message;
|
||||
epv->open_message = MessageList_open_message;
|
||||
|
||||
return epv;
|
||||
}
|
||||
|
||||
static void
|
||||
message_list_corba_class_init (void)
|
||||
{
|
||||
evolution_message_list_vepv.GNOME_Unknown_epv = gnome_object_get_epv ();
|
||||
evolution_message_list_vepv.Evolution_MessageList_epv = evolution_message_list_get_epv ();
|
||||
}
|
||||
|
||||
/*
|
||||
* GtkObjectClass::init
|
||||
*/
|
||||
static void
|
||||
message_list_class_init (GtkObjectClass *object_class)
|
||||
{
|
||||
message_list_parent_class = gtk_type_class (PARENT_TYPE);
|
||||
|
||||
object_class->destroy = message_list_destroy;
|
||||
|
||||
message_list_corba_class_init ();
|
||||
}
|
||||
|
||||
static void
|
||||
message_list_construct (MessageList *message_list, Evolution_MessageList corba_message_list)
|
||||
{
|
||||
gnome_object_construct (GNOME_OBJECT (message_list), corba_message_list);
|
||||
}
|
||||
|
||||
static Evolution_MessageList
|
||||
create_corba_message_list (GnomeObject *object)
|
||||
{
|
||||
POA_Evolution_MessageList *servant;
|
||||
CORBA_Environment ev;
|
||||
|
||||
servant = (POA_Evolution_MessageList *) g_new0 (GnomeObjectServant, 1);
|
||||
servant->vepv = &evolution_message_list_vepv;
|
||||
|
||||
CORBA_exception_init (&ev);
|
||||
POA_Evolution_MessageList__init ((PortableServer_Servant) servant, &ev);
|
||||
if (ev._major != CORBA_NO_EXCEPTION){
|
||||
g_free (servant);
|
||||
CORBA_exception_free (&ev);
|
||||
return CORBA_OBJECT_NIL;
|
||||
}
|
||||
|
||||
CORBA_exception_free (&ev);
|
||||
return (Evolution_MessageList) gnome_object_activate_servant (object, servant);
|
||||
}
|
||||
|
||||
GnomeObject *
|
||||
message_list_new (void)
|
||||
{
|
||||
Evolution_MessageList corba_object;
|
||||
MessageList *message_list;
|
||||
|
||||
message_list = gtk_type_new (message_list_get_type ());
|
||||
|
||||
corba_object = create_corba_message_list (GNOME_OBJECT (message_list));
|
||||
if (corba_object == CORBA_OBJECT_NIL){
|
||||
gtk_object_destroy (GTK_OBJECT (message_list));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
message_list_construct (message_list, corba_object);
|
||||
|
||||
return GNOME_OBJECT (message_list);
|
||||
}
|
||||
|
||||
void
|
||||
message_list_set_folder (MessageList *message_list, CamelFolder *camel_folder)
|
||||
{
|
||||
g_return_if_fail (message_list != NULL);
|
||||
g_return_if_fail (camel_folder != NULL);
|
||||
g_return_if_fail (IS_MESSAGE_LIST (message_list));
|
||||
g_return_if_fail (CAMEL_IS_FOLDER (camel_folder));
|
||||
g_return_if_fail (camel_has_summary_capability (camel_folder));
|
||||
|
||||
if (message_list->folder)
|
||||
gtk_object_unref (GTK_OBJECT (message_list->folder));
|
||||
|
||||
message_list->folder = camel_folder;
|
||||
message_list->folder_summary = camel_folder_get_summary (camel_folder);
|
||||
|
||||
gtk_object_ref (GTK_OBJECT (camel_folder));
|
||||
|
||||
e_table_model_changed (message_list->table_model);
|
||||
}
|
||||
|
||||
GtkWidget *
|
||||
message_list_get_widget (MessageList *message_list)
|
||||
{
|
||||
return message_list->etable;
|
||||
}
|
||||
|
||||
E_MAKE_TYPE (message_list, "MessageList", MessageList, message_list_class_init, message_list_init, PARENT_TYPE);
|
||||
60
mail/message-list.h
Normal file
60
mail/message-list.h
Normal file
@ -0,0 +1,60 @@
|
||||
#ifndef _MESSAGE_LIST_H_
|
||||
#define _MESSAGE_LIST_H_
|
||||
|
||||
#include <bonobo/gnome-main.h>
|
||||
#include <bonobo/gnome-object.h>
|
||||
#include "camel/camel-folder.h"
|
||||
|
||||
#define MESSAGE_LIST_TYPE (message_list_get_type ())
|
||||
#define MESSAGE_LIST(o) (GTK_CHECK_CAST ((o), MESSAGE_LIST_TYPE, MessageList))
|
||||
#define MESSAGE_LIST_CLASS(k) (GTK_CHECK_CLASS_CAST((k), MESSAGE_LIST_TYPE, MessageListClass))
|
||||
#define IS_MESSAGE_LIST(o) (GTK_CHECK_TYPE ((o), MESSAGE_LIST_TYPE))
|
||||
#define IS_MESSAGE_LIST_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), MESSAGE_LIST_TYPE))
|
||||
|
||||
typedef struct _Renderer Renderer;
|
||||
|
||||
enum {
|
||||
COL_ONLINE_STATUS,
|
||||
COL_MESSAGE_STATUS,
|
||||
COL_PRIORITY,
|
||||
COL_ATTACHMENT,
|
||||
COL_FROM,
|
||||
COL_SUBJECT,
|
||||
COL_SENT,
|
||||
COL_RECEIVE,
|
||||
COL_TO,
|
||||
COL_SIZE,
|
||||
|
||||
COL_LAST
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
GnomeObject parent;
|
||||
|
||||
ETableModel *table_model;
|
||||
ETableHeader *header_model;
|
||||
ETableCol *table_cols [COL_LAST];
|
||||
|
||||
ECell *render_text;
|
||||
ECell *render_online_status;
|
||||
ECell *render_message_status;
|
||||
ECell *render_priority;
|
||||
ECell *render_attachment;
|
||||
|
||||
GtkWidget *etable;
|
||||
|
||||
CamelFolder *folder;
|
||||
CamelFolderSummary *folder_summary;
|
||||
} MessageList;
|
||||
|
||||
typedef struct {
|
||||
GnomeObjectClass parent_class;
|
||||
} MessageListClass;
|
||||
|
||||
GtkType message_list_get_type (void);
|
||||
GnomeObject *message_list_new (void);
|
||||
void message_list_set_folder (MessageList *message_list,
|
||||
CamelFolder *camel_folder);
|
||||
GtkWidget *message_list_get_widget (MessageList *message_list);
|
||||
|
||||
#endif /* _MESSAGE_LIST_H_ */
|
||||
Reference in New Issue
Block a user