diff options
author | hiro <hiro@ee746299-78ed-0310-b773-934348b2243d> | 2010-01-05 08:17:26 +0000 |
---|---|---|
committer | hiro <hiro@ee746299-78ed-0310-b773-934348b2243d> | 2010-01-05 08:17:26 +0000 |
commit | 217043f00e1b30d747a8a2e734c3a76ced282944 (patch) | |
tree | e282a3e7d9715fa29f4a78610a85d34f266a184d /src | |
parent | 7da33f3827d55c778bf39b3e3992dfe422d4798c (diff) |
implemented the UI for customizing color label text.
git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@2410 ee746299-78ed-0310-b773-934348b2243d
Diffstat (limited to 'src')
-rw-r--r-- | src/colorlabel.c | 61 | ||||
-rw-r--r-- | src/colorlabel.h | 4 | ||||
-rw-r--r-- | src/prefs_common_dialog.c | 83 |
3 files changed, 135 insertions, 13 deletions
diff --git a/src/colorlabel.c b/src/colorlabel.c index d1d0df0a..d5812221 100644 --- a/src/colorlabel.c +++ b/src/colorlabel.c @@ -106,19 +106,23 @@ GdkColor colorlabel_get_color(gint color_index) return label_colors[color_index].color; } -gchar *colorlabel_get_color_text(gint color_index) +const gchar *colorlabel_get_color_text(gint color_index) +{ + G_RETURN_VAL_IF_INVALID_COLOR(color_index, NULL); + + return label_colors[color_index].label ? + label_colors[color_index].label : gettext(labels[color_index]); +} + +const gchar *colorlabel_get_custom_color_text(gint color_index) { G_RETURN_VAL_IF_INVALID_COLOR(color_index, NULL); - colorlabel_recreate_label(color_index); return label_colors[color_index].label; } void colorlabel_set_color_text(gint color_index, const gchar *label) { - if (!label) - label = ""; - if (label_colors[color_index].label) g_free(label_colors[color_index].label); @@ -155,7 +159,7 @@ static gboolean colorlabel_drawing_area_expose_event_cb return FALSE; } -static GtkWidget *colorlabel_create_color_widget(GdkColor color) +GtkWidget *colorlabel_create_color_widget(GdkColor color) { GtkWidget *widget; @@ -212,16 +216,18 @@ static void colorlabel_recreate_color(gint color) static void colorlabel_recreate_label(gint color) { + const gchar *text; + if (!label_colors[color].changed & LCCF_LABEL) return; - if (label_colors[color].label == NULL) - label_colors[color].label = g_strdup(gettext(labels[color])); + text = colorlabel_get_color_text(color); if (label_colors[color].label_widget) - gtk_label_set_text(GTK_LABEL(label_colors[color].label_widget), label_colors[color].label); + gtk_label_set_text(GTK_LABEL(label_colors[color].label_widget), + text); else - label_colors[color].label_widget = gtk_label_new(label_colors[color].label); + label_colors[color].label_widget = gtk_label_new(text); label_colors[color].changed &= ~LCCF_LABEL; } @@ -307,8 +313,8 @@ GtkWidget *colorlabel_create_color_menu(void) g_object_set_data(G_OBJECT(item), "color", GUINT_TO_POINTER(i + 1)); - label = gtk_label_new(label_colors[i].label); - + label = gtk_label_new(colorlabel_get_color_text(i)); + gtk_widget_show(label); hbox = gtk_hbox_new(FALSE, 0); gtk_widget_show(hbox); @@ -389,4 +395,35 @@ gint colorlabel_read_config(void) void colorlabel_write_config(void) { + gchar *path; + PrefFile *pfile; + gint i; + gint ret; + const gchar *text; + + path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, "colorlabelrc", + NULL); + if ((pfile = prefs_file_open(path)) == NULL) { + g_warning("failed to write colorlabelrc"); + g_free(path); + return; + } + + for (i = 0; i < LABEL_COLORS_ELEMS; i++) { + text = colorlabel_get_custom_color_text(i); + ret = 0; + if (text) + ret = fputs(text, pfile->fp); + + if (ret == EOF || fputc('\n', pfile->fp) == EOF) { + FILE_OP_ERROR(path, "fputs || fputc"); + prefs_file_close_revert(pfile); + g_free(path); + return; + } + } + + if (prefs_file_close(pfile) < 0) { + g_warning("failed to write colorlabelrc"); + } } diff --git a/src/colorlabel.h b/src/colorlabel.h index cf71df82..13021098 100644 --- a/src/colorlabel.h +++ b/src/colorlabel.h @@ -24,10 +24,12 @@ gint colorlabel_get_color_count (void); GdkColor colorlabel_get_color (gint color_index); -gchar *colorlabel_get_color_text (gint color_index); +const gchar *colorlabel_get_color_text (gint color_index); +const gchar *colorlabel_get_custom_color_text (gint color_index); void colorlabel_set_color_text (gint color_index, const gchar *label); gboolean colorlabel_changed (void); +GtkWidget *colorlabel_create_color_widget (GdkColor color); GtkWidget *colorlabel_create_check_color_menu_item (gint color_index); GtkWidget *colorlabel_create_color_menu (void); diff --git a/src/prefs_common_dialog.c b/src/prefs_common_dialog.c index 507a3fe3..031aeb96 100644 --- a/src/prefs_common_dialog.c +++ b/src/prefs_common_dialog.c @@ -49,6 +49,7 @@ #include "foldersel.h" #include "inc.h" #include "menu.h" +#include "colorlabel.h" #include "codeconv.h" #include "utils.h" #include "gtkutils.h" @@ -164,6 +165,10 @@ static struct Message { GtkWidget *chkbtn_inline_image; } message; +static struct ColorLabel { + GtkWidget *entry_color[7]; +} colorlabel; + static struct JunkMail { GtkWidget *chkbtn_enable_junk; GtkWidget *entry_junk_learncmd; @@ -588,6 +593,11 @@ static GtkWidget *prefs_spell_create (void); #endif static void prefs_display_create (void); static GtkWidget *prefs_message_create (void); + +static GtkWidget *prefs_colorlabel_create (void); +static void prefs_common_colorlabel_set_dialog (void); +static void prefs_common_colorlabel_update (void); + static void prefs_junk_create (void); #if USE_GPGME static void prefs_privacy_create (void); @@ -703,6 +713,7 @@ void prefs_common_open(void) gtk_widget_grab_focus(dialog.ok_btn); prefs_set_dialog(prefs_common_get_params()); + prefs_common_colorlabel_set_dialog(); gtk_widget_show(dialog.window); } @@ -1485,6 +1496,7 @@ static void prefs_display_create(void) GtkWidget *button_dispitem; GtkWidget *msg_wid; + GtkWidget *clabel_wid; GtkWidget *label_dispencoding; GtkWidget *optmenu_dispencoding; @@ -1628,6 +1640,10 @@ static void prefs_display_create(void) msg_wid = prefs_message_create(); gtk_box_pack_start(GTK_BOX(vbox_tab), msg_wid, FALSE, FALSE, 0); + APPEND_SUB_NOTEBOOK(notebook, vbox_tab, _("Color label")); + clabel_wid = prefs_colorlabel_create(); + gtk_box_pack_start(GTK_BOX(vbox_tab), clabel_wid, FALSE, FALSE, 0); + APPEND_SUB_NOTEBOOK(notebook, vbox_tab, _("Encoding")); hbox1 = gtk_hbox_new (FALSE, 8); @@ -1881,6 +1897,71 @@ static GtkWidget *prefs_message_create(void) return vbox1; } +static GtkWidget *prefs_colorlabel_create(void) +{ + GtkWidget *vbox; + GtkWidget *table; + GtkWidget *clabel; + GtkWidget *entry; + gint i; + + vbox = gtk_vbox_new(FALSE, VSPACING); + gtk_widget_show(vbox); + gtk_container_set_border_width(GTK_CONTAINER(vbox), 8); + + table = gtk_table_new(7, 2, FALSE); + gtk_widget_show(table); + gtk_container_add(GTK_CONTAINER(vbox), table); + gtk_table_set_row_spacings(GTK_TABLE(table), VSPACING_NARROW); + gtk_table_set_col_spacings(GTK_TABLE(table), 8); + + for (i = 0; i < 7; i++) { + clabel = colorlabel_create_color_widget + (colorlabel_get_color(i)); + gtk_widget_show(clabel); + gtk_table_attach(GTK_TABLE(table), clabel, 0, 1, i, i + 1, + GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 6); + entry = gtk_entry_new(); + gtk_widget_show(entry); + gtk_table_attach(GTK_TABLE(table), entry, 1, 2, i, i + 1, + GTK_EXPAND | GTK_FILL, 0, 0, 0); + colorlabel.entry_color[i] = entry; + } + + return vbox; +} + +static void prefs_common_colorlabel_set_dialog(void) +{ + gint i; + const gchar *text; + + for (i = 0; i < 7; i++) { + if ((text = colorlabel_get_custom_color_text(i))) { + gtk_entry_set_text(GTK_ENTRY(colorlabel.entry_color[i]), + text); + } else { + gtk_entry_set_text(GTK_ENTRY(colorlabel.entry_color[i]), + ""); + } + } +} + +static void prefs_common_colorlabel_update(void) +{ + gint i; + const gchar *text; + + for (i = 0; i < 7; i++) { + text = gtk_entry_get_text(GTK_ENTRY(colorlabel.entry_color[i])); + if (text && text[0] != '\0') + colorlabel_set_color_text(i, text); + else + colorlabel_set_color_text(i, NULL); + } + colorlabel_update_menu(); +} + static const struct { gchar *junk_cmd; gchar *nojunk_cmd; @@ -4104,6 +4185,8 @@ static void prefs_common_apply(void) gtkut_stock_button_set_set_reverse(!prefs_common.comply_gnome_hig); main_window_reflect_prefs_all(); compose_reflect_prefs_all(); + prefs_common_colorlabel_update(); + colorlabel_write_config(); sock_set_io_timeout(prefs_common.io_timeout_secs); prefs_common_write_config(); |