ephysics: changed sandbox layout to toolbar and

naviframe



Patch by: Ricardo de Almeida Gonzaga <ricardo@profusion.mobi>



SVN revision: 78077
This commit is contained in:
Ricardo de Almeida Gonzaga 2012-10-16 23:11:27 +00:00 committed by Bruno Dilly
parent 23d89c2e5a
commit c39bc45d85
1 changed files with 113 additions and 49 deletions

View File

@ -15,7 +15,7 @@
#define INITIAL_IMPULSE (9500) #define INITIAL_IMPULSE (9500)
typedef struct _Sandie_Data { typedef struct _Sandie_Data {
Evas_Object *win; Evas_Object *win, *tb, *nf;
EPhysics_World *world; EPhysics_World *world;
EPhysics_Body *body1, *body2; EPhysics_Body *body1, *body2;
} Sandie_Data; } Sandie_Data;
@ -758,6 +758,12 @@ _body2_hardness_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
_body_hardness_set(obj, sandie->body2); _body_hardness_set(obj, sandie->body2);
} }
static void
_promote(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
elm_naviframe_item_promote(data);
}
static void static void
_sandie_label_add(Evas_Object *win, Evas_Object *bxparent, _sandie_label_add(Evas_Object *win, Evas_Object *bxparent,
const char *subcategory) const char *subcategory)
@ -886,21 +892,61 @@ _category_add(Evas_Object *win, Evas_Object *bxparent, const char *label)
elm_box_horizontal_set(cbx, EINA_FALSE); elm_box_horizontal_set(cbx, EINA_FALSE);
evas_object_size_hint_weight_set(cbx, EVAS_HINT_EXPAND, 0.0); evas_object_size_hint_weight_set(cbx, EVAS_HINT_EXPAND, 0.0);
evas_object_size_hint_align_set(cbx, EVAS_HINT_FILL, 0.0); evas_object_size_hint_align_set(cbx, EVAS_HINT_FILL, 0.0);
elm_box_align_set(cbx, 0.0, 0.5);
elm_object_content_set(cfr, cbx); elm_object_content_set(cfr, cbx);
evas_object_show(cbx); evas_object_show(cbx);
return cbx; return cbx;
} }
static Evas_Object *
_scroller_box_add(Evas_Object *parent, Evas_Object *scbx)
{
Evas_Object *sc = NULL, *bx = NULL;
sc = elm_scroller_add(parent);
elm_scroller_bounce_set(sc, EINA_FALSE, EINA_TRUE);
elm_scroller_policy_set(sc, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_ON);
evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_fill_set(sc, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_box_pack_end(scbx, sc);
evas_object_show(sc);
bx = elm_box_add(parent);
evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(bx, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(bx);
elm_object_content_set(sc, bx);
return bx;
}
static void static void
_menu_body_items_create(void *data, Evas_Object *bxparent) _menu_body_items_create(void *data)
{ {
Sandie_Data *sandie = data; Sandie_Data *sandie = data;
Evas_Object *bx, *dbx, *widget, *aux_widget, *material_widget, *type_widget; Evas_Object *bx, *dbx, *bxbody1, *bxbody2, *scbxbody1, *scbxbody2;
Evas_Object *widget, *aux_widget, *material_widget, *type_widget;
Elm_Object_Item *it;
scbxbody1 = elm_box_add(sandie->win);
evas_object_size_hint_weight_set(scbxbody1, EVAS_HINT_EXPAND,
EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(scbxbody1, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(scbxbody1);
bxbody1 = _scroller_box_add(sandie->win, scbxbody1);
scbxbody2 = elm_box_add(sandie->win);
evas_object_size_hint_weight_set(scbxbody2, EVAS_HINT_EXPAND,
EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(scbxbody2, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(scbxbody2);
bxbody2 = _scroller_box_add(sandie->win, scbxbody2);
//Body 1 //Body 1
bx = _category_add(sandie->win, bxparent, "EPhysics Body 1"); bx = _category_add(sandie->win, bxbody1, "EPhysics Body 1");
type_widget = _sandie_toggle_add(sandie->win, bx, "Body Type", "Solid", type_widget = _sandie_toggle_add(sandie->win, bx, "Body Type", "Solid",
"Soft"); "Soft");
material_widget = _sandie_enum_add(sandie->win, bx, "Body Material"); material_widget = _sandie_enum_add(sandie->win, bx, "Body Material");
@ -1037,8 +1083,16 @@ _menu_body_items_create(void *data, Evas_Object *bxparent)
//evas_object_smart_callback_add(type_widget, "changed", _body1_type_cb, //evas_object_smart_callback_add(type_widget, "changed", _body1_type_cb,
// sandie); // sandie);
it = elm_naviframe_item_insert_before(sandie->nf,
evas_object_data_get(sandie->nf,
"world"),
NULL, NULL, NULL, scbxbody1, NULL);
evas_object_data_set(sandie->nf, "body1", it);
elm_naviframe_item_title_visible_set(it, EINA_FALSE);
it = elm_toolbar_item_append(sandie->tb, NULL, "Body 1", _promote, it);
//Body 2 //Body 2
bx = _category_add(sandie->win, bxparent, "EPhysics Body 2"); bx = _category_add(sandie->win, bxbody2, "EPhysics Body 2");
type_widget = _sandie_toggle_add(sandie->win, bx, "Body Type", "Solid", type_widget = _sandie_toggle_add(sandie->win, bx, "Body Type", "Solid",
"Soft"); "Soft");
material_widget = _sandie_enum_add(sandie->win, bx, "Body Material"); material_widget = _sandie_enum_add(sandie->win, bx, "Body Material");
@ -1173,7 +1227,15 @@ _menu_body_items_create(void *data, Evas_Object *bxparent)
sandie); sandie);
evas_object_data_set(type_widget, "hardness", widget); evas_object_data_set(type_widget, "hardness", widget);
//evas_object_smart_callback_add(type_widget, "changed", _body2_type_cb, //evas_object_smart_callback_add(type_widget, "changed", _body2_type_cb,
// sandie); // sandie);*/
it = elm_naviframe_item_insert_before(sandie->nf,
evas_object_data_get(sandie->nf,
"body1"),
NULL, NULL, NULL, scbxbody2, NULL);
evas_object_data_set(sandie->nf, "body2", it);
elm_naviframe_item_title_visible_set(it, EINA_FALSE);
it = elm_toolbar_item_append(sandie->tb, NULL, "Body 2", _promote, it);
} }
static EPhysics_Body * static EPhysics_Body *
@ -1197,13 +1259,14 @@ _sandie_body_add(Evas_Object *win, EPhysics_World *world, int x, int y)
return body; return body;
} }
static void static void
_menu_items_create(Evas_Object *win, Evas_Object *bxparent, _menu_items_create(Evas_Object *win, Evas_Object *bxparent,
EPhysics_World *world) EPhysics_World *world)
{ {
Evas_Object *bx, *dbx, *widget; Evas_Object *bx, *dbx, *widget;
bx = _category_add(win, bxparent, "EPhysics World"); bx = _category_add(win, bxparent, "World");
dbx = _sandie_double_spinner_box_add(win, bx, "Gravity"); dbx = _sandie_double_spinner_box_add(win, bx, "Gravity");
widget = _sandie_spinner_add(win, dbx, "X:", "%1.2f px/s²", widget = _sandie_spinner_add(win, dbx, "X:", "%1.2f px/s²",
-1000, 1000, 0, 2); -1000, 1000, 0, 2);
@ -1222,7 +1285,7 @@ _menu_items_create(Evas_Object *win, Evas_Object *bxparent,
evas_object_smart_callback_add(widget, "delay,changed", evas_object_smart_callback_add(widget, "delay,changed",
_world_max_sleeping_time_cb, world); _world_max_sleeping_time_cb, world);
bx = _category_add(win, bxparent, "EPhysics Boundaries"); bx = _category_add(win, bxparent, "Boundaries");
widget = _sandie_spinner_add(win, bx, "Friction", "%1.3f", widget = _sandie_spinner_add(win, bx, "Friction", "%1.3f",
0, 1, 0.5, 0.05); 0, 1, 0.5, 0.05);
evas_object_data_set(widget, "win", win); evas_object_data_set(widget, "win", win);
@ -1235,7 +1298,7 @@ _menu_items_create(Evas_Object *win, Evas_Object *bxparent,
} }
static void static void
_world_populate(Sandie_Data *sandie, Evas_Object *bxparent) _world_populate(Sandie_Data *sandie)
{ {
sandie->body1 = _sandie_body_add(sandie->win, sandie->world, (int) WIDTH / 5, sandie->body1 = _sandie_body_add(sandie->win, sandie->world, (int) WIDTH / 5,
(int) HEIGHT / 5); (int) HEIGHT / 5);
@ -1245,7 +1308,7 @@ _world_populate(Sandie_Data *sandie, Evas_Object *bxparent)
ephysics_body_central_impulse_apply(sandie->body1, INITIAL_IMPULSE, 0, 0); ephysics_body_central_impulse_apply(sandie->body1, INITIAL_IMPULSE, 0, 0);
ephysics_body_central_impulse_apply(sandie->body2, -INITIAL_IMPULSE, 0, 0); ephysics_body_central_impulse_apply(sandie->body2, -INITIAL_IMPULSE, 0, 0);
_menu_body_items_create(sandie, bxparent); _menu_body_items_create(sandie);
} }
static void static void
@ -1270,53 +1333,54 @@ _restart(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
-INITIAL_IMPULSE); -INITIAL_IMPULSE);
} }
static Evas_Object * static void
_menu_create(Sandie_Data *sandie) _menu_create(Sandie_Data *sandie)
{ {
Evas_Object *bx, *widget, *label; Evas_Object *mainbx, *scbx, *bx, *btn;
Elm_Object_Item *it;
bx = elm_box_add(sandie->win); mainbx = elm_box_add(sandie->win);
evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_fill_set(mainbx, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_object_part_content_set(evas_object_data_get(sandie->win, "layout"), elm_object_part_content_set(evas_object_data_get(sandie->win, "layout"),
"swallow", bx); "swallow", mainbx);
evas_object_show(bx); evas_object_show(mainbx);
widget = elm_frame_add(sandie->win); btn = elm_button_add(sandie->win);
elm_frame_autocollapse_set(widget, EINA_TRUE); elm_object_text_set(btn, "Restart");
elm_object_text_set(widget, "EPhysics Sandbox"); elm_box_pack_end(mainbx, btn);
elm_box_pack_end(bx, widget); evas_object_size_hint_min_set(btn, 100, 30);
evas_object_show(widget); evas_object_show(btn);
evas_object_smart_callback_add(btn, "clicked", _restart, sandie);
label = elm_label_add(sandie->win); _sandie_label_add(sandie->win, mainbx, "EPhysics Sandbox");
elm_object_text_set(label, "Please modify physical parameters below");
elm_object_content_set(widget, label);
evas_object_show(label);
widget = elm_button_add(sandie->win); sandie->tb = elm_toolbar_add(sandie->win);
elm_object_text_set(widget, "Restart"); evas_object_size_hint_weight_set(sandie->tb, EVAS_HINT_EXPAND, 0);
elm_box_pack_end(bx, widget); evas_object_size_hint_fill_set(sandie->tb, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_size_hint_min_set(widget, 100, 30); elm_toolbar_select_mode_set(sandie->tb, ELM_OBJECT_SELECT_MODE_ALWAYS);
evas_object_show(widget); elm_box_pack_end(mainbx, sandie->tb);
evas_object_smart_callback_add(widget, "clicked", _restart, sandie); evas_object_show(sandie->tb);
widget = elm_scroller_add(sandie->win); sandie->nf = elm_naviframe_add(sandie->win);
elm_scroller_bounce_set(widget, EINA_FALSE, EINA_TRUE); evas_object_size_hint_weight_set(sandie->nf, EVAS_HINT_EXPAND,
elm_scroller_policy_set(widget, ELM_SCROLLER_POLICY_OFF, EVAS_HINT_EXPAND);
ELM_SCROLLER_POLICY_ON); evas_object_size_hint_fill_set(sandie->nf, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_size_hint_weight_set(widget, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); elm_box_pack_end(mainbx, sandie->nf);
evas_object_size_hint_fill_set(widget, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_show(sandie->nf);
elm_box_pack_end(bx, widget);
evas_object_show(widget);
bx = elm_box_add(sandie->win); scbx = elm_box_add(sandie->win);
evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, 0.0); evas_object_size_hint_weight_set(scbx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(bx, EVAS_HINT_FILL, 0.0); evas_object_size_hint_align_set(scbx, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_object_content_set(widget, bx); evas_object_show(scbx);
evas_object_show(bx);
bx = _scroller_box_add(sandie->win, scbx);
_menu_items_create(sandie->win, bx, sandie->world); _menu_items_create(sandie->win, bx, sandie->world);
return bx; it = elm_naviframe_item_push(sandie->nf, NULL, NULL, NULL, scbx, NULL);
evas_object_data_set(sandie->nf, "world", it);
elm_naviframe_item_title_visible_set(it, EINA_FALSE);
it = elm_toolbar_item_append(sandie->tb, NULL, "World", _promote, it);
} }
static EPhysics_World * static EPhysics_World *
@ -1341,7 +1405,7 @@ EAPI int
elm_main() elm_main()
{ {
Sandie_Data *sandie; Sandie_Data *sandie;
Evas_Object *layout, *bxparent; Evas_Object *layout;
short int r = 0; short int r = 0;
if (!ephysics_init()) if (!ephysics_init())
@ -1381,9 +1445,9 @@ elm_main()
sandie->world = _sandie_world_add(sandie->win); sandie->world = _sandie_world_add(sandie->win);
bxparent = _menu_create(sandie); _menu_create(sandie);
_world_populate(sandie, bxparent); _world_populate(sandie);
elm_run(); elm_run();