ecore-evas >= 1.0.999
ecore-file >= 1.0.999
ecore-imf >= 1.0.999
- ecore-con >= 1.0.999
edje >= 1.0.999
]
)
+PKG_CHECK_MODULES([ELEMENTARY_ECORE_CON],
+ [ecore-con >= 1.0.999],
+ [
+ ELEMENTARY_ECORE_CON_INC="#include <Ecore_Con.h>"
+ AC_DEFINE(HAVE_ELEMENTARY_ECORE_CON, 1, [Have Ecore_Con support])
+ have_ecore_con="yes"
+ requirement_elm="ecore-con >= 1.0.999 ${requirement_elm}"
+ ],
+ [have_ecore_con="no"])
+AC_SUBST(ELEMENTARY_ECORE_CON_INC)
+
+AM_CONDITIONAL([HAVE_ECORE_CON], [test "x${have_ecore_con}" = "xyes"])
+
PKG_CHECK_MODULES([EIO],
[eio],
[
echo " Windows CE.............: ${have_elementary_wince}"
echo
echo " Features:"
+echo " Ecore_Con..............: ${have_ecore_con}"
echo " EDBus..................: ${have_elementary_edbus}"
echo " EFreet.................: ${have_elementary_efreet}"
echo " EWeather...............: ${have_elementary_eweather}"
test_map.c \
test_menu.c \
test_multi.c \
+test_multibuttonentry.c \
test_naviframe.c \
test_notify.c \
test_pager.c \
void test_entry4(void *data, Evas_Object *obj, void *event_info);
void test_entry5(void *data, Evas_Object *obj, void *event_info);
void test_entry_notepad(void *data, Evas_Object *obj, void *event_info);
+void test_multibuttonentry(void *data, Evas_Object *obj, void *event_info);
void test_anchorview(void *data, Evas_Object *obj, void *event_info);
void test_anchorblock(void *data, Evas_Object *obj, void *event_info);
void test_toolbar(void *data, Evas_Object *obj, void *event_info);
ADD_TEST(NULL, "Entries", "Entry 4", test_entry4);
ADD_TEST(NULL, "Entries", "Entry 5", test_entry5);
ADD_TEST(NULL, "Entries", "Entry Notepad", test_entry_notepad);
+ ADD_TEST(NULL, "Entries", "Multibuttonentry", test_multibuttonentry);
//------------------------------//
ADD_TEST(NULL, "Buttons", "Buttons", test_button);
--- /dev/null
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+#ifndef ELM_LIB_QUICKLAUNCH
+
+static void
+_item_selected_cb(void *data __UNUSED__,
+ Evas_Object *obj __UNUSED__,
+ void *event_info)
+{
+ Elm_Multibuttonentry_Item *item = (Elm_Multibuttonentry_Item *)event_info;
+ printf("selected item = %s\n", elm_multibuttonentry_item_label_get(item));
+}
+
+// "item,added" smart callback of multibuttonentry.
+static void
+_item_added_cb(void *data __UNUSED__,
+ Evas_Object *obj __UNUSED__,
+ void *event_info)
+{
+ Elm_Multibuttonentry_Item *item = (Elm_Multibuttonentry_Item *)event_info;
+ printf("\n added item = %s\n", elm_multibuttonentry_item_label_get(item));
+}
+
+// "item,deleted" smart callback
+static void
+_item_deleted_cb(void *data __UNUSED__,
+ Evas_Object *obj __UNUSED__,
+ void *event_info __UNUSED__)
+{
+ printf("deleted item\n");
+}
+
+// "item,clicked" smart callback
+static void
+_item_clicked_cb(void *data __UNUSED__,
+ Evas_Object *obj __UNUSED__,
+ void *event_info )
+{
+ Elm_Multibuttonentry_Item *item = (Elm_Multibuttonentry_Item *)event_info;
+ printf("clicked item = %s\n", elm_multibuttonentry_item_label_get(item));
+}
+
+static void
+_mbe_clicked_cb(void *data __UNUSED__,
+ Evas_Object *obj,
+ void *event_info __UNUSED__ )
+{
+ //Unset the multibuttonentry to contracted mode of single line
+ elm_multibuttonentry_contracted_state_set(obj, 0);
+ printf("A multibuttonentry is clicked!\n");
+ Evas_Object *entry;
+ entry = elm_multibuttonentry_entry_get(obj);
+ if (!entry)
+ {
+ printf("%s entry is NULL\n", __func__);
+ }
+
+ Evas_Coord x, y, w, h;
+ Evas_Coord mbe_x, mbe_y, mbe_w, mbe_h;
+ evas_object_geometry_get(obj, &mbe_x, &mbe_y, &mbe_w, &mbe_h);
+ evas_object_geometry_get(entry, &x, &y, &w, &h);
+ printf("%s mbe x :%d y:%d w :%d h:%d\n", __func__, mbe_x, mbe_y, mbe_w, mbe_h);
+ printf("%s wd->entry x :%d y:%d w :%d h:%d\n", __func__, x, y, w, h);
+}
+
+static void
+_mbe_unfocused_cb(void *data __UNUSED__,
+ Evas_Object *obj,
+ void *event_info __UNUSED__ )
+{
+ //Set the multibuttonentry to contracted mode of single line
+ elm_multibuttonentry_contracted_state_set(obj, 1);
+ printf("multibuttonentry unfocused!\n");
+}
+
+static void
+_mbe_focused_cb(void *data __UNUSED__,
+ Evas_Object *obj __UNUSED__,
+ void *event_info __UNUSED__ )
+{
+ printf("multibuttonentry focused!\n");
+}
+
+// "expanded" smart callback
+static void
+_expanded_cb(void *data __UNUSED__,
+ Evas_Object *obj __UNUSED__,
+ void *event_info __UNUSED__)
+{
+ printf("expanded!\n");
+}
+
+// "contracted" smart callback
+static void
+_shrank_cb(void *data __UNUSED__,
+ Evas_Object *obj __UNUSED__,
+ void *event_info __UNUSED__)
+{
+ printf("shrank!\n");
+}
+
+// "contracted,state,changed" smart callback
+static void
+_shrink_state_changed_cb(void *data __UNUSED__,
+ Evas_Object *obj __UNUSED__,
+ void *event_info __UNUSED__)
+{
+ printf("contracted state changed! \n");
+}
+
+// "item verified" confirm callback
+static Eina_Bool
+_item_filter_cb(Evas_Object *obj __UNUSED__,
+ const char* item_label,
+ void *item_data __UNUSED__,
+ void *data __UNUSED__)
+{
+ printf("%s, label: %s\n", __func__, item_label);
+
+ return EINA_TRUE;
+}
+
+static void
+_button_clicked_cb(void *data __UNUSED__,
+ Evas_Object *obj __UNUSED__,
+ void *event_info __UNUSED__)
+{
+ printf("%s button is clicked\n", __func__);
+}
+
+static Evas_Object*
+_add_multibuttonentry(Evas_Object *parent)
+{
+ Evas_Object *scr = NULL;
+ Evas_Object *mbe = NULL;
+ void *data = NULL;
+
+ scr = elm_scroller_add(parent);
+ elm_scroller_bounce_set(scr, EINA_FALSE, EINA_TRUE);
+ elm_scroller_policy_set(scr, ELM_SCROLLER_POLICY_OFF,ELM_SCROLLER_POLICY_AUTO);
+ evas_object_show(scr);
+
+ mbe = elm_multibuttonentry_add(parent);
+ elm_multibuttonentry_label_set(mbe, "To: ");
+ elm_multibuttonentry_guide_text_set(mbe, "Tap to add recipient");
+ evas_object_size_hint_weight_set(mbe, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(mbe, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ elm_object_content_set(scr, mbe);
+
+ // Add item verify callback to Multibuttonentry
+ elm_multibuttonentry_item_verify_callback_set(mbe, _item_filter_cb, data);
+
+ // Add "item,selected","item,added", "item,deleted", "clicked", "unfocused",
+ // "expanded", "contracted" and "contracted,state,changed" smart callback
+ evas_object_smart_callback_add(mbe, "item,selected", _item_selected_cb, NULL);
+ evas_object_smart_callback_add(mbe, "item,added", _item_added_cb, NULL);
+ evas_object_smart_callback_add(mbe, "item,deleted", _item_deleted_cb, NULL);
+ evas_object_smart_callback_add(mbe, "item,clicked", _item_clicked_cb, NULL);
+
+ evas_object_smart_callback_add(mbe, "clicked", _mbe_clicked_cb, NULL);
+ evas_object_smart_callback_add(mbe, "focused", _mbe_focused_cb, NULL);
+ evas_object_smart_callback_add(mbe, "unfocused", _mbe_unfocused_cb, NULL);
+
+ evas_object_smart_callback_add(mbe, "expanded", _expanded_cb, NULL);
+ evas_object_smart_callback_add(mbe, "shrank", _shrank_cb, NULL);
+ evas_object_smart_callback_add(mbe, "shrink,state,changed", _shrink_state_changed_cb, NULL);
+
+ evas_object_resize(mbe, 220, 300);
+ elm_object_focus_set(mbe, EINA_TRUE);
+
+ return scr;
+}
+
+static Evas_Object*
+_add_buttons(Evas_Object *parent)
+{
+ Evas_Object *bx = NULL;
+ Evas_Object *btn;
+
+ bx = elm_box_add(parent);
+ elm_box_horizontal_set(bx, EINA_TRUE);
+ elm_box_homogeneous_set(bx, EINA_TRUE);
+
+ btn = elm_button_add(parent);
+ evas_object_smart_callback_add(btn, "clicked", _button_clicked_cb, NULL);
+ elm_object_text_set(btn, "click");
+ evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, 0.0);
+ evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ elm_box_pack_end(bx, btn);
+ evas_object_show(btn);
+
+ return bx;
+}
+
+void
+test_multibuttonentry(void *data __UNUSED__,
+ Evas_Object *obj __UNUSED__,
+ void *event_info __UNUSED__)
+{
+ Evas_Object *win, *bg, *sc, *bx;
+ Evas_Object *ly;
+ char buf[PATH_MAX];
+
+ win = elm_win_add(NULL, "Multibuttonentry", ELM_WIN_BASIC);
+ elm_win_title_set(win, "Multibuttonentry");
+ elm_win_autodel_set(win, EINA_TRUE);
+
+ 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);
+ evas_object_show(bg);
+
+ ly = elm_layout_add(win);
+ snprintf(buf, sizeof(buf), "%s/objects/multibuttonentry.edj", elm_app_data_dir_get());
+ elm_layout_file_set(ly, buf, "multibuttonentry_test");
+ evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_win_resize_object_add(win, ly);
+ evas_object_show(ly);
+
+ sc = _add_multibuttonentry(ly);
+ elm_object_part_content_set(ly, "multibuttonentry", sc);
+
+ bx = _add_buttons(ly);
+ elm_object_part_content_set(ly, "box", bx);
+
+ evas_object_resize(win, 320, 480);
+ evas_object_show(win);
+ elm_object_focus_set(sc, EINA_TRUE);
+}
+#endif
elm_list.c \
elm_map.c \
elm_multibuttonentry.c \
-elm_navigationbar.c \
elm_navigationbar_ex.c \
elm_nocontents.c \
elm_notify.c \
+++ /dev/null
-#include <assert.h>
-
-#include "private.h"
-
-typedef struct _Elm_Params_Navigationbar
-{
- Eina_Bool disable_animation_exists:1;
- Eina_Bool disable_animation:1;
- Eina_Bool hidden_exists:1;
- Eina_Bool hidden:1;
-} Elm_Params_Navigationbar;
-
-
-static void
-external_navigationbar_state_set(void *data __UNUSED__, Evas_Object *obj, const void *from_params, const void *to_params, float pos __UNUSED__)
-{
- const Elm_Params_Navigationbar *p;
-
- if (to_params) p = to_params;
- else if (from_params) p = from_params;
- else return;
-
- if(p->disable_animation_exists) elm_navigationbar_animation_disabled_set(obj, p->disable_animation);
- if(p->hidden_exists) elm_navigationbar_hidden_set(obj, p->hidden);
-}
-
-static Eina_Bool
-external_navigationbar_param_set(void *data __UNUSED__, Evas_Object *obj, const Edje_External_Param *param)
-{
- if (!strcmp(param->name, "disable animation"))
- {
- if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
- {
- elm_navigationbar_animation_disabled_set(obj, param->i);
- return EINA_TRUE;
- }
- }
- else if (!strcmp(param->name, "hidden"))
- {
- if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
- {
- elm_navigationbar_hidden_set(obj, param->i);
- return EINA_TRUE;
- }
- }
- ERR("unknown parameter '%s' of type '%s'",
- param->name, edje_external_param_type_str(param->type));
-
- return EINA_FALSE;
-}
-
-static Eina_Bool
-external_navigationbar_param_get(void *data __UNUSED__, const Evas_Object *obj __UNUSED__, Edje_External_Param *param)
-{
- ERR("unknown parameter '%s' of type '%s'",
- param->name, edje_external_param_type_str(param->type));
-
- return EINA_FALSE;
-}
-
-static void *
-external_navigationbar_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const Eina_List *params)
-{
- Elm_Params_Navigationbar *mem;
- Edje_External_Param *param;
- const Eina_List *l;
-
- mem = calloc(1, sizeof(Elm_Params_Navigationbar));
- if (!mem)
- return NULL;
-
- EINA_LIST_FOREACH(params, l, param)
- {
- if (!strcmp(param->name, "disable animation"))
- {
- mem->disable_animation = !!param->i;
- mem->disable_animation_exists = EINA_TRUE;
- }
- else if (!strcmp(param->name, "hidden"))
- {
- mem->hidden = !!param->i;
- mem->hidden_exists = EINA_TRUE;
- }
- }
-
- return mem;
-}
-
-static Evas_Object *external_navigationbar_content_get(void *data __UNUSED__,
- const Evas_Object *obj __UNUSED__, const char *content __UNUSED__)
-{
- ERR("so content");
- return NULL;
-}
-
-static void
-external_navigationbar_params_free(void *params)
-{
- Elm_Params_Navigationbar* mem = params;
- free(mem);
-}
-
-static Edje_External_Param_Info external_navigationbar_params[] = {
- EDJE_EXTERNAL_PARAM_INFO_BOOL("disable animation"),
- EDJE_EXTERNAL_PARAM_INFO_BOOL("hidden"),
- EDJE_EXTERNAL_PARAM_INFO_SENTINEL
-};
-
-DEFINE_EXTERNAL_ICON_ADD(navigationbar, "navigationbar");
-DEFINE_EXTERNAL_TYPE_SIMPLE(navigationbar, "Navigationbar");
+DEFINE_TYPE(actionslider)
DEFINE_TYPE(anchorblock)
DEFINE_TYPE(anchorview)
DEFINE_TYPE(bubble)
DEFINE_TYPE(fileselector)
DEFINE_TYPE(fileselector_button)
DEFINE_TYPE(fileselector_entry)
+DEFINE_TYPE(frame)
DEFINE_TYPE(genlist)
DEFINE_TYPE(gengrid)
DEFINE_TYPE(hoversel)
-DEFINE_TYPE(index)
DEFINE_TYPE(list)
DEFINE_TYPE(map)
DEFINE_TYPE(multibuttonentry)
-DEFINE_TYPE(navigationbar)
DEFINE_TYPE(navigationbar_ex)
DEFINE_TYPE(nocontents)
DEFINE_TYPE(page_control)
DEFINE_TYPE(pager)
+DEFINE_TYPE(panes)
DEFINE_TYPE(photocam)
DEFINE_TYPE(progressbar)
DEFINE_TYPE(radio)
DEFINE_TYPE(toggle)
DEFINE_TYPE(toolbar)
DEFINE_TYPE(notify)
-DEFINE_TYPE(panes)
DEFINE_TYPE(label)
DEFINE_TYPE(icon)
DEFINE_TYPE(scroller)
DEFINE_TYPE(segment_control)
+DEFINE_TYPE(index)
+DEFINE_TYPE(video)
+DEFINE_TYPE(web)
#include <Ecore_Evas.h>
#include <Ecore_File.h>
#include <Ecore_IMF.h>
-#include <Ecore_Con.h>
+@ELEMENTARY_ECORE_CON_INC@
#include <Edje.h>
#ifdef ELM_EDBUS
* @ingroup General
*/
EAPI Evas_Object *elm_object_item_part_content_unset(Elm_Object_Item *it, const char *part);
+
#define elm_object_item_content_unset(it) elm_object_item_part_content_unset((it), NULL)
/**
*/
EAPI const char *elm_entry_selection_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
/**
+ * Returns the actual textblock object of the entry.
+ *
+ * This function exposes the internal textblock object that actually
+ * contains and draws the text. This should be used for low-level
+ * manipulations that are otherwise not possible.
+ *
+ * Changing the textblock directly from here will not notify edje/elm to
+ * recalculate the textblock size automatically, so any modifications
+ * done to the textblock returned by this function should be followed by
+ * a call to elm_entry_calc_force().
+ *
+ * The return value is marked as const as an additional warning.
+ * One should not use the returned object with any of the generic evas
+ * functions (geometry_get/resize/move and etc), but only with the textblock
+ * functions; The former will either not work at all, or break the correct
+ * functionality.
+ *
+ * IMPORTANT: Many functions may change (i.e delete and create a new one)
+ * the internal textblock object. Do NOT cache the returned object, and try
+ * not to mix calls on this object with regular elm_entry calls (which may
+ * change the internal textblock object). This applies to all cursors
+ * returned from textblock calls, and all the other derivative values.
+ *
+ * @param obj The entry object
+ * @return The textblock object.
+ */
+ EAPI const Evas_Object *elm_entry_textblock_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+ /**
+ * Forces calculation of the entry size and text layouting.
+ *
+ * This should be used after modifying the textblock object directly. See
+ * elm_entry_textblock_get() for more information.
+ *
+ * @param obj The entry object
+ *
+ * @see elm_entry_textblock_get()
+ */
+ EAPI void elm_entry_calc_force(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+ /**
* Inserts the given text into the entry at the current cursor position.
*
* This inserts text at the cursor position as if it was typed
* @ingroup List
*/
EAPI void elm_list_item_end_set(Elm_List_Item *item, Evas_Object *end) EINA_ARG_NONNULL(1);
- EAPI Evas_Object *elm_list_item_base_get(const Elm_List_Item *item) EINA_ARG_NONNULL(1);
/**
* Gets the base object of the item.
* @ingroup List
*/
EAPI Evas_Object *elm_list_item_object_get(const Elm_List_Item *item) EINA_ARG_NONNULL(1);
+ EINA_DEPRECATED EAPI Evas_Object *elm_list_item_base_get(const Elm_List_Item *item) EINA_ARG_NONNULL(1);
/**
* Get the label of item.
EAPI int elm_popup_run(Evas_Object *obj);
/* NavigationBar */
- #define NAVIBAR_TITLEOBJ_INSTANT_HIDE "elm,state,hide,noanimate,title", "elm"
- #define NAVIBAR_TITLEOBJ_INSTANT_SHOW "elm,state,show,noanimate,title", "elm"
-
- typedef enum
- {
- ELM_NAVIGATIONBAR_FUNCTION_BUTTON1,
- ELM_NAVIGATIONBAR_FUNCTION_BUTTON2,
- ELM_NAVIGATIONBAR_FUNCTION_BUTTON3,
- ELM_NAVIGATIONBAR_BACK_BUTTON
- } Elm_Navi_Button_Type;
-
- EINA_DEPRECATED EAPI Evas_Object *elm_navigationbar_add(Evas_Object *parent);
- EINA_DEPRECATED EAPI void elm_navigationbar_push(Evas_Object *obj, const char *title, Evas_Object *fn_btn1, Evas_Object *fn_btn2, Evas_Object *fn_btn3, Evas_Object *content);
- EINA_DEPRECATED EAPI void elm_navigationbar_pop(Evas_Object *obj);
- EINA_DEPRECATED EAPI void elm_navigationbar_to_content_pop(Evas_Object *obj, Evas_Object *content);
- EINA_DEPRECATED EAPI void elm_navigationbar_title_label_set(Evas_Object *obj, Evas_Object *content, const char *title);
- EINA_DEPRECATED EAPI const char *elm_navigationbar_title_label_get(Evas_Object *obj, Evas_Object *content);
- EINA_DEPRECATED EAPI void elm_navigationbar_title_object_add(Evas_Object *obj, Evas_Object *content, Evas_Object *title_obj);
- EINA_DEPRECATED EAPI Evas_Object *elm_navigationbar_title_object_get(Evas_Object *obj, Evas_Object *content);
- EINA_DEPRECATED EAPI Eina_List *elm_navigationbar_title_object_list_get(Evas_Object *obj, Evas_Object *content);
- EINA_DEPRECATED EAPI Evas_Object *elm_navigationbar_content_top_get(Evas_Object *obj);
- EINA_DEPRECATED EAPI Evas_Object *elm_navigationbar_content_bottom_get(Evas_Object *obj);
- EINA_DEPRECATED EAPI void elm_navigationbar_hidden_set(Evas_Object *obj, Eina_Bool hidden);
- EINA_DEPRECATED EAPI void elm_navigationbar_title_button_set(Evas_Object *obj, Evas_Object *content, Evas_Object *button, Elm_Navi_Button_Type button_type);
- EINA_DEPRECATED EAPI Evas_Object *elm_navigationbar_title_button_get(Evas_Object *obj, Evas_Object *content, Elm_Navi_Button_Type button_type);
- EINA_DEPRECATED EAPI const char *elm_navigationbar_subtitle_label_get(Evas_Object *obj, Evas_Object *content);
- EINA_DEPRECATED EAPI void elm_navigationbar_subtitle_label_set(Evas_Object *obj, Evas_Object *content, const char *subtitle);
- EINA_DEPRECATED EAPI void elm_navigationbar_title_object_list_unset(Evas_Object *obj, Evas_Object *content, Eina_List **list);
- EINA_DEPRECATED EAPI void elm_navigationbar_animation_disabled_set(Evas_Object *obj, Eina_Bool disable);
- EINA_DEPRECATED EAPI void elm_navigationbar_title_object_visible_set(Evas_Object *obj, Evas_Object *content, Eina_Bool visible);
- EINA_DEPRECATED Eina_Bool elm_navigationbar_title_object_visible_get(Evas_Object *obj, Evas_Object *content);
- EINA_DEPRECATED EAPI void elm_navigationbar_title_icon_set(Evas_Object *obj, Evas_Object *content, Evas_Object *icon);
- EINA_DEPRECATED EAPI Evas_Object *elm_navigationbar_title_icon_get(Evas_Object *obj, Evas_Object *content);
-
- /* NavigationBar */
#define NAVIBAR_EX_TITLEOBJ_INSTANT_HIDE "elm,state,hide,noanimate,title", "elm"
#define NAVIBAR_EX_TITLEOBJ_INSTANT_SHOW "elm,state,show,noanimate,title", "elm"
*/
- /* Sliding Drawer */
- typedef enum _Elm_SlidingDrawer_Pos
- {
- ELM_SLIDINGDRAWER_BOTTOM,
- ELM_SLIDINGDRAWER_LEFT,
- ELM_SLIDINGDRAWER_RIGHT,
- ELM_SLIDINGDRAWER_TOP
- } Elm_SlidingDrawer_Pos;
-
- typedef struct _Elm_SlidingDrawer_Drag_Value
- {
- double x, y;
- } Elm_SlidingDrawer_Drag_Value;
-
- EINA_DEPRECATED EAPI Evas_Object *elm_slidingdrawer_add(Evas_Object *parent);
- EINA_DEPRECATED EAPI void elm_slidingdrawer_content_set (Evas_Object *obj, Evas_Object *content);
- EINA_DEPRECATED EAPI Evas_Object *elm_slidingdrawer_content_unset(Evas_Object *obj);
- EINA_DEPRECATED EAPI void elm_slidingdrawer_pos_set(Evas_Object *obj, Elm_SlidingDrawer_Pos pos);
- EINA_DEPRECATED EAPI void elm_slidingdrawer_max_drag_value_set(Evas_Object *obj, double dw, double dh);
- EINA_DEPRECATED EAPI void elm_slidingdrawer_drag_value_set(Evas_Object *obj, double dx, double dy);
-
/* multibuttonentry */
typedef struct _Multibuttonentry_Item Elm_Multibuttonentry_Item;
typedef Eina_Bool (*Elm_Multibuttonentry_Item_Verify_Callback) (Evas_Object *obj, const char *item_label, void *item_data, void *data);
elc_fileselector.c \
elc_fileselector_entry.c \
elc_hoversel.c \
+elc_multibuttonentry.c \
elc_naviframe.c \
-elc_navigationbar.c \
elc_navigationbar_ex.c\
elc_player.c \
elc_scrolled_entry.c \
elm_map.c \
elm_menu.c \
elm_module.c \
-elm_multibuttonentry.c \
elm_nocontents.c \
elm_notify.c \
elm_pagecontrol.c \
elm_separator.c \
elm_slider.c \
elm_slideshow.c \
-elm_slidingdrawer.c \
elm_spinner.c \
elm_stackedicon.c \
elm_store.c \
#include <Elementary.h>
#include "elm_priv.h"
-/**
- * @defgroup Multibuttonentry Multibuttonentry
- * @ingroup Elementary
- *
- * This is a Multibuttonentry.
- */
-
#define MAX_STR 256
#define MIN_W_ENTRY 20
typedef enum _Multibuttonentry_Pos
-{
- MULTIBUTONENTRY_POS_START,
- MULTIBUTONENTRY_POS_END,
- MULTIBUTONENTRY_POS_BEFORE,
- MULTIBUTONENTRY_POS_AFTER,
- MULTIBUTONENTRY_POS_NUM
-} Multibuttonentry_Pos;
+ {
+ MULTIBUTTONENTRY_POS_START,
+ MULTIBUTTONENTRY_POS_END,
+ MULTIBUTTONENTRY_POS_BEFORE,
+ MULTIBUTTONENTRY_POS_AFTER,
+ MULTIBUTTONENTRY_POS_NUM
+ } Multibuttonentry_Pos;
typedef enum _Multibuttonentry_Button_State
-{
- MULTIBUTONENTRY_BUTTON_STATE_DEFAULT,
- MULTIBUTONENTRY_BUTTON_STATE_SELECTED,
- MULTIBUTONENTRY_BUTTON_STATE_NUM
-} Multibuttonentry_Button_State;
-
-typedef enum _MultiButtonEntry_Closed_Button_Type {
- MULTIBUTTONENTRY_CLOSED_IMAGE,
- MULTIBUTTONENTRY_CLOSED_LABEL
-} MultiButtonEntry_Closed_Button_Type;
+ {
+ MULTIBUTTONENTRY_BUTTON_STATE_DEFAULT,
+ MULTIBUTTONENTRY_BUTTON_STATE_SELECTED,
+ MULTIBUTTONENTRY_BUTTON_STATE_NUM
+ } Multibuttonentry_Button_State;
+
+typedef enum _MultiButtonEntry_Closed_Button_Type
+ {
+ MULTIBUTTONENTRY_CLOSED_IMAGE,
+ MULTIBUTTONENTRY_CLOSED_LABEL
+ } MultiButtonEntry_Closed_Button_Type;
typedef enum _Multibuttonentry_View_State
-{
- MULTIBUTTONENTRY_VIEW_NONE,
- MULTIBUTTONENTRY_VIEW_GUIDETEXT,
- MULTIBUTTONENTRY_VIEW_ENTRY,
- MULTIBUTTONENTRY_VIEW_CONTRACTED
-} Multibuttonentry_View_State;
-
-struct _Multibuttonentry_Item {
- Evas_Object *multibuttonentry;
- Evas_Object *button;
- void *data;
- Evas_Coord vw, rw; // vw: visual width, real width
- Eina_Bool visible: 1;
-};
+ {
+ MULTIBUTTONENTRY_VIEW_NONE,
+ MULTIBUTTONENTRY_VIEW_GUIDETEXT,
+ MULTIBUTTONENTRY_VIEW_ENTRY,
+ MULTIBUTTONENTRY_VIEW_CONTRACTED
+ } Multibuttonentry_View_State;
+
+struct _Multibuttonentry_Item
+ {
+ Evas_Object *multibuttonentry;
+ Evas_Object *button;
+ void *data;
+ Evas_Coord vw, rw; // vw: visual width, real width
+ Eina_Bool visible: 1;
+ };
typedef struct _Widget_Data Widget_Data;
-struct _Widget_Data {
- Evas_Object *base;
- Evas_Object *box;
- Evas_Object *entry;
- Evas_Object *label;
- Evas_Object *guidetext;
- Evas_Object *end; // used to represent the total number of invisible buttons
-
- Evas_Object *rectForEnd;
- MultiButtonEntry_Closed_Button_Type end_type;
-
- Eina_List *items;
- Eina_List *current;
- int n_str;
- Multibuttonentry_View_State view_state;
-
- Evas_Coord w_box, h_box;
- int contracted;
- Eina_Bool focused: 1;
- Eina_Bool last_btn_select: 1;
- Elm_Multibuttonentry_Item_Verify_Callback add_callback;
- void *add_callback_data;
-};
+struct _Widget_Data
+ {
+ Evas_Object *base;
+ Evas_Object *box;
+ Evas_Object *entry;
+ Evas_Object *label;
+ Evas_Object *guidetext;
+ Evas_Object *end; // used to represent the total number of invisible buttons
+
+ Evas_Object *rect_for_end;
+ MultiButtonEntry_Closed_Button_Type end_type;
+
+ Eina_List *items;
+ Eina_List *current;
+
+ int n_str;
+ Multibuttonentry_View_State view_state;
+
+ Evas_Coord w_box, h_box;
+ int contracted;
+ Eina_Bool focused: 1;
+ Eina_Bool last_btn_select: 1;
+ Elm_Multibuttonentry_Item_Verify_Callback add_callback;
+ void *add_callback_data;
+ };
static const char *widtype = NULL;
static void _del_hook(Evas_Object *obj);
static void _event_init(Evas_Object *obj);
static void _contracted_state_set(Evas_Object *obj, int contracted);
static void _view_update(Evas_Object *obj);
-static void _set_label(Evas_Object *obj, const char* str);
+static void _set_label(Evas_Object *obj, const char *str);
static void _change_current_button_state(Evas_Object *obj, Multibuttonentry_Button_State state);
static void _change_current_button(Evas_Object *obj, Evas_Object *btn);
static void _button_clicked(void *data, Evas_Object *obj, const char *emission, const char *source);
static void _del_button_obj(Evas_Object *obj, Evas_Object *btn);
static void _del_button_item(Elm_Multibuttonentry_Item *item);
static void _select_button(Evas_Object *obj, Evas_Object *btn);
-static Elm_Multibuttonentry_Item* _add_button_item(Evas_Object *obj, const char *str, Multibuttonentry_Pos pos, const Elm_Multibuttonentry_Item *reference, void *data);
+static Elm_Multibuttonentry_Item *_add_button_item(Evas_Object *obj, const char *str, Multibuttonentry_Pos pos,
+ const Elm_Multibuttonentry_Item *reference, void *data);
static void _add_button(Evas_Object *obj, char *str);
static void _evas_mbe_key_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
static void _entry_changed_cb(void *data, Evas_Object *obj, void *event_info);
static void _entry_key_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
static void _entry_key_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
+static void _entry_resized_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info);
static void _entry_focus_in_cb(void *data, Evas_Object *obj, void *event_info);
static void _entry_focus_out_cb(void *data, Evas_Object *obj, void *event_info);
static void _entry_clicked_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__);
-static void _entry_resized_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__);
static void _view_init(Evas_Object *obj);
static void _set_vis_guidetext(Evas_Object *obj);
static void _calculate_box_min_size(Evas_Object *box, Evas_Object_Box_Data *priv);
if (wd->label) evas_object_del (wd->label);
if (wd->guidetext) evas_object_del (wd->guidetext);
if (wd->end) evas_object_del (wd->end);
- if (wd->rectForEnd) evas_object_del(wd->rectForEnd);
+ if (wd->rect_for_end) evas_object_del(wd->rect_for_end);
}
static void
evas_object_hide(wd->guidetext);
else if (wd->view_state == MULTIBUTTONENTRY_VIEW_CONTRACTED)
{
- evas_object_hide(wd->rectForEnd);
+ evas_object_hide(wd->rect_for_end);
evas_object_hide(wd->end);
wd->view_state = MULTIBUTTONENTRY_VIEW_NONE;
}
w += item->vw;
rectSize = w - button_min_width;
- if (!wd->rectForEnd)
+ if (!wd->rect_for_end)
{
Evas *e = evas_object_evas_get(obj);
- wd->rectForEnd = evas_object_rectangle_add(e);
- evas_object_color_set(wd->rectForEnd, 0, 0, 0, 0);
+ wd->rect_for_end = evas_object_rectangle_add(e);
+ evas_object_color_set(wd->rect_for_end, 0, 0, 0, 0);
}
- evas_object_size_hint_min_set(wd->rectForEnd, rectSize, closed_height * elm_scale_get());
- elm_box_pack_end(wd->box, wd->rectForEnd);
- evas_object_show(wd->rectForEnd);
+ evas_object_size_hint_min_set(wd->rect_for_end, rectSize, closed_height * elm_scale_get());
+ elm_box_pack_end(wd->box, wd->rect_for_end);
+ evas_object_show(wd->rect_for_end);
elm_box_pack_end(wd->box, wd->end);
evas_object_show(wd->end);
}
evas_object_hide(wd->end);
- if (wd->rectForEnd) evas_object_hide(wd->rectForEnd);
+ if (wd->rect_for_end) evas_object_hide(wd->rect_for_end);
// pack buttons only 1line
{
switch(state)
{
- case MULTIBUTONENTRY_BUTTON_STATE_DEFAULT:
+ case MULTIBUTTONENTRY_BUTTON_STATE_DEFAULT:
edje_object_signal_emit(item->button, "default", "");
wd->current = NULL;
break;
- case MULTIBUTONENTRY_BUTTON_STATE_SELECTED:
+ case MULTIBUTTONENTRY_BUTTON_STATE_SELECTED:
edje_object_signal_emit(item->button, "focused", "");
evas_object_smart_callback_call(obj, "item,selected", item);
break;
if (!wd) return;
// change the state of previous button to "default"
- _change_current_button_state(obj, MULTIBUTONENTRY_BUTTON_STATE_DEFAULT);
+ _change_current_button_state(obj, MULTIBUTTONENTRY_BUTTON_STATE_DEFAULT);
// change the current
EINA_LIST_FOREACH(wd->items, l, item)
}
// chagne the state of current button to "focused"
- _change_current_button_state(obj, MULTIBUTONENTRY_BUTTON_STATE_SELECTED);
+ _change_current_button_state(obj, MULTIBUTTONENTRY_BUTTON_STATE_SELECTED);
}
}
else
{
- _change_current_button_state(obj, MULTIBUTONENTRY_BUTTON_STATE_DEFAULT);
+ _change_current_button_state(obj, MULTIBUTTONENTRY_BUTTON_STATE_DEFAULT);
if (elm_widget_focus_get(obj))
elm_object_focus(wd->entry);
}
switch(pos)
{
- case MULTIBUTONENTRY_POS_START:
+ case MULTIBUTTONENTRY_POS_START:
wd->items = eina_list_prepend(wd->items, item);
if (wd->view_state == MULTIBUTTONENTRY_VIEW_CONTRACTED)
{
_set_vis_guidetext(obj);
}
break;
- case MULTIBUTONENTRY_POS_END:
+ case MULTIBUTTONENTRY_POS_END:
wd->items = eina_list_append(wd->items, item);
if (wd->view_state == MULTIBUTTONENTRY_VIEW_CONTRACTED)
{
elm_box_pack_end(wd->box, btn);
}
break;
- case MULTIBUTONENTRY_POS_BEFORE:
+ case MULTIBUTTONENTRY_POS_BEFORE:
if (reference)
wd->items = eina_list_prepend_relative(wd->items, item, reference);
else
}
}
break;
- case MULTIBUTONENTRY_POS_AFTER:
+ case MULTIBUTTONENTRY_POS_AFTER:
if (reference)
wd->items = eina_list_append_relative(wd->items, item, reference);
else
if (!wd) return;
// add button
- _add_button_item(obj, str, MULTIBUTONENTRY_POS_END, NULL, NULL);
+ _add_button_item(obj, str, MULTIBUTTONENTRY_POS_END, NULL, NULL);
}
static void
Widget_Data *wd = elm_widget_data_get(data);
if (!wd) return;
- _change_current_button_state(data, MULTIBUTONENTRY_BUTTON_STATE_DEFAULT);
+ _change_current_button_state(data, MULTIBUTTONENTRY_BUTTON_STATE_DEFAULT);
elm_object_focus(wd->entry);
}
}
}
-/**
- * Add a new multibuttonentry to the parent
- *
- * @param parent The parent object
- * @return The new object or NULL if it cannot be created
- *
- * @ingroup Multibuttonentry
- */
EAPI Evas_Object *
elm_multibuttonentry_add(Evas_Object *parent)
{
wd->focused = EINA_FALSE;
wd->last_btn_select = EINA_TRUE;
wd->n_str = 0;
- wd->rectForEnd = NULL;
+ wd->rect_for_end = NULL;
wd->add_callback = NULL;
wd->add_callback_data = NULL;
return obj;
}
-/**
- * Get the entry of the multibuttonentry object
- *
- * @param obj The multibuttonentry object
- * @return The entry object, or NULL if none
- *
- * @ingroup Multibuttonentry
- */
EAPI Evas_Object *
elm_multibuttonentry_entry_get(const Evas_Object *obj)
{
return wd->entry;
}
-/**
- * Get the label
- *
- * @param obj The multibuttonentry object
- * @return The label, or NULL if none
- *
- * @ingroup Multibuttonentry
- */
EAPI const char *
elm_multibuttonentry_label_get(const Evas_Object *obj)
{
return NULL;
}
-/**
- * Set the label
- *
- * @param obj The multibuttonentry object
- * @param label The text label string
- *
- * @ingroup Multibuttonentry
- */
EAPI void
elm_multibuttonentry_label_set(Evas_Object *obj, const char *label)
{
_set_label(obj, "");
}
-/**
- * Get the guide text
- *
- * @param obj The multibuttonentry object
- * @return The guide text, or NULL if none
- *
- * @ingroup Multibuttonentry
- */
EAPI const char *
elm_multibuttonentry_guide_text_get(const Evas_Object *obj)
{
return NULL;
}
-/**
- * Set the guide text
- *
- * @param obj The multibuttonentry object
- * @param label The guide text string
- *
- * @ingroup Multibuttonentry
- */
EAPI void
elm_multibuttonentry_guide_text_set(Evas_Object *obj, const char *guidetext)
{
}
-/**
- * Get the value of contracted state.
- *
- * @param obj The multibuttonentry object
- * @param the value of contracted state.
- *
- * @ingroup Multibuttonentry
- */
EAPI int
elm_multibuttonentry_contracted_state_get(const Evas_Object *obj)
{
return wd->view_state == MULTIBUTTONENTRY_VIEW_CONTRACTED ? 1 : 0;
}
-/**
- * Set/Unset the multibuttonentry to contracted state of single line
- *
- * @param obj The multibuttonentry object
- * @param the value of contracted state. set this to 1 to set the multibuttonentry to contracted state of single line. set this to 0 to unset the contracted state.
- *
- * @ingroup Multibuttonentry
- */
EAPI void
elm_multibuttonentry_contracted_state_set(Evas_Object *obj, int contracted)
{
_contracted_state_set(obj, contracted);
}
-/**
- * Prepend a new item to the multibuttonentry
- *
- * @param obj The multibuttonentry object
- * @param label The label of new item
- * @param data The ponter to the data to be attached
- * @return A handle to the item added or NULL if not possible
- *
- * @ingroup Multibuttonentry
- */
EAPI Elm_Multibuttonentry_Item *
elm_multibuttonentry_item_add_start(Evas_Object *obj, const char *label, void *data)
{
Widget_Data *wd = elm_widget_data_get(obj);
Elm_Multibuttonentry_Item *item;
if (!wd || !label) return NULL;
- item = _add_button_item(obj, label, MULTIBUTONENTRY_POS_START, NULL, data);
+ item = _add_button_item(obj, label, MULTIBUTTONENTRY_POS_START, NULL, data);
return item;
}
-/**
- * Append a new item to the multibuttonentry
- *
- * @param obj The multibuttonentry object
- * @param label The label of new item
- * @param data The ponter to the data to be attached
- * @return A handle to the item added or NULL if not possible
- *
- * @ingroup Multibuttonentry
- */
EAPI Elm_Multibuttonentry_Item *
elm_multibuttonentry_item_add_end(Evas_Object *obj, const char *label, void *data)
{
Widget_Data *wd = elm_widget_data_get(obj);
Elm_Multibuttonentry_Item *item;
if (!wd || !label) return NULL;
- item = _add_button_item(obj, label, MULTIBUTONENTRY_POS_END, NULL, data);
+ item = _add_button_item(obj, label, MULTIBUTTONENTRY_POS_END, NULL, data);
return item;
}
-/**
- * Add a new item to the multibuttonentry before the indicated object
- *
- * reference.
- * @param obj The multibuttonentry object
- * @param label The label of new item
- * @param before The item before which to add it
- * @param data The ponter to the data to be attached
- * @return A handle to the item added or NULL if not possible
- *
- * @ingroup Multibuttonentry
- */
EAPI Elm_Multibuttonentry_Item *
elm_multibuttonentry_item_add_before(Evas_Object *obj, const char *label, Elm_Multibuttonentry_Item *before, void *data)
{
Widget_Data *wd = elm_widget_data_get(obj);
Elm_Multibuttonentry_Item *item;
if (!wd || !label) return NULL;
- item = _add_button_item(obj, label, MULTIBUTONENTRY_POS_BEFORE, before, data);
+ item = _add_button_item(obj, label, MULTIBUTTONENTRY_POS_BEFORE, before, data);
return item;
}
-/**
- * Add a new item to the multibuttonentry after the indicated object
- *
- * @param obj The multibuttonentry object
- * @param label The label of new item
- * @param after The item after which to add it
- * @param data The ponter to the data to be attached
- * @return A handle to the item added or NULL if not possible
- *
- * @ingroup Multibuttonentry
- */
EAPI Elm_Multibuttonentry_Item *
elm_multibuttonentry_item_add_after(Evas_Object *obj, const char *label, Elm_Multibuttonentry_Item *after, void *data)
{
Widget_Data *wd = elm_widget_data_get(obj);
Elm_Multibuttonentry_Item *item;
if (!wd || !label) return NULL;
- item = _add_button_item(obj, label, MULTIBUTONENTRY_POS_AFTER, after, data);
+ item = _add_button_item(obj, label, MULTIBUTTONENTRY_POS_AFTER, after, data);
return item;
}
-/**
- * Get a list of items in the multibuttonentry
- *
- * @param obj The multibuttonentry object
- * @return The list of items, or NULL if none
- *
- * @ingroup Multibuttonentry
- */
EAPI const Eina_List *
elm_multibuttonentry_items_get(const Evas_Object *obj)
{
return wd->items;
}
-/**
- * Get the first item in the multibuttonentry
- *
- * @param obj The multibuttonentry object
- * @return The first item, or NULL if none
- *
- * @ingroup Multibuttonentry
- */
EAPI Elm_Multibuttonentry_Item *
elm_multibuttonentry_item_first_get(const Evas_Object *obj)
{
return eina_list_data_get(wd->items);
}
-/**
- * Get the last item in the multibuttonentry
- *
- * @param obj The multibuttonentry object
- * @return The last item, or NULL if none
- *
- * @ingroup Multibuttonentry
- */
EAPI Elm_Multibuttonentry_Item *
elm_multibuttonentry_item_last_get(const Evas_Object *obj)
{
return eina_list_data_get(eina_list_last(wd->items));
}
-/**
- * Get the selected item in the multibuttonentry
- *
- * @param obj The multibuttonentry object
- * @return The selected item, or NULL if none
- *
- * @ingroup Multibuttonentry
- */
EAPI Elm_Multibuttonentry_Item *
elm_multibuttonentry_item_selected_get(const Evas_Object *obj)
{
return eina_list_data_get(wd->current);
}
-/**
- * Set the selected state of an item
- *
- * @param item The item
- *
- * @ingroup Multibuttonentry
- */
EAPI void
elm_multibuttonentry_item_selected_set(Elm_Multibuttonentry_Item *item)
{
}
}
-/**
- * unselect all of items.
- *
- * @param obj The multibuttonentry object
- *
- * @ingroup Multibuttonentry
- */
EAPI void
elm_multibuttonentry_item_unselect_all(Evas_Object *obj)
{
_select_button(obj, NULL);
}
-/**
- * Remove all items in the multibuttonentry.
- *
- * @param obj The multibuttonentry object
- *
- * @ingroup Multibuttonentry
- */
EAPI void
elm_multibuttonentry_items_del(Evas_Object *obj)
{
_view_update(obj);
}
-/**
- * Delete a given item
- *
- * @param item The item
- *
- * @ingroup Multibuttonentry
- */
EAPI void
elm_multibuttonentry_item_del(Elm_Multibuttonentry_Item *item)
{
_del_button_item(item);
}
-/**
- * Get the label of a given item
- *
- * @param item The item
- * @return The label of a given item, or NULL if none
- *
- * @ingroup Multibuttonentry
- */
EAPI const char *
elm_multibuttonentry_item_label_get(const Elm_Multibuttonentry_Item *item)
{
return NULL;
}
-/**
- * Set the label of a given item
- *
- * @param item The item
- * @param label The text label string
- *
- * @ingroup Multibuttonentry
- */
EAPI void
elm_multibuttonentry_item_label_set(Elm_Multibuttonentry_Item *item, const char *str)
{
}
}
-/**
- * Get the previous item in the multibuttonentry
- *
- * @param item The item
- * @return The item before the item @p item
- *
- * @ingroup Multibuttonentry
- */
EAPI Elm_Multibuttonentry_Item *
elm_multibuttonentry_item_prev(Elm_Multibuttonentry_Item *item)
{
return NULL;
}
-/**
- * Get the next item in the multibuttonentry
- *
- * @param item The item
- * @return The item after the item @p item
- *
- * @ingroup Multibuttonentry
- */
EAPI Elm_Multibuttonentry_Item *
elm_multibuttonentry_item_next(Elm_Multibuttonentry_Item *item)
{
return NULL;
}
-/**
- * Get private data of item
- *
- * @param item The item
- * @return The data pointer stored, or NULL if none was stored
- *
- * @ingroup Multibuttonentry
- */
EAPI void *
elm_multibuttonentry_item_data_get(const Elm_Multibuttonentry_Item *item)
{
return item->data;
}
-/**
- * Set private data of item
- *
- * @param item The item
- * @param data The ponter to the data to be attached
- *
- * @ingroup Multibuttonentry
- */
EAPI void
elm_multibuttonentry_item_data_set(Elm_Multibuttonentry_Item *item, void *data)
{
item->data = data;
}
-/**
- * Set the multibuttonentry item_verify_callback function
- *
- * @param obj The multibuttonentry object
- * @param func The function pointer to be called, it it's NULL, callback function will be deleted.
- * @param data user data to be passed to the callback function
- *
- * @ingroup Multibuttonentry
- */
EAPI void
elm_multibuttonentry_item_verify_callback_set(Evas_Object *obj, Elm_Multibuttonentry_Item_Verify_Callback func, void *data)
{
+++ /dev/null
-#include <Elementary.h>
-#include "elm_priv.h"
-
-/**
- * @defgroup NavigationBar NavigationBar
- * @ingroup Elementary
- *
- * The Navigationbar is an object that allows flipping (with animation) between 1 or
- * more of objects, much like a stack of windows within the window. It also displays title
- * area above all the pages consisting of title,function buttons.
- *
- * Objects can be pushed or popped from the stack.
- * Pushes and pops will animate (and a pop will delete the object once the
- * animation is finished). Objects are pushed to the top with
- * elm_navigationbar_push() and when the top item is no longer
- * wanted, simply pop it with elm_navigationbar_pop() and it will also be
- * deleted. You can query which objects are the top and bottom with
- * elm_navigationbar_content_bottom_get() and elm_navigationbar_content_top_get().
- */
-
-#define _ELM_NAVIBAR_PREV_BTN_DEFAULT_LABEL "Previous"
-
-typedef struct _Widget_Data Widget_Data;
-typedef struct _Elm_Navigationbar_Item Elm_Navigationbar_Item;
-typedef struct _Transit_Cb_Data Transit_Cb_Data;
-
-static const char _navigationbar_key[] = "_elm_navigationbar";
-
-//TODO: Remove!
-typedef enum
- {
- ELM_NAVIGATIONBAR_PREV_BUTTON = ELM_NAVIGATIONBAR_FUNCTION_BUTTON1,
- ELM_NAVIGATIONBAR_NEXT_BUTTON = ELM_NAVIGATIONBAR_FUNCTION_BUTTON2,
- ELM_NAVIGATIONBAR_TITLE_BTN_CNT = 2
- } Elm_Navigationbar_Button_Type;
-
-struct _Widget_Data
-{
- Eina_List *stack;
- Evas_Object *rect;
- Evas_Object *base;
- Evas_Object *pager;
- Eina_Bool title_visible : 1;
- Eina_Bool popping: 1;
- };
-
-struct _Elm_Navigationbar_Item
-{
- Elm_Widget_Item base;
- const char *title;
- const char *subtitle;
- Eina_List *title_obj_list; //TODO: Remove!
- Evas_Object *title_obj;
- Evas_Object *title_btns[ELM_NAVIGATIONBAR_TITLE_BTN_CNT];
- Evas_Object *content;
- Evas_Object *icon;
- Eina_Bool titleobj_visible :1;
- Eina_Bool back_btn :1;
-};
-
-//TODO: Remove!
-struct _Transit_Cb_Data
-{
- Elm_Navigationbar_Item* prev_it;
- Elm_Navigationbar_Item* it;
- Evas_Object *navibar;
- Eina_Bool pop : 1;
- Eina_Bool first_page : 1;
-};
-
-static const char *widtype = NULL;
-
-static void _del_hook(Evas_Object *obj);
-static void _theme_hook(Evas_Object *obj);
-static void _sizing_eval(Evas_Object *obj);
-static void _resize(void *data, Evas *e, Evas_Object *obj, void *event_info);
-static void _item_sizing_eval(Elm_Navigationbar_Item *it);
-static void _item_del(Elm_Navigationbar_Item *it);
-static void _back_button_clicked(void *data, Evas_Object *obj, void *event_info);
-static void _button_size_set(Evas_Object *obj);
-static Eina_Bool _button_set(Evas_Object *obj, Evas_Object *prev_btn, Evas_Object *new_btn, Eina_Bool back_btn);
-static void _transition_complete_cb(void *data);
-static void _elm_navigationbar_prev_btn_set(Evas_Object *obj,
- Evas_Object *content,
- Evas_Object *new_btn,
- Elm_Navigationbar_Item *it);
-static void _elm_navigationbar_next_btn_set(Evas_Object *obj,
- Evas_Object *content,
- Evas_Object *new_btn,
- Elm_Navigationbar_Item *it);
-static void _title_clicked(void *data, Evas_Object *obj, const char *emission, const char *source);
-static void _titleobj_switching(Evas_Object *obj, Elm_Navigationbar_Item *it);
-static void _emit_hook(Evas_Object *obj, const char *emission, const char *source);
-
-static const char SIG_HIDE_FINISHED[] = "hide,finished";
-static const char SIG_TITLE_OBJ_VISIBLE_CHANGED[] = "titleobj,visible,changed";
-static const char SIG_TITLE_CLICKED[] = "title,clicked";
-
-static const Evas_Smart_Cb_Description _signals[] = {
- {SIG_HIDE_FINISHED, ""},
- {SIG_TITLE_OBJ_VISIBLE_CHANGED, ""},
- {SIG_TITLE_CLICKED, ""},
- {NULL, NULL}
-};
-
-static void
-_content_del(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
-{
- Elm_Navigationbar_Item *it = data;
- evas_object_data_del(obj, _navigationbar_key);
- it->content = NULL;
- //TODO: it will be better remove this page?
-}
-
-static void
-_title_obj_del(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
-{
- Elm_Navigationbar_Item *it = data;
- Eina_List *l = NULL;
- elm_navigationbar_title_object_list_unset(it->base.widget, it->content, &l);
- if (!l) return;
- evas_object_del(eina_list_data_get(l));
- eina_list_free(l);
-}
-
-static void
-_title_icon_del(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
-{
- Elm_Navigationbar_Item *it = data;
- it->icon = NULL;
-}
-
-static void
-_title_btn_del(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
-{
- Elm_Navigationbar_Item *it = data;
-
- if (it->title_btns[ELM_NAVIGATIONBAR_PREV_BUTTON] == obj)
- it->title_btns[ELM_NAVIGATIONBAR_PREV_BUTTON] = NULL;
- else if (it->title_btns[ELM_NAVIGATIONBAR_NEXT_BUTTON] == obj)
- it->title_btns[ELM_NAVIGATIONBAR_NEXT_BUTTON] = NULL;
-}
-
-static Eina_Bool
-_title_btn_set(Elm_Navigationbar_Item *it, Evas_Object *btn, int title_btn_idx, Eina_Bool back_btn)
-{
- Eina_Bool changed;
-
- if(it->title_btns[title_btn_idx] == btn) return EINA_FALSE;
-
- changed = _button_set(it->base.widget, it->title_btns[title_btn_idx], btn, back_btn);
- it->title_btns[title_btn_idx] = btn;
-
- if ((!changed) || (!btn)) return EINA_FALSE;
-
- it->back_btn = back_btn;
-
- evas_object_event_callback_add(btn, EVAS_CALLBACK_DEL, _title_btn_del, it);
-
- return EINA_TRUE;
-}
-
-static Evas_Object *
-_create_back_btn(Evas_Object *parent, const char *title, void *data)
-{
- Evas_Object *btn = elm_button_add(parent);
- if (!btn) return NULL;
- elm_object_text_set(btn, title);
- evas_object_smart_callback_priority_add(btn, "clicked", EVAS_CALLBACK_PRIORITY_AFTER, _back_button_clicked, data);
- return btn;
-}
-
-static void
-_del_hook(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- Eina_List *list;
- Elm_Navigationbar_Item *it;
-
- EINA_LIST_FOREACH(wd->stack, list, it)
- _item_del(it);
- eina_list_free(wd->stack);
- free(wd);
-}
-
-void
-_emit_hook(Evas_Object *obj, const char *emission, const char *source)
-{
- ELM_CHECK_WIDTYPE(obj, widtype);
-
- Widget_Data *wd;
- Eina_List *last;
- Elm_Navigationbar_Item *it;
-
- wd = elm_widget_data_get(obj);
- if (!wd) return;
-
- last = eina_list_last(wd->stack);
- if (!last) return;
-
- it = eina_list_data_get(last);
- if ((!it) || (!it->title_obj)) return;
-
- //FIXME: I know this is really bullshit.
- //We don't need to keep the titleobj_visible but return the status in edc.
- if (!strcmp(source, "elm"))
- {
- if (!strcmp(emission, "elm,state,hide,noanimate,title"))
- it->titleobj_visible = EINA_FALSE;
- else if (!strcmp(emission, "elm,state,show,noanimate,title"))
- it->titleobj_visible = EINA_TRUE;
- }
-
- edje_object_signal_emit(wd->base, emission, source);
-}
-
-static void
-_theme_hook(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- Eina_List *list = NULL;
- Elm_Navigationbar_Item *it = NULL;
-
- if (!wd) return;
- _elm_theme_object_set(obj, wd->base, "navigationbar", "base", elm_widget_style_get(obj));
-
- list = eina_list_last(wd->stack);
- if (list)
- {
- it = eina_list_data_get(list);
- if (it)
- {
- //buttons
- if (it->title_btns[ELM_NAVIGATIONBAR_PREV_BUTTON])
- edje_object_part_swallow(wd->base, "elm.swallow.prev_btn", it->title_btns[ELM_NAVIGATIONBAR_PREV_BUTTON]);
- if (it->title_btns[ELM_NAVIGATIONBAR_NEXT_BUTTON])
- edje_object_part_swallow(wd->base, "elm.swallow.next_btn", it->title_btns[ELM_NAVIGATIONBAR_NEXT_BUTTON]);
-
- //icon
- if (it->icon)
- {
- edje_object_part_swallow(wd->base, "elm.swallow.icon", it->icon);
- edje_object_signal_emit(wd->base, "elm,state,icon,visible", "elm");
- }
-
- //title text
- if (it->title)
- edje_object_part_text_set(wd->base, "elm.text", it->title);
-
- //title object
- if (it->title_obj)
- {
- edje_object_part_swallow(wd->base, "elm.swallow.title", it->title_obj);
-
- if (it->titleobj_visible)
- edje_object_signal_emit(wd->base, "elm,state,show,noanimate,title", "elm");
- else
- edje_object_signal_emit(wd->base, "elm,state,hide,noanimate,title", "elm"); //elm,state,title,hide
-
- if (it->title)
- edje_object_signal_emit(wd->base, "elm,state,show,extended", "elm");
- }
- }
- }
-
- if (!wd->title_visible)
- edje_object_signal_emit(wd->base, "elm,state,item,moveup", "elm");
-
- edje_object_message_signal_process(wd->base);
- _sizing_eval(obj);
-}
-
-static void
-_item_del(Elm_Navigationbar_Item *it)
-{
- //TODO: So hard to manage.
- //TODO: Just prepare one layout for title objects.
- //TODO: then remove the layout only.
- Widget_Data *wd;
- int idx;
-
- if (!it) return;
-
- wd = elm_widget_data_get(it->base.widget);
- if (!wd) return;
-
- //Remove Function Buttons
- for (idx = 0; idx < ELM_NAVIGATIONBAR_TITLE_BTN_CNT; idx++)
- {
- if (!it->title_btns[idx]) continue;
- if (!it->back_btn) elm_object_unfocus(it->title_btns[idx]);
- evas_object_event_callback_del(it->title_btns[idx], EVAS_CALLBACK_DEL, _title_btn_del);
- evas_object_del(it->title_btns[idx]);
- }
- if (it->icon)
- {
- evas_object_event_callback_del(it->icon, EVAS_CALLBACK_DEL, _title_icon_del);
- evas_object_del(it->icon);
- }
- if (it->title_obj)
- {
- evas_object_event_callback_del(it->title_obj, EVAS_CALLBACK_DEL, _title_obj_del);
- evas_object_del(it->title_obj);
- eina_list_free(it->title_obj_list);
- }
- if (it->title) eina_stringshare_del(it->title);
- if (it->subtitle) eina_stringshare_del(it->subtitle);
-
- if (it->content)
- {
- evas_object_data_del(it->content, _navigationbar_key);
- evas_object_event_callback_del(it->content, EVAS_CALLBACK_DEL, _content_del);
- }
-
- free(it);
-}
-
-static void
-_sizing_eval(Evas_Object *obj)
-{
- Widget_Data *wd;
- Eina_List *list;
-
- wd = elm_widget_data_get(obj);
- if (!wd) return;
-
- list = eina_list_last(wd->stack);
- if (!list) return;
-
- _item_sizing_eval(list->data);
-}
-
-static void
-_item_sizing_eval(Elm_Navigationbar_Item *it)
-{
- if (!it) return;
- Widget_Data *wd = elm_widget_data_get(it->base.widget);
- Evas_Coord minw;
-
- if (!wd) return;
-
- edje_object_size_min_calc(wd->base, &minw, NULL);
-
- //TODO: Even the below code for size calculation is redundant and should be removed.
- //TODO: Item_sizing_eval function has to be totally refactored/removed.
- _button_size_set(it->title_btns[ELM_NAVIGATIONBAR_PREV_BUTTON]);
- _button_size_set(it->title_btns[ELM_NAVIGATIONBAR_NEXT_BUTTON]);
-}
-
-static void
-_resize(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
-
- Evas_Coord w, h;
- evas_object_geometry_get(obj, NULL, NULL, &w, &h);
- evas_object_resize(wd->rect, w, h);
-
- _sizing_eval(obj);
-}
-
-static void
-_hide(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
-
- evas_object_hide(wd->rect);
-}
-
-static void
-_move(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
-
- Evas_Coord x, y;
- evas_object_geometry_get(obj, &x, &y, NULL, NULL);
- evas_object_move(wd->rect, x, y);
-}
-
-static void
-_titleobj_switching(Evas_Object *obj, Elm_Navigationbar_Item *it)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
-
- if (!it->title_obj) return;
-
- if (elm_navigationbar_content_top_get(it->base.widget) != it->content)
- return;
-
- if (it->titleobj_visible)
- edje_object_signal_emit(wd->base, "elm,state,show,title", "elm"); //elm,state,title,show
- else
- edje_object_signal_emit(wd->base, "elm,state,hide,title", "elm"); //elm,state,title,hide
-
- _item_sizing_eval(it);
-}
-
-static void
-_title_clicked(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
-{
- Evas_Object *navibar = data;
- Widget_Data *wd;
- Eina_List *last;
- Elm_Navigationbar_Item *it;
-
- wd = elm_widget_data_get(navibar);
- if (!wd) return;
-
- last = eina_list_last(wd->stack);
- if (!last) return;
-
- it = eina_list_data_get(last);
- if ((!it) || (!it->title_obj)) return;
-
- if (!it->titleobj_visible)
- {
- it->titleobj_visible = EINA_TRUE;
- evas_object_smart_callback_call(it->base.widget, SIG_TITLE_OBJ_VISIBLE_CHANGED, (void *) EINA_TRUE);
- }
- else
- {
- it->titleobj_visible = EINA_FALSE;
- evas_object_smart_callback_call(it->base.widget, SIG_TITLE_OBJ_VISIBLE_CHANGED, (void *) EINA_FALSE);
- }
-
- evas_object_smart_callback_call(navibar, SIG_TITLE_CLICKED, NULL);
-
- _titleobj_switching(navibar, it);
-}
-
-//TODO: should be renamed.
-static void
-_transition_complete_cb(void *data)
-{
- Evas_Object *navi_bar;
- Widget_Data *wd;
- Elm_Navigationbar_Item *prev_it;
- Elm_Navigationbar_Item *it;
- Eina_List *ll;
-
- Transit_Cb_Data *cb = data;
- if (!cb) return;
-
- navi_bar = cb->navibar;
- if (!navi_bar) return;
-
- wd = elm_widget_data_get(navi_bar);
- if (!wd) return;
-
- prev_it = cb->prev_it;
- it = cb->it;
-
- if (cb->pop && prev_it)
- {
- ll = eina_list_last(wd->stack);
- if (ll->data == prev_it)
- {
- _item_del(prev_it);
- wd->stack = eina_list_remove_list(wd->stack, ll);
- }
- }
- else if (prev_it)
- {
- if (prev_it->title_btns[ELM_NAVIGATIONBAR_PREV_BUTTON])
- evas_object_hide(prev_it->title_btns[ELM_NAVIGATIONBAR_PREV_BUTTON]);
- if (prev_it->title_btns[ELM_NAVIGATIONBAR_NEXT_BUTTON])
- evas_object_hide(prev_it->title_btns[ELM_NAVIGATIONBAR_NEXT_BUTTON]);
- if (prev_it->title_obj)
- evas_object_hide(prev_it->title_obj);
- if (prev_it->icon)
- evas_object_hide(prev_it->icon);
- }
- if ((it) && (wd->title_visible))
- {
- edje_object_part_text_set(wd->base, "elm.text", it->title);
-
- if (!cb->first_page)
- {
- if (cb->pop)
- edje_object_signal_emit(wd->base, "elm,action,pop", "elm");
- else
- edje_object_signal_emit(wd->base, "elm,action,push", "elm");
- evas_object_pass_events_set(wd->base, EINA_TRUE);
- evas_object_show(wd->rect);
- }
- if (it->title_obj)
- {
- edje_object_part_swallow(wd->base, "elm.swallow.title", it->title_obj);
- }
- if (it->subtitle)
- edje_object_part_text_set(wd->base, "elm.text.sub", it->subtitle);
- else
- edje_object_part_text_set(wd->base, "elm.text.sub", NULL);
-
- if (it->title_btns[ELM_NAVIGATIONBAR_PREV_BUTTON])
- edje_object_part_swallow(wd->base, "elm.swallow.prev_btn", it->title_btns[ELM_NAVIGATIONBAR_PREV_BUTTON]);
- if (it->title_btns[ELM_NAVIGATIONBAR_NEXT_BUTTON])
- edje_object_part_swallow(wd->base, "elm.swallow.next_btn", it->title_btns[ELM_NAVIGATIONBAR_NEXT_BUTTON]);
-
- if(it->icon)
- {
- edje_object_part_swallow(wd->base, "elm.swallow.icon", it->icon);
- edje_object_signal_emit(wd->base, "elm,state,icon,visible", "elm");
- }
- else
- edje_object_signal_emit(wd->base, "elm,state,icon,hidden", "elm");
-
- if ((it->title_obj) && (it->title))
- {
- edje_object_signal_emit(wd->base, "elm,state,show,extended", "elm");
- if(it->titleobj_visible)
- {
- //TODO: remove the dependency on these signals as related to nbeat, try to make it totally theme dependent
- edje_object_signal_emit(wd->base, "elm,state,show,noanimate,title", "elm");
- }
- else
- //TODO: remove the dependency on these signals as related to nbeat, try to make it totally theme dependent
- edje_object_signal_emit(wd->base, "elm,state,hide,noanimate,title", "elm");
- }
- else
- {
- edje_object_signal_emit(wd->base, "elm,state,hide,extended", "elm");
- //TODO: remove the dependency on these signals as related to nbeat, try to make it totally theme dependent
- edje_object_signal_emit(wd->base, "elm,state,hide,noanimate,title", "elm");
- it->titleobj_visible = EINA_FALSE;
- }
- }
-}
-
-static void
-_back_button_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
-{
- Elm_Navigationbar_Item *it = data;
- elm_navigationbar_pop(it->base.widget);
-}
-
-static void
-_hide_finished(void *data, Evas_Object *obj __UNUSED__, void *event_info)
-{
- Evas_Object *navi_bar = data;
- Widget_Data *wd = elm_widget_data_get(navi_bar);
- wd->popping = EINA_FALSE;
- evas_object_smart_callback_call(navi_bar, SIG_HIDE_FINISHED, event_info);
- evas_object_pass_events_set(wd->base, EINA_FALSE);
- evas_object_hide(wd->rect);
-}
-
-static void
-_button_size_set(Evas_Object *obj)
-{
- if (!obj) return;
- Evas_Coord minw = -1, minh = -1, maxw= -1, maxh = -1;
- Evas_Coord w = 0, h = 0;
-
- evas_object_size_hint_min_get(obj, &minw, &minh);
- evas_object_size_hint_max_get(obj, &maxw, &maxh);
- evas_object_geometry_get(obj, NULL, NULL, &w, &h);
- if (w < minw) w = minw;
- if (h < minh) h = minh;
- if ((maxw >= 0) && (w > maxw)) w = maxw;
- if ((maxh >= 0) && (h > maxh)) h = maxh;
- evas_object_resize(obj, w, h);
-}
-
-static void
-_elm_navigationbar_prev_btn_set(Evas_Object *obj, Evas_Object *content, Evas_Object *new_btn, Elm_Navigationbar_Item *it)
-{
- Widget_Data *wd;
- Evas_Object *prev_btn;
-
- wd = elm_widget_data_get(obj);
- if (!wd) return;
-
- if (!_title_btn_set(it, new_btn, ELM_NAVIGATIONBAR_PREV_BUTTON, EINA_FALSE))
- return;
-
- //update if the content is the top item
- if (elm_navigationbar_content_top_get(obj) != content)
- return;
-
- prev_btn = edje_object_part_swallow_get(wd->base, "elm.swallow.prev_btn");
- if (prev_btn) evas_object_del(prev_btn);
- edje_object_part_swallow(wd->base, "elm.swallow.prev_btn", new_btn);
-}
-
-//TODO: looks make this _elm_navigationbar_function_button1_set same.
-static void
-_elm_navigationbar_next_btn_set(Evas_Object *obj, Evas_Object *content, Evas_Object *new_btn, Elm_Navigationbar_Item *it)
-{
- Widget_Data *wd;
- Evas_Object *prev_btn;
-
- wd = elm_widget_data_get(obj);
- if (!wd) return;
-
- if (!_title_btn_set(it, new_btn, ELM_NAVIGATIONBAR_NEXT_BUTTON, EINA_FALSE))
- return;
-
- //update if the content is the top item
- if (elm_navigationbar_content_top_get(obj) != content)
- return;
-
- prev_btn = edje_object_part_swallow_get(wd->base, "elm.swallow.next_btn");
- if (prev_btn) evas_object_del(prev_btn);
- edje_object_part_swallow(wd->base, "elm.swallow.next_btn", new_btn);
-}
-
-static Eina_Bool
-_button_set(Evas_Object *obj, Evas_Object *prev_btn, Evas_Object *new_btn, Eina_Bool back_btn)
-{
- char buf[4096]; //TODO: How to guarantee this buffer size?
- Eina_Bool changed = EINA_FALSE;
-
- if (prev_btn)
- {
- changed = EINA_TRUE;
- evas_object_del(prev_btn);
- }
- if (!new_btn) return changed;
-
- if (back_btn)
- {
- snprintf(buf, sizeof(buf), "navigationbar_prev_btn/%s", elm_widget_style_get(obj));
- elm_object_style_set(new_btn, buf);
- }
- else
- {
- if (!strcmp("default", elm_object_style_get(new_btn)))
- {
- snprintf(buf, sizeof(buf), "navigationbar_next_btn/%s", elm_widget_style_get(obj));
- elm_object_style_set(new_btn, buf);
- }
- }
-
- elm_widget_sub_object_add(obj, new_btn);
- changed = EINA_TRUE;
-
- return changed;
-}
-
-/**
- * Add a new navigationbar to the parent
- *
- * @param[in] parent The parent object
- * @return The new object or NULL if it cannot be created
- *
- * @ingroup NavigationBar
- */
-EAPI Evas_Object *
-elm_navigationbar_add(Evas_Object *parent)
-{
- Evas_Object *obj;
- Evas *e;
- Widget_Data *wd;
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(parent, NULL);
-
- wd = ELM_NEW(Widget_Data);
- e = evas_object_evas_get(parent);
- obj = elm_widget_add(e);
- ELM_SET_WIDTYPE(widtype, "navigationbar");
- elm_widget_type_set(obj, "navigationbar");
- 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_signal_emit_hook_set(obj, _emit_hook);
-
- wd->base = edje_object_add(e);
- _elm_theme_object_set(obj, wd->base, "navigationbar", "base", "default");
- elm_widget_resize_object_set(obj, wd->base);
- //TODO: elm,action,title,clicked
- edje_object_signal_callback_add(wd->base, "elm,action,clicked", "elm",
- _title_clicked, obj);
-
- //TODO: How about making the pager as a base?
- //TODO: Swallow title and content as one content into the pager.
- wd->pager = elm_pager_add(obj);
- elm_object_style_set(wd->pager, "navigationbar");
- elm_widget_sub_object_add(obj, wd->pager);
- edje_object_part_swallow(wd->base, "elm.swallow.content", wd->pager);
- evas_object_smart_callback_add(wd->pager, "hide,finished", _hide_finished, obj);
- evas_object_event_callback_add(obj, EVAS_CALLBACK_RESIZE, _resize, NULL);
- evas_object_event_callback_add(obj, EVAS_CALLBACK_MOVE, _move, NULL);
- evas_object_event_callback_add(obj, EVAS_CALLBACK_HIDE, _hide, NULL);
-
- wd->title_visible = EINA_TRUE;
-
- evas_object_smart_callbacks_descriptions_set(obj, _signals);
-
- //Rect
- wd->rect = evas_object_rectangle_add(e);
- evas_object_color_set(wd->rect, 0, 0, 0, 0);
- elm_widget_sub_object_add(obj, wd->rect);
-
- //TODO: apply elm_object_disabled_set
-
- return obj;
-}
-
-/**
- * Push an object to the top of the NavigationBar stack (and show it)
- * The object pushed becomes a child of the navigationbar and will be controlled
- * it is deleted when the navigationbar is deleted or when the content is popped.
- *
- * @param[in] obj The NavigationBar object
- * @param[in] title The title string
- * @param[in] prev_btn The previous button
- * @param[in] next_btn The next button
- * @param[in] unused Unused.
- * @param[in] content The object to push
- *
- * @ingroup NavigationBar
- */
-EAPI void
-elm_navigationbar_push(Evas_Object *obj, const char *title, Evas_Object *prev_btn, Evas_Object *next_btn, Evas_Object *unused __UNUSED__, Evas_Object *content)
-{
- ELM_CHECK_WIDTYPE(obj, widtype);
-
- Widget_Data *wd;
- Elm_Navigationbar_Item *it;
- Elm_Navigationbar_Item *top_it;
-
- if (!content) return;
-
- wd = elm_widget_data_get(obj);
- if (!wd) return;
-
- if (evas_object_data_get(content, _navigationbar_key)) return;
-
- it = elm_widget_item_new(obj, Elm_Navigationbar_Item);
- if (!it) return;
-
- top_it = eina_list_data_get(eina_list_last(wd->stack));
-
- _title_btn_set(it, prev_btn, ELM_NAVIGATIONBAR_PREV_BUTTON, EINA_FALSE);
- _title_btn_set(it, next_btn, ELM_NAVIGATIONBAR_NEXT_BUTTON, EINA_FALSE);
-
- it->content = content;
- evas_object_event_callback_add(content, EVAS_CALLBACK_DEL, _content_del, it);
- evas_object_data_set(content, _navigationbar_key, it);
-
- //Add a prev-button automatically.
- if ((!prev_btn) && (top_it))
- {
- if (top_it->title)
- _title_btn_set(it, _create_back_btn(obj, top_it->title, it), ELM_NAVIGATIONBAR_PREV_BUTTON, EINA_TRUE);
- else
- _title_btn_set(it, _create_back_btn(obj, _ELM_NAVIBAR_PREV_BTN_DEFAULT_LABEL, it), ELM_NAVIGATIONBAR_PREV_BUTTON, EINA_TRUE);
- }
-
- eina_stringshare_replace(&it->title, title);
- edje_object_part_text_set(wd->base, "elm.text", title);
- _item_sizing_eval(it);
-
- Transit_Cb_Data *cb = ELM_NEW(Transit_Cb_Data);
- // unswallow items and start transition
- // TODO: For what? why does it need to unswallow?
- if (top_it)
- {
- cb->prev_it = top_it;
- cb->first_page = EINA_FALSE;
- if (top_it->title_obj) edje_object_part_unswallow(wd->base, top_it->title_obj);
- if (top_it->title_btns[ELM_NAVIGATIONBAR_PREV_BUTTON])
- edje_object_part_unswallow(wd->base, top_it->title_btns[ELM_NAVIGATIONBAR_PREV_BUTTON]);
- if (top_it->title_btns[ELM_NAVIGATIONBAR_NEXT_BUTTON])
- edje_object_part_unswallow(wd->base, top_it->title_btns[ELM_NAVIGATIONBAR_NEXT_BUTTON]);
- if (top_it->icon)
- edje_object_part_unswallow(wd->base, top_it->icon);
- }
- //If page is the first, then do not run the transition... but if user want.. ?
- else
- {
- cb->prev_it = NULL;
- cb->first_page = EINA_TRUE;
- }
- cb->navibar = obj;
- cb->it = it;
- cb->pop = EINA_FALSE;
-
- _transition_complete_cb(cb);
- free(cb);
- elm_pager_content_push(wd->pager, it->content);
-
- wd->stack = eina_list_append(wd->stack, it);
- _sizing_eval(obj);
-}
-
-/**
- * This pops the object that is on top (visible) in the navigationbar, makes it disappear, then deletes the object.
- * The object that was underneath it, on the stack will become visible.
- *
- * @param[in] obj The NavigationBar object
- *
- * @ingroup NavigationBar
- */
-EAPI void
-elm_navigationbar_pop(Evas_Object *obj)
-{
- ELM_CHECK_WIDTYPE(obj, widtype);
- Widget_Data *wd = elm_widget_data_get(obj);
- Eina_List *ll;
- Transit_Cb_Data *cb;
- Elm_Navigationbar_Item *it = NULL;
- Elm_Navigationbar_Item *prev_it = NULL;
-
- //TODO: It's impossible to pop while popping?
- if (wd->popping) return;
- if (!wd->stack) return;
-
- //find item to be popped and to be shown
- //TODO: hmm.. i think it's hard to manager separated list from elm_pager internal list. but how about use evas_object_data_set to each content??
- ll = eina_list_last(wd->stack);
- if (ll)
- {
- prev_it = ll->data;
- ll = ll->prev;
- if (ll)
- it = ll->data;
- }
- //unswallow items and start trasition
- cb = ELM_NEW(Transit_Cb_Data);
-
- //Previous page is exist.
- if (prev_it)
- {
- if (it)
- {
- cb->prev_it = prev_it;
- cb->it = it;
- cb->pop = EINA_TRUE;
- if (prev_it->title_obj)
- edje_object_part_unswallow(wd->base, prev_it->title_obj);
- if (prev_it->title_btns[ELM_NAVIGATIONBAR_PREV_BUTTON])
- edje_object_part_unswallow(wd->base, prev_it->title_btns[ELM_NAVIGATIONBAR_PREV_BUTTON]);
- if (prev_it->title_btns[ELM_NAVIGATIONBAR_NEXT_BUTTON])
- edje_object_part_unswallow(wd->base, prev_it->title_btns[ELM_NAVIGATIONBAR_NEXT_BUTTON]);
- if (prev_it->icon)
- edje_object_part_unswallow(wd->base, prev_it->icon);
- _item_sizing_eval(it);
- }
- else
- {
- cb->prev_it = prev_it;
- cb->it = NULL;
- cb->pop = EINA_TRUE;
- //TODO: seems that flag is inverted.
- cb->first_page = EINA_FALSE;
- }
-
- if (prev_it->content)
- elm_object_tree_unfocusable_set(prev_it->content, EINA_TRUE);
- }
-
- cb->navibar = obj;
- _transition_complete_cb(cb);
- wd->popping = EINA_TRUE;
-
- elm_pager_content_pop(wd->pager);
-
- if ((prev_it) && (!it))
- edje_object_part_text_set(wd->base, "elm.text", NULL);
-
- free(cb);
-}
-
-/**
- * This Pops to the given content object (and update it) by deleting rest of the objects in between.
- *
- * @param[in] obj The NavigationBar object
- * @param[in] content the object to show
- *
- * @ingroup NavigationBar
- */
-EAPI void
-elm_navigationbar_to_content_pop(Evas_Object *obj, Evas_Object *content)
-{
- ELM_CHECK_WIDTYPE(obj, widtype);
-
- Widget_Data *wd;
- Eina_List *ll;
- Elm_Navigationbar_Item *it;
- Elm_Navigationbar_Item *prev_it;
- Transit_Cb_Data *cb;
-
- wd = elm_widget_data_get(obj);
- if ((!wd) || (!content) || (!wd->stack)) return;
-
- //find item to be popped and to be shown
- it = prev_it = NULL;
- ll = eina_list_last(wd->stack);
-
- if (elm_navigationbar_content_top_get(obj) == content) return;
-
- if (ll)
- {
- prev_it = ll->data;
- ll = ll->prev;
- }
- while (ll)
- {
- it = ll->data;
- if ((it->base.widget) && (it->content != content))
- {
- _item_del(ll->data);
- wd->stack = eina_list_remove_list(wd->stack, ll);
- it = NULL;
- }
- else
- break;
- ll = ll->prev;
- }
- if (prev_it && it)
- {
- //unswallow items and start trasition
- cb = ELM_NEW(Transit_Cb_Data);
- cb->prev_it = prev_it;
- cb->it = it;
- cb->pop = EINA_TRUE;
- cb->first_page = EINA_FALSE;
- cb->navibar = obj;
-
- //TODO: make one call.
- if (prev_it->title_obj)
- edje_object_part_unswallow(wd->base, prev_it->title_obj);
- if (prev_it->title_btns[ELM_NAVIGATIONBAR_PREV_BUTTON])
- edje_object_part_unswallow(wd->base, prev_it->title_btns[ELM_NAVIGATIONBAR_PREV_BUTTON]);
- if (prev_it->title_btns[ELM_NAVIGATIONBAR_NEXT_BUTTON])
- edje_object_part_unswallow(wd->base, prev_it->title_btns[ELM_NAVIGATIONBAR_NEXT_BUTTON]);
-
- _item_sizing_eval(it);
- _transition_complete_cb(cb);
-
- elm_pager_to_content_pop(wd->pager, content);
-
- free(cb);
- }
-}
-
-/**
- * Set the title string for the pushed content
- *
- * @param[in] obj The NavigationBar object
- * @param[in] content The object to push or pushed
- * @param[in] title The title string
- *
- * @ingroup NavigationBar
- */
-EAPI void
-elm_navigationbar_title_label_set(Evas_Object *obj, Evas_Object *content, const char *title)
-{
- ELM_CHECK_WIDTYPE(obj, widtype);
- Widget_Data *wd;
- Elm_Navigationbar_Item *it;
-
- if (!content) return;
-
- wd = elm_widget_data_get(obj);
- if (!wd) return;
-
- it = evas_object_data_get(content, _navigationbar_key);
- if (!it) return;
-
- eina_stringshare_replace(&it->title, title);
- edje_object_part_text_set(wd->base, "elm.text", title);
- _item_sizing_eval(it);
-}
-
-/**
- * Return the title string of the pushed content
- *
- * @param[in] obj The NavigationBar object
- * @param[in] content The object to push or pushed
- * @return The title string or NULL if none
- *
- * @ingroup NavigationBar
- */
-EAPI const char *
-elm_navigationbar_title_label_get(Evas_Object *obj, Evas_Object *content)
-{
- ELM_CHECK_WIDTYPE(obj, widtype) NULL;
- Widget_Data *wd;
- Elm_Navigationbar_Item *it;
-
- if (!content) return NULL;
-
- wd = elm_widget_data_get(obj);
- if (!wd) return NULL;
-
- it = evas_object_data_get(content, _navigationbar_key);
- if (!it) return NULL;
- return it->title;
-}
-
-/**
- * Set the title icon for the pushed content
- *
- * @param[in] obj The NavigationBar object
- * @param[in] content The object to push or pushed
- * @param[in] icon The icon object
- *
- * @ingroup NavigationBar
- */
-EAPI void
-elm_navigationbar_title_icon_set(Evas_Object *obj, Evas_Object *content, Evas_Object *icon)
-{
- ELM_CHECK_WIDTYPE(obj, widtype);
- Widget_Data *wd;
- Elm_Navigationbar_Item *it;
- Evas_Object *swallow;
-
- if (!content) return;
-
- wd = elm_widget_data_get(obj);
- if (!wd) return;
-
- it = evas_object_data_get(content, _navigationbar_key);
- if (!it) return;
-
- if (it->icon == icon) return;
- if (it->icon) evas_object_del(it->icon);
- it->icon = icon;
-
- if (!icon) return;
-
- elm_widget_sub_object_add(obj, icon);
- evas_object_event_callback_add(icon, EVAS_CALLBACK_DEL, _title_icon_del, it);
- _item_sizing_eval(it);
- //update if the content is the top item
- if (elm_navigationbar_content_top_get(obj) != content)
- return;
-
- swallow = edje_object_part_swallow_get(wd->base, "elm.swallow.icon");
- if (swallow)
- {
- edje_object_signal_emit(wd->base, "elm,state,icon,hidden", "elm");
- edje_object_part_unswallow(wd->base, swallow);
- evas_object_hide(swallow);
- }
- if (wd->title_visible)
- {
- edje_object_part_swallow(wd->base, "elm.swallow.icon", icon);
- edje_object_signal_emit(wd->base, "elm,state,icon,visible", "elm");
- edje_object_message_signal_process(wd->base);
- }
- else
- edje_object_signal_emit(wd->base, "elm,state,icon,hidden", "elm");
-}
-
-/**
- * Get the title icon for the pushed content
- *
- * @param[in] obj The NavigationBar object
- * @param[in] content The object to push or pushed
- * @return The icon object or NULL if none
- *
- * @ingroup NavigationBar
- */
-EAPI Evas_Object *
-elm_navigationbar_title_icon_get(Evas_Object *obj, Evas_Object *content)
-{
- ELM_CHECK_WIDTYPE(obj, widtype)NULL;
- Widget_Data *wd;
- Elm_Navigationbar_Item *it;
-
- if (!content) return NULL;
-
- wd = elm_widget_data_get(obj);
- if (!wd) return NULL;
-
- it = evas_object_data_get(content, _navigationbar_key);
- if (!it) return NULL;
-
- return it->icon;
-}
-
-/**
- * Add a title object for the content.
- *
- * @param[in] obj The NavigationBar object
- * @param[in] content The object pushed
- * @param[in] title_obj a title object (normally button or segment_control)
- *
- * @ingroup NavigationBar
- */
-//TODO: elm_navigationbar_title_object_set ( .... )
-EAPI void
-elm_navigationbar_title_object_add(Evas_Object *obj, Evas_Object *content, Evas_Object *title_obj)
-{
- ELM_CHECK_WIDTYPE(obj, widtype);
- Widget_Data *wd;
- Elm_Navigationbar_Item *it;
-
- if ((!title_obj) || (!content)) return;
-
- wd = elm_widget_data_get(obj);
- if (!wd) return;
-
- it = evas_object_data_get(content, _navigationbar_key);
- if (!it) return;
-
- if (it->title_obj)
- {
- evas_object_event_callback_del(it->title_obj, EVAS_CALLBACK_DEL, _title_obj_del);
- evas_object_del(it->title_obj);
- }
-
- it->title_obj = title_obj;
- elm_widget_sub_object_add(obj, title_obj);
- evas_object_event_callback_add(title_obj, EVAS_CALLBACK_DEL, _title_obj_del, it);
-
- //TODO: Conserve this line for a while the object list get API is alive.
- eina_list_free(it->title_obj_list);
- it->title_obj_list = eina_list_append(NULL, title_obj);
-
- if (elm_navigationbar_content_top_get(obj) != content)
- return;
-
- edje_object_part_swallow(wd->base, "elm.swallow.title", title_obj);
-
- //TODO: Looks something incorrect.
- if (wd->title_visible)
- {
- if (it->title)
- {
- edje_object_signal_emit(wd->base, "elm,state,show,extended", "elm");
- //TODO: for before nbeat?
- edje_object_signal_emit(wd->base, "elm,state,show,noanimate,title", "elm");
- it->titleobj_visible = EINA_TRUE;
- }
- }
- _item_sizing_eval(it);
-}
-
-/**
- * Unset the list of title objects corresponding to given content and returns it to
- * the application.
- * @param[in] obj The NavigationBar object
- * @param[in] content The content object pushed
- * @param[out] list updates the list with title objects list, this list has to be freed and the
- * objects have to be deleted by application.
- * @ingroup NavigationBar
- */
-//TODO: remove!
-EAPI void
-elm_navigationbar_title_object_list_unset(Evas_Object *obj, Evas_Object *content, Eina_List **list)
-{
- ELM_CHECK_WIDTYPE(obj, widtype);
- Widget_Data *wd;
- Elm_Navigationbar_Item *it;
- Evas_Object *swallow;
-
- if ((!list) || (!content)) return;
-
- wd = elm_widget_data_get(obj);
- if (!wd) return;
-
- it = evas_object_data_get(content, _navigationbar_key);
- if (!it) return;
-
- *list = eina_list_append(*list, it->title_obj);
- it->title_obj = NULL;
-
- if (elm_navigationbar_content_top_get(obj) != content)
- return;
-
- //In this case, the content is in the last of the stack
- swallow = edje_object_part_swallow_get(wd->base, "elm.swallow.title");
- if (!swallow) return;
-
- if (wd->title_visible)
- {
- if(it->titleobj_visible)
- {
- //TODO: remove the dependency on these signals as related to nbeat?
- edje_object_signal_emit(wd->base, "elm,state,hide,noanimate,title", "elm");
- it->titleobj_visible = EINA_FALSE;
- }
- edje_object_signal_emit(wd->base, "elm,state,hide,extended", "elm");
- }
- _item_sizing_eval(it);
-}
-
-EAPI Evas_Object *
-elm_navigationbar_title_object_get(Evas_Object *obj, Evas_Object *content)
-{
- ELM_CHECK_WIDTYPE(obj, widtype) NULL;
- Widget_Data *wd;
- Elm_Navigationbar_Item *it;
-
- if (!content) return NULL;
-
- wd = elm_widget_data_get(obj);
- if (!wd) return NULL;
-
- it = evas_object_data_get(content, _navigationbar_key);
- if (!it) return NULL;
-
- return it->title_obj;
-}
-
-/**
- * Return the list of title objects of the pushed content.
- *
- * @param[in] obj The NavigationBar object
- * @param[in] content The object to push or pushed
- * @return The list of title objects
- *
- * @ingroup NavigationBar
- */
-//TODO: Remove!!
-EAPI Eina_List *
-elm_navigationbar_title_object_list_get(Evas_Object *obj, Evas_Object *content)
-{
- ELM_CHECK_WIDTYPE(obj, widtype) NULL;
- Widget_Data *wd;
- Elm_Navigationbar_Item *it;
-
- if (!content) return NULL;
-
- wd = elm_widget_data_get(obj);
- if (!wd) return NULL;
-
- it = evas_object_data_get(content, _navigationbar_key);
- if (!it) return NULL;
-
- return it->title_obj_list;
-}
-
-/**
- * Return the content object at the top of the NavigationBar stack
- *
- * @param[in] obj The NavigationBar object
- * @return The top content object or NULL if none
- *
- * @ingroup NavigationBar
- */
-EAPI Evas_Object *
-elm_navigationbar_content_top_get(Evas_Object *obj)
-{
- ELM_CHECK_WIDTYPE(obj, widtype) NULL;
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return NULL;
- return elm_pager_content_top_get(wd->pager);
-}
-
-/**
- * Return the content object at the bottom of the NavigationBar stack
- *
- * @param[in] obj The NavigationBar object
- * @return The bottom content object or NULL if none
- *
- * @ingroup NavigationBar
- */
-EAPI Evas_Object *
-elm_navigationbar_content_bottom_get(Evas_Object *obj)
-{
- ELM_CHECK_WIDTYPE(obj, widtype)NULL;
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return NULL;
- return elm_pager_content_bottom_get(wd->pager);
-}
-
-/**
- * This hides the title area of navigationbar.
- *
- * @param[in] obj The NavigationBar object
- * @param[in] hidden if EINA_TRUE the title area is hidden.
- *
- * @ingroup NavigationBar
- */
-//TODO: does not provide hidden get ?
-EAPI void
-elm_navigationbar_hidden_set(Evas_Object *obj,
- Eina_Bool hidden)
-{
- ELM_CHECK_WIDTYPE(obj, widtype);
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
-
- if (hidden)
- edje_object_signal_emit(wd->base, "elm,state,item,moveup", "elm");
- else
- edje_object_signal_emit(wd->base, "elm,state,item,movedown", "elm");
-
- wd->title_visible = !hidden;
-}
-
-/**
- * Set the button object of the pushed content.
- *
- * @param[in] obj The NavigationBar object
- * @param[in] content The object to push or pushed
- * @param[in] button The button
- * @param[in] button_type Indicates the position
- *
- * @ingroup NavigationBar
- */
-EAPI void
-elm_navigationbar_title_button_set(Evas_Object *obj, Evas_Object *content, Evas_Object *button, Elm_Navi_Button_Type button_type)
-{
- ELM_CHECK_WIDTYPE(obj, widtype);
-
- Widget_Data *wd;
- Elm_Navigationbar_Item *it;
-
- if (!content) return;
-
- wd = elm_widget_data_get(obj);
- if (!wd) return;
-
- it = evas_object_data_get(content, _navigationbar_key);
- if (!it) return;
-
- switch(button_type)
- {
- case ELM_NAVIGATIONBAR_PREV_BUTTON:
- _elm_navigationbar_prev_btn_set(obj, content, button, it);
- break;
- case ELM_NAVIGATIONBAR_NEXT_BUTTON:
- _elm_navigationbar_next_btn_set(obj, content, button, it);
- break;
- default:
- _elm_navigationbar_prev_btn_set(obj, content, button, it);
- break;
- }
- _sizing_eval(obj);
-}
-
-/**
- * Return the button object of the pushed content
- *
- * @param[in] obj The NavigationBar object
- * @param[in] content The object to push or pushed
- * @param[in] button_type Indicates the position
- * @return The button object or NULL if none
- *
- * @ingroup NavigationBar
- */
-EAPI Evas_Object *
-elm_navigationbar_title_button_get(Evas_Object *obj, Evas_Object *content, Elm_Navi_Button_Type button_type)
-{
- ELM_CHECK_WIDTYPE(obj, widtype) NULL;
- Widget_Data *wd;
- Elm_Navigationbar_Item *it;
-
- if (!content) return NULL;
-
- wd = elm_widget_data_get(obj);
- if (!wd) return NULL;
-
- it = evas_object_data_get(content, _navigationbar_key);
- if (!it) return NULL;
-
- switch(button_type)
- {
- case ELM_NAVIGATIONBAR_PREV_BUTTON:
- return it->title_btns[ELM_NAVIGATIONBAR_PREV_BUTTON];
- case ELM_NAVIGATIONBAR_NEXT_BUTTON:
- return it->title_btns[ELM_NAVIGATIONBAR_NEXT_BUTTON];
- default:
- return it->title_btns[ELM_NAVIGATIONBAR_PREV_BUTTON];
- }
- return NULL;
-}
-
-/**
- * Set the sub title string for the pushed content.
- *
- * @param[in] obj The NavigationBar object
- * @param[in] content The object to push or pushed
- * @param[in] subtitle The subtitle string
- *
- * @ingroup NavigationBar
- */
-EAPI void
-elm_navigationbar_subtitle_label_set(Evas_Object *obj, Evas_Object *content, const char *subtitle)
-{
- ELM_CHECK_WIDTYPE(obj, widtype);
- Widget_Data *wd;
- Elm_Navigationbar_Item *it;
-
- wd = elm_widget_data_get(obj);
- if (!wd) return;
-
- it = evas_object_data_get(content, _navigationbar_key);
- if (!it) return;
-
- eina_stringshare_replace(&it->subtitle, subtitle);
- edje_object_part_text_set(wd->base, "elm.text.sub", subtitle);
- _item_sizing_eval(it);
-}
-
-/**
- * Return the subtitle string of the pushed content.
- *
- * @param[in] obj The NavigationBar object
- * @param[in] content The object to push or pushed
- * @return The subtitle string or NULL if none
- *
- * @ingroup NavigationBar
- */
-EAPI const char *
-elm_navigationbar_subtitle_label_get(Evas_Object *obj, Evas_Object *content)
-{
- ELM_CHECK_WIDTYPE(obj, widtype) NULL;
- Widget_Data *wd;
- Elm_Navigationbar_Item *it;
-
- wd = elm_widget_data_get(obj);
- if (!wd) return NULL;
-
- it = evas_object_data_get(content, _navigationbar_key);
- if (!it) return NULL;
- return it->subtitle;
-}
-
-/**
- * This disables content area animation on push/pop.
- *
- * @param[in] obj The NavigationBar object
- * @param[in] disable if EINA_TRUE animation is disabled.
- *
- * @ingroup NavigationBar
- */
-//TODO: Let's check to remove this API.
-EAPI void
-elm_navigationbar_animation_disabled_set(Evas_Object *obj, Eina_Bool disable)
-{
- ELM_CHECK_WIDTYPE(obj, widtype);
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
- elm_pager_animation_disabled_set(wd->pager, disable);
-}
-
-/**
- * This shows/hides title object area.
- *
- * @param[in] obj The NavigationBar object
- * @param[in] show if EINA_TRUE title object is shown else its hidden.
- * @param[in] content The content object packed in navigationbar.
- * @ingroup NavigationBar
- */
-EAPI void
-elm_navigationbar_title_object_visible_set(Evas_Object *obj, Evas_Object *content, Eina_Bool visible)
-{
- ELM_CHECK_WIDTYPE(obj, widtype);
- Elm_Navigationbar_Item *it;
- Widget_Data *wd;
-
- if (!content) return;
-
- wd = elm_widget_data_get(obj);
- if (!wd) return;
-
- it = evas_object_data_get(content, _navigationbar_key);
- if (!it) return;
- if (it->titleobj_visible == visible) return;
- it->titleobj_visible = visible;
- _titleobj_switching(obj, it);
-}
-
-/**
- * This gets the status whether title object is shown/hidden.
- *
- * @param[in] obj The NavigationBar object
- * @param[in] content The content object packed in navigationbar.
- * @return The status whether title object is shown/hidden.
- * @ingroup NavigationBar
- */
-Eina_Bool
-elm_navigationbar_title_object_visible_get(Evas_Object *obj, Evas_Object *content)
-{
- ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
- Elm_Navigationbar_Item *it;
- Widget_Data *wd;
-
- if (!content) return EINA_FALSE;
-
- wd = elm_widget_data_get(obj);
- if (!wd) return EINA_FALSE;
-
- it = evas_object_data_get(content, _navigationbar_key);
- if (!it) return EINA_FALSE;
-
- return it->titleobj_visible;
-}
ELM_ACCESS_TYPE, E_("Button"));
_elm_access_callback_set(_elm_access_object_get(obj),
ELM_ACCESS_INFO, _access_info_cb, obj);
+ _elm_access_callback_set(_elm_access_object_get(obj),
+ ELM_ACCESS_STATE, _access_state_cb, obj);
return obj;
}
break;
case ALPHA:
wd->a = 255.0 * x;
- evas_object_color_set(wd->cp[3]->arrow, wd->er, wd->eg, wd->eb, wd->a);
+ evas_object_color_set(wd->cp[3]->arrow,
+ (wd->er * wd->a) / 255,
+ (wd->eg * wd->a) / 255,
+ (wd->eb * wd->a) / 255,
+ wd->a);
break;
default:
break;
eina_stringshare_replace(&item->location, location);
_set_item_theme(item, location);
- elm_object_content_part_set(item->bg_layout, "swallow", item->content);
+ elm_object_part_content_set(item->bg_layout, "swallow", item->content);
if ((item->press == EINA_TRUE) && (item->disabled == EINA_FALSE))
edje_object_signal_emit(elm_layout_edje_get(item->bg_layout), "elm,state,press,on", "elm");
else
evas_object_size_hint_align_set(item->bg_layout, EVAS_HINT_FILL, 0.0);
evas_object_show(item->bg_layout);
- elm_object_content_part_set(item->bg_layout, "swallow", item->content);
+ elm_object_part_content_set(item->bg_layout, "swallow", item->content);
return item;
}
Eina_Bool ret;
if (!wd) return EINA_TRUE;
-if (0) {
+ if (0) {
/* It's a hack until we get the support suggested above.
* We just create a cursor, point it to the begining, and then
* try to advance it, if it can advance, the tb is not empty,
evas_textblock_cursor_free(cur);
return !ret;
-}
+ }
char *str = elm_entry_markup_to_utf8(elm_entry_entry_get(obj));
if (!str) return EINA_TRUE;
return ret;
}
+EAPI const Evas_Object *
+elm_entry_textblock_get(const Evas_Object *obj)
+{
+ ELM_CHECK_WIDTYPE(obj, widtype) NULL;
+ Widget_Data *wd = elm_widget_data_get(obj);
+ if (!wd) return NULL;
+
+ return edje_object_part_object_get(wd->ent, "elm.text");
+}
+
+EAPI void
+elm_entry_calc_force(const Evas_Object *obj)
+{
+ ELM_CHECK_WIDTYPE(obj, widtype);
+ Widget_Data *wd = elm_widget_data_get(obj);
+ if (!wd) return;
+
+ edje_object_calc_force(wd->ent);
+}
+
+
EAPI const char *
elm_entry_selection_get(const Evas_Object *obj)
{
static const char SIG_SCROLL_ANIM_STOP[] = "scroll,anim,stop";
static const char SIG_SCROLL_DRAG_START[] = "scroll,drag,start";
static const char SIG_SCROLL_DRAG_STOP[] = "scroll,drag,stop";
+static const char SIG_EDGE_TOP[] = "edge,top";
+static const char SIG_EDGE_BOTTOM[] = "edge,bottom";
+static const char SIG_EDGE_LEFT[] = "edge,left";
+static const char SIG_EDGE_RIGHT[] = "edge,right";
static const char SIG_MOVED[] = "moved";
static const Evas_Smart_Cb_Description _signals[] = {
{SIG_SCROLL_ANIM_STOP, ""},
{SIG_SCROLL_DRAG_START, ""},
{SIG_SCROLL_DRAG_STOP, ""},
+ {SIG_EDGE_TOP, ""},
+ {SIG_EDGE_BOTTOM, ""},
+ {SIG_EDGE_LEFT, ""},
+ {SIG_EDGE_RIGHT, ""},
{SIG_MOVED, ""},
{NULL, NULL}
};
}
static void
+_edge_left(void *data,
+ Evas_Object *scr __UNUSED__,
+ void *event_info __UNUSED__)
+{
+ evas_object_smart_callback_call(data, SIG_EDGE_LEFT, NULL);
+}
+
+static void
+_edge_right(void *data,
+ Evas_Object *scr __UNUSED__,
+ void *event_info __UNUSED__)
+{
+ evas_object_smart_callback_call(data, SIG_EDGE_RIGHT, NULL);
+}
+
+static void
+_edge_top(void *data,
+ Evas_Object *scr __UNUSED__,
+ void *event_info __UNUSED__)
+{
+ evas_object_smart_callback_call(data, SIG_EDGE_TOP, NULL);
+}
+
+static void
+_edge_bottom(void *data,
+ Evas_Object *scr __UNUSED__,
+ void *event_info __UNUSED__)
+{
+ evas_object_smart_callback_call(data, SIG_EDGE_BOTTOM, NULL);
+}
+
+
+static void
_scr_scroll(void *data,
Evas_Object *obj __UNUSED__,
void *event_info __UNUSED__)
evas_object_smart_callback_add(wd->scr, "animate,stop", _scr_anim_stop, obj);
evas_object_smart_callback_add(wd->scr, "drag,start", _scr_drag_start, obj);
evas_object_smart_callback_add(wd->scr, "drag,stop", _scr_drag_stop, obj);
+ evas_object_smart_callback_add(wd->scr, "edge,left", _edge_left, obj);
+ evas_object_smart_callback_add(wd->scr, "edge,right", _edge_right, obj);
+ evas_object_smart_callback_add(wd->scr, "edge,top", _edge_top, obj);
+ evas_object_smart_callback_add(wd->scr, "edge,bottom", _edge_bottom, obj);
evas_object_smart_callback_add(wd->scr, "scroll", _scr_scroll, obj);
elm_smart_scroller_bounce_allow_set(wd->scr, bounce, bounce);
+++ /dev/null
-/*
- * @defgroup SlidingDrawer SlidingDrawer
- * @ingroup Elementary
- *
- * This is a slidingdrawer.
- */
-
-#include <Elementary.h>
-#include "elm_priv.h"
-
-typedef struct _Widget_Data Widget_Data;
-
-struct _Widget_Data
-{
- Evas_Object *parent;
- Evas_Object *base;
- Evas_Object *handler;
- Evas_Object *dragable_rect;
- Elm_SlidingDrawer_Pos pos;
- double max_drag_w;
- double max_drag_h;
- Elm_SlidingDrawer_Drag_Value value;
-};
-
-static const char *widtype = NULL;
-
-static void _del_hook(Evas_Object *obj);
-
-static void _theme_hook(Evas_Object *obj);
-
-static void _sizing_eval(Evas_Object *obj);
-
-static void _parent_resize(void *data, Evas * e, Evas_Object *obj, void *event_info);
-static void _drag_cb(void *data, Evas_Object *obj, const char *emission, const char *source);
-static void _up_cb(void *data, Evas_Object *obj, const char *emission, const char *source);
-static void _down_cb(void *data, Evas_Object *obj, const char *emission, const char *source);
-
-static void
-_del_hook(Evas_Object *obj)
-{
- Widget_Data *wd = (Widget_Data *) elm_widget_data_get(obj);
-
- evas_object_event_callback_del(wd->parent, EVAS_CALLBACK_RESIZE, _parent_resize);
- free(wd);
-}
-
-static void \r
-_theme_hook(Evas_Object *obj)
-{
- Widget_Data *wd = (Widget_Data *) elm_widget_data_get(obj);
-
- elm_slidingdrawer_pos_set(obj, wd->pos);
-}
-
-static void
-_parent_resize(void *data, Evas * e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
-{
- _sizing_eval(data);
-}
-
-static void
-_drag_cb(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
-{
- Widget_Data *wd = elm_widget_data_get(data);
-
- edje_object_part_drag_value_get(wd->base, "elm.dragable.handler", &wd->value.x, &wd->value.y);
- evas_object_smart_callback_call(data, "mouse,move", (void *)&wd->value);
-}
-
-static void
-_up_cb(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
-{
- Widget_Data *wd = elm_widget_data_get(data);
-
- edje_object_part_drag_value_get(wd->base, "elm.dragable.handler", &wd->value.x, &wd->value.y);
- evas_object_smart_callback_call(data, "mouse,up", (void *)&wd->value);
-}
-
-static void
-_down_cb(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
-{
- Widget_Data *wd = elm_widget_data_get(data);
-
- edje_object_part_drag_value_get(wd->base, "elm.dragable.handler", &wd->value.x, &wd->value.y);
- evas_object_smart_callback_call(data, "mouse,down", (void *)&wd->value);
-}
-
-static void
-_sizing_eval(Evas_Object *obj)
-{
- Widget_Data *wd;
-
- Evas_Coord x, y, w, h;
-
- const Evas_Object *part;
-
- wd = elm_widget_data_get(obj);
-
- evas_object_geometry_get(wd->parent, &x, &y, &w, &h);
- evas_object_move(obj, x, y);
- evas_object_resize(obj, w, h);
-
- evas_object_size_hint_max_set(wd->dragable_rect, ((double)w) * wd->max_drag_w, ((double)h) * wd->max_drag_h);
-
- part = edje_object_part_object_get(wd->base, "elm.dragable.handler");
-
- if ((wd->pos == ELM_SLIDINGDRAWER_TOP)
- || (wd->pos == ELM_SLIDINGDRAWER_BOTTOM))
- edje_object_size_min_get(part, NULL, &h);
- else
- edje_object_size_min_get(part, &w, NULL);
-
- evas_object_size_hint_min_set(wd->handler, w, h);
-}
-
-/**
- * Unswallow the user content
- *
- * @param[in] obj SlidingDrawer object
- * @return The unswallowed contents
- *
- * @ingroup SlidingDrawer
- */
-EAPI Evas_Object *
-elm_slidingdrawer_content_unset(Evas_Object *obj)
-{
- ELM_CHECK_WIDTYPE(obj, widtype) NULL;
- Widget_Data *wd;
- Evas_Object *content;
- wd = elm_widget_data_get(obj);
- content = edje_object_part_swallow_get(wd->base, "elm.swallow.content");
- if (!content)
- return NULL;
- edje_object_part_unswallow(wd->base, content);
- elm_widget_sub_object_del(obj, content);
- return content;
-}
-
-/**
- * Swallow the user contents
- *
- * @param[in] obj SlidingDrawer object
- * @param[in] content Content to be swallowed.
- *
- * @ingroup SlidingDrawer
- */
-EAPI void
-elm_slidingdrawer_content_set(Evas_Object *obj, Evas_Object *content){
- ELM_CHECK_WIDTYPE(obj, widtype);
- Widget_Data *wd;
- Evas_Object *prev_content;
- if (!content) return;
- wd = elm_widget_data_get(obj);
- elm_widget_sub_object_add(obj, content);
- prev_content = edje_object_part_swallow_get(wd->base, "elm.swallow.content");
- if (prev_content)
- {
- edje_object_part_unswallow(wd->base, prev_content);
- elm_widget_sub_object_del(obj, prev_content);
- evas_object_del(prev_content);
- }
- edje_object_part_swallow(wd->base, "elm.swallow.content", content);
-}
-
-/**
- * Set the position of SlidingDrawer
- *
- * @param[in] obj SlidingDrawer object
- * @param[in] pos Position of drawer's handle
- *
- * @ingroup SlidingDrawer
- */
-EAPI void
-elm_slidingdrawer_pos_set(Evas_Object *obj, Elm_SlidingDrawer_Pos pos)
-{
- ELM_CHECK_WIDTYPE(obj, widtype);
-
- Widget_Data *wd = elm_widget_data_get(obj);
-
- switch (pos)
- {
- case ELM_SLIDINGDRAWER_BOTTOM:
- _elm_theme_object_set(obj, wd->base, "slidingdrawer", "bottom", elm_widget_style_get(obj));
- break;
- case ELM_SLIDINGDRAWER_LEFT:
- _elm_theme_object_set(obj, wd->base, "slidingdrawer", "left", elm_widget_style_get(obj));
- break;
- case ELM_SLIDINGDRAWER_RIGHT:
- _elm_theme_object_set(obj, wd->base, "slidingdrawer", "right", elm_widget_style_get(obj));
- break;
- case ELM_SLIDINGDRAWER_TOP:
- _elm_theme_object_set(obj, wd->base, "slidingdrawer", "top", elm_widget_style_get(obj));
- break;
- }
-
- edje_object_part_drag_value_set(wd->base, "elm.dragable.handler", 0, 0);
- wd->pos = pos;
- _sizing_eval(obj);
-}
-
-/**
- * Set the current dragable value.
- *
- * @param[in] obj SlidingDrawer object
- * @param[in] dx The x value (range: 0 ~ 1)
- * @param[in] dy The y value (range: 0 ~ 1)
- *
- * @ingroup SlidingDrawer
- */
-EAPI void
-elm_slidingdrawer_drag_value_set(Evas_Object *obj, double dx, double dy)
-{
- ELM_CHECK_WIDTYPE(obj, widtype);
- Widget_Data *wd;
-
- wd = elm_widget_data_get(obj);
- edje_object_part_drag_value_set(wd->base, "elm.dragable.handler", dx, dy);
-}
-
-/**
- * Set the dragable max value.
- *
- * @param[in] obj SlidingDrawer object
- * @param[in] dw The maximum width value (range: 0 ~ 1)
- * @param[in] dh The maximum height value (range: 0 ~ 1)
- *
- * @ingroup SlidingDrawer
- */
-EAPI void
-elm_slidingdrawer_max_drag_value_set(Evas_Object *obj, double dw, double dh)
-{
- ELM_CHECK_WIDTYPE(obj, widtype);
- Widget_Data *wd;
-
- wd = elm_widget_data_get(obj);
- wd->max_drag_w = dw;
- wd->max_drag_h = dh;
- _sizing_eval(obj);
-
-}
-
-/**
- * Add a new slidingdrawer object to the parent.
- *
- * @param[in] parent Parent object
- * @return New object or NULL if it cannot be created
- *
- * @ingroup SlidingDrawer
- */
-EAPI Evas_Object *
-elm_slidingdrawer_add(Evas_Object *parent)
-{
- Evas_Object *obj;
- Evas *e;
- Widget_Data *wd;
-
- ELM_WIDGET_STANDARD_SETUP(wd, Widget_Data, parent, e, obj, NULL);
-
- wd->parent = parent;
- ELM_SET_WIDTYPE(widtype, "slidingdrawer");
- elm_widget_type_set(obj, "slidingdrawer");
- 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);
-
- //base
- wd->base = edje_object_add(e);
- _elm_theme_object_set(obj, wd->base, "slidingdrawer", "bottom", "default");
- edje_object_signal_callback_add(wd->base, "drag", "*", _drag_cb, obj);
- edje_object_signal_callback_add(wd->base, "mouse,up,*", "*", _up_cb, obj);
- edje_object_signal_callback_add(wd->base, "mouse,down,*", "*", _down_cb, obj);
- elm_widget_sub_object_add(obj, wd->base);
- elm_widget_resize_object_set(obj, wd->base);
-
- //dragable_rect
- wd->dragable_rect = evas_object_rectangle_add(e);
- elm_widget_sub_object_add(obj, wd->dragable_rect);
- edje_object_part_swallow(wd->base, "elm.swallow.dragable_rect", wd->dragable_rect);
- wd->max_drag_w = 1;
- wd->max_drag_h = 1;
-
- //handler
- wd->handler = evas_object_rectangle_add(e);
- elm_widget_sub_object_add(obj, wd->handler);
- evas_object_color_set(wd->handler, 0, 0, 0, 0);
- edje_object_part_swallow(wd->base, "elm.dragable.handler", wd->handler);
-
- evas_object_event_callback_add(parent, EVAS_CALLBACK_RESIZE, _parent_resize, obj);
-
- _sizing_eval(obj);
-
- return obj;
-}
Evas_Object *obj;
const char *type;
Evas_Object *parent_obj;
+ Evas_Object *parent2;
Evas_Coord x, y, w, h;
Eina_List *subobjs;
Evas_Object *resize_obj;
return sd->tree_unfocusable;
}
+/**
+ * @internal
+ *
+ * Get the list of focusable child objects.
+ *
+ * This function retruns list of child objects which can get focus.
+ *
+ * @param obj The parent widget
+ * @retrun list of focusable child objects.
+ *
+ * @ingroup Widget
+ */
+EAPI Eina_List *
+elm_widget_can_focus_child_list_get(const Evas_Object *obj)
+{
+ API_ENTRY return NULL;
+
+ const Eina_List *l;
+ Eina_List *child_list = NULL;
+ Evas_Object *child;
+
+ if (sd->subobjs)
+ {
+ EINA_LIST_FOREACH(sd->subobjs, l, child)
+ {
+ if ((elm_widget_can_focus_get(child)) &&
+ (evas_object_visible_get(child)) &&
+ (!elm_widget_disabled_get(child)))
+ child_list = eina_list_append(child_list, child);
+ else if (elm_widget_is(child))
+ {
+ Eina_List *can_focus_list;
+ can_focus_list = elm_widget_can_focus_child_list_get(child);
+ if (can_focus_list)
+ child_list = eina_list_merge(child_list, can_focus_list);
+ }
+ }
+ }
+ return child_list;
+}
+
EAPI void
elm_widget_highlight_ignore_set(Evas_Object *obj,
Eina_Bool ignore)
return parent;
}
+EAPI Evas_Object *
+elm_widget_parent2_get(const Evas_Object *obj)
+{
+ if (_elm_widget_is(obj))
+ {
+ Smart_Data *sd = evas_object_smart_data_get(obj);
+ if (sd) return sd->parent2;
+ }
+ return NULL;
+}
+
+EAPI void
+elm_widget_parent2_set(Evas_Object *obj, Evas_Object *parent)
+{
+ API_ENTRY return;
+ sd->parent2 = parent;
+}
+
EAPI void
elm_widget_event_callback_add(Evas_Object *obj,
Elm_Event_Cb func,
EAPI void
elm_widget_focus_steal(Evas_Object *obj)
{
- Evas_Object *parent, *o;
+ Evas_Object *parent, *parent2, *o;
API_ENTRY return;
if (sd->focused) return;
if (sd->focused) break;
parent = o;
}
- if (!elm_widget_parent_get(parent))
- elm_widget_focused_object_clear(parent);
+ if ((!elm_widget_parent_get(parent)) &&
+ (!elm_widget_parent2_get(parent)))
+ elm_widget_focused_object_clear(parent);
else
{
- parent = elm_widget_parent_get(parent);
+ parent2 = elm_widget_parent_get(parent);
+ if (!parent2) parent2 = elm_widget_parent2_get(parent);
+ parent = parent2;
sd = evas_object_smart_data_get(parent);
- if ((sd->resize_obj) && (elm_widget_focus_get(sd->resize_obj)))
- elm_widget_focused_object_clear(sd->resize_obj);
- else
+ if (sd)
{
- const Eina_List *l;
- Evas_Object *child;
- EINA_LIST_FOREACH(sd->subobjs, l, child)
+ if ((sd->resize_obj) && (elm_widget_focus_get(sd->resize_obj)))
+ elm_widget_focused_object_clear(sd->resize_obj);
+ else
{
- if (elm_widget_focus_get(child))
+ const Eina_List *l;
+ Evas_Object *child;
+ EINA_LIST_FOREACH(sd->subobjs, l, child)
{
- elm_widget_focused_object_clear(child);
- break;
+ if (elm_widget_focus_get(child))
+ {
+ elm_widget_focused_object_clear(child);
+ break;
+ }
}
}
}
EAPI void elm_widget_can_focus_set(Evas_Object *obj, Eina_Bool can_focus);
EAPI Eina_Bool elm_widget_can_focus_get(const Evas_Object *obj);
EAPI Eina_Bool elm_widget_child_can_focus_get(const Evas_Object *obj);
+EAPI Eina_List *elm_widget_can_focus_child_list_get(const Evas_Object *obj);
EAPI void elm_widget_tree_unfocusable_set(Evas_Object *obj, Eina_Bool tree_unfocusable);
EAPI Eina_Bool elm_widget_tree_unfocusable_get(const Evas_Object *obj);
EAPI void elm_widget_highlight_ignore_set(Evas_Object *obj, Eina_Bool ignore);
EAPI void elm_widget_focus_set(Evas_Object *obj, int first);
EAPI void elm_widget_focused_object_clear(Evas_Object *obj);
EAPI Evas_Object *elm_widget_parent_get(const Evas_Object *obj);
+EAPI Evas_Object *elm_widget_parent2_get(const Evas_Object *obj);
+EAPI void elm_widget_parent2_set(Evas_Object *obj, Evas_Object *parent);
EAPI void elm_widget_focus_steal(Evas_Object *obj);
/**
evas_object_layer_set(win->win_obj, 50);
evas_object_pass_events_set(win->win_obj, EINA_TRUE);
+ if (type == ELM_WIN_INLINED_IMAGE)
+ elm_widget_parent2_set(win->win_obj, parent);
ecore_evas_object_associate(win->ee, win->win_obj,
ECORE_EVAS_OBJECT_ASSOCIATE_BASE |
ECORE_EVAS_OBJECT_ASSOCIATE_STACK |
const char *context_menu_orientation;
char buf[255];
Evas_Object* icon;
+ Elm_Object_Item *added_item = NULL;
/*update*/
elm_entry_extension_module_data_get(obj,ext_mod);
{
if (!elm_entry_is_empty(obj))
{
- elm_ctxpopup_item_append(ext_mod->popup, "Select", NULL, _select, obj );
- elm_ctxpopup_item_append(ext_mod->popup, "Select All", NULL, _select_all, obj );
+ added_item = elm_ctxpopup_item_append(ext_mod->popup, "Select", NULL, _select, obj );
+ added_item = elm_ctxpopup_item_append(ext_mod->popup, "Select All", NULL, _select_all, obj );
}
}
+
+#ifdef HAVE_ELEMENTARY_X
+ if (cbhm_count)
+#else
if (1) // need way to detect if someone has a selection
+#endif
{
if (ext_mod->editable)
- elm_ctxpopup_item_append(ext_mod->popup, "Paste", NULL, _paste, obj );
+ added_item = elm_ctxpopup_item_append(ext_mod->popup, "Paste", NULL, _paste, obj );
}
//elm_ctxpopup_item_append(wd->ctxpopup, NULL, "Selectall",_select_all, obj );
// start for cbhm
icon = elm_icon_add(ext_mod->popup);
snprintf(buf, sizeof(buf), "%s/images/copypaste_icon_clipboard.png", PACKAGE_DATA_DIR);
elm_icon_file_set(icon, buf, NULL);
- elm_ctxpopup_item_append(ext_mod->popup, NULL, icon, _clipboard_menu, obj);
+ added_item = elm_ctxpopup_item_append(ext_mod->popup, NULL, icon, _clipboard_menu, obj);
//elm_ctxpopup_item_append(ext_mod->popup, "More", NULL, _clipboard_menu, obj );
}
// end for cbhm
{
if (ext_mod->have_selection)
{
- elm_ctxpopup_item_append(ext_mod->popup, "Copy", NULL, _copy, obj );
+ added_item = elm_ctxpopup_item_append(ext_mod->popup, "Copy", NULL, _copy, obj );
if (ext_mod->editable)
- elm_ctxpopup_item_append(ext_mod->popup, "Cut", NULL, _cut, obj );
+ added_item = elm_ctxpopup_item_append(ext_mod->popup, "Cut", NULL, _cut, obj );
+#ifdef HAVE_ELEMENTARY_X
+ if (ext_mod->editable && cbhm_count)
+#else
if (ext_mod->editable)
- elm_ctxpopup_item_append(ext_mod->popup, "Paste", NULL, _paste, obj );
+#endif
+ added_item = elm_ctxpopup_item_append(ext_mod->popup, "Paste", NULL, _paste, obj );
}
else
{
_cancel(obj,ext_mod->popup,NULL);
if (!elm_entry_is_empty(obj))
{
- elm_ctxpopup_item_append(ext_mod->popup, "Select", NULL, _select, obj );
- elm_ctxpopup_item_append(ext_mod->popup, "Select All", NULL, _select_all, obj );
+ added_item = elm_ctxpopup_item_append(ext_mod->popup, "Select", NULL, _select, obj );
+ added_item = elm_ctxpopup_item_append(ext_mod->popup, "Select All", NULL, _select_all, obj );
}
+#ifdef HAVE_ELEMENTARY_X
+ if (cbhm_count)
+#else
if (1) // need way to detect if someone has a selection
+#endif
{
if (ext_mod->editable)
- elm_ctxpopup_item_append(ext_mod->popup, "Paste", NULL, _paste, obj );
+ added_item = elm_ctxpopup_item_append(ext_mod->popup, "Paste", NULL, _paste, obj );
}
}
// start for cbhm
icon = elm_icon_add(ext_mod->popup);
snprintf(buf, sizeof(buf), "%s/images/copypaste_icon_clipboard.png", PACKAGE_DATA_DIR);
elm_icon_file_set(icon, buf, NULL);
- elm_ctxpopup_item_append(ext_mod->popup, NULL, icon, _clipboard_menu, obj);
+ added_item = elm_ctxpopup_item_append(ext_mod->popup, NULL, icon, _clipboard_menu, obj);
//elm_ctxpopup_item_append(ext_mod->popup, "More", NULL, _clipboard_menu, obj );
}
// end for cbhm
}
EINA_LIST_FOREACH(ext_mod->items, l, it)
{
- elm_ctxpopup_item_append(ext_mod->popup, it->label, NULL, _item_clicked, it );
+ added_item = elm_ctxpopup_item_append(ext_mod->popup, it->label, NULL, _item_clicked, it );
}
- if (ext_mod->popup)
+ if (ext_mod->popup && added_item)
{
elm_object_scroll_freeze_push(ext_mod->popup);
_ctxpopup_position(obj);