0.8.10claws53
[claws.git] / src / colorlabel.c
diff --git a/src/colorlabel.c b/src/colorlabel.c
deleted file mode 100644 (file)
index 0913b87..0000000
+++ /dev/null
@@ -1,331 +0,0 @@
-/*
- * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 2001-2003 Hiroyuki Yamamoto & The Sylpheed Claws Team
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-/* (alfons) - based on a contribution by Satoshi Nagayasu; revised for colorful 
- * menu and more Sylpheed integration. The idea to put the code in a separate
- * file is just that it make it easier to allow "user changeable" label colors.
- */
-
-#include "defs.h"
-
-#include <glib.h>
-#include <gdk/gdkx.h>
-#include <gtk/gtkwidget.h>
-#include <gtk/gtkpixmap.h>
-#include <gtk/gtkmenu.h>
-#include <gtk/gtkcheckmenuitem.h>
-#include <gtk/gtklabel.h>
-#include <gtk/gtkmenuitem.h>
-#include <gtk/gtkalignment.h>
-#include <gtk/gtkhbox.h>
-#include <gtk/gtkwindow.h>
-#include <gtk/gtkdrawingarea.h>
-
-#include "intl.h"
-#include "colorlabel.h"
-#include "utils.h"
-
-static gchar *labels[] = {
-       N_("Orange"),
-       N_("Red") ,
-       N_("Pink"),
-       N_("Sky blue"),
-       N_("Blue"),
-       N_("Green"),
-       N_("Brown")
-};
-
-typedef enum LabelColorChangeFlags_ {
-       LCCF_COLOR = 1 << 0,
-       LCCF_LABEL = 1 << 1,
-       LCCF_ALL   = LCCF_COLOR | LCCF_LABEL
-} LabelColorChangeFlags;
-
-/* XXX: if you add colors, make sure you also check the procmsg.h.
- * color indices are stored as 3 bits; that explains the max. of 7 colors */
-static struct 
-{
-       LabelColorChangeFlags   changed; 
-       GdkColor                color;
-
-       /* XXX: note that the label member is supposed to be dynamically 
-        * allocated and fffreed */
-       gchar                   *label;
-       GtkWidget               *widget;
-} label_colors[] = {
-       { LCCF_ALL, { 0, 0xffff, (0x99 << 8), 0x0 },            NULL, NULL },
-       { LCCF_ALL, { 0, 0xffff, 0, 0 },                        NULL, NULL },
-       { LCCF_ALL, { 0, 0xffff, (0x66 << 8), 0xffff },         NULL, NULL },
-       { LCCF_ALL, { 0, 0x0, (0xcc << 8), 0xffff },            NULL, NULL },
-       { LCCF_ALL, { 0, 0x0, 0x0, 0xffff },                    NULL, NULL },
-       { LCCF_ALL, { 0, 0x0, 0x99 << 8, 0x0 },                 NULL, NULL },
-       { LCCF_ALL, { 0, 0x66 << 8, 0x33 << 8, 0x33 << 8 },     NULL, NULL }
-};
-
-#define LABEL_COLORS_ELEMS (sizeof label_colors / sizeof label_colors[0])
-
-#define G_RETURN_VAL_IF_INVALID_COLOR(color, val) \
-       g_return_val_if_fail((color) >= 0 && (color) < LABEL_COLORS_ELEMS, (val))
-
-static void colorlabel_recreate        (gint);
-static void colorlabel_recreate_label  (gint);
-
-gint colorlabel_get_color_count(void)
-{
-       return LABEL_COLORS_ELEMS;
-}
-
-GdkColor colorlabel_get_color(gint color_index)
-{
-       GdkColor invalid = { 0 };
-
-       G_RETURN_VAL_IF_INVALID_COLOR(color_index, invalid);
-
-       return label_colors[color_index].color;
-}
-
-gchar *colorlabel_get_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;
-}
-
-static gboolean colorlabel_drawing_area_expose_event_cb
-       (GtkWidget *widget, GdkEventExpose *expose, gpointer data)
-{
-       GdkDrawable *drawable = widget->window;
-       gulong c = (gulong) GPOINTER_TO_INT(data);
-       GdkColor color;
-       GdkGC *gc;
-
-       color.red   = ((c >> 16UL) & 0xFFUL) << 8UL;
-       color.green = ((c >>  8UL) & 0xFFUL) << 8UL;
-       color.blue  = ((c)         & 0xFFUL) << 8UL;
-
-       gdk_colormap_alloc_color(gtk_widget_get_colormap(widget), &color, FALSE, TRUE);
-
-       gc = gdk_gc_new(drawable);
-
-       gdk_gc_set_foreground(gc, &color);
-       gdk_draw_rectangle(drawable, gc,
-                          TRUE, 0, 0, widget->allocation.width,
-                          widget->allocation.height);
-       gdk_draw_rectangle(drawable, widget->style->black_gc,
-                          FALSE, 0, 0, widget->allocation.width,
-                          widget->allocation.height);
-
-       gdk_gc_unref(gc);                          
-
-       return FALSE;
-}
-
-static GtkWidget *colorlabel_create_color_widget(GdkColor color)
-{
-       GtkWidget *widget;
-
-       widget = gtk_drawing_area_new();
-       gtk_drawing_area_size(GTK_DRAWING_AREA(widget), 16, 16);
-
-#define CL(x)          (((gulong) (x) >> (gulong) 8) & 0xFFUL) 
-#define CR(r, g, b)    ((CL(r) << (gulong) 16) | \
-                        (CL(g) << (gulong)  8) | \
-                        (CL(b)))
-
-       gtk_signal_connect(GTK_OBJECT(widget), "expose_event", 
-                          GTK_SIGNAL_FUNC
-                               (colorlabel_drawing_area_expose_event_cb),
-                          GINT_TO_POINTER
-                               ((gint)CR(color.red, color.green, color.blue)));
-
-       return widget;
-}
-
-/* XXX: this function to check if menus with colors and labels should
- * be recreated */
-gboolean colorlabel_changed(void)
-{
-       gint n;
-
-       for (n = 0; n < LABEL_COLORS_ELEMS; n++) {
-               if (label_colors[n].changed) 
-                       return TRUE;
-       }
-
-       return FALSE;
-}
-
-/* XXX: colorlabel_recreate_XXX are there to make sure everything
- * is initialized ok, without having to call a global _xxx_init_
- * function */
-static void colorlabel_recreate_color(gint color)
-{
-       GtkWidget *widget;
-
-       if (!(label_colors[color].changed & LCCF_COLOR))
-               return;
-
-       widget = colorlabel_create_color_widget(label_colors[color].color);
-       g_return_if_fail(widget);
-
-       if (label_colors[color].widget) 
-               gtk_widget_destroy(label_colors[color].widget);
-
-       label_colors[color].widget = widget;            
-       label_colors[color].changed &= ~LCCF_COLOR;
-}
-
-static void colorlabel_recreate_label(gint color)
-{
-       if (!label_colors[color].changed & LCCF_LABEL)
-               return;
-
-       if (label_colors[color].label == NULL) 
-               label_colors[color].label = g_strdup(gettext(labels[color]));
-
-       label_colors[color].changed &= ~LCCF_LABEL;
-}
-
-/* XXX: call this function everytime when you're doing important
- * stuff with the label_colors[] array */
-static void colorlabel_recreate(gint color)
-{
-       colorlabel_recreate_label(color);
-       colorlabel_recreate_color(color);
-}
-
-static void colorlabel_recreate_all(void)
-{
-       gint n;
-
-       for ( n = 0; n < LABEL_COLORS_ELEMS; n++) 
-               colorlabel_recreate(n);
-}
-
-/* colorlabel_create_check_color_menu_item() - creates a color
- * menu item with a check box */
-GtkWidget *colorlabel_create_check_color_menu_item(gint color_index)
-{
-       GtkWidget *label; 
-       GtkWidget *hbox; 
-       GtkWidget *align; 
-       GtkWidget *item;
-
-       G_RETURN_VAL_IF_INVALID_COLOR(color_index, NULL);
-
-       item  = gtk_check_menu_item_new();
-
-       colorlabel_recreate(color_index);
-
-       /* XXX: gnome-core::panel::menu.c is a great example of
-        * how to create pixmap menus */
-       label = gtk_label_new(label_colors[color_index].label);
-
-       gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
-       gtk_widget_show(label);
-       hbox = gtk_hbox_new(FALSE, 0);
-       gtk_widget_show(hbox);
-       gtk_container_add(GTK_CONTAINER(item), hbox);
-
-       align = gtk_alignment_new(0.5, 0.5, 0.0, 0.0);
-       gtk_widget_show(align);
-       gtk_container_set_border_width(GTK_CONTAINER(align), 1);
-
-       gtk_container_add(GTK_CONTAINER(align), label_colors[color_index].widget);
-       gtk_widget_show(label_colors[color_index].widget);
-       gtk_widget_set_usize(align, 16, 16);
-
-       gtk_box_pack_start(GTK_BOX(hbox), align, FALSE, FALSE, 0);
-       gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 4);
-
-       return item;
-}
-
-/* colorlabel_create_color_menu() - creates a color menu without 
- * checkitems, probably for use in combo items */
-GtkWidget *colorlabel_create_color_menu(void)
-{
-       GtkWidget *label; 
-       GtkWidget *hbox; 
-       GtkWidget *align; 
-       GtkWidget *item;
-       GtkWidget *menu;
-       gint i;
-
-       colorlabel_recreate_all();
-
-       /* create the menu items. each item has its color code attached */
-       menu = gtk_menu_new();
-       gtk_object_set_data(GTK_OBJECT(menu), "label_color_menu", menu);
-
-       item = gtk_menu_item_new_with_label(_("None"));
-       gtk_menu_append(GTK_MENU(menu), item);
-       gtk_object_set_data(GTK_OBJECT(item), "color", GUINT_TO_POINTER(0));
-       gtk_widget_show(item);
-       
-       /* and the color items */
-       for (i = 0; i < LABEL_COLORS_ELEMS; i++) {
-               GtkWidget *widget = colorlabel_create_color_widget(label_colors[i].color);
-
-               item  = gtk_menu_item_new();
-               gtk_object_set_data(GTK_OBJECT(item), "color", GUINT_TO_POINTER(i + 1));
-
-               label = gtk_label_new(label_colors[i].label);
-               
-               gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
-               gtk_widget_show(label);
-               hbox = gtk_hbox_new(FALSE, 0);
-               gtk_widget_show(hbox);
-               gtk_container_add(GTK_CONTAINER(item), hbox);
-
-               align = gtk_alignment_new(0.5, 0.5, 0.0, 0.0);
-               gtk_widget_show(align);
-               gtk_container_set_border_width(GTK_CONTAINER(align), 1);
-
-               gtk_container_add(GTK_CONTAINER(align), widget);
-               gtk_widget_show(widget);
-               gtk_widget_set_usize(align, 16, 16);
-
-               gtk_box_pack_start(GTK_BOX(hbox), align, FALSE, FALSE, 0);
-               gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 4);
-               
-               gtk_menu_append(GTK_MENU(menu), item);
-               gtk_widget_show(item);
-       }
-
-       gtk_widget_show(menu);
-
-       return menu;
-}
-
-guint colorlabel_get_color_menu_active_item(GtkWidget *menu)
-{
-       GtkWidget *menuitem;
-       guint      color;
-
-       g_return_val_if_fail
-               (gtk_object_get_data(GTK_OBJECT(menu), "label_color_menu"), 0);
-       menuitem = gtk_menu_get_active(GTK_MENU(menu));
-       color = GPOINTER_TO_UINT
-               (gtk_object_get_data(GTK_OBJECT(menuitem), "color"));
-       return color;
-}
-
-