diff --git a/ecdb/trunk/TODO b/ecdb/trunk/TODO index 8d9bbc1..d9197cf 100644 --- a/ecdb/trunk/TODO +++ b/ecdb/trunk/TODO @@ -11,6 +11,7 @@ TODO -> figure out what to do about dnd, should it be consolidated into one system, how to handle internel, etc. -> don't load the sources all at one time (lots of memory consumed -- for my entire development tree containing 154256 files, ecdb uses 46mb) -> integrate exchange +-> instead of always swallowing widgets, allow theme to specify on a widget-by-widget basis if it wants to emit signals from internal parts DONE ////////////////////////////////////////////////////////////////////////////// diff --git a/ecdb/trunk/data/themes/default/groups/burn_data.edc b/ecdb/trunk/data/themes/default/groups/burn_data.edc index 8f01f85..dbd1999 100644 --- a/ecdb/trunk/data/themes/default/groups/burn_data.edc +++ b/ecdb/trunk/data/themes/default/groups/burn_data.edc @@ -71,7 +71,7 @@ group { rel2 { to: "bg"; relative: 1.0 0.0; - offset: -11 50; + offset: -11 30; } } } @@ -93,7 +93,7 @@ group { rel2 { to: "ecdb/burn_data/return"; relative: 1.0 1.0; - offset: 0 50; + offset: 0 30; } } } @@ -164,6 +164,28 @@ group { } } + part { + name: "ecdb/burn_data/settings"; + type: SWALLOW; + repeat_events: 1; + + description { + state: "default" 0.0; + + rel1 { + to: "ecdb/burn_data/vol_name"; + relative: 0.0 1.0; + offset: 0 5; + } + + rel2 { + to: "ecdb/burn_data/vol_name"; + relative: 1.0 1.0; + offset: 0 30; + } + } + } + /* Missing a description later */ part { name: "ecdb/burn_data/filelist"; @@ -182,7 +204,7 @@ group { rel2 { to: "bg"; relative: 1.0 1.0; - offset: -205 -26; + offset: -235 -26; } } } diff --git a/ecdb/trunk/data/themes/default/groups/burn_image.edc b/ecdb/trunk/data/themes/default/groups/burn_image.edc index 45ed32d..e384a11 100644 --- a/ecdb/trunk/data/themes/default/groups/burn_image.edc +++ b/ecdb/trunk/data/themes/default/groups/burn_image.edc @@ -92,7 +92,7 @@ group { rel2 { to: "bg"; relative: 1.0 0.0; - offset: -11 50; + offset: -11 30; } } } @@ -114,7 +114,7 @@ group { rel2 { to: "ecdb/burn_image/return"; relative: 1.0 1.0; - offset: 0 50; + offset: 0 30; } } } diff --git a/ecdb/trunk/data/themes/default/groups/config_inwin.edc b/ecdb/trunk/data/themes/default/groups/config_inwin.edc index 488ae27..af5e250 100644 --- a/ecdb/trunk/data/themes/default/groups/config_inwin.edc +++ b/ecdb/trunk/data/themes/default/groups/config_inwin.edc @@ -54,16 +54,16 @@ group { group { name: "ecdb/config_inwin/popup"; - max: 400 300; parts { part { name: "back"; - type: IMAGE; + mouse_events: 0; description { state: "default" 0.0; color: 255 255 255 0; + max: 308 128; rel1 { relative: 0.0 0.0; @@ -81,8 +81,8 @@ group { } description { - inherit: "default" 0.0; state: "active" 0.0; + inherit: "default" 0.0; color: 255 255 255 255; } } @@ -90,11 +90,11 @@ group { part { name: "ecdb.table"; type: TABLE; - clip_to: "back"; description { state: "default" 0.0; color: 255 255 255 0; + max: 300 120; rel1 { relative: 0.0 0.0; @@ -107,11 +107,17 @@ group { } table { - homogenous: TABLE; - padding: 2 2; + homogeneous: TABLE; + padding: 0 0; align: 0.5 0.5; } } + + description { + state: "active" 0.0; + inherit: "default" 0.0; + color: 255 255 255 255; + } } } @@ -121,8 +127,8 @@ group { signal: "ecdb,config_inwin,popup,show"; source: "ecdb"; action: STATE_SET "active" 0.0; + target: "back"; target: "ecdb.table"; - target: "active"; transition: DECELERATE 0.2; } @@ -130,9 +136,9 @@ group { name: "collapse"; signal: "ecdb,config_inwin,popup,hide"; source: "ecdb"; - action: STATE_SET "active" 0.0; + action: STATE_SET "default" 0.0; + target: "back"; target: "ecdb.table"; - target: "active"; transition: DECELERATE 0.2; } } diff --git a/ecdb/trunk/data/themes/default/groups/erase_disc.edc b/ecdb/trunk/data/themes/default/groups/erase_disc.edc index 54de201..323cb7d 100644 --- a/ecdb/trunk/data/themes/default/groups/erase_disc.edc +++ b/ecdb/trunk/data/themes/default/groups/erase_disc.edc @@ -87,7 +87,7 @@ group { rel2 { to: "bg"; relative: 1.0 0.0; - offset: -11 50; + offset: -11 30; } } } @@ -109,7 +109,7 @@ group { rel2 { to: "ecdb/erase/return"; relative: 1.0 1.0; - offset: 0 50; + offset: 0 30; } } } diff --git a/ecdb/trunk/src/ecdb_burn_data_gui.c b/ecdb/trunk/src/ecdb_burn_data_gui.c index 12fc82f..3a47a0c 100644 --- a/ecdb/trunk/src/ecdb_burn_data_gui.c +++ b/ecdb/trunk/src/ecdb_burn_data_gui.c @@ -17,6 +17,28 @@ static void _button_cb_begin(void *data, Evas_Object *obj, void *event_info); static void _combo_cb_clicked(void *data, Evas_Object *obj, void *event_info); static int _update_capacity(void *data, int type, void *ev_data); +// Config inwin updates +static void _joliet_clicked(void *data, Evas_Object *obj, void *event_info); +static void _rockridge_clicked(void *data, Evas_Object *obj, void *event_info); +static void _symlinks_clicked(void *data, Evas_Object *obj, void *event_info); +static void _hidden_clicked(void *data, Evas_Object *obj, void *event_info); +static void _multi_clicked(void *data, Evas_Object *obj, void *event_info); +static void _sim_clicked(void *data, Evas_Object *obj, void *event_info); +static void _underrun_clicked(void *data, Evas_Object *obj, void *event_info); +static void _apply_clicked(void *data, Evas_Object *obj, void *event_info); +static void _proj_name(void *data, Evas *e, Evas_Object *obj, void *event_info); +static void _settings_clicked(void *data, Evas_Object *obj, void *event_into); + +// Update on showing to proper values +static void _joliet_config(void *data, Evas_Object *obj, void *event_info); +static void _rockridge_config(void *data, Evas_Object *obj, void *event_info); +static void _symlinks_config(void *data, Evas_Object *obj, void *event_info); +static void _hidden_config(void *data, Evas_Object *obj, void *event_info); +static void _multi_config(void *data, Evas_Object *obj, void *event_info); +static void _sim_config(void *data, Evas_Object *obj, void *event_info); +static void _underrun_config(void *data, Evas_Object *obj, void *event_info); +static void _proj_config(void *data, Evas_Object *obj, void *event_info); + static int _update_capacity(void *data, int type, void *ev_data) { @@ -209,6 +231,199 @@ _combo_cb_clicked(void *data, Evas_Object *obj, void *event_info) } } +static void +_joliet_clicked(void *data, Evas_Object *obj, void *event_info) +{ + int state; + Ecdb_Burn_Project *proj; + + proj = data; + state = ecdb_check_checked_get(obj); + proj->use_joliet = state; +} + +static void +_joliet_config(void *data, Evas_Object *obj, void *event_info) +{ + Ecdb_Burn_Project *proj; + + proj = data; + ecdb_check_checked_set(obj, proj->use_joliet); +} + +static void +_rockridge_clicked(void *data, Evas_Object *obj, void *event_info) +{ + int state; + Ecdb_Burn_Project *proj; + + proj = data; + state = ecdb_check_checked_get(obj); + proj->use_rockridge = state; +} + +static void +_rockridge_config(void *data, Evas_Object *obj, void *event_info) +{ + Ecdb_Burn_Project *proj; + + proj = data; + ecdb_check_checked_set(obj, proj->use_rockridge); +} + +static void +_symlinks_clicked(void *data, Evas_Object *obj, void *event_info) +{ + int state; + Ecdb_Burn_Project *proj; + + proj = data; + state = ecdb_check_checked_get(obj); + proj->follow_symlinks = state; +} + +static void +_symlinks_config(void *data, Evas_Object *obj, void *event_info) +{ + Ecdb_Burn_Project *proj; + + proj = data; + ecdb_check_checked_set(obj, proj->follow_symlinks); +} + +static void +_hidden_clicked(void *data, Evas_Object *obj, void *event_info) +{ + int state; + Ecdb_Burn_Project *proj; + + proj = data; + state = ecdb_check_checked_get(obj); + proj->ignore_hidden = state; +} + +static void +_hidden_config(void *data, Evas_Object *obj, void *event_info) +{ + Ecdb_Burn_Project *proj; + + proj = data; + ecdb_check_checked_set(obj, proj->ignore_hidden); +} + +static void +_multi_clicked(void *data, Evas_Object *obj, void *event_info) +{ + int state; + Ecdb_Burn_Project *proj; + + proj = data; + state = ecdb_check_checked_get(obj); + proj->multi = state; +} + +static void +_multi_config(void *data, Evas_Object *obj, void *event_info) +{ + Ecdb_Burn_Project *proj; + + proj = data; + ecdb_check_checked_set(obj, proj->multi); +} + +static void +_sim_clicked(void *data, Evas_Object *obj, void *event_info) +{ + int state; + Ecdb_Burn_Project *proj; + + proj = data; + state = ecdb_check_checked_get(obj); + proj->simulate = state; +} + +static void +_sim_config(void *data, Evas_Object *obj, void *event_info) +{ + Ecdb_Burn_Project *proj; + + proj = data; + ecdb_check_checked_set(obj, proj->simulate); +} + +static void +_underrun_clicked(void *data, Evas_Object *obj, void *event_info) +{ + int state; + Ecdb_Burn_Project *proj; + + proj = data; + state = ecdb_check_checked_get(obj); + proj->underrun_proof = state; +} + +static void +_underrun_config(void *data, Evas_Object *obj, void *event_info) +{ + Ecdb_Burn_Project *proj; + + proj = data; + ecdb_check_checked_set(obj, proj->underrun_proof); +} + +static void +_apply_clicked(void *data, Evas_Object *obj, void *event_info) +{ + ecdb_config_inwin_hide(data); +} + +static void +_proj_name(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + const char *name; + Ecdb_Burn_Project *proj; + + proj = data; + name = ecdb_entry_text_get(obj); + proj->volume_id = strdup(name); +} + +static void +_proj_config(void *data, Evas_Object *obj, void *event_info) +{ + Ecdb_Burn_Project *proj; + + proj = data; + + if (proj->volume_id) + ecdb_entry_text_set(obj, proj->volume_id); + else + ecdb_entry_text_set(obj, "Project Name"); +} + +static void +_settings_clicked(void *data, Evas_Object *obj, void *event_into) +{ + Eina_Iterator *it; + const Evas_Object *table; + Evas_Object *o; + + table = edje_object_part_object_get(data, "ecdb.table"); + it = evas_object_table_iterator_new(table); + + if (!it) + { + printf("_settings_clicked: NULL iterator!\n"); + return; + } + + while (eina_iterator_next(it, (void **)&o)) + evas_object_smart_callback_call(o, "proj_config", NULL); + eina_iterator_free(it); + + ecdb_config_inwin_show(data); +} + void ecdb_burn_data_page_show(void) { @@ -221,7 +436,7 @@ ecdb_burn_data_page_show(void) if (!swallow) { - Evas_Object *b, *c1, *c2; + Evas_Object *b, *c1, *c2, *t; Eina_List *l; Ecdb_Drive_Info *drive; Evas_Coord x, y, w, h; @@ -305,6 +520,7 @@ ecdb_burn_data_page_show(void) b = edje_object_part_swallow_get(swallow, "ecdb/burn_data/filelist"); ecdb_widget_focus_callback_add(b, "ecdb/burn_data/filelist"); + // Use focus out callback here, same as below b = ecdb_entry_add(swallow, "ecdb/burn_data/vol_name"); ecdb_entry_text_set(b, "Volume Name"); evas_object_show(b); @@ -318,6 +534,87 @@ ecdb_burn_data_page_show(void) bdd); evas_object_show(b); bdd->capacity = b; + + t = ecdb_config_inwin_add(swallow, NULL); + + b = ecdb_check_add(t, NULL); + ecdb_check_label_set(b, "Use Joliet"); + evas_object_smart_callback_add(b, "clicked", _joliet_clicked, bdd->proj); + evas_object_smart_callback_add(b, "proj_config", _joliet_config, + bdd->proj); + ecdb_config_inwin_child_add(t, b, 0, 0, 1, 1); + evas_object_show(b); + + b = ecdb_check_add(t, NULL); + ecdb_check_label_set(b, "Use Rockridge"); + evas_object_smart_callback_add(b, "clicked", _rockridge_clicked, + bdd->proj); + evas_object_smart_callback_add(b, "proj_config", _rockridge_config, + bdd->proj); + ecdb_config_inwin_child_add(t, b, 0, 1, 1, 1); + evas_object_show(b); + + b = ecdb_check_add(t, NULL); + ecdb_check_label_set(b, "Follow Symlinks"); + evas_object_smart_callback_add(b, "clicked", _symlinks_clicked, + bdd->proj); + evas_object_smart_callback_add(b, "proj_config", _symlinks_config, + bdd->proj); + ecdb_config_inwin_child_add(t, b, 0, 2, 1, 1); + evas_object_show(b); + + b = ecdb_check_add(t, NULL); + ecdb_check_label_set(b, "Ignore Hidden Files"); + evas_object_smart_callback_add(b, "clicked", _hidden_clicked, bdd->proj); + evas_object_smart_callback_add(b, "proj_config", _hidden_config, + bdd->proj); + ecdb_config_inwin_child_add(t, b, 0, 3, 1, 1); + evas_object_show(b); + + b = ecdb_check_add(t, NULL); + ecdb_check_label_set(b, "Multi-session"); + evas_object_smart_callback_add(b, "clicked", _multi_clicked, bdd->proj); + evas_object_smart_callback_add(b, "proj_config", _multi_config, + bdd->proj); + ecdb_config_inwin_child_add(t, b, 1, 0, 1, 1); + evas_object_show(b); + + b = ecdb_check_add(t, NULL); + ecdb_check_label_set(b, "Simulate"); + evas_object_smart_callback_add(b, "clicked", _sim_clicked, bdd->proj); + evas_object_smart_callback_add(b, "proj_config", _sim_config, bdd->proj); + ecdb_config_inwin_child_add(t, b, 1, 1, 1, 1); + evas_object_show(b); + + b = ecdb_check_add(t, NULL); + ecdb_check_label_set(b, "Use Underrun Proof"); + evas_object_smart_callback_add(b, "clicked", _underrun_clicked, + bdd->proj); + evas_object_smart_callback_add(b, "proj_config", _underrun_config, + bdd->proj); + ecdb_config_inwin_child_add(t, b, 1, 2, 1, 1); + evas_object_show(b); + + b = ecdb_entry_add(t, NULL); + ecdb_entry_text_set(b, "Volume Name"); + evas_object_event_callback_add(b, EVAS_CALLBACK_FOCUS_OUT, + _proj_name, bdd->proj); + evas_object_smart_callback_add(b, "proj_config", _proj_config, + bdd->proj); + ecdb_config_inwin_child_add(t, b, 1, 3, 1, 1); + evas_object_show(b); + + b = ecdb_button_add(t, NULL); + ecdb_button_label_set(b, "Apply"); + evas_object_smart_callback_add(b, "clicked", _apply_clicked, t); + ecdb_config_inwin_child_add(t, b, 0, 4, 2, 1); + evas_object_show(b); + + // At the end so t is a valid pointer + b = ecdb_button_add(swallow, "ecdb/burn_data/settings"); + ecdb_button_label_set(b, "Settings"); + evas_object_smart_callback_add(b, "clicked", _settings_clicked, t); + evas_object_show(b); } else if (edje_object_part_swallow_get(gui, "action_area") != swallow) { diff --git a/ecdb/trunk/src/ecdb_widgets.c b/ecdb/trunk/src/ecdb_widgets.c index 0c4bad8..69d36ef 100644 --- a/ecdb/trunk/src/ecdb_widgets.c +++ b/ecdb/trunk/src/ecdb_widgets.c @@ -321,6 +321,9 @@ ecdb_check_checked_set(Evas_Object *c, int state) return; } + if (cd->checked == state) + return; + if (state) { cd->checked = 1; @@ -1086,12 +1089,11 @@ _config_inwin_resize(void *data, Evas *e, Evas_Object *obj, void *event_info) Config_Inwin_Data *iwd; int w, h; - iwd = evas_object_data_get(data, "iwd"); - if (!iwd) - { - printf("_config_inwin_resize: NULL data\n"); + iwd = data; + + // We get a resize event even though the evas has been destroyed + if ((!em) || (!em->main_win_ee)) return; - } ecore_evas_geometry_get(em->main_win_ee, NULL, NULL, &w, &h); evas_object_resize(iwd->popup, w, h); @@ -1105,15 +1107,10 @@ _config_inwin_hide(void *data, Evas *e, Evas_Object *obj, void *event_info) { Config_Inwin_Data *iwd; - iwd = evas_object_data_get(data, "iwd"); - if (!iwd) - { - printf("_config_inwin_hide: NULL data\n"); - return; - } + iwd = data; - ecore_evas_hide(iwd->popup); - ecore_evas_hide(iwd->back); + evas_object_hide(iwd->popup); + evas_object_hide(iwd->back); } static void @@ -1121,18 +1118,13 @@ _config_inwin_del(void *data, Evas *e, Evas_Object *obj, void *event_info) { Config_Inwin_Data *iwd; - iwd = evas_object_data_get(data, "iwd"); - if (!iwd) - { - printf("_config_inwin_del: NULL data\n"); - return; - } + iwd = data; + FREE(iwd); } Evas_Object * ecdb_config_inwin_add(Evas_Object *parent, const char *name) { - Evas_Object *iw; Config_Inwin_Data *iwd; iwd = calloc(1, sizeof(Config_Inwin_Data)); @@ -1143,7 +1135,7 @@ ecdb_config_inwin_add(Evas_Object *parent, const char *name) } iwd->popup = ecdb_widget_add(parent, NULL); - if (!iw) + if (!iwd->popup) { printf("ecdb_config_inwin_add: NULL return!\n"); return NULL; @@ -1154,13 +1146,13 @@ ecdb_config_inwin_add(Evas_Object *parent, const char *name) evas_object_event_callback_add(parent, EVAS_CALLBACK_RESIZE, _config_inwin_resize, - iwd->popup); + iwd); evas_object_event_callback_add(parent, EVAS_CALLBACK_HIDE, _config_inwin_hide, - iwd->popup); + iwd); evas_object_event_callback_add(iwd->popup, EVAS_CALLBACK_DEL, _config_inwin_del, - iwd->popup); + iwd); iwd->back = edje_object_add(evas_object_evas_get(parent)); edje_object_file_set(iwd->back, em->theme_path, @@ -1168,13 +1160,12 @@ ecdb_config_inwin_add(Evas_Object *parent, const char *name) evas_object_pass_events_set(iwd->back, 1); evas_object_show(iwd->back); - iwd->popup = edje_object_add(evas_object_evas_get(parent)); - iwd->name = eina_stringshare_add(name); - evas_object_data_set(iw, "iwd", iwd); + iwd->parent = parent; + evas_object_data_set(iwd->popup, "iwd", iwd); iwd->visible = 0; - return iw; + return iwd->popup; } void @@ -1197,14 +1188,13 @@ ecdb_config_inwin_show(Evas_Object *inwin) } evas_object_pass_events_set(iwd->back, 0); - evas_object_layer_set(iwd->back, evas_object_layer_get(inwin) + 1); + evas_object_layer_set(iwd->back, evas_object_layer_get(iwd->parent) + 1); edje_object_signal_emit(iwd->back, "ecdb,config_inwin,back,show", "ecdb"); evas_object_pass_events_set(iwd->popup, 0); - evas_object_layer_set(iwd->popup, evas_object_layer_get(inwin->back) + 1); - evas_object_signal_emit(iwd->popup, "ecdb,config_inwin,popup,show", + evas_object_layer_set(iwd->popup, evas_object_layer_get(iwd->back) + 1); + edje_object_signal_emit(iwd->popup, "ecdb,config_inwin,popup,show", "ecdb"); - iwd->visible = 1; } @@ -1238,7 +1228,7 @@ ecdb_config_inwin_hide(Evas_Object *inwin) void ecdb_config_inwin_child_add(Evas_Object *inwin, Evas_Object *child, - int sc, int ec, int sr, int er) + int c, int r, int cs, int rs) { if (!inwin) { @@ -1248,7 +1238,7 @@ ecdb_config_inwin_child_add(Evas_Object *inwin, Evas_Object *child, if (!child) return; - if (!edje_object_part_table_pack(inwin, "ecdb.table", child, sc, sr, ec, er)) + if (!edje_object_part_table_pack(inwin, "ecdb.table", child, c, r, cs, rs)) { printf("ecdb_config_inwin_child_add: Couldn't append to table!\n"); } diff --git a/ecdb/trunk/src/ecdb_widgets.h b/ecdb/trunk/src/ecdb_widgets.h index 0189184..37d042d 100644 --- a/ecdb/trunk/src/ecdb_widgets.h +++ b/ecdb/trunk/src/ecdb_widgets.h @@ -51,9 +51,9 @@ void ecdb_label_text_set(Evas_Object *l, const char *text); Evas_Object *ecdb_config_inwin_add(Evas_Object *parent, const char *name); void ecdb_config_inwin_show(Evas_Object *inwin); -void ecbd_config_inwin_hide(Evas_Object *inwin); +void ecdb_config_inwin_hide(Evas_Object *inwin); void ecdb_config_inwin_child_add(Evas_Object *inwin, Evas_Object *child, - int sc, int ec, - int sr, int er); + int c, int r, + int cs, int rs); #endif