|
|
|
#include <Elementary.h>
|
|
|
|
|
|
|
|
#include "private.h"
|
|
|
|
#include "config.h"
|
|
|
|
#include "termio.h"
|
|
|
|
#include "options.h"
|
|
|
|
#include "options_colors.h"
|
|
|
|
|
|
|
|
|
|
|
|
static const char mapping[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11 };
|
|
|
|
static const char *mapping_names[] =
|
|
|
|
{
|
|
|
|
gettext_noop("Default"),
|
|
|
|
gettext_noop("Black"),
|
|
|
|
gettext_noop("Red"),
|
|
|
|
gettext_noop("Green"),
|
|
|
|
gettext_noop("Yellow"),
|
|
|
|
gettext_noop("Blue"),
|
|
|
|
gettext_noop("Magenta"),
|
|
|
|
gettext_noop("Cyan"),
|
|
|
|
gettext_noop("White"),
|
|
|
|
gettext_noop("Inverse"),
|
|
|
|
gettext_noop("Inverse Base")
|
|
|
|
};
|
|
|
|
|
|
|
|
static Elm_Object_Item *colitem[4][11] = { { NULL } };
|
|
|
|
static Evas_Object *colorsel = NULL;
|
|
|
|
static Elm_Object_Item *curitem = NULL;
|
|
|
|
static Evas_Object *colpal[4] = { NULL };
|
|
|
|
static Evas_Object *label = NULL, *reset = NULL;
|
|
|
|
|
|
|
|
static void
|
|
|
|
_cb_op_use_custom_chg(void *data EINA_UNUSED, Evas_Object *obj, void *event EINA_UNUSED)
|
|
|
|
{
|
|
|
|
Evas_Object *term = data;
|
|
|
|
Config *config = termio_config_get(term);
|
|
|
|
Eina_Bool state = EINA_FALSE;
|
|
|
|
int i;
|
|
|
|
|
|
|
|
state = elm_check_state_get(obj);
|
|
|
|
elm_object_disabled_set(colorsel, !state);
|
|
|
|
for (i = 0; i < 4; i++) elm_object_disabled_set(colpal[i], !state);
|
|
|
|
elm_object_disabled_set(label, !state);
|
|
|
|
config->colors_use = state;
|
|
|
|
termio_config_update(term);
|
|
|
|
config_save(config, NULL);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_cb_op_color_item_sel(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event)
|
|
|
|
{
|
|
|
|
Elm_Object_Item *it = event;
|
|
|
|
int r = 0, g = 0, b = 0, a = 0;
|
|
|
|
int i, j;
|
|
|
|
|
|
|
|
curitem = it;
|
|
|
|
elm_colorselector_palette_item_color_get(it, &r, &g, &b, &a);
|
|
|
|
elm_colorselector_color_set(colorsel, r, g, b, a);
|
|
|
|
for (j = 0; j < 4; j++)
|
|
|
|
{
|
|
|
|
for (i = 0; i < 11; i++)
|
|
|
|
{
|
|
|
|
if (colitem[j][i] == it)
|
|
|
|
elm_object_text_set(label,
|
|
|
|
#if HAVE_GETTEXT && ENABLE_NLS
|
|
|
|
gettext(mapping_names[i])
|
|
|
|
#else
|
|
|
|
mapping_names[i]
|
|
|
|
#endif
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_cb_op_color_chg(void *data EINA_UNUSED, Evas_Object *obj, void *event EINA_UNUSED)
|
|
|
|
{
|
|
|
|
Evas_Object *term = data;
|
|
|
|
Config *config = termio_config_get(term);
|
|
|
|
int r = 0, g = 0, b = 0, a = 0, rr = 0, gg = 0, bb = 0, aa = 0;
|
|
|
|
int i, j;
|
|
|
|
|
|
|
|
elm_colorselector_palette_item_color_get(curitem, &rr, &gg, &bb, &aa);
|
|
|
|
elm_colorselector_color_get(obj, &r, &g, &b, &a);
|
|
|
|
if ((r != rr) || (g != gg) || (b != bb) || (a != aa))
|
|
|
|
{
|
|
|
|
if (curitem)
|
|
|
|
elm_colorselector_palette_item_color_set(curitem, r, g, b, a);
|
|
|
|
elm_object_disabled_set(reset, EINA_FALSE);
|
|
|
|
for (j = 0; j < 4; j++)
|
|
|
|
{
|
|
|
|
for (i = 0; i < 11; i++)
|
|
|
|
{
|
|
|
|
if (colitem[j][i] == curitem)
|
|
|
|
{
|
|
|
|
config->colors[(j * 12) + mapping[i]].r = r;
|
|
|
|
config->colors[(j * 12) + mapping[i]].g = g;
|
|
|
|
config->colors[(j * 12) + mapping[i]].b = b;
|
|
|
|
config->colors[(j * 12) + mapping[i]].a = a;
|
|
|
|
termio_config_update(term);
|
|
|
|
config_save(config, NULL);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_cb_op_reset(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED)
|
|
|
|
{
|
|
|
|
Evas_Object *term = data;
|
|
|
|
Config *config = termio_config_get(term);
|
|
|
|
int r = 0, g = 0, b = 0, a = 0;
|
|
|
|
int i, j;
|
|
|
|
|
|
|
|
for (j = 0; j < 4; j++)
|
|
|
|
{
|
|
|
|
for (i = 0; i < 12; i++)
|
|
|
|
{
|
|
|
|
unsigned char rr = 0, gg = 0, bb = 0, aa = 0;
|
|
|
|
|
|
|
|
colors_standard_get(j, i, &rr, &gg, &bb, &aa);
|
|
|
|
config->colors[(j * 12) + i].r = rr;
|
|
|
|
config->colors[(j * 12) + i].g = gg;
|
|
|
|
config->colors[(j * 12) + i].b = bb;
|
|
|
|
config->colors[(j * 12) + i].a = aa;
|
|
|
|
}
|
|
|
|
for (i = 0; i < 11; i++)
|
|
|
|
{
|
|
|
|
elm_colorselector_palette_item_color_set
|
|
|
|
(colitem[j][i],
|
|
|
|
config->colors[(j * 12) + mapping[i]].r,
|
|
|
|
config->colors[(j * 12) + mapping[i]].g,
|
|
|
|
config->colors[(j * 12) + mapping[i]].b,
|
|
|
|
config->colors[(j * 12) + mapping[i]].a);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
elm_object_disabled_set(reset, EINA_TRUE);
|
|
|
|
elm_colorselector_palette_item_color_get(curitem, &r, &g, &b, &a);
|
|
|
|
elm_colorselector_color_set(colorsel, r, g, b, a);
|
|
|
|
termio_config_update(term);
|
|
|
|
config_save(config, NULL);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_cb_op_scroller_resize(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED)
|
|
|
|
{
|
|
|
|
// make color palettes wrap back. :) works with elm git.
|
|
|
|
int i;
|
|
|
|
|
|
|
|
for (i = 0; i < 4; i++) evas_object_resize(colpal[i], 1, 1);
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
options_colors(Evas_Object *opbox, Evas_Object *term)
|
|
|
|
{
|
|
|
|
Config *config = termio_config_get(term);
|
|
|
|
Evas_Object *o, *fr, *bx, *sc, *bx2, *bx3, *bx4;
|
|
|
|
int i, j;
|
|
|
|
int r = 0, g = 0, b = 0, a = 0;
|
|
|
|
|
|
|
|
fr = o = elm_frame_add(opbox);
|
|
|
|
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
|
|
|
evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
|
|
|
elm_object_text_set(o, _("Colors"));
|
|
|
|
elm_box_pack_end(opbox, o);
|
|
|
|
evas_object_show(o);
|
|
|
|
|
|
|
|
bx = o = elm_box_add(opbox);
|
|
|
|
elm_box_horizontal_set(o, EINA_TRUE);
|
|
|
|
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
|
|
|
|
evas_object_size_hint_align_set(o, EVAS_HINT_FILL, 0.0);
|
|
|
|
elm_object_content_set(fr, o);
|
|
|
|
evas_object_show(o);
|
|
|
|
|
|
|
|
sc = o = elm_scroller_add(opbox);
|
|
|
|
evas_object_event_callback_add(o, EVAS_CALLBACK_RESIZE,
|
|
|
|
_cb_op_scroller_resize, NULL);
|
|
|
|
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
|
|
|
evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
|
|
|
elm_box_pack_end(bx, o);
|
|
|
|
evas_object_show(o);
|
|
|
|
|
|
|
|
bx3 = o = elm_box_add(opbox);
|
|
|
|
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
|
|
|
|
evas_object_size_hint_align_set(o, EVAS_HINT_FILL, 0.0);
|
|
|
|
elm_object_content_set(sc, o);
|
|
|
|
evas_object_show(o);
|
|
|
|
|
|
|
|
for (j = 0; j < 4; j++)
|
|
|
|
{
|
|
|
|
o = elm_label_add(opbox);
|
|
|
|
if (j == 0) elm_object_text_set(o, _("Normal"));
|
|
|
|
else if (j == 1) elm_object_text_set(o, _("Bright"));
|
|
|
|
else if (j == 2) elm_object_text_set(o, _("Normal 2"));
|
|
|
|
else if (j == 3) elm_object_text_set(o, _("Bright 2"));
|
|
|
|
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
|
|
|
|
evas_object_size_hint_align_set(o, EVAS_HINT_FILL, 0.5);
|
|
|
|
elm_box_pack_end(bx3, o);
|
|
|
|
evas_object_show(o);
|
|
|
|
|
|
|
|
colpal[j] = o = elm_colorselector_add(opbox);
|
|
|
|
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
|
|
|
|
evas_object_size_hint_align_set(o, EVAS_HINT_FILL, 0.5);
|
|
|
|
elm_colorselector_mode_set(o, ELM_COLORSELECTOR_PALETTE);
|
|
|
|
for (i = 0; i < 11; i++)
|
|
|
|
{
|
|
|
|
Elm_Object_Item *it;
|
|
|
|
|
|
|
|
it = elm_colorselector_palette_color_add
|
|
|
|
(o,
|
|
|
|
config->colors[(j * 12) + mapping[i]].r,
|
|
|
|
config->colors[(j * 12) + mapping[i]].g,
|
|
|
|
config->colors[(j * 12) + mapping[i]].b,
|
|
|
|
config->colors[(j * 12) + mapping[i]].a);
|
|
|
|
colitem[j][i] = it;
|
|
|
|
}
|
|
|
|
evas_object_smart_callback_add(o, "color,item,selected",
|
|
|
|
_cb_op_color_item_sel, term);
|
|
|
|
elm_box_pack_end(bx3, o);
|
|
|
|
evas_object_show(o);
|
|
|
|
if (j == 1)
|
|
|
|
{
|
|
|
|
o = elm_separator_add(opbox);
|
|
|
|
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
|
|
|
|
evas_object_size_hint_align_set(o, EVAS_HINT_FILL, 0.5);
|
|
|
|
elm_separator_horizontal_set(o, EINA_TRUE);
|
|
|
|
elm_box_pack_end(bx3, o);
|
|
|
|
evas_object_show(o);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
curitem = colitem[0][0];
|
|
|
|
|
|
|
|
bx2 = o = elm_box_add(opbox);
|
|
|
|
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
|
|
|
|
evas_object_size_hint_align_set(o, EVAS_HINT_FILL, 0.0);
|
|
|
|
elm_box_pack_end(bx, o);
|
|
|
|
evas_object_show(o);
|
|
|
|
|
|
|
|
label = o = elm_label_add(opbox);
|
|
|
|
elm_object_text_set(o,
|
|
|
|
#if HAVE_GETTEXT && ENABLE_NLS
|
|
|
|
gettext(mapping_names[0])
|
|
|
|
#else
|
|
|
|
mapping_names[0]
|
|
|
|
#endif
|
|
|
|
);
|
|
|
|
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
|
|
|
|
evas_object_size_hint_align_set(o, EVAS_HINT_FILL, 0.5);
|
|
|
|
elm_box_pack_end(bx2, o);
|
|
|
|
evas_object_show(o);
|
|
|
|
|
|
|
|
colorsel = o = elm_colorselector_add(opbox);
|
|
|
|
elm_colorselector_palette_item_color_get(colitem[0][0], &r, &g, &b, &a);
|
|
|
|
elm_colorselector_color_set(o, r, g, b, a);
|
|
|
|
elm_colorselector_mode_set(o, ELM_COLORSELECTOR_COMPONENTS);
|
|
|
|
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
|
|
|
|
evas_object_size_hint_align_set(o, EVAS_HINT_FILL, 0.5);
|
|
|
|
elm_box_pack_end(bx2, o);
|
|
|
|
evas_object_show(o);
|
|
|
|
evas_object_smart_callback_add(o, "changed", _cb_op_color_chg, term);
|
|
|
|
|
|
|
|
bx4 = o = elm_box_add(opbox);
|
|
|
|
elm_box_horizontal_set(o, EINA_TRUE);
|
|
|
|
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
|
|
|
|
evas_object_size_hint_align_set(o, EVAS_HINT_FILL, 0.0);
|
|
|
|
elm_box_pack_end(bx2, o);
|
|
|
|
evas_object_show(o);
|
|
|
|
|
|
|
|
o = elm_check_add(opbox);
|
|
|
|
evas_object_size_hint_weight_set(o, 1.0, 0.0);
|
|
|
|
evas_object_size_hint_align_set(o, 0.0, 0.5);
|
|
|
|
elm_object_text_set(o, _("Use"));
|
|
|
|
elm_check_state_set(o, config->colors_use);
|
|
|
|
elm_box_pack_end(bx4, o);
|
|
|
|
evas_object_show(o);
|
|
|
|
evas_object_smart_callback_add(o, "changed", _cb_op_use_custom_chg, term);
|
|
|
|
|
|
|
|
reset = o = elm_button_add(opbox);
|
|
|
|
elm_object_disabled_set(o, EINA_TRUE);
|
|
|
|
evas_object_size_hint_weight_set(o, 1.0, 0.0);
|
|
|
|
evas_object_size_hint_align_set(o, 1.0, 0.5);
|
|
|
|
elm_object_text_set(o, _("Reset"));
|
|
|
|
elm_box_pack_end(bx4, o);
|
|
|
|
evas_object_show(o);
|
|
|
|
evas_object_smart_callback_add(o, "clicked", _cb_op_reset, term);
|
|
|
|
}
|