Working on the interface

This commit is contained in:
Pierre Pronchery 2007-12-17 01:14:55 +00:00
parent 7fb95ee8bc
commit 19d477fbe3
8 changed files with 187 additions and 41 deletions

View File

@ -100,6 +100,20 @@ void account_delete(Account * account)
/* accessors */
/* account_get_enabled */
int account_get_enabled(Account * account)
{
return account->enabled;
}
/* account_set_disabled */
void account_set_enabled(Account * account, int enabled)
{
account->enabled = enabled ? 1 : 0;
}
/* account_get_store */
GtkListStore * account_get_store(Account * account, AccountFolder * folder)
{
@ -220,19 +234,3 @@ int account_init(Account * account, GtkTreeStore * store, GtkTreeIter * parent)
return 0;
return account->plugin->init(store, parent);
}
/* account_disable */
int account_disable(Account * account)
{
account->enabled = 0;
return 0;
}
/* account_enable */
int account_enable(Account * account)
{
account->enabled = 1;
return 0;
}

View File

@ -100,7 +100,11 @@ Account * account_new(char const * type, char const * name);
void account_delete(Account * account);
/* accessors */
int account_get_enabled(Account * account);
void account_set_enabled(Account * account, int enabled);
GtkListStore * account_get_store(Account * account, AccountFolder * folder);
char const * account_get_title(Account * account);
int account_set_title(Account * account, char const * title);
@ -110,7 +114,4 @@ int account_config_save(Account * account, Config * config);
int account_init(Account * account, GtkTreeStore * store, GtkTreeIter * parent);
int account_quit(Account * account);
int account_disable(Account * account);
int account_enable(Account * account);
#endif /* !MAILER_ACCOUNT_H */

View File

@ -262,7 +262,7 @@ static void _preferences_set(Mailer * mailer)
{
char * p;
if((p = config_get(mailer->config, "", "message_font")) == NULL)
if((p = mailer_get_config(mailer, "messages_font")) == NULL)
p = MAILER_MESSAGES_FONT;
gtk_font_button_set_font_name(GTK_FONT_BUTTON(mailer->pr_messages_font),
p);
@ -497,9 +497,11 @@ static int _preferences_ok_accounts(Mailer * mailer)
{
if(enabled)
continue;
#if 0 /* FIXME API+behaviour change here */
if(mailer_account_disable(mailer, account) == 0)
gtk_list_store_set(GTK_LIST_STORE(model), &iter,
AC_ACTIVE, FALSE, -1);
#endif
}
else if(enabled && mailer_account_add(mailer, account) == 0)
gtk_list_store_set(GTK_LIST_STORE(model), &iter,
@ -1232,19 +1234,41 @@ void on_compose_send(GtkWidget * widget, gpointer data)
}
/* compose file menu */
void on_compose_file_send(GtkWidget * widget, gpointer data)
void on_compose_attach(GtkWidget * widget, gpointer data)
{
/* FIXME implement */
}
/* compose file menu */
void on_compose_file_new(GtkWidget * widget, gpointer data)
{
Compose * c = data;
compose_new(c->mailer);
}
void on_compose_file_send(GtkWidget * widget, gpointer data)
{
Compose * c = data;
compose_send(c);
}
void on_compose_file_save(GtkWidget * widget, gpointer data)
{
/* FIXME implement */
}
void on_compose_file_save_as(GtkWidget * widget, gpointer data)
{
/* FIXME implement */
}
void on_compose_file_close(GtkWidget * widget, gpointer data)
{
Compose * c = data;
@ -1253,6 +1277,37 @@ void on_compose_file_close(GtkWidget * widget, gpointer data)
}
/* compose_edit_menu */
void on_compose_edit_undo(GtkWidget * widget, gpointer data)
{
/* FIXME implement */
}
void on_compose_edit_redo(GtkWidget * widget, gpointer data)
{
/* FIXME implement */
}
void on_compose_edit_cut(GtkWidget * widget, gpointer data)
{
/* FIXME implement */
}
void on_compose_edit_copy(GtkWidget * widget, gpointer data)
{
/* FIXME implement */
}
void on_compose_edit_paste(GtkWidget * widget, gpointer data)
{
/* FIXME implement */
}
/* compose view menu */
void on_compose_view_cc(GtkWidget * widget, gpointer data)
{

View File

@ -73,12 +73,22 @@ void on_account_delete(GtkWidget * widget, gpointer data);
gboolean on_compose_closex(GtkWidget * widget, GdkEvent * event, gpointer data);
void on_compose_save(GtkWidget * widget, gpointer data);
void on_compose_send(GtkWidget * widget, gpointer data);
void on_compose_attach(GtkWidget * widget, gpointer data);
/* file menu */
void on_compose_file_send(GtkWidget * widget, gpointer data);
void on_compose_file_new(GtkWidget * widget, gpointer data);
void on_compose_file_save(GtkWidget * widget, gpointer data);
void on_compose_file_save_as(GtkWidget * widget, gpointer data);
void on_compose_file_send(GtkWidget * widget, gpointer data);
void on_compose_file_close(GtkWidget * widget, gpointer data);
/* edit menu */
void on_compose_edit_undo(GtkWidget * widget, gpointer data);
void on_compose_edit_redo(GtkWidget * widget, gpointer data);
void on_compose_edit_cut(GtkWidget * widget, gpointer data);
void on_compose_edit_copy(GtkWidget * widget, gpointer data);
void on_compose_edit_paste(GtkWidget * widget, gpointer data);
/* view menu */
void on_compose_view_cc(GtkWidget * widget, gpointer data);
void on_compose_view_bcc(GtkWidget * widget, gpointer data);

View File

@ -28,17 +28,34 @@
#include "compose.h"
/* private */
/* constants */
static struct _menu _menu_file[] =
{
{ "_Send", G_CALLBACK(on_compose_file_send), "stock_mail-send", 0 },
{ "_New message", G_CALLBACK(on_compose_file_new), "stock_mail-compose",
GDK_N },
{ "", NULL, NULL, 0 },
{ "_Save", G_CALLBACK(on_compose_file_save), GTK_STOCK_SAVE, GDK_S },
{ "Save _as...", G_CALLBACK(on_compose_file_save_as), GTK_STOCK_SAVE_AS,
0 },
{ "", NULL, NULL, 0 },
{ "_Send", G_CALLBACK(on_compose_file_send), "stock_mail-send", 0 },
{ "", NULL, NULL, 0 },
{ "_Close", G_CALLBACK(on_compose_file_close), GTK_STOCK_CLOSE, GDK_W },
{ NULL, NULL, NULL, 0 }
};
static struct _menu _menu_edit[] =
{
{ "_Undo", G_CALLBACK(on_compose_edit_undo), "stock_undo", GDK_Z },
{ "_Redo", G_CALLBACK(on_compose_edit_redo), "stock_redo", GDK_Y },
{ "", NULL, NULL, 0 },
{ "_Cut", G_CALLBACK(on_compose_edit_cut), GTK_STOCK_CUT, GDK_X },
{ "_Copy", G_CALLBACK(on_compose_edit_copy), GTK_STOCK_COPY, GDK_C },
{ "_Paste", G_CALLBACK(on_compose_edit_paste), GTK_STOCK_PASTE, GDK_P },
{ NULL, NULL, NULL, 0 }
};
static struct _menu _menu_view[] =
{
/* FIXME CC and BCC should be toggle menu entries */
@ -60,6 +77,7 @@ static struct _menu _menu_help[] =
static struct _menubar _compose_menubar[] =
{
{ "_File", _menu_file },
{ "_Edit", _menu_edit },
{ "_View", _menu_view },
{ "_Help", _menu_help },
{ NULL, NULL }
@ -70,11 +88,16 @@ static struct _toolbar _compose_toolbar[] =
{ "Send", G_CALLBACK(on_compose_send), "stock_mail-send" },
{ "", NULL, NULL },
{ "Save", G_CALLBACK(on_compose_save), GTK_STOCK_SAVE },
{ "", NULL, NULL },
{ "Attach", G_CALLBACK(on_compose_attach), "stock_attach" },
{ NULL, NULL, NULL }
};
/* public */
/* compose_new */
static GtkWidget * _new_text_view(Mailer * mailer);
Compose * compose_new(Mailer * mailer)
{
Compose * compose;
@ -83,7 +106,6 @@ Compose * compose_new(Mailer * mailer)
GtkToolItem * toolitem;
GtkSizeGroup * group;
GtkWidget * widget;
PangoFontDescription * desc;
if((compose = malloc(sizeof(*compose))) == NULL)
{
@ -169,11 +191,8 @@ Compose * compose_new(Mailer * mailer)
gtk_container_add(GTK_CONTAINER(toolitem), compose->subject);
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), toolitem, -1);
gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0);
compose->view = gtk_text_view_new();
desc = pango_font_description_new();
pango_font_description_set_family(desc, "monospace");
gtk_widget_modify_font(compose->view, desc);
pango_font_description_free(desc);
/* view */
compose->view = _new_text_view(mailer);
widget = gtk_scrolled_window_new(NULL, NULL);
gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(widget),
GTK_SHADOW_ETCHED_IN);
@ -192,6 +211,42 @@ Compose * compose_new(Mailer * mailer)
return compose;
}
static GtkWidget * _new_text_view(Mailer * mailer)
{
GtkWidget * textview;
PangoFontDescription * desc;
char const * homedir;
char * filename;
gchar * buf;
size_t cnt;
GtkTextBuffer * buffer;
static char const signature[] = "/.signature";
static char const prefix[] = "\n-- \n";
textview = gtk_text_view_new();
/* font */
desc = pango_font_description_from_string(mailer_get_config(mailer,
"messages_font"));
gtk_widget_modify_font(textview, desc);
pango_font_description_free(desc);
/* signature */
if((homedir = getenv("HOME")) == NULL)
return textview;
if((filename = malloc(strlen(homedir) + sizeof(signature))) == NULL)
return textview;
sprintf(filename, "%s%s", homedir, signature);
if(g_file_get_contents(filename, &buf, &cnt, NULL) != TRUE)
{
free(filename);
return textview;
}
free(filename);
buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview));
gtk_text_buffer_set_text(buffer, prefix, sizeof(prefix) - 1);
gtk_text_buffer_insert_at_cursor(buffer, buf, cnt);
return textview;
}
/* compose_delete */
void compose_delete(Compose * compose)
@ -201,6 +256,13 @@ void compose_delete(Compose * compose)
}
/* accessors */
Mailer * compose_get_mailer(Compose * compose)
{
return compose->mailer;
}
/* useful */
/* compose_save */
void compose_save(Compose * compose)

View File

@ -55,6 +55,9 @@ typedef struct _Compose
Compose * compose_new(Mailer * mailer);
void compose_delete(Compose * compose);
/* accessors */
Mailer * compose_get_mailer(Compose * compose); /* XXX ugly */
/* useful */
void compose_save(Compose * compose);
void compose_send(Compose * compose);

View File

@ -309,8 +309,9 @@ static GtkWidget * _new_folders_view(Mailer * mailer)
GtkCellRenderer * renderer;
GtkTreeSelection * treesel;
model = gtk_tree_store_new(MF_COL_COUNT, G_TYPE_POINTER, G_TYPE_POINTER,
GDK_TYPE_PIXBUF, G_TYPE_STRING);
model = gtk_tree_store_new(MF_COL_COUNT, G_TYPE_POINTER, G_TYPE_BOOLEAN,
G_TYPE_BOOLEAN, G_TYPE_POINTER, GDK_TYPE_PIXBUF,
G_TYPE_STRING);
widget = gtk_tree_view_new_with_model(GTK_TREE_MODEL(model));
g_object_unref(model);
renderer = gtk_cell_renderer_pixbuf_new();
@ -453,16 +454,23 @@ void mailer_delete(Mailer * mailer)
/* accessors */
/* mailer_get_config */
char const * mailer_get_config(Mailer * mailer, char const * variable)
{
return config_get(mailer->config, "", variable);
}
/* mailer_get_config_filename */
char * mailer_get_config_filename(Mailer * mailer)
/* FIXME consider replacing with mailer_save_config() */
{
char * homedir;
char const * homedir;
char * filename;
if((homedir = getenv("HOME")) == NULL)
return NULL;
if((filename = malloc(strlen(homedir) + strlen(MAILER_CONFIG_FILE) + 2))
if((filename = malloc(strlen(homedir) + sizeof(MAILER_CONFIG_FILE) + 1))
== NULL)
return NULL;
sprintf(filename, "%s/%s", homedir, MAILER_CONFIG_FILE);
@ -502,8 +510,8 @@ int mailer_account_add(Mailer * mailer, Account * account)
#ifdef DEBUG
fprintf(stderr, "DEBUG: mailer_account_add(%p)\n", account);
#endif
if((p = realloc(mailer->account, sizeof(*p) * (mailer->account_cnt + 1)))
== NULL)
if((p = realloc(mailer->account, sizeof(*p) * (mailer->account_cnt
+ 1))) == NULL)
return mailer_error(mailer, "realloc", FALSE);
mailer->account = p;
mailer->account[mailer->account_cnt] = account;
@ -513,14 +521,16 @@ int mailer_account_add(Mailer * mailer, Account * account)
pixbuf = gtk_icon_theme_load_icon(theme, "stock_mail-accounts", 16, 0,
NULL);
gtk_tree_store_set(GTK_TREE_STORE(model), &iter, MF_COL_ACCOUNT,
account, MF_COL_FOLDER, NULL, MF_COL_ICON, pixbuf,
MF_COL_NAME, account->title, -1);
account, MF_COL_ENABLED, account_get_enabled(account),
MF_COL_DELETE, FALSE, MF_COL_FOLDER, NULL, MF_COL_ICON,
pixbuf, MF_COL_NAME, account->title, -1);
account_init(account, GTK_TREE_STORE(model), &iter);
mailer->account_cnt++;
return FALSE;
}
#if 0 /* FIXME deprecate? */
/* mailer_account_disable */
int mailer_account_disable(Mailer * mailer, Account * account)
{
@ -531,7 +541,8 @@ int mailer_account_disable(Mailer * mailer, Account * account)
break;
if(i == mailer->account_cnt)
return 1;
return account_disable(account);
account_set_enabled(account, 0);
return 0;
}
@ -545,5 +556,7 @@ int mailer_account_enable(Mailer * mailer, Account * account)
break;
if(i == mailer->account_cnt)
return 1;
return account_enable(account);
account_set_enabled(account, 1);
return 0;
}
#endif

View File

@ -43,7 +43,8 @@
/* types */
enum
{
MF_COL_ACCOUNT = 0, MF_COL_FOLDER, MF_COL_ICON, MF_COL_NAME
MF_COL_ACCOUNT = 0, MF_COL_ENABLED, MF_COL_DELETE, MF_COL_FOLDER,
MF_COL_ICON, MF_COL_NAME
};
# define MF_COL_LAST MF_COL_NAME
# define MF_COL_COUNT (MF_COL_LAST + 1)
@ -92,14 +93,17 @@ Mailer * mailer_new(void);
void mailer_delete(Mailer * mailer);
/* accessors */
char const * mailer_get_config(Mailer * mailer, char const * variable);
char * mailer_get_config_filename(Mailer * mailer);
/* useful */
int mailer_error(Mailer * mailer, char const * message, int ret);
int mailer_account_add(Mailer * mailer, Account * account);
#if 0 /* FIXME deprecate? */
int mailer_account_disable(Mailer * mailer, Account * account);
int mailer_account_enable(Mailer * mailer, Account * account);
#endif
/* FIXME implement
int mailer_account_remove(Mailer * mailer, Account * account); */