2012-08-01 14:03:58 -07:00
|
|
|
#ifndef ELM_WIDGET_SPINNER_H
|
|
|
|
#define ELM_WIDGET_SPINNER_H
|
|
|
|
|
2012-11-25 22:32:53 -08:00
|
|
|
#include "Elementary.h"
|
2012-08-01 14:03:58 -07:00
|
|
|
|
2013-11-12 05:56:05 -08:00
|
|
|
#include <Eio.h>
|
2012-08-01 14:03:58 -07:00
|
|
|
|
2014-08-07 09:26:47 -07:00
|
|
|
/* DO NOT USE THIS HEADER UNLESS YOU ARE PREPARED FOR BREAKING OF YOUR
|
|
|
|
* CODE. THIS IS ELEMENTARY'S INTERNAL WIDGET API (for now) AND IS NOT
|
|
|
|
* FINAL. CALL elm_widget_api_check(ELM_INTERNAL_API_VERSION) TO CHECK
|
|
|
|
* IT AT RUNTIME.
|
|
|
|
*/
|
|
|
|
|
2012-08-01 14:03:58 -07:00
|
|
|
/**
|
|
|
|
* @addtogroup Widget
|
|
|
|
* @{
|
|
|
|
*
|
|
|
|
* @section elm-spinner-class The Elementary Spinner Class
|
|
|
|
*
|
|
|
|
* Elementary, besides having the @ref Spinner widget, exposes its
|
|
|
|
* foundation -- the Elementary Spinner Class -- in order to create other
|
|
|
|
* widgets which are a spinner with some more logic on top.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Base layout smart data extended with spinner instance data.
|
|
|
|
*/
|
2014-03-26 06:12:34 -07:00
|
|
|
typedef struct _Elm_Spinner_Data Elm_Spinner_Data;
|
|
|
|
struct _Elm_Spinner_Data
|
2012-08-01 14:03:58 -07:00
|
|
|
{
|
Elm_spinner focus UI, accessibility fix
Summary:
Issue: Focus was not getting transferred individually on arrow buttons and text area.
Solution: Remove the usage of image parts and text parts and replace them with buttons
so as to handle the focus transfer normally than forcibly via smart event.
hence Focus next hook and focus direction hook is implemented.
Signed-off by: Subodh Kumar<s7158.kumar@samsung.com>
Signed-off by: Shilpa Singh<shilpa.singh@samsung.com>
Test Plan:
Use keyboard keys on spinner and test focus transfer, enable accessibility and test
accessibility.
Reviewers: woohyun, Hermet, shilpasingh, raster, seoz
Reviewed By: shilpasingh, raster
Subscribers: stefan_schmidt, raster, rajeshps, govi
Differential Revision: https://phab.enlightenment.org/D1911
2015-03-03 22:59:24 -08:00
|
|
|
Evas_Object *ent, *inc_button, *dec_button, *text_button;
|
2012-08-01 14:03:58 -07:00
|
|
|
const char *label;
|
2013-11-02 04:33:00 -07:00
|
|
|
double val, val_min, val_max, val_base;
|
2014-02-10 05:27:08 -08:00
|
|
|
double step; /**< step for the value change. 1 by default. */
|
2015-06-25 07:27:09 -07:00
|
|
|
double drag_prev_pos, drag_val_step;
|
2013-03-02 06:50:35 -08:00
|
|
|
double spin_speed, interval, first_interval;
|
2012-08-01 14:03:58 -07:00
|
|
|
int round;
|
2014-02-10 05:27:08 -08:00
|
|
|
Ecore_Timer *delay_change_timer; /**< a timer for a delay,changed smart callback */
|
|
|
|
Ecore_Timer *spin_timer; /**< a timer for a repeated spinner value change on mouse down */
|
|
|
|
Ecore_Timer *longpress_timer; /**< a timer to detect long press. After lonpress timeout,
|
2014-02-04 08:29:14 -08:00
|
|
|
start continuous change of values until mouse up */
|
2012-08-01 14:03:58 -07:00
|
|
|
Eina_List *special_values;
|
|
|
|
|
|
|
|
Eina_Bool entry_visible : 1;
|
|
|
|
Eina_Bool dragging : 1;
|
|
|
|
Eina_Bool editable : 1;
|
|
|
|
Eina_Bool wrap : 1;
|
2013-11-02 04:33:00 -07:00
|
|
|
Eina_Bool val_updated : 1;
|
2015-03-04 22:14:34 -08:00
|
|
|
Eina_Bool button_layout : 1;
|
2012-08-01 14:03:58 -07:00
|
|
|
};
|
|
|
|
|
|
|
|
typedef struct _Elm_Spinner_Special_Value Elm_Spinner_Special_Value;
|
|
|
|
struct _Elm_Spinner_Special_Value
|
|
|
|
{
|
|
|
|
double value;
|
|
|
|
const char *label;
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @}
|
|
|
|
*/
|
|
|
|
|
|
|
|
#define ELM_SPINNER_DATA_GET(o, sd) \
|
2014-06-03 03:35:28 -07:00
|
|
|
Elm_Spinner_Data * sd = eo_data_scope_get(o, ELM_SPINNER_CLASS)
|
2012-08-01 14:03:58 -07:00
|
|
|
|
|
|
|
#define ELM_SPINNER_DATA_GET_OR_RETURN(o, ptr) \
|
|
|
|
ELM_SPINNER_DATA_GET(o, ptr); \
|
2014-01-15 10:33:40 -08:00
|
|
|
if (EINA_UNLIKELY(!ptr)) \
|
2012-08-01 14:03:58 -07:00
|
|
|
{ \
|
2014-01-15 10:33:40 -08:00
|
|
|
CRI("No widget data for object %p (%s)", \
|
|
|
|
o, evas_object_type_get(o)); \
|
2012-08-01 14:03:58 -07:00
|
|
|
return; \
|
|
|
|
}
|
|
|
|
|
|
|
|
#define ELM_SPINNER_DATA_GET_OR_RETURN_VAL(o, ptr, val) \
|
|
|
|
ELM_SPINNER_DATA_GET(o, ptr); \
|
2014-01-15 10:33:40 -08:00
|
|
|
if (EINA_UNLIKELY(!ptr)) \
|
2012-08-01 14:03:58 -07:00
|
|
|
{ \
|
2014-01-15 10:33:40 -08:00
|
|
|
CRI("No widget data for object %p (%s)", \
|
|
|
|
o, evas_object_type_get(o)); \
|
2012-08-01 14:03:58 -07:00
|
|
|
return val; \
|
|
|
|
}
|
|
|
|
|
2014-01-15 10:33:40 -08:00
|
|
|
#define ELM_SPINNER_CHECK(obj) \
|
2014-06-03 03:35:28 -07:00
|
|
|
if (EINA_UNLIKELY(!eo_isa((obj), ELM_SPINNER_CLASS))) \
|
2012-08-01 14:03:58 -07:00
|
|
|
return
|
|
|
|
|
|
|
|
#endif
|