part { name: "button_image";
mouse_events: 1;
description { state: "default" 0.0;
+ min: 15 15;
image {
normal: "bt_base2.png";
border: 7 7 7 7;
fixed: 1 0;
visible: 1;
aspect: 1.0 1.0;
- aspect_preference: VERTICAL;
+// aspect_preference: VERTICAL;
rel2.offset: 4 -5;
}
description { state: "icononly" 0.0;
fixed: 0 0;
visible: 1;
align: 0.5 0.5;
- aspect: 1.0 1.0;
+// aspect: 1.0 1.0;
rel2.offset: -5 -5;
rel2.relative: 1.0 1.0;
- aspect_preference: VERTICAL;
+// aspect_preference: VERTICAL;
}
}
part {
size: 10;
min: 0 0;
align: 0.5 0.5;
+ text_class: "button";
}
}
description { state: "visible" 0.0;
}
description { state: "clicked" 0.0;
inherit: "default" 0.0;
- visible: 1;
color: 255 255 255 255;
}
}
program {
name: "button_unclick";
signal: "mouse,up,1";
- source: "over2";
+ source: "over3";
action: SIGNAL_EMIT "elm,action,unpress" "";
after: "button_unclick_anim";
}
program {
+ name: "button_pressed_anim";
+ signal: "elm,anim,activate";
+ source: "elm";
+ action: STATE_SET "clicked" 0.0;
+ target: "button_image";
+ target: "over3";
+ after: "button_unpressed_anim";
+ }
+ program {
+ name: "button_unpressed_anim";
+ action: STATE_SET "default" 0.0;
+ transition: DECELERATE 0.5;
+ target: "button_image";
+ target: "over3";
+ }
+ program {
name: "button_unclick_anim";
action: STATE_SET "default" 0.0;
target: "button_image";
}
program {
name: "button_unclick3";
- signal: "mouse,up,1";
+ signal: "mouse,clicked,1";
source: "over2";
action: SIGNAL_EMIT "elm,action,click" "";
}
size: 10;
min: 0 0;
align: 0.5 0.5;
+ text_class: "button";
}
}
description { state: "visible" 0.0;
size: 10;
min: 0 0;
align: 0.5 0.5;
+ text_class: "button";
}
}
description { state: "visible" 0.0;
part { name: "button_image";
mouse_events: 1;
description { state: "default" 0.0;
+ min: 15 15;
color: 255 255 255 0;
image {
normal: "bt_base2.png";
size: 10;
min: 0 0;
align: 0.5 0.5;
+ text_class: "button";
}
}
description { state: "visible" 0.0;
image: "arrow_right.png" COMP;
image: "arrow_left.png" COMP;
}
+ script {
+ public state_pair = 0; //0:both content are not set, 1:both content are set
+ }
parts
{
part
{
name: "whole";
type: RECT;
- mouse_events: 0;
+ mouse_events: 1;
description
{
state: "default" 0.0;
y: 0 0 0;
}
description { state: "default" 0.0;
- max: 15 9999;
- min: 15 100;
+ max: 0 999;
+ min: 0 100;
rel1.relative: 0.0 0.5;
rel2.relative: 1.0 0.5;
image {
}
image.middle: SOLID;
}
+ description { state: "default" 0.1;
+ inherit: "default" 0.0;
+ max: 15 999;
+ min: 15 100;
+ }
description { state: "clicked" 0.0;
inherit: "default" 0.0;
image.normal: "bt_base1.png";
image.middle: SOLID;
}
+ description { state: "clicked" 0.1;
+ inherit: "default" 0.1;
+ image.normal: "bt_base1.png";
+ image.middle: SOLID;
+ }
description { state: "disabled" 0.0;
inherit: "default" 0.0;
image {
border: 4 4 4 4;
}
}
+ description { state: "disabled" 0.1;
+ inherit: "default" 0.1;
+ image {
+ normal: "bt_dis_base.png";
+ border: 4 4 4 4;
+ }
+ }
}
part { name: "over1";
mouse_events: 0;
//Arrow
part {
name: "arrow_right";
+ mouse_events: 0;
description { state: "default" 0.0;
min: 45 45;
max: 45 45;
}
part {
name: "arrow_left";
+ mouse_events: 0;
description { state: "default" 0.0;
min: 45 45;
max: 45 45;
rel2.offset: (-45/2 - 20) 45/2;
}
}
+ part { name: "movement.decider";
+ mouse_events: 1;
+ description { state: "default" 0.0;
+ rel1.to: "elm.bar";
+ rel2.to: "elm.bar";
+ visible: 0;
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
}
programs {
}
program {
name: "button_click_anim";
- action: STATE_SET "clicked" 0.0;
- target: "elm.bar";
+ script {
+ if(get_int(state_pair) == 1)
+ set_state(PART:"elm.bar", "clicked", 0.1);
+ else
+ set_state(PART:"elm.bar", "clicked", 0.0);
+ }
}
program {
name: "button_unclick";
}
program {
name: "button_unclick_anim";
- action: STATE_SET "default" 0.0;
- target: "elm.bar";
+ script {
+ if(get_int(state_pair) == 1)
+ set_state(PART:"elm.bar", "default", 0.1);
+ else
+ set_state(PART:"elm.bar", "default", 0.0);
+ }
}
program {
name: "button_click2";
target: "arrow_left";
transition: DECELERATE 0.4;
}
+ //fix the pane
+ program {
+ name: "panes_fixed";
+ signal: "elm.panes.fixed";
+ source: "elm";
+ action: STATE_SET "disabled" 0.0;
+ target: "movement.decider";
+ target: "elm.bar";
+ }
+ //allow the movement by interaction
+ program {
+ name: "panes_unfixed";
+ signal: "elm.panes.unfixed";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "movement.decider";
+ target: "elm.bar";
+ }
+ program {
+ name: "panes_pair";
+ signal: "elm.panes.pair";
+ source: "elm";
+ script {
+ new st[31];
+ new Float:vl;
+ set_int(state_pair, 1);
+ get_state(PART:"elm.bar", st, 30, vl);
+ set_state(PART:"elm.bar", st, 0.1);
+ }
+ }
+ program {
+ name: "panes_unpair";
+ signal: "elm.panes.unpair";
+ source: "elm";
+ script {
+ new st[31];
+ new Float:vl;
+ set_int(state_pair, 0);
+ get_state(PART:"elm.bar", st, 30, vl);
+ set_state(PART:"elm.bar", st, 0.0);
+ }
+ }
}
}
image: "arrow_up.png" COMP;
image: "arrow_down.png" COMP;
}
+ script {
+ public state_pair = 0; //0:both content are not set, 1:both content are set
+ }
parts
{
part
{
name: "whole";
type: RECT;
- mouse_events: 0;
+ mouse_events: 1;
description
{
state: "default" 0.0;
y: 1 1 1;
}
description { state: "default" 0.0;
- max: 999 15;
- min: 100 15;
+ max: 999 0;
+ min: 100 0;
rel1.relative: 0.5 0.0;
rel2.relative: 0.5 1.0;
image {
}
image.middle: SOLID;
}
+ description { state: "default" 0.1;
+ inherit: "default" 0.0;
+ max: 999 15;
+ min: 100 15;
+ }
description { state: "clicked" 0.0;
inherit: "default" 0.0;
image.normal: "bt_base1.png";
image.middle: SOLID;
}
+ description { state: "clicked" 0.1;
+ inherit: "default" 0.1;
+ image.normal: "bt_base1.png";
+ image.middle: SOLID;
+ }
description { state: "disabled" 0.0;
inherit: "default" 0.0;
image {
border: 4 4 4 4;
}
}
+ description { state: "disabled" 0.1;
+ inherit: "default" 0.1;
+ image {
+ normal: "bt_dis_base.png";
+ border: 4 4 4 4;
+ }
+ }
}
part { name: "over1";
mouse_events: 0;
rel2.offset: 45/2 (-45/2 - 20);
}
}
+ part {
+ name: "movement.decider";
+ mouse_events: 1;
+ description { state: "default" 0.0;
+ rel1.to: "elm.bar";
+ rel2.to: "elm.bar";
+ visible: 0;
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
}
programs {
after: "button_click_anim";
after: "arrow_anim_start";
}
- program {
- name: "button_click_anim";
- action: STATE_SET "clicked" 0.0;
- target: "elm.bar";
- }
+ program {
+ name: "button_click_anim";
+ script {
+ if(get_int(state_pair) == 1)
+ set_state(PART:"elm.bar", "clicked", 0.1);
+ else
+ set_state(PART:"elm.bar", "clicked", 0.0);
+ }
+ }
program {
name: "button_unclick";
signal: "mouse,up,1";
after: "button_unclick_anim";
after: "arrow_anim_stop";
}
- program {
- name: "button_unclick_anim";
- action: STATE_SET "default" 0.0;
- target: "elm.bar";
- }
+ program {
+ name: "button_unclick_anim";
+ script {
+ if(get_int(state_pair) == 1)
+ set_state(PART:"elm.bar", "default", 0.1);
+ else
+ set_state(PART:"elm.bar", "default", 0.0);
+ }
+ }
program {
name: "button_click2";
signal: "mouse,down,1";
target: "arrow_left";
transition: DECELERATE 0.4;
}
+ //fix the pane
+ program {
+ name: "panes_fixed";
+ signal: "elm.panes.fixed";
+ source: "elm";
+ action: STATE_SET "disabled" 0.0;
+ target: "movement.decider";
+ target: "elm.bar";
+ }
+ //allow the movement by interaction
+ program {
+ name: "panes_unfixed";
+ signal: "elm.panes.unfixed";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "movement.decider";
+ target: "elm.bar";
+ }
+ program {
+ name: "panes_pair";
+ signal: "elm.panes.pair";
+ source: "elm";
+ script {
+ new st[31];
+ new Float:vl;
+ set_int(state_pair, 1);
+ get_state(PART:"elm.bar", st, 30, vl);
+ set_state(PART:"elm.bar", st, 0.1);
+ }
+ }
+ program {
+ name: "panes_unpair";
+ signal: "elm.panes.unpair";
+ source: "elm";
+ script {
+ new st[31];
+ new Float:vl;
+ set_int(state_pair, 0);
+ get_state(PART:"elm.bar", st, 30, vl);
+ set_state(PART:"elm.bar", st, 0.0);
+ }
+ }
}
}
#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
#ifndef ELM_LIB_QUICKLAUNCH
static void
-_bt_repeated(void *data, Evas_Object *obj, void *event_info)
+_bt_repeated(void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
+{
+ static int count;
+ char buf[16];
+
+ snprintf(buf, sizeof(buf), "count=%d", count++);
+ if (count >= 10000)
+ count = 0;
+ elm_button_label_set(obj, buf);
+}
+
+static void
+_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+ int param = (int)(data);
+
+ printf("clicked event on Button:%d\n", param);
+}
+
+static void
+_bt_unpressed(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
- static int count;
- char buf[16];
+ int param = (int)(data);
- snprintf(buf, sizeof(buf), "count=%d", count++);
- if (count >= 10000)
- count = 0;
- elm_button_label_set(obj, buf);
+ printf("unpressed event on Button:%d\n", param);
}
void
-test_button(void *data, Evas_Object *obj, void *event_info)
+test_button(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
- Evas_Object *win, *bg, *bx, *ic, *bt;
+ Evas_Object *win, *bg, *scr, *bx, *ic, *bt;
char buf[PATH_MAX];
win = elm_win_add(NULL, "buttons", ELM_WIN_BASIC);
evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_show(bg);
+ scr = elm_scroller_add(win);
+ elm_scroller_bounce_set(scr, EINA_FALSE, EINA_TRUE);
+ elm_scroller_policy_set(scr, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
+ elm_win_resize_object_add(win, scr);
+ evas_object_show(scr);
+ evas_object_size_hint_weight_set(scr, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
bx = elm_box_add(win);
evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- elm_win_resize_object_add(win, bx);
+ elm_scroller_content_set(scr, bx);
evas_object_show(bx);
ic = elm_icon_add(win);
bt = elm_button_add(win);
elm_button_label_set(bt, "Icon sized to button");
elm_button_icon_set(bt, ic);
+ evas_object_smart_callback_add(bt, "clicked", _bt_clicked, (void *)1);
+ evas_object_smart_callback_add(bt, "unpressed", _bt_unpressed, (void *)1);
elm_box_pack_end(bx, bt);
evas_object_show(bt);
evas_object_show(ic);
- ic = elm_icon_add(win);
+ ic = elm_icon_add(bx);
snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
elm_icon_file_set(ic, buf, NULL);
elm_icon_scale_set(ic, 0, 0);
bt = elm_button_add(win);
elm_button_label_set(bt, "Icon no scale");
elm_button_icon_set(bt, ic);
+ evas_object_smart_callback_add(bt, "clicked", _bt_clicked, (void *)2);
+ evas_object_smart_callback_add(bt, "unpressed", _bt_unpressed, (void *)2);
elm_box_pack_end(bx, bt);
evas_object_show(bt);
evas_object_show(ic);
elm_button_label_set(bt, "Disabled Button");
elm_button_icon_set(bt, ic);
elm_object_disabled_set(bt, 1);
+ evas_object_smart_callback_add(bt, "clicked", _bt_clicked, (void *)3);
+ evas_object_smart_callback_add(bt, "unpressed", _bt_unpressed, (void *)3);
elm_box_pack_end(bx, bt);
evas_object_show(bt);
evas_object_show(ic);
bt = elm_button_add(win);
elm_button_icon_set(bt, ic);
elm_object_disabled_set(bt, 1);
+ evas_object_smart_callback_add(bt, "clicked", _bt_clicked, (void *)4);
+ evas_object_smart_callback_add(bt, "unpressed", _bt_unpressed, (void *)4);
elm_box_pack_end(bx, bt);
evas_object_show(bt);
evas_object_show(ic);
bt = elm_button_add(win);
elm_button_label_set(bt, "Label Only");
+ evas_object_smart_callback_add(bt, "clicked", _bt_clicked, (void *)5);
+ evas_object_smart_callback_add(bt, "unpressed", _bt_unpressed, (void *)5);
elm_box_pack_end(bx, bt);
evas_object_smart_callback_add(bt, "repeated", _bt_repeated, NULL);
elm_button_autorepeat_set(bt, 1);
elm_icon_scale_set(ic, 0, 0);
bt = elm_button_add(win);
elm_button_icon_set(bt, ic);
+ evas_object_smart_callback_add(bt, "clicked", _bt_clicked, (void *)6);
+ evas_object_smart_callback_add(bt, "unpressed", _bt_unpressed, (void *)6);
elm_box_pack_end(bx, bt);
evas_object_show(bt);
evas_object_show(ic);
-
bt = elm_button_add(win);
elm_object_style_set(bt, "anchor");
elm_button_label_set(bt, "Anchor style");
+ evas_object_smart_callback_add(bt, "clicked", _bt_clicked, (void *)7);
+ evas_object_smart_callback_add(bt, "unpressed", _bt_unpressed, (void *)7);
elm_box_pack_end(bx, bt);
evas_object_show(bt);
bt = elm_button_add(win);
elm_object_style_set(bt, "anchor");
elm_button_icon_set(bt, ic);
+ evas_object_smart_callback_add(bt, "clicked", _bt_clicked, (void *)8);
+ evas_object_smart_callback_add(bt, "unpressed", _bt_unpressed, (void *)8);
elm_box_pack_end(bx, bt);
evas_object_show(bt);
evas_object_show(ic);
-
ic = elm_icon_add(win);
snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
elm_icon_file_set(ic, buf, NULL);
elm_object_style_set(bt, "anchor");
elm_button_icon_set(bt, ic);
elm_object_disabled_set(bt, 1);
+ evas_object_smart_callback_add(bt, "clicked", _bt_clicked, (void *)9);
+ evas_object_smart_callback_add(bt, "unpressed", _bt_unpressed, (void *)9);
elm_box_pack_end(bx, bt);
evas_object_show(bt);
evas_object_show(ic);
-
+ evas_object_resize(win, 320, 480);
evas_object_show(win);
}
#endif
#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
#ifndef ELM_LIB_QUICKLAUNCH
static double size = 0.0;
static void
-_press(void *data, Evas_Object *obj, void *event_info)
+_press(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
printf("press\n");
}
static void
-_unpress(void *data, Evas_Object *obj, void *event_info)
+_unpress(void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
{
printf("unpress, size : %f\n", elm_panes_content_left_size_get(obj));
}
static void
-_clicked(void *data, Evas_Object *obj, void *event_info)
+_clicked(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
printf("clicked\n");
}
static void
-_clicked_double(void *data, Evas_Object *obj, void *event_info)
+_clicked_double(void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
{
printf("clicked double\n");
if(elm_panes_content_left_size_get(obj) > 0)
void
-test_panes(void *data, Evas_Object *obj, void *event_info)
+test_panes(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
Evas_Object *win, *bg, *panes, *panes_h, *bt;
bg = elm_bg_add(win);
elm_win_resize_object_add(win, bg);
evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_win_focus_highlight_enabled_set(win, EINA_TRUE);
evas_object_show(bg);
panes = elm_panes_add(win);
EAPI void elm_box_unpack_all(Evas_Object *obj);
/* smart callbacks called:
*/
+
typedef enum
{
UIControlStateDefault,
UIControlStateReserved
} UIControlState;
- EAPI Evas_Object *elm_button_add(Evas_Object *parent);
- EAPI void elm_button_label_set(Evas_Object *obj, const char *label);
+ /* button */
+ EAPI Evas_Object *elm_button_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
+ EAPI void elm_button_label_set(Evas_Object *obj, const char *label) EINA_ARG_NONNULL(1);
EAPI void elm_button_label_set_for_state(Evas_Object *obj, const char *label, UIControlState state);
- EAPI const char *elm_button_label_get(const Evas_Object *obj);
+ EAPI const char *elm_button_label_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
EAPI const char *elm_button_label_get_for_state(const Evas_Object *obj, UIControlState state);
- EAPI void elm_button_icon_set(Evas_Object *obj, Evas_Object *icon);
- EAPI Evas_Object *elm_button_icon_get(const Evas_Object *obj);
- EAPI void elm_button_autorepeat_set(Evas_Object *obj, Eina_Bool on);
- EAPI void elm_button_autorepeat_initial_timeout_set(Evas_Object *obj, double t);
- EAPI void elm_button_autorepeat_gap_timeout_set(Evas_Object *obj, double t);
+ EAPI void elm_button_icon_set(Evas_Object *obj, Evas_Object *icon) EINA_ARG_NONNULL(1);
+ EAPI Evas_Object *elm_button_icon_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+ EAPI Evas_Object *elm_button_icon_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
+ EAPI void elm_button_autorepeat_set(Evas_Object *obj, Eina_Bool on) EINA_ARG_NONNULL(1);
+ EAPI Eina_Bool elm_button_autorepeat_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+ EAPI void elm_button_autorepeat_initial_timeout_set(Evas_Object *obj, double t) EINA_ARG_NONNULL(1);
+ EAPI double elm_button_autorepeat_initial_timeout_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+ EAPI void elm_button_autorepeat_gap_timeout_set(Evas_Object *obj, double t) EINA_ARG_NONNULL(1);
+ EAPI double elm_button_autorepeat_gap_timeout_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+ /* available styles:
+ * default
+ * anchor
+ * hoversel_vertical
+ * hoversel_vertical_entry
+ */
+ /* smart callbacks called:
+ * "clicked" - the user clicked the button
+ * "repeated" - the user pressed the button without releasing it
+ * "unpressed" - when the button is unpressed (released)
+ */
+ /* fileselector */
EAPI Evas_Object *elm_fileselector_button_add(Evas_Object *parent);
EAPI void elm_fileselector_button_label_set(Evas_Object *obj, const char *label);
EAPI const char *elm_fileselector_button_label_get(const Evas_Object *obj);
EAPI void elm_fileselector_button_selected_set(Evas_Object *obj, const char *path);
EAPI const char *elm_fileselector_button_selected_get(const Evas_Object *obj);
- /* available styles:
- * default
- * anchor
- * hoversel_vertical
- * hoversel_vertical_entry
- */
- /* smart callbacks called:
- * "clicked" - the user clicked the button
- * "repeated" - the user pressed the button without releasing it
- * "unpressed" - when the button is unpressed (released)
- */
typedef enum _Elm_Scroller_Policy
{
* Update the minimun height of the bar in the theme. No minimun should be set in the vertical theme
* Add events (move, start ...)
*/
- EAPI Evas_Object *elm_panes_add(Evas_Object *parent);
- EAPI void elm_panes_content_left_set(Evas_Object *obj, Evas_Object *content);
- EAPI void elm_panes_content_right_set(Evas_Object *obj, Evas_Object *content);
- EAPI Evas_Object *elm_panes_content_left_get(const Evas_Object *obj);
- EAPI Evas_Object *elm_panes_content_right_get(const Evas_Object *obj);
- EAPI Evas_Object *elm_panes_content_left_unset(Evas_Object *obj);
- EAPI Evas_Object *elm_panes_content_right_unset(Evas_Object *obj);
- EAPI double elm_panes_content_left_size_get(const Evas_Object *obj);
- EAPI void elm_panes_content_left_size_set(Evas_Object *obj, double size);
- EAPI void elm_panes_horizontal_set(Evas_Object *obj, Eina_Bool horizontal);
- EAPI Eina_Bool elm_panes_horizontal_get(const Evas_Object *obj);
- EAPI void elm_panes_fixed_set(Evas_Object *obj, Eina_Bool fixed);
- EAPI Eina_Bool elm_panes_fixed_get(const Evas_Object *obj);
-
+ EAPI Evas_Object *elm_panes_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
+ EAPI void elm_panes_content_left_set(Evas_Object *obj, Evas_Object *content) EINA_ARG_NONNULL(1);
+ EAPI void elm_panes_content_right_set(Evas_Object *obj, Evas_Object *content) EINA_ARG_NONNULL(1);
+ EAPI Evas_Object *elm_panes_content_left_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+ EAPI Evas_Object *elm_panes_content_right_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+ EAPI Evas_Object *elm_panes_content_left_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
+ EAPI Evas_Object *elm_panes_content_right_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
+ EAPI double elm_panes_content_left_size_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+ EAPI void elm_panes_content_left_size_set(Evas_Object *obj, double size) EINA_ARG_NONNULL(1);
+ EAPI void elm_panes_horizontal_set(Evas_Object *obj, Eina_Bool horizontal) EINA_ARG_NONNULL(1);
+ EAPI Eina_Bool elm_panes_horizontal_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+ EAPI void elm_panes_fixed_set(Evas_Object *obj, Eina_Bool fixed) EINA_ARG_NONNULL(1);
+ EAPI Eina_Bool elm_panes_fixed_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
/* flip */
typedef enum _Elm_Flip_Mode
{
static void _signal_pressed(void *data, Evas_Object *obj, const char *emission, const char *source);
static void _signal_unpressed(void *data, Evas_Object *obj, const char *emission, const char *source);
static void _on_focus_hook(void *data, Evas_Object *obj);
+static void _activate(Evas_Object *obj);
+static void _activate_hook(Evas_Object *obj);
+static Eina_Bool _event_hook(Evas_Object *obj, Evas_Object *src,
+ Evas_Callback_Type type, void *event_info);
+
static void _set_label(Evas_Object *obj, const char *label);
static void _signal_default_text_set(void *data, Evas_Object *obj, const char *emission, const char *source);
{NULL, NULL}
};
+static Eina_Bool
+_event_hook(Evas_Object *obj, Evas_Object *src __UNUSED__, Evas_Callback_Type type, void *event_info)
+{
+ if (type != EVAS_CALLBACK_KEY_DOWN) return EINA_FALSE;
+ Evas_Event_Key_Down *ev = event_info;
+ Widget_Data *wd = elm_widget_data_get(obj);
+ if (!wd) return EINA_FALSE;
+ if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return EINA_FALSE;
+ if (elm_widget_disabled_get(obj)) return EINA_FALSE;
+ if ((strcmp(ev->keyname, "Return")) &&
+ (strcmp(ev->keyname, "KP_Enter")) &&
+ (strcmp(ev->keyname, "space")))
+ return EINA_FALSE;
+ _activate(obj);
+ ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
+ edje_object_signal_emit(wd->btn, "elm,anim,activate", "elm");
+ return EINA_TRUE;
+}
+
static void
_del_hook(Evas_Object *obj)
{
{
_set_label(obj, wd->statelabel[FOCUSED]);
}
- edje_object_signal_emit(wd->btn, "elm,action,focus", "elm");
- evas_object_focus_set(wd->btn, EINA_TRUE);
+ edje_object_signal_emit(wd->btn, "elm,action,focus", "elm");
+ evas_object_focus_set(wd->btn, EINA_TRUE);
}
else
{
else
_set_label(obj, wd->label);
#endif
- edje_object_signal_emit(wd->btn, "elm,action,unfocus", "elm");
- evas_object_focus_set(wd->btn, EINA_FALSE);
+ edje_object_signal_emit(wd->btn, "elm,action,unfocus", "elm");
+ evas_object_focus_set(wd->btn, EINA_FALSE);
}
}
_theme_hook(Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
+ const char *str;
if (!wd) return;
_elm_theme_object_set(obj, wd->btn, "button", "base", elm_widget_style_get(obj));
-
if (wd->icon)
edje_object_part_swallow(wd->btn, "elm.swallow.content", wd->icon);
-
if (wd->label)
edje_object_signal_emit(wd->btn, "elm,state,text,visible", "elm");
else
- edje_object_signal_emit(wd->btn, "elm,state,text,hidden", "elm");
-
+ edje_object_signal_emit(wd->btn, "elm,state,text,hidden", "elm");
if (wd->icon)
edje_object_signal_emit(wd->btn, "elm,state,icon,visible", "elm");
else
edje_object_signal_emit(wd->btn, "elm,state,icon,hidden", "elm");
-
edje_object_part_text_set(wd->btn, "elm.text", wd->label);
if (elm_object_disabled_get(obj))
edje_object_signal_emit(wd->btn, "elm,state,disabled", "elm");
edje_object_message_signal_process(wd->btn);
edje_object_scale_set(wd->btn, elm_widget_scale_get(obj) * _elm_config->scale);
+ str = edje_object_data_get(wd->btn, "focus_highlight");
+ if ((str) && (!strcmp(str, "on")))
+ elm_widget_highlight_in_theme_set(obj, EINA_TRUE);
+ else
+ elm_widget_highlight_in_theme_set(obj, EINA_FALSE);
_sizing_eval(obj);
}
}
static void
+_signal_emit_hook(Evas_Object *obj, const char *emission, const char *source)
+{
+ Widget_Data *wd = elm_widget_data_get(obj);
+ if (!wd) return;
+ edje_object_signal_emit(wd->btn, emission, source);
+}
+
+static void
+_signal_callback_add_hook(Evas_Object *obj, const char *emission, const char *source, void (*func_cb) (void *data, Evas_Object *o, const char *emission, const char *source), void *data)
+{
+ Widget_Data *wd = elm_widget_data_get(obj);
+ if (!wd) return;
+ edje_object_signal_callback_add(wd->btn, emission, source, func_cb, data);
+}
+
+static void
+_signal_callback_del_hook(Evas_Object *obj, const char *emission, const char *source, void (*func_cb) (void *data, Evas_Object *o, const char *emission, const char *source), void *data)
+{
+ Widget_Data *wd = elm_widget_data_get(obj);
+ edje_object_signal_callback_del_full(wd->btn, emission, source, func_cb,
+ data);
+}
+
+static void
_sizing_eval(Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
if (sub == wd->icon)
{
- edje_object_signal_emit(wd->btn, "elm,state,icon,hidden", "elm");
- evas_object_event_callback_del_full(sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
+ edje_object_signal_emit(wd->btn, "elm,state,icon,hidden", "elm");
+ evas_object_event_callback_del_full(sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
_changed_size_hints, obj);
- wd->icon = NULL;
- edje_object_message_signal_process(wd->btn);
- _sizing_eval(obj);
+ wd->icon = NULL;
+ edje_object_message_signal_process(wd->btn);
+ _sizing_eval(obj);
}
}
static void
-_signal_clicked(void *data, Evas_Object *obj, const char *emission, const char *source)
+_activate(Evas_Object *obj)
{
- Widget_Data *wd = elm_widget_data_get(data);
+ Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
if (wd->timer)
{
- ecore_timer_del(wd->timer);
- wd->timer = NULL;
+ ecore_timer_del(wd->timer);
+ wd->timer = NULL;
}
wd->repeating = EINA_FALSE;
- evas_object_smart_callback_call(data, SIG_CLICKED, NULL);
+ evas_object_smart_callback_call(obj, SIG_CLICKED, NULL);
+}
+
+static void
+_activate_hook(Evas_Object *obj)
+{
+ _activate(obj);
+}
+
+static void
+_signal_clicked(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
+{
+ _activate(data);
}
static Eina_Bool
evas_object_smart_callback_call(data, SIG_REPEATED, NULL);
if (!wd->repeating)
{
- wd->timer = NULL;
- return ECORE_CALLBACK_CANCEL;
+ wd->timer = NULL;
+ return ECORE_CALLBACK_CANCEL;
}
+
return ECORE_CALLBACK_RENEW;
}
{
_set_label(data, wd->statelabel[HIGHLIGHTED]);
}
- if (wd->autorepeat && !wd->repeating)
+ if ((wd->autorepeat) && (!wd->repeating))
{
- if (wd->ar_threshold <= 0.0)
- _autorepeat_initial_send(data); /* call immediately */
- else
- wd->timer = ecore_timer_add(wd->ar_threshold, _autorepeat_initial_send, data);
+ if (wd->ar_threshold <= 0.0)
+ _autorepeat_initial_send(data); /* call immediately */
+ else
+ wd->timer = ecore_timer_add(wd->ar_threshold, _autorepeat_initial_send, data);
}
}
if (wd->timer)
{
- ecore_timer_del(wd->timer);
- wd->timer = NULL;
+ ecore_timer_del(wd->timer);
+ wd->timer = NULL;
}
wd->repeating = EINA_FALSE;
evas_object_smart_callback_call(data, SIG_UNPRESSED, NULL);
Evas *e;
Widget_Data *wd;
+ EINA_SAFETY_ON_NULL_RETURN_VAL(parent, NULL);
+
wd = ELM_NEW(Widget_Data);
e = evas_object_evas_get(parent);
+ if (!e) return NULL;
obj = elm_widget_add(e);
ELM_SET_WIDTYPE(widtype, "button");
elm_widget_type_set(obj, "button");
- elm_widget_can_focus_set(obj, EINA_TRUE);
elm_widget_sub_object_add(parent, obj);
elm_widget_on_focus_hook_set( obj, _on_focus_hook, NULL );
elm_widget_data_set(obj, wd);
elm_widget_del_hook_set(obj, _del_hook);
elm_widget_theme_hook_set(obj, _theme_hook);
elm_widget_disable_hook_set(obj, _disable_hook);
+ elm_widget_can_focus_set(obj, EINA_TRUE);
+ elm_widget_activate_hook_set(obj, _activate_hook);
+ elm_widget_event_hook_set(obj, _event_hook);
+ elm_widget_signal_emit_hook_set(obj, _signal_emit_hook);
+ elm_widget_signal_callback_add_hook_set(obj, _signal_callback_add_hook);
+ elm_widget_signal_callback_del_hook_set(obj, _signal_callback_del_hook);
wd->btn = edje_object_add(e);
_elm_theme_object_set(obj, wd->btn, "button", "base", "default");
evas_object_smart_callback_add(obj, "sub-object-del", _sub_del, obj);
- _sizing_eval(obj);
+ _theme_hook(obj);
// TODO: convert Elementary to subclassing of Evas_Smart_Class
// TODO: and save some bytes, making descriptions per-class and not instance!
* Set the icon used for the button
*
* Once the icon object is set, a previously set one will be deleted
+ * If you want to keep that old content object, use the
+ * elm_button_icon_unset() function.
*
* @param[in] obj The button object
* @param[in] icon The image for the button
wd->icon = icon;
if (icon)
{
- elm_widget_sub_object_add(obj, icon);
- evas_object_event_callback_add(icon, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
- _changed_size_hints, obj);
- edje_object_part_swallow(wd->btn, "elm.swallow.content", icon);
- edje_object_signal_emit(wd->btn, "elm,state,icon,visible", "elm");
- edje_object_message_signal_process(wd->btn);
+ elm_widget_sub_object_add(obj, icon);
+ evas_object_event_callback_add(icon, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
+ _changed_size_hints, obj);
+ edje_object_part_swallow(wd->btn, "elm.swallow.content", icon);
+ edje_object_signal_emit(wd->btn, "elm,state,icon,visible", "elm");
+ edje_object_message_signal_process(wd->btn);
}
_sizing_eval(obj);
}
/**
* Get the icon used for the button
*
+ * Return the icon object which is set for this widget.
* @param[in] obj The button object
- * @return The image for the button
+ * @return The icon object that is being used
*
* @ingroup Button
*/
}
/**
+ * Unset the icon used for the button
+ *
+ * Unparent and return the icon object which was set for this widget.
+ *
+ * @param[in] obj The button object
+ * @return The icon object that was being used
+ *
+ * @ingroup Button
+ */
+EAPI Evas_Object *
+elm_button_icon_unset(Evas_Object *obj)
+{
+ ELM_CHECK_WIDTYPE(obj, widtype) NULL;
+ Widget_Data *wd = elm_widget_data_get(obj);
+ if (!wd) return NULL;
+ if (!wd->icon) return NULL;
+ Evas_Object *icon = wd->icon;
+ elm_widget_sub_object_del(obj, wd->icon);
+ edje_object_part_unswallow(wd->btn, wd->icon);
+ wd->icon = NULL;
+ return icon;
+}
+
+/**
* Turn on/off the autorepeat event generated when the user keeps pressing on the button
*
* @param[in] obj The button object
}
/**
+ * Get if autorepeat event is on
+ *
+ * @param obj The button object
+ * @return If autorepeat is on
+ *
+ * @ingroup Button
+ */
+EAPI Eina_Bool
+elm_button_autorepeat_get(const Evas_Object *obj)
+{
+ ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
+ Widget_Data *wd = elm_widget_data_get(obj);
+ if (!wd) return EINA_FALSE;
+ return wd->autorepeat;
+}
+
+/**
* Set the initial timeout before the autorepeat event is generated
*
* @param[in] obj The button object
if (wd->ar_threshold == t) return;
if (wd->timer)
{
- ecore_timer_del(wd->timer);
- wd->timer = NULL;
+ ecore_timer_del(wd->timer);
+ wd->timer = NULL;
}
wd->ar_threshold = t;
}
/**
+ * Get the initial timeout before the autorepeat event is generated
+ *
+ * @param[in] obj The button object
+ * @return Timeout
+ *
+ * @ingroup Button
+ */
+EAPI double
+elm_button_autorepeat_initial_timeout_get(const Evas_Object *obj)
+{
+ ELM_CHECK_WIDTYPE(obj, widtype) 0.0;
+ Widget_Data *wd = elm_widget_data_get(obj);
+ if (!wd) return 0.0;
+ return wd->ar_threshold;
+}
+
+/**
* Set the interval between each generated autorepeat event
*
* @param[in] obj The button object
if (wd->ar_interval == t) return;
wd->ar_interval = t;
- if (wd->repeating && wd->timer) ecore_timer_interval_set(wd->timer, t);
+ if ((wd->repeating) && (wd->timer)) ecore_timer_interval_set(wd->timer, t);
+}
+
+/**
+ * Get the interval between each generated autorepeat event
+ *
+ * @param[in] obj The button object
+ * @return Interval
+ *
+ * @ingroup Button
+ */
+EAPI double
+elm_button_autorepeat_gap_timeout_get(const Evas_Object *obj)
+{
+ ELM_CHECK_WIDTYPE(obj, widtype) 0.0;
+ Widget_Data *wd = elm_widget_data_get(obj);
+ if (!wd) return 0.0;
+ return wd->ar_interval;
}
struct
{
- Evas_Object *left;
- Evas_Object *right;
+ Evas_Object *left;
+ Evas_Object *right;
} contents;
struct
{
- int x_diff;
- int y_diff;
- Eina_Bool move;
+ int x_diff;
+ int y_diff;
+ Eina_Bool move;
} move;
Eina_Bool clicked_double;
{
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
+ if (wd->panes) evas_object_del(wd->panes);
free(wd);
}
elm_panes_content_left_size_set(obj, size);
}
+static Eina_Bool
+_elm_panes_focus_next_hook(const Evas_Object *obj, Elm_Focus_Direction dir, Evas_Object **next)
+{
+ Widget_Data *wd = elm_widget_data_get(obj);
+
+ if (!wd)
+ return EINA_FALSE;
+
+ double w, h;
+ edje_object_part_drag_value_get(wd->panes, "elm.bar", &w, &h);
+ if (((wd->horizontal) && ( h == 0.0 )) || ((!wd->horizontal) && ( w == 0.0 )))
+ return elm_widget_focus_next_get(wd->contents.right, dir, next);
+
+ Evas_Object *chain[2];
+
+ /* Direction */
+ if (dir == ELM_FOCUS_PREVIOUS)
+ {
+ chain[0] = wd->contents.right;
+ chain[1] = wd->contents.left;
+ }
+ else if (dir == ELM_FOCUS_NEXT)
+ {
+ chain[0] = wd->contents.left;
+ chain[1] = wd->contents.right;
+ }
+ else
+ return EINA_FALSE;
+
+ unsigned char i = elm_widget_focus_get(chain[1]);
+
+ if (elm_widget_focus_next_get(chain[i], dir, next))
+ return EINA_TRUE;
+
+ i = !i;
+
+ Evas_Object *to_focus;
+ if (elm_widget_focus_next_get(chain[i], dir, &to_focus))
+ {
+ *next = to_focus;
+ return !!i;
+ }
+
+ return EINA_FALSE;
+}
+
static void
_sizing_eval(Evas_Object *obj)
{
if (!wd) return;
if (sub == wd->contents.left)
{
- evas_object_event_callback_del_full(sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
+ evas_object_event_callback_del_full(sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
_changed_size_hints, obj);
- wd->contents.left = NULL;
- _sizing_eval(obj);
+ wd->contents.left = NULL;
+ _sizing_eval(obj);
}
else if (sub == wd->contents.right)
{
- evas_object_event_callback_del_full(sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj);
- wd->contents.right= NULL;
- _sizing_eval(obj);
+ evas_object_event_callback_del_full(sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
+ _changed_size_hints, obj);
+ wd->contents.right= NULL;
+ _sizing_eval(obj);
}
}
if (wd->clicked_double)
{
- evas_object_smart_callback_call(data, "clicked,double", NULL);
- wd->clicked_double = EINA_FALSE;
+ evas_object_smart_callback_call(data, "clicked,double", NULL);
+ wd->clicked_double = EINA_FALSE;
}
}
wd = ELM_NEW(Widget_Data);
e = evas_object_evas_get(parent);
+ if (!e) return NULL;
obj = elm_widget_add(e);
ELM_SET_WIDTYPE(widtype, "panes");
- elm_widget_type_set(obj, widtype);
+ elm_widget_type_set(obj, "panes");
elm_widget_can_focus_set(obj, EINA_FALSE);
elm_widget_sub_object_add(parent, obj);
elm_widget_data_set(obj, wd);
elm_widget_del_hook_set(obj, _del_hook);
elm_widget_theme_hook_set(obj, _theme_hook);
+ elm_widget_focus_next_hook_set(obj, _elm_panes_focus_next_hook);
wd->contents.left = NULL;
wd->contents.right = NULL;
Widget_Data *wd = elm_widget_data_get(obj);
if (wd->contents.left)
{
- evas_object_del(wd->contents.left);
- wd->contents.left = NULL;
+ evas_object_del(wd->contents.left);
+ wd->contents.left = NULL;
}
if (content)
{
- elm_widget_sub_object_add(obj, content);
- wd->contents.left = content;
- edje_object_part_swallow(wd->panes, "elm.swallow.left", content);
+ wd->contents.left = content;
+ elm_widget_sub_object_add(obj, content);
+ edje_object_part_swallow(wd->panes, "elm.swallow.left", content);
if (wd->contents.right)
- edje_object_signal_emit(wd->panes, "panes_pair", "elm");
+ edje_object_signal_emit(wd->panes, "elm.panes.pair", "elm");
}
else
- edje_object_signal_emit(wd->panes, "panes_unpair", "elm");
+ edje_object_signal_emit(wd->panes, "elm.panes.unpair", "elm");
}
/**
Widget_Data *wd = elm_widget_data_get(obj);
if (wd->contents.right)
{
- evas_object_del(wd->contents.right);
- wd->contents.right = NULL;
+ evas_object_del(wd->contents.right);
+ wd->contents.right = NULL;
}
if (content)
{
- elm_widget_sub_object_add(obj, content);
- wd->contents.right = content;
- edje_object_part_swallow(wd->panes, "elm.swallow.right", content);
+ wd->contents.right = content;
+ elm_widget_sub_object_add(obj, content);
+ edje_object_part_swallow(wd->panes, "elm.swallow.right", content);
if (wd->contents.left)
- edje_object_signal_emit(wd->panes, "panes_pair", "elm");
+ edje_object_signal_emit(wd->panes, "elm.panes.pair", "elm");
}
else
- edje_object_signal_emit(wd->panes, "panes_unpair", "elm");
+ edje_object_signal_emit(wd->panes, "elm.panes.unpair", "elm");
}
/**
*
* Return the left/top content object which is set for this widget.
*
- * @param[in] obj The pane object
+ * @param[in] obj The panes object
* @return The left/top content object that is being used
*
* @ingroup Panes
*
* Return the right/bottom content object which is set for this widget.
*
- * @param[in] obj The pane object
- * @return The Evas Object set as a right/bottom content of the pane
+ * @param[in] obj The panes object
+ * @return The right/bottom content object that is being used
*
* @ingroup Panes
*/
elm_panes_content_left_unset(Evas_Object *obj)
{
ELM_CHECK_WIDTYPE(obj, widtype) NULL;
- Widget_Data *wd = NULL;
- Evas_Object *content = NULL;
-
- wd = elm_widget_data_get(obj);
+ Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return NULL;
if (!wd->contents.left) return NULL;
- content = wd->contents.left;
+ Evas_Object *content = wd->contents.left;
edje_object_part_unswallow(wd->panes, content);
elm_widget_sub_object_del(obj, content);
evas_object_hide(content);
wd->contents.left = NULL;
- edje_object_signal_emit(wd->panes, "panes_unpair", "elm");
+ edje_object_signal_emit(wd->panes, "elm.panes.unpair", "elm");
return content;
}
elm_panes_content_right_unset(Evas_Object *obj)
{
ELM_CHECK_WIDTYPE(obj, widtype) NULL;
- Widget_Data *wd = NULL;
- Evas_Object *content = NULL;
-
- wd = elm_widget_data_get(obj);
+ Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return NULL;
if (!wd->contents.right) return NULL;
-
- content = wd->contents.right;
+ Evas_Object *content = wd->contents.right;
edje_object_part_unswallow(wd->panes, content);
elm_widget_sub_object_del(obj, content);
evas_object_hide(content);
wd->contents.right = NULL;
- edje_object_signal_emit(wd->panes, "panes_unpair", "elm");
+ edje_object_signal_emit(wd->panes, "elm.panes.unpair", "elm");
return content;
}
Widget_Data *wd = elm_widget_data_get(obj);
wd->fixed = fixed;
if (wd->fixed == EINA_TRUE)
- edje_object_signal_emit(wd->panes, "elm.fixed", "movement.decider");
+ edje_object_signal_emit(wd->panes, "elm.panes.fixed", "elm");
else
- edje_object_signal_emit(wd->panes, "elm.unfixed", "movement.decider");
+ edje_object_signal_emit(wd->panes, "elm.panes.unfixed", "elm");
}
/**