connman popup to give useful information, last commit this year!

SVN revision: 44837
This commit is contained in:
Gustavo Sverzut Barbieri 2010-01-01 01:12:53 +00:00
parent d141b8d627
commit f644b3c86e
3 changed files with 545 additions and 81 deletions

View File

@ -6935,6 +6935,32 @@ collections { /* begin the collection of edje groups that are in this file */
}
}
// GADGET and TIP all have the same parts and signals:
//
// SIGNALS:
// e,unavailable: connmand is not running (nothing else works)
// e,available: connmand is running
//
// e,changed,offline_mode,{yes,no}
// e,changed,technology,{wifi,ethernet,bluetooth,wimax,cellular}
// e,changed,state,{idle,association,configuration,ready,disconnect,failure}
// e,changed,mode,{managed,adhoc,gprs,edge,umts}
// e,changed,security,{none,wep,psk,ieee8021x,wpa,rsn}
// e,changed,favorite,{yes,no}
// e,changed,auto_connect,{yes,no}
// e,changed,pass_required,{yes,no}
// e,changed,error,{yes,no}
// e,changed,ipv4_address,{yes,no}
//
// PARTS:
// e.text.name
// e.text.error
// e.text.technology
// e.text.state
// e.text.ipv4_address
//
// MESSAGES:
// id=1, type=MSG_INT, description=strength (0-100)
group { name: "e/modules/connman/main";
images {
image: "connman-disconnect.png" COMP;
@ -7124,6 +7150,375 @@ collections { /* begin the collection of edje groups that are in this file */
}
}
group { name: "e/modules/connman/tip";
images {
image: "base_bg.png" COMP;
image: "connman-disconnect.png" COMP;
image: "connman-ethernet.png" COMP;
image: "connman-wifi.png" COMP;
}
min: 300 128;
script {
public message(Msg_Type:type, id, ...) {
if ((type == MSG_INT) && (id == 1)) {
new strength;
new buf[32];
strength = getarg(2);
if (strength > 0) {
snprintf(buf, sizeof(buf), "%d%%", strength);
set_text(PART:"strength", buf);
emit("strength,show", "");
} else
emit("strength,hide", "");
}
}
}
parts {
part { name: "base";
mouse_events: 0;
description { state: "default" 0.0;
align: 0.5 0.0;
color_class: "menu_base";
image {
normal: "base_bg.png";
border: 2 2 2 2;
}
fill.smooth: 0;
}
}
part { name: "state-clipper";
type: RECT;
mouse_events: 0;
description {
state: "default" 0.0;
color: 255 255 255 255;
}
description {
state: "pulse" 0.0;
color: 255 255 255 128;
}
}
programs {
program { name: "e,changed,state,ready";
signal: "e,changed,state,ready";
source: "e";
script {
stop_program(PROGRAM:"state,pulse,0");
stop_program(PROGRAM:"state,pulse,1");
}
after: "state,ready,apply";
}
program { name: "state,ready,apply";
action: STATE_SET "default" 0.0;
target: "state-clipper";
transition: LINEAR 0.1;
}
program { name: "e,changed,state,association";
signal: "e,changed,state,association";
source: "e";
after: "state,pulse,0";
}
program { name: "e,changed,state,configuration";
signal: "e,changed,state,configuration";
source: "e";
after: "state,pulse,0";
}
program { name: "state,pulse,0";
action: STATE_SET "default" 0.0;
target: "state-clipper";
transition: LINEAR 0.8;
after: "state,pulse,1";
}
program { name: "state,pulse,1";
action: STATE_SET "pulse" 0.0;
target: "state-clipper";
transition: LINEAR 0.8;
after: "state,pulse,0";
}
}
part { name: "technology";
type: IMAGE;
mouse_events: 0;
clip_to: "state-clipper";
description {
state: "default" 0.0;
image.normal: "connman-disconnect.png";
min: 128 128;
max: 128 128;
align: 0.0 0.0;
fixed: 1 1;
rel1 {
relative: 0.0 0.0;
offset: 10 10;
}
rel2 {
relative: 0.0 0.0;
offset: 137 137;
}
}
description {
state: "ethernet" 0.0;
inherit: "default" 0.0;
image.normal: "connman-ethernet.png";
}
description {
state: "wifi" 0.0;
inherit: "default" 0.0;
image.normal: "connman-wifi.png";
}
// TODO: wimax, cellular, bluetooth
}
programs {
program { name: "e,changed,technology,none";
signal: "e,changed,technology,none";
source: "e";
action: STATE_SET "default" 0.0;
target: "technology";
}
program { name: "e,changed,technology,ethernet";
signal: "e,changed,technology,ethernet";
source: "e";
action: STATE_SET "ethernet" 0.0;
target: "technology";
}
program { name: "e,changed,technology,wifi";
signal: "e,changed,technology,wifi";
source: "e";
action: STATE_SET "wifi" 0.0;
target: "technology";
}
}
part { name: "e.text.name";
type: TEXT;
mouse_events: 0;
effect: SOFT_SHADOW;
description {
state: "default" 0.0;
color: 224 224 224 255;
color3: 0 0 0 64;
align: 0.0 0.0;
rel1 {
to_x: "technology";
relative: 1.0 0.0;
offset: 10 10;
}
rel2 {
relative: 1.0 0.0;
offset: -10 30;
}
text {
font: "Sans:style=Bold";
size: 14;
align: 0.0 0.0;
text: "";
min: 1 1;
}
}
}
part { name: "e.text.state";
type: TEXT;
mouse_events: 0;
description {
state: "default" 0.0;
color: 96 96 96 255;
align: 0.0 0.0;
rel1 {
to_x: "technology";
to_y: "e.text.name";
relative: 1.0 1.0;
offset: 10 10;
}
rel2 {
to_y: "e.text.name";
relative: 1.0 1.0;
offset: -10 25;
}
text {
font: "Sans";
size: 10;
align: 0.0 0.0;
text: "";
min: 1 1;
}
}
}
part { name: "strength";
type: TEXT;
mouse_events: 0;
description {
state: "default" 0.0;
color: 96 96 96 255;
align: 0.0 0.0;
fixed: 1 1;
rel1 {
to_x: "technology";
to_y: "e.text.state";
relative: 1.0 1.0;
offset: 10 10;
}
rel2 {
to_y: "e.text.state";
relative: 1.0 1.0;
offset: -10 25;
}
text {
font: "Sans";
size: 10;
align: 0.0 0.0;
text: "";
min: 1 1;
}
}
description {
state: "hidden" 0.0;
inherit: "default" 0.0;
visible: 0;
rel2 { /* = rel1 */
to_x: "technology";
to_y: "e.text.name";
relative: 0.0 1.0;
offset: 10 10;
}
}
}
programs {
program { name: "strength,show";
signal: "strength,show";
action: STATE_SET "default" 0.0;
target: "strength";
}
program { name: "strength,hide";
signal: "strength,show";
action: STATE_SET "hidden" 0.0;
target: "strength";
}
}
part { name: "e.text.error";
type: TEXT;
mouse_events: 0;
description {
state: "default" 0.0;
color: 255 96 96 255;
align: 0.0 0.0;
fixed: 1 1;
rel1 {
to_x: "technology";
to_y: "strength";
relative: 1.0 1.0;
offset: 10 10;
}
rel2 {
to_y: "strength";
relative: 1.0 1.0;
offset: -10 25;
}
text {
font: "Sans";
size: 10;
align: 0.0 0.0;
text: "";
min: 1 1;
}
}
description {
state: "hidden" 0.0;
inherit: "default" 0.0;
visible: 0;
max: 0 0;
rel2 { /* = rel1 */
to_x: "technology";
to_y: "strength";
relative: 1.0 1.0;
offset: 10 10;
}
}
}
programs {
program { name: "e,changed,error,yes";
signal: "e,changed,error,yes";
source: "e";
action: STATE_SET "default" 0.0;
target: "e.text.error";
}
program { name: "e,changed,error,no";
signal: "e,changed,error,no";
source: "e";
action: STATE_SET "hidden" 0.0;
target: "e.text.error";
}
}
part { name: "e.text.ipv4_address";
type: TEXT;
mouse_events: 0;
description {
state: "default" 0.0;
color: 96 96 96 255;
align: 0.0 0.0;
fixed: 1 1;
rel1 {
to_x: "technology";
to_y: "e.text.error";
relative: 1.0 1.0;
offset: 10 10;
}
rel2 {
to_y: "e.text.error";
relative: 1.0 1.0;
offset: -10 25;
}
text {
font: "Sans";
size: 10;
align: 0.0 0.0;
text: "";
min: 1 1;
}
}
description {
state: "hidden" 0.0;
inherit: "default" 0.0;
max: 0 0;
visible: 0;
rel2 { /* = rel1 */
to_x: "technology";
to_y: "strength";
relative: 1.0 1.0;
offset: 10 10;
}
}
}
programs {
program { name: "e,changed,ipv4_address,yes";
signal: "e,changed,ipv4_address,yes";
source: "e";
action: STATE_SET "default" 0.0;
target: "e.text.ipv4_address";
}
program { name: "e,changed,ipv4_address,no";
signal: "e,changed,ipv4_address,no";
source: "e";
action: STATE_SET "hidden" 0.0;
target: "e.text.ipv4_address";
}
}
}
}
/////////////////////////////////////////////////////////////////////////////
/*** MOD: CONF_EDGEBINDINGS ***/

View File

@ -16,8 +16,7 @@
* 1. improve gadget ui
*
* GOOD:
* 1. mouse over popup with information such as IP and AP name
* (remove name from gadget)
* 1. imporve mouse over popup ui
* 2. nice popup using edje objects as rows, not simple lists (fancy)
* 3. "Controls" for detailed information, similar to Mixer app
* it would contain switches to toggle offline and choose
@ -44,6 +43,7 @@ static const char *e_str_failure = NULL;
static void _connman_default_service_changed_delayed(E_Connman_Module_Context *ctxt);
static void _connman_gadget_update(E_Connman_Instance *inst);
static void _connman_tip_update(E_Connman_Instance *inst);
static const char *
e_connman_theme_path(void)
@ -827,132 +827,194 @@ _connman_cb_mouse_down(void *data, Evas *evas __UNUSED__, Evas_Object *obj __UNU
}
static void
_connman_gadget_update(E_Connman_Instance *inst)
_connman_cb_mouse_in(void *data, Evas *evas __UNUSED__, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
{
E_Connman_Instance *inst = data;
Evas *e;
if (inst->tip)
return;
inst->tip = e_gadcon_popup_new(inst->gcc);
if (!inst->tip) return;
e = inst->tip->win->evas;
inst->o_tip = edje_object_add(e);
e_theme_edje_object_set(inst->o_tip, "base/theme/modules/connman/tip",
"e/modules/connman/tip");
_connman_tip_update(inst);
e_gadcon_popup_content_set(inst->tip, inst->o_tip);
e_gadcon_popup_show(inst->tip);
}
static void
_connman_cb_mouse_out(void *data, Evas *evas __UNUSED__, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
{
E_Connman_Instance *inst = data;
if (!inst->tip)
return;
evas_object_del(inst->o_tip);
e_object_del(E_OBJECT(inst->tip));
inst->tip = NULL;
inst->o_tip = NULL;
}
static void
_connman_edje_view_update(E_Connman_Instance *inst, Evas_Object *o)
{
E_Connman_Module_Context *ctxt = inst->ctxt;
Evas_Object *gadget = inst->ui.gadget;
const E_Connman_Service *service;
Edje_Message_Int msg;
char buf[128];
printf("\033[1;33mUPDATE GADGET\033[0m\n");
if (!ctxt->has_manager)
{
if (inst->popup)
_connman_popup_del(inst);
edje_object_signal_emit(gadget, "e,unavailable", "e");
edje_object_part_text_set(gadget, "e.text.name", _("No ConnMan"));
edje_object_part_text_set(gadget, "e.text.error",
edje_object_signal_emit(o, "e,unavailable", "e");
edje_object_part_text_set(o, "e.text.name", _("No ConnMan"));
edje_object_part_text_set(o, "e.text.error",
_("No ConnMan server found."));
}
if (inst->popup)
_connman_popup_update(inst);
edje_object_signal_emit(gadget, "e,available", "e");
if (ctxt->offline_mode)
edje_object_signal_emit(gadget, "e,changed,offline_mode,yes", "e");
else
edje_object_signal_emit(gadget, "e,changed,offline_mode,no", "e");
printf("DBG CONNMAN: technology: %s\n", ctxt->technology);
if (ctxt->technology)
{
edje_object_part_text_set(gadget, "e.text.technology",
ctxt->technology);
snprintf(buf, sizeof(buf), "e,changed,technology,%s",
ctxt->technology);
edje_object_signal_emit(gadget, buf, "e");
}
else
{
edje_object_part_text_set(gadget, "e.text.technology", "");
edje_object_signal_emit(gadget, "e,changed,technology,none", "e");
}
service = ctxt->default_service;
printf("DBG CONNMAN: default_service: %p (%s)\n", service, service ? service->name : "");
if (!service)
{
edje_object_part_text_set(gadget, "e.text.name", _("No Connection"));
edje_object_signal_emit(gadget, "e,changed,service,none", "e");
return;
}
printf("\033[0mDBG CONNMAN: service details:\n"
" state: %s\n"
" type: %s\n"
" error: %s\n"
" security: %s\n"
" strength: %hhu\n"
" flags: favorite=%hhu, auto_connect=%hhu, pass_required=%hhu\033[0m\n",
service->state,
service->type,
service->error,
service->security,
service->strength,
service->favorite,
service->auto_connect,
service->pass_required);
edje_object_signal_emit(o, "e,available", "e");
if (ctxt->offline_mode)
edje_object_signal_emit(o, "e,changed,offline_mode,yes", "e");
else
edje_object_signal_emit(o, "e,changed,offline_mode,no", "e");
if (ctxt->technology)
{
edje_object_part_text_set(o, "e.text.technology",
ctxt->technology);
snprintf(buf, sizeof(buf), "e,changed,technology,%s",
ctxt->technology);
edje_object_signal_emit(o, buf, "e");
}
else
{
edje_object_part_text_set(o, "e.text.technology", "");
edje_object_signal_emit(o, "e,changed,technology,none", "e");
}
service = ctxt->default_service;
if (!service)
{
edje_object_part_text_set(o, "e.text.name", _("No Connection"));
edje_object_signal_emit(o, "e,changed,service,none", "e");
edje_object_part_text_set(o, "e.text.error", _("Not connected"));
edje_object_signal_emit(o, "e,changed,error,no", "e");
edje_object_signal_emit(o, "e,changed,mode,no", "e");
edje_object_signal_emit(o, "e,changed,mode,none", "e");
edje_object_signal_emit(o, "e,changed,security,none", "e");
edje_object_part_text_set(o, "e.text.ipv4_address", "");
edje_object_signal_emit(o, "e,changed,ipv4_address,no", "e");
edje_object_signal_emit(o, "e,changed,favorite,no", "e");
edje_object_signal_emit(o, "e,changed,auto_connect,no", "e");
edje_object_signal_emit(o, "e,changed,pass_required,no", "e");
return;
}
if (service->name)
edje_object_part_text_set(gadget, "e.text.name", service->name);
edje_object_part_text_set(o, "e.text.name", service->name);
else
edje_object_part_text_set(gadget, "e.text.name", _("Unknown Name"));
edje_object_part_text_set(o, "e.text.name", _("Unknown Name"));
if (service->error)
{
edje_object_part_text_set(gadget, "e.text.error", service->error);
edje_object_signal_emit(gadget, "e,changed,error,yes", "e");
edje_object_part_text_set(o, "e.text.error", service->error);
edje_object_signal_emit(o, "e,changed,error,yes", "e");
}
else
{
edje_object_part_text_set(gadget, "e.text.error", _("No error"));
edje_object_signal_emit(gadget, "e,changed,error,no", "e");
edje_object_part_text_set(o, "e.text.error", _("No error"));
edje_object_signal_emit(o, "e,changed,error,no", "e");
}
snprintf(buf, sizeof(buf), "e,changed,service,%s", service->type);
edje_object_signal_emit(gadget, buf, "e");
edje_object_signal_emit(o, buf, "e");
snprintf(buf, sizeof(buf), "e,changed,state,%s", service->state);
edje_object_signal_emit(gadget, buf, "e");
printf("DBG CONNMAN signal: %s\n", buf);
edje_object_signal_emit(o, buf, "e");
edje_object_part_text_set(o, "e.text.state", service->state);
if (service->mode)
{
snprintf(buf, sizeof(buf), "e,changed,mode,%s", service->mode);
edje_object_signal_emit(gadget, buf, "e");
edje_object_signal_emit(o, buf, "e");
}
else
edje_object_signal_emit(o, "e,changed,mode,none", "e");
if (service->security)
{
snprintf(buf, sizeof(buf), "e,changed,security,%s", service->security);
edje_object_signal_emit(gadget, buf, "e");
edje_object_signal_emit(o, buf, "e");
}
else
edje_object_signal_emit(o, "e,changed,security,none", "e");
if (service->ipv4_address)
{
edje_object_part_text_set(o, "e.text.ipv4_address", service->ipv4_address);
edje_object_signal_emit(o, "e,changed,ipv4_address,yes", "e");
}
else
{
edje_object_part_text_set(o, "e.text.ipv4_address", "");
edje_object_signal_emit(o, "e,changed,ipv4_address,no", "e");
}
if (service->favorite)
edje_object_signal_emit(gadget, "e,changed,favorite,yes", "e");
edje_object_signal_emit(o, "e,changed,favorite,yes", "e");
else
edje_object_signal_emit(gadget, "e,changed,favorite,no", "e");
edje_object_signal_emit(o, "e,changed,favorite,no", "e");
if (service->auto_connect)
edje_object_signal_emit(gadget, "e,changed,auto_connect,yes", "e");
edje_object_signal_emit(o, "e,changed,auto_connect,yes", "e");
else
edje_object_signal_emit(gadget, "e,changed,auto_connect,no", "e");
edje_object_signal_emit(o, "e,changed,auto_connect,no", "e");
if (service->pass_required)
edje_object_signal_emit(gadget, "e,changed,pass_required,yes", "e");
edje_object_signal_emit(o, "e,changed,pass_required,yes", "e");
else
edje_object_signal_emit(gadget, "e,changed,pass_required,no", "e");
edje_object_signal_emit(o, "e,changed,pass_required,no", "e");
msg.val = service->strength;
edje_object_message_send(gadget, EDJE_MESSAGE_INT, 1, &msg);
edje_object_message_send(o, EDJE_MESSAGE_INT, 1, &msg);
}
static void
_connman_tip_update(E_Connman_Instance *inst)
{
_connman_edje_view_update(inst, inst->o_tip);
}
static void
_connman_gadget_update(E_Connman_Instance *inst)
{
E_Connman_Module_Context *ctxt = inst->ctxt;
if (!ctxt->has_manager && inst->popup)
_connman_popup_del(inst);
if (inst->popup)
_connman_popup_update(inst);
if (inst->tip)
_connman_tip_update(inst);
_connman_edje_view_update(inst, inst->ui.gadget);
}
/* Gadcon Api Functions */
@ -979,6 +1041,10 @@ _gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style)
evas_object_event_callback_add
(inst->ui.gadget, EVAS_CALLBACK_MOUSE_DOWN, _connman_cb_mouse_down, inst);
evas_object_event_callback_add
(inst->ui.gadget, EVAS_CALLBACK_MOUSE_IN, _connman_cb_mouse_in, inst);
evas_object_event_callback_add
(inst->ui.gadget, EVAS_CALLBACK_MOUSE_OUT, _connman_cb_mouse_out, inst);
_connman_gadget_update(inst);

View File

@ -41,6 +41,9 @@ struct E_Connman_Instance
Ecore_Event_Handler *key_down;
} input;
} ui;
E_Gadcon_Popup *tip;
Evas_Object *o_tip;
};
struct E_Connman_Service