Index: src/lib/Makefile.am
===================================================================
--- src/lib/Makefile.am	(revision 68000)
+++ src/lib/Makefile.am	(working copy)
@@ -66,6 +66,7 @@ elm_calendar.h \
 elm_check.h \
 elm_clock.h \
 elm_cnp.h \
+elm_colorpalette.h \
 elm_colorselector.h \
 elm_config.h \
 elm_conform.h \
@@ -160,6 +161,7 @@ elm_calendar.c \
 elm_check.c \
 elm_clock.c \
 elm_cnp_helper.c \
+elm_colorpalette.c \
 elm_colorselector.c \
 elm_config.c \
 elm_conform.c \
Index: src/lib/elm_colorpalette.c
===================================================================
--- src/lib/elm_colorpalette.c	(revision 0)
+++ src/lib/elm_colorpalette.c	(revision 0)
@@ -0,0 +1,317 @@
+#include <Elementary.h>
+#include "elm_priv.h"
+
+#define MAX_NUM_COLORS 30
+#define DEFAULT_ROW_COUNT 2
+#define DEFAULT_COL_COUNT 5
+
+typedef struct _Widget_Data Widget_Data;
+typedef struct _Elm_Color_Item Elm_Color_Item;
+
+struct _Widget_Data
+{
+   Evas_Object *base;
+   Evas_Object *tab;
+   Eina_List *color_list;
+   Eina_List *items;
+   unsigned int row, col;
+   Eina_Bool color_set;
+};
+
+struct _Elm_Color_Item
+{
+   ELM_WIDGET_ITEM;
+   Elm_Color_RGBA *color;
+};
+
+static const char *widtype = NULL;
+static void _del_hook(Evas_Object *obj);
+static void _theme_hook(Evas_Object *obj);
+static void _sizing_eval(Evas_Object *obj);
+static void _resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
+static void _item_highlight(void *data, Evas *e, Evas_Object *obj, void *event_info);
+static void _item_unhighlight(void *data, Evas *e, Evas_Object *obj, void *event_info);
+static void _color_table_delete(Evas_Object *obj);
+static void _color_table_update(Evas_Object *obj);
+static int _hex_string_get(char ch);
+static void _color_parse(const char *str, unsigned char *r, unsigned char *g, unsigned char *b, unsigned char *a);
+static void _colors_get(Evas_Object *obj);
+
+static const char SIG_COLOR_SELECTED[] = "color,selected";
+static const Evas_Smart_Cb_Description _signals[] = {
+       {SIG_COLOR_SELECTED, ""},
+       {NULL, NULL}
+};
+
+static void
+_del_hook(Evas_Object *obj)
+{
+   Widget_Data *wd = elm_widget_data_get(obj);
+   if (!wd) return;
+
+   _color_table_delete(obj);
+   if (wd->color_list)
+     {
+        Elm_Color_RGBA *color;
+        EINA_LIST_FREE(wd->color_list, color) free(color);
+     }
+   free(wd);
+}
+
+static void
+_theme_hook(Evas_Object *obj)
+{
+   Widget_Data *wd = elm_widget_data_get(obj);
+   if (!wd) return;
+
+   _elm_theme_object_set(obj, wd->base, "colorpalette", "base", elm_widget_style_get(obj));
+   if (!wd->color_set)
+     {
+        if (wd->color_list)
+          {
+             Elm_Color_RGBA *color;
+             EINA_LIST_FREE(wd->color_list, color) free(color);
+             wd->color_list = NULL;
+          }
+      _colors_get(obj);
+     }
+   _color_table_update(obj);
+   _sizing_eval(obj);
+}
+
+static void
+_sizing_eval(Evas_Object *obj)
+{
+   Widget_Data *wd = NULL;
+   Elm_Color_Item *item = NULL;
+   Evas_Coord tab_w = 0, tab_h = 0;
+   Evas_Coord pad_x = 0, pad_y = 0;
+   Evas_Coord rect_w = 0, rect_h = 0;
+   Evas_Coord minw = -1, minh = -1;
+
+   wd = elm_widget_data_get(obj);
+   if (!wd) return;
+   if (!wd->items) return;
+   elm_coords_finger_size_adjust(wd->col, &minw, wd->row, &minh);
+   edje_object_size_min_restricted_calc(wd->base, &minw, &minh, minw, minh);
+   evas_object_size_hint_min_set(obj, minw, minh);
+   evas_object_size_hint_max_set(obj, -1, -1);
+
+   edje_object_part_geometry_get(wd->base, "bg", NULL, NULL, &tab_w, &tab_h);
+   item = wd->items->data;
+   edje_object_part_geometry_get(elm_layout_edje_get(VIEW(item)), "color_rect", NULL, NULL, &rect_w, &rect_h);
+   if (wd->col - 1)
+     pad_x = (tab_w - (rect_w * wd->col)) / (wd->col - 1);
+   if (wd->row - 1)
+     pad_y = (tab_h - (rect_h * wd->row)) / (wd->row - 1);
+   elm_table_padding_set(wd->tab, pad_x, pad_y);
+}
+
+static void
+_resize_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   _sizing_eval(data);
+}
+
+static void
+_item_highlight(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   Elm_Color_Item *item = (Elm_Color_Item *) data;
+   elm_object_signal_emit(VIEW(item), "elm,state,selected", "elm");
+}
+
+static void
+_item_unhighlight(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   Elm_Color_Item *item = (Elm_Color_Item *) data;
+   elm_object_signal_emit(VIEW(item), "elm,state,unselected", "elm");
+   evas_object_smart_callback_call(WIDGET(item), SIG_COLOR_SELECTED, item->color);
+}
+
+static void
+_color_table_delete(Evas_Object *obj)
+{
+   Widget_Data *wd = NULL;
+   Elm_Color_Item *item;
+   wd = elm_widget_data_get(obj);
+   if (!wd->tab) return;
+
+   if (wd->items)
+     EINA_LIST_FREE(wd->items, item) free(item);
+   wd->items = NULL;
+   if (wd->tab) evas_object_del(wd->tab);
+   wd->tab = NULL;
+}
+
+static void
+_color_table_update(Evas_Object *obj)
+{
+   Widget_Data *wd = elm_widget_data_get(obj);
+   Elm_Color_Item *item;
+   unsigned int i = 0, j = 0;
+   Evas_Coord minw = -1, minh = -1;
+   Eina_List *l;
+   Elm_Color_RGBA *color;
+
+   if (!wd->tab)
+     {
+        wd->tab = elm_table_add(obj);
+        elm_table_homogeneous_set(wd->tab, EINA_TRUE);
+        evas_object_size_hint_weight_set(wd->tab, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+        evas_object_size_hint_align_set(wd->tab, EVAS_HINT_FILL, EVAS_HINT_FILL);
+        edje_object_part_swallow(wd->base, "palette", wd->tab);
+     }
+   EINA_LIST_FOREACH(wd->color_list, l, color)
+      {
+         item = ELM_NEW(Elm_Color_Item);
+         if (item)
+           {
+              VIEW(item) = elm_layout_add(obj);
+              elm_layout_theme_set(VIEW(item), "colorpalette", "item", elm_widget_style_get(obj));
+              elm_coords_finger_size_adjust(1, &minw, 1, &minh);
+              evas_object_size_hint_min_set(VIEW(item), minw, minh);
+              evas_object_size_hint_max_set(VIEW(item), -1, -1);
+              evas_object_size_hint_weight_set(VIEW(item), EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+              evas_object_size_hint_align_set(VIEW(item), EVAS_HINT_FILL, EVAS_HINT_FILL);
+              evas_object_show(VIEW(item));
+              elm_table_pack(wd->tab, VIEW(item), (int) j, (int) i, 1, 1);
+              WIDGET(item) = obj;
+              evas_object_color_set(VIEW(item), color->r, color->g, color->b, color->a);
+              item->color = color;
+              evas_object_event_callback_add(VIEW(item), EVAS_CALLBACK_MOUSE_DOWN, _item_highlight, item);
+              evas_object_event_callback_add(VIEW(item), EVAS_CALLBACK_MOUSE_UP, _item_unhighlight, item);
+              evas_object_show(VIEW(item));
+              wd->items = eina_list_append(wd->items, item);
+           }
+         if (++j >= wd->col)
+           {
+              j = 0;
+              i++;
+           }
+      }
+}
+
+static void
+_colors_get(Evas_Object *obj)
+{
+   const char *color_code;
+   const char *rowstr, *colstr;
+   unsigned int row = DEFAULT_ROW_COUNT;
+   unsigned int col = DEFAULT_COL_COUNT;
+   Eina_List *colors;
+   const Eina_List *l;
+   Widget_Data *wd = elm_widget_data_get(obj);
+   rowstr = edje_object_data_get(wd->base, "row");
+   if (rowstr) row = atoi(rowstr);
+   colstr = edje_object_data_get(wd->base, "col");
+   if (colstr) col = atoi(colstr);
+   if (wd->row != row || wd->col !=col) _color_table_delete(obj);
+   wd->row = row;
+   wd->col = col;
+   colors = elm_widget_stringlist_get(edje_object_data_get(wd->base, "colors"));
+   EINA_LIST_FOREACH(colors, l, color_code)
+     {
+        unsigned char r, g, b, a;
+        Elm_Color_RGBA *color;
+        color = ELM_NEW(Elm_Color_RGBA);
+        _color_parse(color_code, &r, &g, &b, &a);
+        color->r = (unsigned int) r;
+        color->g = (unsigned int) g;
+        color->b = (unsigned int) b;
+        color->a = (unsigned int) a;
+        wd->color_list = eina_list_append(wd->color_list, color);
+     }
+   elm_widget_stringlist_free(colors);
+}
+
+static int
+_hex_string_get(char ch)
+{
+   if ((ch >= '0') && (ch <= '9')) return (ch - '0');
+   else if ((ch >= 'A') && (ch <= 'F')) return (ch - 'A' + 10);
+   else if ((ch >= 'a') && (ch <= 'f')) return (ch - 'a' + 10);
+   return 0;
+}
+
+static void
+_color_parse(const char *str, unsigned char *r, unsigned char *g, unsigned char *b, unsigned char *a)
+{
+   int slen;
+
+   slen = strlen(str);
+   *r = *g = *b = *a = 0;
+
+   if (slen == 9) /* #RRGGBBAA */
+     {
+        *r = (_hex_string_get(str[1]) << 4) | (_hex_string_get(str[2]));
+        *g = (_hex_string_get(str[3]) << 4) | (_hex_string_get(str[4]));
+        *b = (_hex_string_get(str[5]) << 4) | (_hex_string_get(str[6]));
+        *a = (_hex_string_get(str[7]) << 4) | (_hex_string_get(str[8]));
+     }
+   *r = (*r * 0xff) / 255;
+   *g = (*g * 0xff) / 255;
+   *b = (*b * 0xff) / 255;
+   *a = (*a * 0xff) / 255;
+}
+
+EAPI Evas_Object *
+elm_colorpalette_add(Evas_Object *parent)
+{
+   Evas_Object *obj = NULL;
+   Widget_Data *wd = NULL;
+   Evas *e;
+
+   ELM_WIDGET_STANDARD_SETUP(wd, Widget_Data, parent, e, obj, NULL);
+
+   ELM_SET_WIDTYPE(widtype, "colorpalette");
+   elm_widget_type_set(obj, "colorpalette");
+   elm_widget_sub_object_add(parent, obj);
+   elm_widget_data_set(obj, wd);
+   elm_widget_del_hook_set(obj, _del_hook);
+   elm_widget_theme_hook_set(obj, _theme_hook);
+   evas_object_smart_callbacks_descriptions_set(obj, _signals);
+
+   wd->base = edje_object_add(e);
+   _elm_theme_object_set(obj, wd->base, "colorpalette", "base", "default");
+   elm_widget_resize_object_set(obj, wd->base);
+
+   _colors_get(obj);
+   _color_table_update(obj);
+   evas_object_event_callback_add(wd->base, EVAS_CALLBACK_RESIZE, _resize_cb, obj);
+   _sizing_eval(obj);
+   return obj;
+}
+
+EAPI void
+elm_colorpalette_color_set(Evas_Object *obj, Eina_List *color_list)
+{
+   ELM_CHECK_WIDTYPE(obj, widtype);
+   Widget_Data *wd = elm_widget_data_get(obj);
+   if (!wd) return;
+
+   if (wd->color_list)
+     {
+        Elm_Color_RGBA *color;
+        EINA_LIST_FREE(wd->color_list, color) free(color);
+        wd->color_list = NULL;
+     }
+   wd->color_list = color_list;
+   wd->color_set = EINA_TRUE;
+   _color_table_update(obj);
+   _sizing_eval(obj);
+}
+
+EAPI void
+elm_colorpalette_row_column_set(Evas_Object *obj, unsigned int row, unsigned int col)
+{
+   ELM_CHECK_WIDTYPE(obj, widtype);
+   Widget_Data *wd = elm_widget_data_get(obj);
+   if (!wd) return;
+
+   if(((row-1) * col) > MAX_NUM_COLORS) return;
+   wd->row = row;
+   wd->col = col;
+   if (wd->row != row || wd->col != col) _color_table_delete(obj);
+   _color_table_update(obj);
+   _sizing_eval(obj);
+}
Index: src/lib/elm_colorpalette.h
===================================================================
--- src/lib/elm_colorpalette.h	(revision 0)
+++ src/lib/elm_colorpalette.h	(revision 0)
@@ -0,0 +1,76 @@
+/**
+ * @defgroup Colorpalette Colorpalette
+ * @ingroup Elementary
+ *
+ * @image html img/widget/colorpalette/preview-00.png
+ * @image latex img/widget/colorpalette/preview-00.eps width=\textwidth
+ *
+ * A Colorpalette is a color selection widget.
+ * It provides by default, theme specific set of Predefined colors and also
+ * allows to set a series of colors.
+ * The colors can be picked by user from the color set by clicking on any color
+ * rectangle.
+ *
+ * Smart callbacks one can listen to:
+ * - "color,selected" - When user clicks on color rectangle. The event_info parameter of the callback
+ *   will be the selected color structure of type Elm_Color_RGBA.
+ *
+ * Available styles for it:
+ * - @c "default"
+ *
+ * default row count, column count and the set of colors[#RRGGBBAA] are read from theme
+ * which can be modified by application by using the below APIs.
+ * @li elm_colorpalette_color_set
+ * @li elm_colorpalette_row_column_set
+ *
+ * Follow through a complete example given below:
+ * @li @ref tutorial_colorpalette
+ *
+ */
+/**
+ * @typedef Elm_Color_RGBA
+ *
+ * This structure represents RGB color values.
+ */
+typedef struct _Elm_Color_RGBA Elm_Color_RGBA;
+/**
+ * @struct _Elm_Color_RGBA
+ *
+ * This structure represents RGBA color values.
+ */
+struct _Elm_Color_RGBA
+{
+   unsigned int r; /**< R color value */
+   unsigned int g; /**< G color value */
+   unsigned int b; /**< B color value */
+   unsigned int a; /**< alpha color value */
+};
+
+/**
+* Add a new colorpalette to the parent.
+*
+* @param parent The parent object
+* @return The new object or NULL if it cannot be created
+*
+* @ingroup Colorpalette
+*/
+EAPI Evas_Object *elm_colorpalette_add(Evas_Object *parent);
+/**
+* Set colors to the colorpalette.
+*
+* @param obj       Colorpalette object
+* @param color_list Eina list of colors
+*
+* @ingroup Colorpalette
+*/
+EAPI void         elm_colorpalette_color_set(Evas_Object *obj, Eina_List *color_list);
+/**
+* Set row/column value to the colorpalette.
+*
+* @param obj   Colorpalette object
+* @param row   row value for the colorpalette
+* @param col   column value for the colorpalette
+*
+* @ingroup Colorpalette
+*/
+EAPI void         elm_colorpalette_row_column_set(Evas_Object *obj, unsigned int row, unsigned int col);
Index: src/lib/Elementary.h.in
===================================================================
--- src/lib/Elementary.h.in	(revision 68000)
+++ src/lib/Elementary.h.in	(working copy)
@@ -185,6 +185,7 @@ EAPI extern Elm_Version *elm_version;
 #include <elm_check.h>
 #include <elm_clock.h>
 #include <elm_cnp.h>
+#include <elm_colorpalette.h>
 #include <elm_colorselector.h>
 #include <elm_config.h>
 #include <elm_conform.h>
Index: src/bin/test.c
===================================================================
--- src/bin/test.c	(revision 68000)
+++ src/bin/test.c	(working copy)
@@ -141,6 +141,7 @@ void test_focus2(void *data, Evas_Object *obj, voi
 void test_focus3(void *data, Evas_Object *obj, void *event_info);
 void test_flipselector(void *data, Evas_Object *obj, void *event_info);
 void test_diskselector(void *data, Evas_Object *obj, void *event_info);
+void test_colorpalette(void *data, Evas_Object *obj, void *event_info);
 void test_colorselector(void *data, Evas_Object *obj, void *event_info);
 void test_ctxpopup(void *data, Evas_Object *obj, void *event_info);
 void test_bubble(void *data, Evas_Object *obj, void *event_info);
@@ -450,6 +451,7 @@ add_tests:
    ADD_TEST(NULL, "Selectors", "Actionslider", test_actionslider);
    ADD_TEST(NULL, "Selectors", "Menu", test_menu);
    ADD_TEST(NULL, "Selectors", "Disk Selector", test_diskselector);
+   ADD_TEST(NULL, "Selectors", "Color Palette", test_colorpalette);
    ADD_TEST(NULL, "Selectors", "Color Selector", test_colorselector);
    ADD_TEST(NULL, "Selectors", "Segment Control", test_segment_control);
    ADD_TEST(NULL, "Selectors", "Hoversel", test_hoversel);
Index: src/bin/Makefile.am
===================================================================
--- src/bin/Makefile.am	(revision 68000)
+++ src/bin/Makefile.am	(working copy)
@@ -44,6 +44,7 @@ test_calendar.c \
 test_check.c \
 test_clock.c \
 test_cnp.c \
+test_colorpalette.c \
 test_colorselector.c \
 test_conform.c \
 test_ctxpopup.c \
Index: src/bin/test_colorpalette.c
===================================================================
--- src/bin/test_colorpalette.c	(revision 0)
+++ src/bin/test_colorpalette.c	(revision 0)
@@ -0,0 +1,146 @@
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+#ifndef ELM_LIB_QUICKLAUNCH
+
+static void
+_colorpalette_clicked_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info)
+{
+   Elm_Color_RGBA *item = (Elm_Color_RGBA*) event_info;
+   evas_object_color_set((Evas_Object *) data, item->r, item->g, item->b , item->a);
+}
+
+void
+test_colorpalette(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   Evas_Object *win, *bg, *bx, *cp, *fr, *ly, *re;
+   char buf[PATH_MAX];
+   Elm_Color_RGBA *color;
+   Eina_List *color_list = NULL;
+
+   win = elm_win_add(NULL, "colorpalette", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Color Palette");
+   elm_win_autodel_set(win, EINA_TRUE);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_color_set(bg, 255, 255, 255, 255);
+   evas_object_show(bg);
+
+   bx = elm_box_add(win);
+   evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_win_resize_object_add(win, bx);
+   evas_object_show(bx);
+
+   fr = elm_frame_add(win);
+   evas_object_size_hint_weight_set(fr, 1.0, 0.5);
+   evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_object_text_set(fr, "Color View");
+   elm_box_pack_end(bx, fr);
+   evas_object_show(fr);
+
+   ly = elm_layout_add(win);
+   snprintf(buf, sizeof(buf), "%s/objects/colorpreview.edj", elm_app_data_dir_get());
+   elm_layout_file_set(ly, buf, "main");
+   evas_object_size_hint_align_set(ly, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_object_content_set(fr, ly);
+   evas_object_show(ly);
+
+   re = evas_object_rectangle_add(evas_object_evas_get(win));
+   evas_object_show(re);
+   elm_object_part_content_set(ly, "ColorPreview", re);
+
+   fr = elm_frame_add(win);
+   evas_object_size_hint_weight_set(fr, 1.0, 0);
+   evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, 0);
+   elm_object_text_set(fr, "Color Palette");
+   elm_box_pack_end(bx, fr);
+   evas_object_show(fr);
+
+   cp = elm_colorpalette_add(win);
+   color = (Elm_Color_RGBA *)calloc(1, sizeof(Elm_Color_RGBA));
+   color->r = 255;
+   color->g = 90;
+   color->b = 18;
+   color->a = 255;
+   color_list = eina_list_append(color_list, color);
+   evas_object_color_set(re, color->r, color->g, color->b, color->a);
+
+   color = (Elm_Color_RGBA *)calloc(1, sizeof(Elm_Color_RGBA));
+   color->r = 255;
+   color->g = 213;
+   color->b = 0;
+   color->a = 255;
+   color_list = eina_list_append(color_list, color);
+
+   color = (Elm_Color_RGBA *)calloc(1, sizeof(Elm_Color_RGBA));
+   color->r = 146;
+   color->g = 255;
+   color->b = 11;
+   color->a = 255;
+   color_list = eina_list_append(color_list, color);
+
+   color = (Elm_Color_RGBA *)calloc(1, sizeof(Elm_Color_RGBA));
+   color->r = 9;
+   color->g = 186;
+   color->b = 10;
+   color->a = 255;
+   color_list = eina_list_append(color_list, color);
+
+   color = (Elm_Color_RGBA *)calloc(1, sizeof(Elm_Color_RGBA));
+   color->r = 86;
+   color->g = 201;
+   color->b = 242;
+   color->a = 255;
+   color_list = eina_list_append(color_list, color);
+
+   color = (Elm_Color_RGBA *)calloc(1, sizeof(Elm_Color_RGBA));
+   color->r = 18;
+   color->g = 83;
+   color->b = 128;
+   color->a = 255;
+   color_list = eina_list_append(color_list, color);
+
+   color = (Elm_Color_RGBA *)calloc(1, sizeof(Elm_Color_RGBA));
+   color->r = 140;
+   color->g = 53;
+   color->b = 238;
+   color->a = 255;
+   color_list = eina_list_append(color_list, color);
+
+   color = (Elm_Color_RGBA *)calloc(1, sizeof(Elm_Color_RGBA));
+   color->r = 255;
+   color->g = 145;
+   color->b = 145;
+   color->a = 255;
+   color_list = eina_list_append(color_list, color);
+
+   color = (Elm_Color_RGBA *)calloc(1, sizeof(Elm_Color_RGBA));
+   color->r = 255;
+   color->g = 59;
+   color->b = 119;
+   color->a = 255;
+   color_list = eina_list_append(color_list, color);
+
+   color = (Elm_Color_RGBA *)calloc(1, sizeof(Elm_Color_RGBA));
+   color->r = 133;
+   color->g = 100;
+   color->b = 69;
+   color->a = 255;
+   color_list = eina_list_append(color_list, color);
+
+   elm_colorpalette_color_set(cp, color_list);
+   evas_object_size_hint_weight_set(cp, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(cp, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_object_content_set(fr, cp);
+   evas_object_show(cp);
+   evas_object_smart_callback_add(cp, "color,selected", _colorpalette_clicked_cb, re);
+
+   evas_object_resize(win, 300, 300);
+   evas_object_show(win);
+
+}
+#endif
Index: src/edje_externals/elm_colorpalette.c
===================================================================
--- src/edje_externals/elm_colorpalette.c	(revision 0)
+++ src/edje_externals/elm_colorpalette.c	(revision 0)
@@ -0,0 +1,68 @@
+#include "private.h"
+
+typedef struct _Elm_Params_Colorpalette
+{
+   Elm_Params base;
+} Elm_Params_Colorpalette;
+
+static void
+external_colorpalette_state_set(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const void *from_params, const void *to_params, float pos __UNUSED__)
+{
+   const Elm_Params_Colorpalette *p;
+
+   if (to_params) p = to_params;
+   else if (from_params) p = from_params;
+   else return;
+}
+
+static Eina_Bool
+external_colorpalette_param_set(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const Edje_External_Param *param)
+{
+   ERR("unknown parameter '%s' of type '%s'",
+       param->name, edje_external_param_type_str(param->type));
+
+   return EINA_FALSE;
+}
+
+static Eina_Bool
+external_colorpalette_param_get(void *data __UNUSED__, const Evas_Object *obj __UNUSED__, Edje_External_Param *param)
+{
+   ERR("unknown parameter '%s' of type '%s'",
+       param->name, edje_external_param_type_str(param->type));
+
+   return EINA_FALSE;
+}
+
+static void *
+external_colorpalette_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const Eina_List *params __UNUSED__)
+{
+   Elm_Params_Colorpalette *mem;
+
+   mem = calloc(1, sizeof(Elm_Params_Colorpalette));
+   if (!mem)
+     return NULL;
+
+   return mem;
+}
+
+static Evas_Object *external_colorpalette_content_get(void *data __UNUSED__,
+          const Evas_Object *obj __UNUSED__, const char *content __UNUSED__)
+{
+   ERR("No content.");
+   return NULL;
+}
+
+static void
+external_colorpalette_params_free(void *params)
+{
+   Elm_Params_Colorpalette *mem = params;
+   free(mem);
+}
+
+static Edje_External_Param_Info external_colorpalette_params[] = {
+   DEFINE_EXTERNAL_COMMON_PARAMS,
+   EDJE_EXTERNAL_PARAM_INFO_SENTINEL
+};
+
+DEFINE_EXTERNAL_ICON_ADD(colorpalette, "colorpalette");
+DEFINE_EXTERNAL_TYPE_SIMPLE(colorpalette, "Colorpalette");
Index: src/edje_externals/Makefile.am
===================================================================
--- src/edje_externals/Makefile.am	(revision 68000)
+++ src/edje_externals/Makefile.am	(working copy)
@@ -37,6 +37,7 @@ elm_button.c \
 elm_calendar.c \
 elm_check.c \
 elm_clock.c \
+elm_colorpalette.c \
 elm_entry.c \
 elm_fileselector.c \
 elm_fileselector_button.c \
Index: src/examples/colorpalette_example_01.c
===================================================================
--- src/examples/colorpalette_example_01.c	(revision 0)
+++ src/examples/colorpalette_example_01.c	(revision 0)
@@ -0,0 +1,44 @@
+//Compile with:
+//gcc -g `pkg-config --cflags --libs elementary` colorpalette_example_01.c -o colorpalette_example_01
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+
+static void _change_color(void *data, Evas_Object *obj, void *event_info);
+
+EAPI_MAIN int
+elm_main(int argc, char **argv)
+{
+   Evas_Object *win, *bg, *cp;
+
+   win = elm_win_add(NULL, "color palette", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Color Palette");
+   elm_win_autodel_set(win, EINA_TRUE);
+   elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_show(bg);
+
+   cp = elm_colorpalette_add(win);
+   evas_object_size_hint_weight_set(cp, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_win_resize_object_add(win, cp);
+   evas_object_show(cp);
+   evas_object_smart_callback_add(cp, "color,selected", _change_color, NULL);
+
+   evas_object_show(win);
+
+   elm_run();
+
+   return 0;
+}
+ELM_MAIN()
+
+static void
+_change_color(void *data, Evas_Object *obj, void *event_info)
+{
+   Elm_Color_RGBA *item = (Elm_Color_RGBA*) event_info;
+   printf("\ncolor selected RGBA = %d-%d-%d-%d\n", item->r, item->g, item->b, item->a);
+}
Index: src/examples/Makefile.am
===================================================================
--- src/examples/Makefile.am	(revision 68000)
+++ src/examples/Makefile.am	(working copy)
@@ -39,6 +39,7 @@ SRCS = \
 	button_example_01.c \
 	check_example_01.c \
 	colorselector_example_01.c \
+	colorpalette_example_01.c \
 	frame_example_01.c \
 	transit_example_01.c \
 	transit_example_02.c \
@@ -149,6 +150,7 @@ examples_PROGRAMS += \
 	button_example_01 \
 	check_example_01 \
 	colorselector_example_01 \
+	colorpalette_example_01 \
 	frame_example_01 \
 	transit_example_01 \
 	transit_example_02 \
@@ -244,6 +246,7 @@ SCREENSHOTS = \
 	button_example_01:button_01.png:0.0 \
 	check_example_01:check_example_01.png:0.0 \
 	colorselector_example_01:colorselector_example_01.png:0.0 \
+	colorpalette_example_01:colorpalette_example_01.png:0.0 \
 	animator_example_01:animator_example_01.png:0.2 \
 	animator_example_01:animator_example_02.png:0.5 \
 	animator_example_01:animator_example_03.png:0.9 \
Index: doc/widgets/widget_preview_colorpalette.c
===================================================================
--- doc/widgets/widget_preview_colorpalette.c	(revision 0)
+++ doc/widgets/widget_preview_colorpalette.c	(revision 0)
@@ -0,0 +1,8 @@
+#include "widget_preview_tmpl_head.c"
+
+Evas_Object *o = elm_colorpalette_add(win);
+evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+elm_win_resize_object_add(win, o);
+evas_object_show(o);
+
+#include "widget_preview_tmpl_foot.c"
Index: doc/widgets/Makefile.am
===================================================================
--- doc/widgets/Makefile.am	(revision 68000)
+++ doc/widgets/Makefile.am	(working copy)
@@ -36,6 +36,7 @@ widget_preview_fileselector_button1 \
 widget_preview_fileselector_button2 \
 widget_preview_fileselector_button3 \
 widget_preview_colorselector \
+widget_preview_colorpalette \
 widget_preview_layout \
 widget_preview_list \
 widget_preview_segment_control \
@@ -116,6 +117,7 @@ EXTRA_DIST = \
 	widget_preview_spinner.c \
 	widget_preview_clock.c \
 	widget_preview_colorselector.c \
+	widget_preview_colorpalette.c \
 	widget_preview_conformant.c \
 	widget_preview_slider.c \
 	widget_preview_panes.c \
Index: doc/examples.dox
===================================================================
--- doc/examples.dox	(revision 68000)
+++ doc/examples.dox	(working copy)
@@ -5445,6 +5445,36 @@
  */
 
 /**
+ * @page tutorial_colorpalette Color Palette example
+ * @dontinclude colorpalette_example_01.c
+ *
+ * This example shows how to change the color using a color
+ * palette. We aren't going to explain a lot of the code since it's the
+ * usual setup code:
+ * @until evas_object_show(bg)
+ *
+ * Now that we have a window with background we can create
+ * our color_palette.
+ * @until evas_object_show(cp)
+ *
+ * Next we ask to be notified whenever the color changes:
+ * @until color,selected
+ *
+ * We add some more code to the usual setup code:
+ * @until ELM_MAIN()
+ *
+ * And now get to the callback that prints the selected color:
+ * @until }
+ *
+ * This example will look like this:
+ *
+ * @image html screenshots/colorpalette_example_01.png
+ * @image latex screenshots/colorpalette_example_01.eps width=\textwidth
+ *
+ * @example colorpalette_example_01.c
+ */
+ 
+/**
  * @page slideshow_example Slideshow widget example
  *
  * This application is aimed to exemplify the slideshow widget. It
Index: doc/Makefile.am
===================================================================
--- doc/Makefile.am	(revision 68000)
+++ doc/Makefile.am	(working copy)
@@ -25,6 +25,7 @@ WGT_PREVIEW = \
 	bubble:preview-01.png:widget_preview_bubble2:160:50 \
 	bubble:preview-02.png:widget_preview_bubble3:160:50 \
 	colorselector:preview-00.png:widget_preview_colorselector:160:200 \
+	colorpalette:preview-00.png:widget_preview_colorpalette:300:100 \
 	layout:preview-00.png:widget_preview_layout:200:160 \
 	conformant:preview-00.png:widget_preview_conformant:200:400 \
 	list:preview-00.png:widget_preview_list:200:200 \
Index: doc/index.doxy
===================================================================
--- doc/index.doxy	(revision 68000)
+++ doc/index.doxy	(working copy)
@@ -79,6 +79,10 @@
  *
  * @image html img/widget/colorselector/preview-00.png
  * @image latex img/widget/colorselector/preview-00.eps
+ * @li @ref Colorpalette
+ *
+ * @image html img/widget/colorpalette/preview-00.png
+ * @image latex img/widget/colorpalette/preview-00.eps
  * @li @ref Ctxpopup
  *
  * @image html img/widget/ctxpopup/preview-00.png
Index: data/themes/widgets/colorpalette.edc
===================================================================
--- data/themes/widgets/colorpalette.edc	(revision 0)
+++ data/themes/widgets/colorpalette.edc	(revision 0)
@@ -0,0 +1,124 @@
+///////////////////////////////////////////////////////////////////////////////
+group {
+   name: "elm/colorpalette/base/default";
+   data.item: "row" "2";
+   data.item: "col" "5";
+   data.item: "colors" "#375A12FF #FFD500FF #92FF0BFF #09BA0AFF #56C9F2FF #125380FF #8C35EEFF #FF9191FF #FF3B77FF #856445FF";
+   parts {
+      part {
+         name: "bg_rect";
+         type: RECT;
+         scale: 1;
+         mouse_events: 1;
+         description { state: "default" 0.0;
+            visible: 0;
+            min: 240 100;
+         }
+      }
+      part {
+         name: "padding_rect_u";
+         type: RECT;
+         scale: 1;
+         description { state: "default" 0.0;
+            visible: 0;
+            min: 0 5;
+            fixed: 0 1;
+            rel2.relative: 1.0 0.0;
+            align: 0.5 0.0;
+         }
+      }
+      part {
+         name: "padding_rect_d";
+         type: RECT;
+         scale: 1;
+         description { state: "default" 0.0;
+            visible: 0;
+            min: 0 5;
+            fixed: 0 1;
+            rel1.relative: 0.0 1.0;
+            align: 0.5 1.0;
+         }
+      }
+      part {
+         name: "bg";
+         type: RECT;
+         scale: 1;
+         mouse_events: 1;
+         description { state: "default" 0.0;
+            min: 240 0;
+            max: 240 9999;
+            fixed: 1 0;
+            visible:0;
+            rel1 {
+               relative: 0.0 1.0;
+               to_x: "bg_rect";
+               to_y: "padding_rect_u";
+            }
+            rel2 {
+               relative: 1.0 0.0;
+               to_x: "bg_rect";
+               to_y: "padding_rect_d";
+            }
+         }
+      }
+      part {
+         name: "palette";
+         type: SWALLOW;
+         description { state: "default" 0.0;
+            rel1.to: "bg";
+            rel2.to: "bg";
+         }
+      }
+   }
+}
+
+group {
+   name: "elm/colorpalette/item/default";
+   parts {
+      part {
+         name: "color_rect";
+         type: RECT;
+         mouse_events: 1;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 40 40;
+         }
+      }
+      part {
+         name: "focus_color";
+         mouse_events:1;
+         scale: 1;
+         type: RECT;
+         description {
+            state: "default" 0.0;
+            visible: 0;
+            min: 38 38;
+            rel1.to: "color_rect";
+            rel2.to: "color_rect";
+            color: 0 0 0 80;
+         }
+         description {
+            state: "focused" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+         }
+      }
+   }
+   programs {
+      program {
+         name: "item_focus";
+         source: "elm";
+         signal: "elm,state,selected";
+         action: STATE_SET "focused" 0.0;
+         target: "focus_color";
+      }
+      program {
+         name: "item_unfocus";
+         source: "elm";
+         signal: "elm,state,unselected";
+         action: STATE_SET "default" 0.0;
+         target: "focus_color";
+      }
+   }
+}
+
Index: data/themes/Makefile.am
===================================================================
--- data/themes/Makefile.am	(revision 68000)
+++ data/themes/Makefile.am	(working copy)
@@ -42,6 +42,7 @@ widgets/clock.edc \
 widgets/icon.edc \
 widgets/photocam.edc \
 widgets/toggle.edc \
+widgets/colorpalette.edc \
 widgets/colorselector.edc \
 widgets/index.edc \
 widgets/photo.edc \
Index: data/themes/default.edc
===================================================================
--- data/themes/default.edc	(revision 68000)
+++ data/themes/default.edc	(working copy)
@@ -365,6 +365,7 @@ collections {
 #include "widgets/video.edc"
 #include "widgets/naviframe.edc"
 #include "widgets/multibuttonentry.edc"
+#include "widgets/colorpalette.edc"
 #include "ews.edc"
 #include "widgets/pointer.edc"
 }
