You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
469 lines
16 KiB
469 lines
16 KiB
#include "News.h" |
|
|
|
#define DIALOG_CLASS "_e_mod_news_config_dialog" |
|
|
|
struct _E_Config_Dialog_Data |
|
{ |
|
Evas_Object *color_viewer_font; |
|
Evas_Object *color_viewer_font_shadow; |
|
|
|
struct |
|
{ |
|
int timer_m; |
|
int sort_name; |
|
} feed; |
|
|
|
struct |
|
{ |
|
int enable; |
|
char *host; |
|
char *port; |
|
} proxy; |
|
|
|
struct |
|
{ |
|
struct |
|
{ |
|
int unread_first; |
|
} vfeeds; |
|
struct |
|
{ |
|
int unread_first; |
|
int sort_date; |
|
} varticles; |
|
struct |
|
{ |
|
int font_size; |
|
E_Color *font_color; |
|
int font_shadow; |
|
E_Color *font_shadow_color; |
|
int color_changed; |
|
} vcontent; |
|
} viewer; |
|
|
|
struct |
|
{ |
|
int active; |
|
int timer_s; |
|
} popup_news; |
|
|
|
struct |
|
{ |
|
int on_timeout; |
|
int timer_s; |
|
} popup_other; |
|
}; |
|
|
|
static void *_create_data(E_Config_Dialog *cfd); |
|
static void _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata); |
|
static void _fill_data(E_Config_Dialog_Data *cfdata); |
|
static Evas_Object *_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata); |
|
static Evas_Object *_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata); |
|
static int _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata); |
|
|
|
static void _cb_color_viewer_font_change(void *data, Evas_Object *obj); |
|
static void _cb_color_viewer_font_shadow_change(void *data, Evas_Object *obj); |
|
|
|
/* |
|
* Public functions |
|
*/ |
|
|
|
int |
|
news_config_dialog_show(void) |
|
{ |
|
E_Config_Dialog *cfd; |
|
E_Config_Dialog_View *v; |
|
|
|
if (e_config_dialog_find("E", DIALOG_CLASS)) |
|
return 0; |
|
|
|
v = E_NEW(E_Config_Dialog_View, 1); |
|
|
|
v->create_cfdata = _create_data; |
|
v->free_cfdata = _free_data; |
|
v->basic.apply_cfdata = _advanced_apply_data; |
|
v->basic.create_widgets = _basic_create_widgets; |
|
v->advanced.apply_cfdata = _advanced_apply_data; |
|
v->advanced.create_widgets = _advanced_create_widgets; |
|
|
|
cfd = e_config_dialog_new(e_container_current_get(e_manager_current_get()), |
|
_("News Main Configuration"), |
|
"E", DIALOG_CLASS, |
|
news_theme_file_get(NEWS_THEME_CAT_ICON), 0, v, NULL); |
|
|
|
return 1; |
|
} |
|
|
|
void |
|
news_config_dialog_hide(void) |
|
{ |
|
e_object_del(E_OBJECT(news->config_dialog)); |
|
news->config_dialog = NULL; |
|
} |
|
|
|
/* |
|
* Private functions |
|
* |
|
*/ |
|
|
|
static void * |
|
_create_data(E_Config_Dialog *cfd) |
|
{ |
|
E_Config_Dialog_Data *cfdata; |
|
|
|
news->config_dialog = cfd; |
|
|
|
cfdata = E_NEW(E_Config_Dialog_Data, 1); |
|
_fill_data(cfdata); |
|
cfd->cfdata = cfdata; |
|
return cfdata; |
|
} |
|
|
|
static void |
|
_free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) |
|
{ |
|
free(cfdata->proxy.host); |
|
|
|
news->config_dialog = NULL; |
|
free(cfdata); |
|
} |
|
|
|
static void |
|
_fill_data(E_Config_Dialog_Data *cfdata) |
|
{ |
|
News_Config *c; |
|
|
|
c = news->config; |
|
|
|
cfdata->feed.timer_m = c->feed.timer_m; |
|
cfdata->feed.sort_name = c->feed.sort_name; |
|
|
|
cfdata->proxy.enable = c->proxy.enable; |
|
if (c->proxy.host) |
|
cfdata->proxy.host = strdup(c->proxy.host); |
|
else |
|
cfdata->proxy.host = strdup(""); |
|
if (c->proxy.port) |
|
{ |
|
char buf[6]; |
|
snprintf(buf, sizeof(buf), "%d", c->proxy.port); |
|
cfdata->proxy.port = strdup(buf); |
|
} |
|
else |
|
cfdata->proxy.port = strdup(""); |
|
|
|
cfdata->viewer.vfeeds.unread_first = c->viewer.vfeeds.unread_first; |
|
cfdata->viewer.varticles.unread_first = c->viewer.varticles.unread_first; |
|
cfdata->viewer.varticles.sort_date = c->viewer.varticles.sort_date; |
|
cfdata->viewer.vcontent.font_size = c->viewer.vcontent.font_size; |
|
cfdata->viewer.vcontent.font_color = E_NEW(E_Color, 1); |
|
sscanf(c->viewer.vcontent.font_color, "#%2x%2x%2x", |
|
&cfdata->viewer.vcontent.font_color->r, |
|
&cfdata->viewer.vcontent.font_color->g, |
|
&cfdata->viewer.vcontent.font_color->b); |
|
cfdata->viewer.vcontent.font_color->a = 255; |
|
e_color_update_rgb(cfdata->viewer.vcontent.font_color); |
|
cfdata->viewer.vcontent.font_shadow = c->viewer.vcontent.font_shadow; |
|
cfdata->viewer.vcontent.font_shadow_color = E_NEW(E_Color, 1); |
|
sscanf(c->viewer.vcontent.font_shadow_color, "#%2x%2x%2x", |
|
&cfdata->viewer.vcontent.font_shadow_color->r, |
|
&cfdata->viewer.vcontent.font_shadow_color->g, |
|
&cfdata->viewer.vcontent.font_shadow_color->b); |
|
cfdata->viewer.vcontent.font_shadow_color->a = 255; |
|
e_color_update_rgb(cfdata->viewer.vcontent.font_shadow_color); |
|
cfdata->viewer.vcontent.color_changed = 0; |
|
|
|
cfdata->popup_news.active = c->popup_news.active; |
|
cfdata->popup_news.timer_s = c->popup_news.timer_s; |
|
|
|
cfdata->popup_other.on_timeout = c->popup_other.on_timeout; |
|
cfdata->popup_other.timer_s = c->popup_other.timer_s; |
|
} |
|
|
|
static Evas_Object * |
|
_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata) |
|
{ |
|
Evas_Object *o, *of, *ob; |
|
|
|
o = e_widget_list_add(evas, 0, 0); |
|
|
|
of = e_widget_frametable_add(evas, _("Feeds"), 0); |
|
|
|
ob = e_widget_check_add(evas, _("Sort lists by name (disable Move action)"), &(cfdata->feed.sort_name)); |
|
e_widget_frametable_object_append(of, ob, 0, 1, 2, 1, 1, 1, 1, 0); |
|
|
|
e_widget_list_object_append(o, of, 1, 1, 0.5); |
|
|
|
of = e_widget_frametable_add(evas, _("News Viewer"), 0); |
|
|
|
ob = e_widget_label_add(evas, _("Font size")); |
|
e_widget_frametable_object_append(of, ob, 0, 0, 1, 1, 1, 1, 1, 1); |
|
|
|
ob = e_widget_slider_add(evas, 1, 0, _("%1.0f"), NEWS_VIEWER_VCONTENT_FONT_SIZE_MIN, NEWS_VIEWER_VCONTENT_FONT_SIZE_MAX, 1.0, 0, NULL, &(cfdata->viewer.vcontent.font_size), 50); |
|
e_widget_frametable_object_append(of, ob, 0, 1, 1, 1, 1, 0, 1, 0); |
|
|
|
ob = e_widget_label_add(evas, _("Font color")); |
|
e_widget_frametable_object_append(of, ob, 1, 0, 1, 1, 1, 1, 1, 1); |
|
|
|
ob = e_widget_color_well_add(evas, cfdata->viewer.vcontent.font_color, 1); |
|
cfdata->color_viewer_font = ob; |
|
e_widget_on_change_hook_set(ob, _cb_color_viewer_font_change, cfdata); |
|
e_widget_frametable_object_append(of, ob, 1, 1, 1, 1, 1, 1, 1, 1); |
|
|
|
e_widget_list_object_append(o, of, 1, 1, 1.0); |
|
|
|
return o; |
|
} |
|
|
|
static Evas_Object * |
|
_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata) |
|
{ |
|
Evas_Object *o, *o2, *of, *of2, *ob; |
|
E_Radio_Group *rg; |
|
|
|
o = e_widget_table_add(evas, 0); |
|
|
|
o2 = e_widget_list_add(evas, 0, 0); |
|
|
|
of = e_widget_frametable_add(evas, _("Feeds"), 0); |
|
|
|
ob = e_widget_label_add(evas, _("Timer")); |
|
e_widget_frametable_object_append(of, ob, 0, 0, 1, 1, 1, 1, 1, 0); |
|
ob = e_widget_slider_add(evas, 1, 0, _("%1.0f min"), |
|
(float)NEWS_FEED_TIMER_MIN, (float)NEWS_FEED_TIMER_MAX, |
|
1.0, 0, NULL, &(cfdata->feed.timer_m), 70); |
|
e_widget_frametable_object_append(of, ob, 1, 0, 1, 1, 1, 1, 1, 0); |
|
ob = e_widget_check_add(evas, _("Sort lists by name (disable Move action)"), &(cfdata->feed.sort_name)); |
|
e_widget_frametable_object_append(of, ob, 0, 1, 2, 1, 1, 1, 1, 0); |
|
|
|
e_widget_list_object_append(o2, of, 1, 1, 0.5); |
|
|
|
of = e_widget_framelist_add(evas, _("Browser"), 0); |
|
|
|
ob = e_widget_label_add(evas, _("Uses xdg-open script, from freedesktop.org")); |
|
e_widget_framelist_object_append(of, ob); |
|
|
|
e_widget_list_object_append(o2, of, 1, 1, 0.5); |
|
|
|
of = e_widget_frametable_add(evas, _("Popup On News"), 0); |
|
|
|
rg = e_widget_radio_group_new(&(cfdata->popup_news.active)); |
|
ob = e_widget_radio_add(evas, _("Never"), |
|
NEWS_FEED_POPUP_NEWS_ACTIVE_NO, rg); |
|
//TODO: NOT IMPLEMENTED YET |
|
e_widget_radio_toggle_set(ob, 0); |
|
e_widget_disabled_set(ob, 1); |
|
e_widget_frametable_object_append(of, ob, 0, 0, 1, 1, 1, 1, 1, 0); |
|
ob = e_widget_radio_add(evas, _("Only on urgent feeds"), |
|
NEWS_FEED_POPUP_NEWS_ACTIVE_URGENT, rg); |
|
//TODO: NOT IMPLEMENTED YET |
|
e_widget_radio_toggle_set(ob, 0); |
|
e_widget_disabled_set(ob, 1); |
|
e_widget_frametable_object_append(of, ob, 1, 0, 1, 1, 1, 1, 1, 0); |
|
ob = e_widget_radio_add(evas, _("On all feeds"), |
|
NEWS_FEED_POPUP_NEWS_ACTIVE_ALL, rg); |
|
//TODO: NOT IMPLEMENTED YET |
|
e_widget_radio_toggle_set(ob, 0); |
|
e_widget_disabled_set(ob, 1); |
|
e_widget_frametable_object_append(of, ob, 1, 1, 1, 1, 1, 1, 1, 0); |
|
|
|
ob = e_widget_label_add(evas, _("Timer")); |
|
e_widget_frametable_object_append(of, ob, 0, 2, 1, 1, 1, 1, 1, 0); |
|
ob = e_widget_slider_add(evas, 1, 0, _("%1.0f s"), |
|
(float)NEWS_POPUP_TIMER_S_MIN, |
|
(float)NEWS_POPUP_TIMER_S_MAX, |
|
1.0, 0, NULL, &(cfdata->popup_news.timer_s), 70); |
|
e_widget_frametable_object_append(of, ob, 1, 2, 1, 1, 1, 1, 1, 0); |
|
|
|
e_widget_list_object_append(o2, of, 1, 1, 0.5); |
|
|
|
of = e_widget_frametable_add(evas, _("Popup On Warning / Error"), 0); |
|
|
|
//TODO: NOT IMPLEMENTED YET |
|
news->config->popup_other.on_timeout = 0; |
|
cfdata->popup_other.on_timeout = 0; |
|
ob = e_widget_check_add(evas, _("Show on timeout ?"), &(cfdata->popup_other.on_timeout)); |
|
//TODO: NOT IMPLEMENTED YET |
|
e_widget_disabled_set(ob, 1); |
|
e_widget_frametable_object_append(of, ob, 0, 0, 2, 1, 1, 0, 1, 0); |
|
|
|
ob = e_widget_label_add(evas, _("Timer")); |
|
e_widget_frametable_object_append(of, ob, 0, 1, 1, 1, 1, 1, 1, 0); |
|
ob = e_widget_slider_add(evas, 1, 0, _("%1.0f s"), |
|
(float)NEWS_POPUP_TIMER_S_MIN, |
|
(float)NEWS_POPUP_TIMER_S_MAX, |
|
1.0, 0, NULL, &(cfdata->popup_other.timer_s), 70); |
|
e_widget_frametable_object_append(of, ob, 1, 1, 1, 1, 1, 1, 1, 0); |
|
|
|
e_widget_list_object_append(o2, of, 1, 1, 0.5); |
|
|
|
e_widget_table_object_append(o, o2, 0, 0, 1, 1, 1, 1, 1, 1); |
|
|
|
|
|
o2 = e_widget_list_add(evas, 0, 0); |
|
|
|
of = e_widget_frametable_add(evas, _("News Viewer"), 0); |
|
|
|
ob = e_widget_check_add(evas, _("Unread feeds first"), &(cfdata->viewer.vfeeds.unread_first)); |
|
e_widget_frametable_object_append(of, ob, 0, 0, 1, 1, 1, 0, 1, 0); |
|
ob = e_widget_check_add(evas, _("Unread articles first"), &(cfdata->viewer.varticles.unread_first)); |
|
e_widget_frametable_object_append(of, ob, 1, 0, 1, 1, 1, 0, 1, 0); |
|
ob = e_widget_check_add(evas, _("Sort articles by date"), &(cfdata->viewer.varticles.sort_date)); |
|
e_widget_frametable_object_append(of, ob, 1, 1, 1, 1, 1, 0, 1, 0); |
|
|
|
of2 = e_widget_frametable_add(evas, _("Font"), 0); |
|
|
|
ob = e_widget_slider_add(evas, 1, 0, _("%1.0f"), NEWS_VIEWER_VCONTENT_FONT_SIZE_MIN, NEWS_VIEWER_VCONTENT_FONT_SIZE_MAX, 1.0, 0, NULL, &(cfdata->viewer.vcontent.font_size), 70); |
|
e_widget_frametable_object_append(of2, ob, 0, 0, 1, 1, 1, 0, 1, 0); |
|
|
|
ob = e_widget_color_well_add(evas, cfdata->viewer.vcontent.font_color, 1); |
|
cfdata->color_viewer_font = ob; |
|
e_widget_on_change_hook_set(ob, _cb_color_viewer_font_change, cfdata); |
|
e_widget_frametable_object_append(of2, ob, 0, 1, 1, 1, 1, 0, 1, 0); |
|
|
|
ob = e_widget_check_add(evas, _("Font Shadow"), &cfdata->viewer.vcontent.font_shadow); |
|
e_widget_frametable_object_append(of2, ob, 1, 0, 1, 1, 1, 0, 1, 0); |
|
|
|
ob = e_widget_color_well_add(evas, cfdata->viewer.vcontent.font_shadow_color, 1); |
|
cfdata->color_viewer_font_shadow = ob; |
|
e_widget_on_change_hook_set(ob, _cb_color_viewer_font_shadow_change, cfdata); |
|
e_widget_frametable_object_append(of2, ob, 1, 1, 1, 1, 1, 0, 1, 0); |
|
|
|
e_widget_frametable_object_append(of, of2, 0, 2, 2, 1, 1, 0, 1, 0); |
|
|
|
e_widget_list_object_append(o2, of, 1, 1, 0.0); |
|
|
|
of = e_widget_frametable_add(evas, _("Proxy"), 0); |
|
|
|
ob = e_widget_check_add(evas, _("Enable"), &(cfdata->proxy.enable)); |
|
e_widget_frametable_object_append(of, ob, 0, 0, 2, 1, 1, 0, 0, 0); |
|
ob = e_widget_label_add(evas, _("Host")); |
|
e_widget_frametable_object_append(of, ob, 0, 1, 1, 1, 1, 0, 0, 0); |
|
ob = e_widget_entry_add(evas, &(cfdata->proxy.host)); |
|
e_widget_frametable_object_append(of, ob, 1, 1, 1, 1, 1, 0, 1, 0); |
|
ob = e_widget_label_add(evas, _("Port")); |
|
e_widget_frametable_object_append(of, ob, 0, 2, 1, 1, 1, 0, 0, 0); |
|
ob = e_widget_entry_add(evas, &(cfdata->proxy.port)); |
|
e_widget_frametable_object_append(of, ob, 1, 2, 1, 1, 1, 0, 1, 0); |
|
|
|
e_widget_list_object_append(o2, of, 1, 1, 1.0); |
|
|
|
e_widget_table_object_append(o, o2, 1, 0, 1, 1, 1, 1, 1, 1); |
|
|
|
return o; |
|
} |
|
|
|
static int |
|
_advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) |
|
{ |
|
News_Config *c; |
|
int update_feeds = 0; |
|
|
|
c = news->config; |
|
|
|
if (c->feed.timer_m != cfdata->feed.timer_m) |
|
news_feed_timer_set(cfdata->feed.timer_m); |
|
if (c->feed.sort_name != cfdata->feed.sort_name) |
|
{ |
|
c->feed.sort_name = cfdata->feed.sort_name; |
|
if (c->feed.sort_name) |
|
news_feed_lists_refresh(1); |
|
} |
|
|
|
if (c->proxy.enable != cfdata->proxy.enable) |
|
{ |
|
c->proxy.enable = cfdata->proxy.enable; |
|
update_feeds = 1; |
|
} |
|
if (c->proxy.host) |
|
{ |
|
evas_stringshare_del(c->proxy.host); |
|
c->proxy.host = NULL; |
|
} |
|
if (cfdata->proxy.host && cfdata->proxy.host[0]) |
|
c->proxy.host = evas_stringshare_add(cfdata->proxy.host); |
|
if (cfdata->proxy.port && cfdata->proxy.port[0]) |
|
sscanf(cfdata->proxy.port, "%d", &c->proxy.port); |
|
|
|
if ( (c->viewer.vfeeds.unread_first != cfdata->viewer.vfeeds.unread_first) || |
|
(c->viewer.varticles.unread_first != cfdata->viewer.varticles.unread_first) || |
|
(c->viewer.varticles.sort_date != cfdata->viewer.varticles.sort_date) || |
|
(c->viewer.vcontent.font_size != cfdata->viewer.vcontent.font_size) || |
|
(c->viewer.vcontent.font_shadow != cfdata->viewer.vcontent.font_shadow) || |
|
(cfdata->viewer.vcontent.color_changed) ) |
|
{ |
|
int recreate = 0; |
|
char buf[8]; |
|
|
|
if ( (c->viewer.vcontent.font_size != cfdata->viewer.vcontent.font_size) || |
|
(c->viewer.vcontent.font_shadow != cfdata->viewer.vcontent.font_shadow) || |
|
(cfdata->viewer.vcontent.color_changed) ) |
|
recreate = 1; |
|
|
|
c->viewer.vfeeds.unread_first = cfdata->viewer.vfeeds.unread_first; |
|
c->viewer.varticles.unread_first = cfdata->viewer.varticles.unread_first; |
|
c->viewer.varticles.sort_date = cfdata->viewer.varticles.sort_date; |
|
c->viewer.vcontent.font_size = cfdata->viewer.vcontent.font_size; |
|
|
|
if (cfdata->viewer.vcontent.font_color->r < 16) cfdata->viewer.vcontent.font_color->r = 16; |
|
if (cfdata->viewer.vcontent.font_color->g < 16) cfdata->viewer.vcontent.font_color->g = 16; |
|
if (cfdata->viewer.vcontent.font_color->b < 16) cfdata->viewer.vcontent.font_color->b = 16; |
|
snprintf(buf, sizeof(buf), "#%x%x%x", |
|
cfdata->viewer.vcontent.font_color->r, |
|
cfdata->viewer.vcontent.font_color->g, |
|
cfdata->viewer.vcontent.font_color->b); |
|
evas_stringshare_del(news->config->viewer.vcontent.font_color); |
|
news->config->viewer.vcontent.font_color = evas_stringshare_add(buf); |
|
|
|
c->viewer.vcontent.font_shadow = cfdata->viewer.vcontent.font_shadow; |
|
|
|
if (cfdata->viewer.vcontent.font_shadow_color->r < 16) cfdata->viewer.vcontent.font_shadow_color->r = 16; |
|
if (cfdata->viewer.vcontent.font_shadow_color->g < 16) cfdata->viewer.vcontent.font_shadow_color->g = 16; |
|
if (cfdata->viewer.vcontent.font_shadow_color->b < 16) cfdata->viewer.vcontent.font_shadow_color->b = 16; |
|
snprintf(buf, sizeof(buf), "#%x%x%x", |
|
cfdata->viewer.vcontent.font_shadow_color->r, |
|
cfdata->viewer.vcontent.font_shadow_color->g, |
|
cfdata->viewer.vcontent.font_shadow_color->b); |
|
evas_stringshare_del(news->config->viewer.vcontent.font_shadow_color); |
|
news->config->viewer.vcontent.font_shadow_color = evas_stringshare_add(buf); |
|
|
|
news_viewer_all_refresh(1, recreate); |
|
cfdata->viewer.vcontent.color_changed = 0; |
|
} |
|
|
|
c->popup_news.active = cfdata->popup_news.active; |
|
c->popup_news.timer_s = cfdata->popup_news.timer_s; |
|
|
|
c->popup_other.on_timeout = cfdata->popup_other.on_timeout; |
|
c->popup_other.timer_s = cfdata->popup_other.timer_s; |
|
|
|
/* update feeds */ |
|
if (update_feeds) |
|
{ |
|
NEWS_FEED_FOREACH_BEG(); |
|
if (_feed->doc) |
|
news_feed_update(_feed); |
|
NEWS_FEED_FOREACH_END(); |
|
} |
|
|
|
news_config_save(); |
|
return 1; |
|
} |
|
|
|
static void |
|
_cb_color_viewer_font_change(void *data, Evas_Object *obj) |
|
{ |
|
E_Config_Dialog_Data *cfdata; |
|
|
|
cfdata = data; |
|
cfdata->viewer.vcontent.color_changed = 1; |
|
} |
|
|
|
static void |
|
_cb_color_viewer_font_shadow_change(void *data, Evas_Object *obj) |
|
{ |
|
E_Config_Dialog_Data *cfdata; |
|
|
|
cfdata = data; |
|
cfdata->viewer.vcontent.color_changed = 1; |
|
}
|
|
|