470 lines
16 KiB
C
470 lines
16 KiB
C
#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;
|
|
}
|