aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2010-01-05 08:17:26 +0000
committerhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2010-01-05 08:17:26 +0000
commit217043f00e1b30d747a8a2e734c3a76ced282944 (patch)
treee282a3e7d9715fa29f4a78610a85d34f266a184d /src
parent7da33f3827d55c778bf39b3e3992dfe422d4798c (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.c61
-rw-r--r--src/colorlabel.h4
-rw-r--r--src/prefs_common_dialog.c83
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();