forked from enlightenment/efl
efl_ui_spin_button: Addded direction feature.
Summary: The Spin_Button class supports two types(horizontal, vertical). User can use 'efl_ui_direction()' for spin_button. @feature Test Plan: elementary_test-> spin_button sample. Reviewers: Hermet, Jaehyun_Cho Subscribers: cedric, #committers, zmike Tags: #efl Differential Revision: https://phab.enlightenment.org/D6680
This commit is contained in:
parent
28ee520428
commit
739da4f736
|
@ -331,15 +331,3 @@ group { "efl/datepicker/spin_button";
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
group { "efl/datepicker/spin_button/text_button";
|
||||
inherit: "efl/spin_button/text_button";
|
||||
}
|
||||
|
||||
group { "efl/datepicker/spin_button/inc_button";
|
||||
inherit: "efl/spin_button/inc_button:vertical";
|
||||
}
|
||||
|
||||
group { "efl/datepicker/spin_button/dec_button";
|
||||
inherit: "efl/spin_button/dec_button:vertical";
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
group { "efl/spin_button";
|
||||
group { "efl/spin_button/horizontal";
|
||||
images.image: "vert_bar_inset.png" COMP;
|
||||
parts {
|
||||
rect { "clip";
|
||||
|
@ -53,11 +53,6 @@ group { "efl/spin_button";
|
|||
scale;
|
||||
desc { "default";
|
||||
fixed: 1 0;
|
||||
rel1.to: "inset";
|
||||
rel1.offset: 1 1;
|
||||
rel2.to: "inset";
|
||||
rel2.offset: 1 -2;
|
||||
rel2.relative: 0.0 1.0;
|
||||
align: 0.0 0.5;
|
||||
min: 15 15;
|
||||
aspect: 1.0 1.0; aspect_preference: VERTICAL;
|
||||
|
@ -67,11 +62,6 @@ group { "efl/spin_button";
|
|||
scale;
|
||||
desc { "default";
|
||||
fixed: 1 0;
|
||||
rel1.to: "inset";
|
||||
rel1.offset: 1 1;
|
||||
rel1.relative: 1.0 0.0;
|
||||
rel2.to: "inset";
|
||||
rel2.offset: 1 -2;
|
||||
align: 1.0 0.5;
|
||||
min: 15 15;
|
||||
aspect: 1.0 1.0; aspect_preference: VERTICAL;
|
||||
|
@ -160,47 +150,53 @@ group { "efl/spin_button";
|
|||
}
|
||||
}
|
||||
|
||||
group { "efl/spin_button:vertical";
|
||||
inherit: "efl/spin_button";
|
||||
group { "efl/spin_button/vertical";
|
||||
inherit: "efl/spin_button/horizontal";
|
||||
parts {
|
||||
image { "inset"; nomouse;
|
||||
desc { "default";
|
||||
min: 40 150;
|
||||
}
|
||||
}
|
||||
swallow { "efl.inc_button";
|
||||
scale;
|
||||
desc { "default";
|
||||
rel1.to: "inset";
|
||||
rel1.offset: 1 1;
|
||||
rel1.relative: 1.0 0.0;
|
||||
rel2.to: "inset";
|
||||
rel2.offset: 1 -2;
|
||||
align: 1.0 0.5;
|
||||
}
|
||||
}
|
||||
swallow { "efl.text_button";
|
||||
scale;
|
||||
desc { "default";
|
||||
vis;
|
||||
rel1.to_y: "inset";
|
||||
rel1.to_x: "efl.dec_button";
|
||||
rel1.relative: 1.0 0.0;
|
||||
rel1.offset: 1 1;
|
||||
rel2.to_y: "inset";
|
||||
rel2.to_x: "efl.inc_button";
|
||||
rel2.relative: 0.0 1.0;
|
||||
rel2.offset: -2 -2;
|
||||
}
|
||||
desc { "active";
|
||||
inherit: "default";
|
||||
hid;
|
||||
rel.to: "inset";
|
||||
align: 0.5 0.0;
|
||||
min: 40 40;
|
||||
max: 40 40;
|
||||
fixed: 1 1;
|
||||
}
|
||||
}
|
||||
swallow { "efl.dec_button";
|
||||
scale;
|
||||
desc { "default";
|
||||
rel1.to: "inset";
|
||||
rel1.offset: 1 1;
|
||||
rel2.to: "inset";
|
||||
rel2.offset: 1 -2;
|
||||
rel2.relative: 0.0 1.0;
|
||||
align: 0.0 0.5;
|
||||
rel.to: "inset";
|
||||
align: 0.5 1.0;
|
||||
min: 40 40;
|
||||
max: 40 40;
|
||||
fixed: 1 1;
|
||||
}
|
||||
}
|
||||
swallow { "efl.text_button";
|
||||
scale;
|
||||
desc { "default";
|
||||
rel.to_x: "inset";
|
||||
rel1 {
|
||||
to_y: "efl.inc_button";
|
||||
relative: 0.0 1.0;
|
||||
}
|
||||
rel2 {
|
||||
to_y: "efl.dec_button";
|
||||
relative: 1.0 0.0;
|
||||
}
|
||||
min: 0 70;
|
||||
max: -1 70;
|
||||
fixed: 0 1;
|
||||
}
|
||||
desc { "inactive";
|
||||
inherit: "default";
|
||||
hid;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -357,6 +353,7 @@ group { "efl/spin_button/inc_button";
|
|||
}
|
||||
|
||||
group { "efl/spin_button/entry";
|
||||
alias: "efl/spin_button/vertical/entry";
|
||||
inherit: "efl/text";
|
||||
}
|
||||
|
||||
|
@ -386,7 +383,7 @@ group { "efl/spin_button/dec_button";
|
|||
}
|
||||
|
||||
group { "efl/spin_button/text_button";
|
||||
alias: "efl/spin_button/text_button:vertical";
|
||||
alias: "efl/spin_button/vertical/text_button";
|
||||
parts {
|
||||
part { name: "bg";
|
||||
type: SPACER;
|
||||
|
@ -462,7 +459,7 @@ group { "efl/spin_button/text_button";
|
|||
}
|
||||
}
|
||||
|
||||
group { "efl/spin_button/inc_button:vertical";
|
||||
group { "efl/spin_button/vertical/inc_button";
|
||||
inherit: "efl/spin_button/inc_button";
|
||||
images.image: "sym_up_light_normal.png" COMP;
|
||||
images.image: "sym_up_glow_normal.png" COMP;
|
||||
|
@ -487,7 +484,7 @@ group { "efl/spin_button/inc_button:vertical";
|
|||
}
|
||||
}
|
||||
|
||||
group { "efl/spin_button/dec_button:vertical";
|
||||
group { "efl/spin_button/vertical/dec_button";
|
||||
inherit: "efl/spin_button/dec_button";
|
||||
images.image: "sym_down_light_normal.png" COMP;
|
||||
images.image: "sym_down_glow_normal.png" COMP;
|
||||
|
|
|
@ -377,21 +377,6 @@ group { "efl/timepicker";
|
|||
}
|
||||
}
|
||||
|
||||
group { "efl/timepicker/spin_button";
|
||||
inherit: "efl/datepicker/spin_button";
|
||||
}
|
||||
|
||||
group { "efl/timepicker/spin_button/text_button";
|
||||
inherit: "efl/spin_button/text_button";
|
||||
}
|
||||
|
||||
group { "efl/timepicker/spin_button/inc_button";
|
||||
inherit: "efl/spin_button/inc_button:vertical";
|
||||
}
|
||||
|
||||
group { "efl/timepicker/spin_button/dec_button";
|
||||
inherit: "efl/spin_button/dec_button:vertical";
|
||||
}
|
||||
group { "efl/timepicker/button";
|
||||
inherit: "efl/button";
|
||||
parts {
|
||||
|
|
|
@ -57,6 +57,7 @@ test_ui_spin_button(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *
|
|||
efl_ui_range_value_set(efl_added, 1),
|
||||
efl_ui_spin_button_editable_set(efl_added, EINA_FALSE),
|
||||
efl_ui_spin_special_value_set(efl_added, array),
|
||||
efl_ui_direction_set(efl_added, EFL_UI_DIR_VERTICAL),
|
||||
efl_pack(bx, efl_added));
|
||||
eina_array_free(array);
|
||||
|
||||
|
|
|
@ -162,22 +162,22 @@ _fields_init(Eo *obj)
|
|||
efl_ui_range_min_max_set(efl_added, 1970, 2037),
|
||||
efl_ui_spin_button_circulate_set(efl_added, EINA_TRUE),
|
||||
efl_ui_spin_button_editable_set(efl_added, EINA_TRUE),
|
||||
efl_event_callback_add(efl_added, EFL_UI_SPIN_EVENT_CHANGED,_field_changed_cb, obj),
|
||||
elm_widget_element_update(obj, efl_added, "spin_button"));
|
||||
efl_ui_direction_set(efl_added, EFL_UI_DIR_VERTICAL),
|
||||
efl_event_callback_add(efl_added, EFL_UI_SPIN_EVENT_CHANGED,_field_changed_cb, obj));
|
||||
|
||||
pd->month = efl_add(EFL_UI_SPIN_BUTTON_CLASS, obj,
|
||||
efl_ui_range_min_max_set(efl_added, 1, 12),
|
||||
efl_ui_spin_button_circulate_set(efl_added, EINA_TRUE),
|
||||
efl_ui_spin_button_editable_set(efl_added, EINA_TRUE),
|
||||
efl_event_callback_add(efl_added, EFL_UI_SPIN_EVENT_CHANGED,_field_changed_cb, obj),
|
||||
elm_widget_element_update(obj, efl_added, "spin_button"));
|
||||
efl_ui_direction_set(efl_added, EFL_UI_DIR_VERTICAL),
|
||||
efl_event_callback_add(efl_added, EFL_UI_SPIN_EVENT_CHANGED,_field_changed_cb, obj));
|
||||
|
||||
pd->day = efl_add(EFL_UI_SPIN_BUTTON_CLASS, obj,
|
||||
efl_ui_range_min_max_set(efl_added, 1, 31),
|
||||
efl_ui_spin_button_circulate_set(efl_added, EINA_TRUE),
|
||||
efl_ui_spin_button_editable_set(efl_added, EINA_TRUE),
|
||||
efl_event_callback_add(efl_added, EFL_UI_SPIN_EVENT_CHANGED,_field_changed_cb, obj),
|
||||
elm_widget_element_update(obj, efl_added, "spin_button"));
|
||||
efl_ui_direction_set(efl_added, EFL_UI_DIR_VERTICAL),
|
||||
efl_event_callback_add(efl_added, EFL_UI_SPIN_EVENT_CHANGED,_field_changed_cb, obj));
|
||||
|
||||
DATE_GET();
|
||||
//Using system config?
|
||||
|
|
|
@ -735,10 +735,71 @@ _access_spinner_register(Evas_Object *obj, Eina_Bool is_access)
|
|||
}
|
||||
}
|
||||
|
||||
static const char *
|
||||
_theme_group_modify_pos_get(const char *cur_group, const char *search, size_t len)
|
||||
{
|
||||
const char *pos = NULL;
|
||||
const char *temp_str = NULL;
|
||||
|
||||
temp_str = cur_group + len - strlen(search);
|
||||
if (temp_str >= cur_group)
|
||||
{
|
||||
if (!strcmp(temp_str, search))
|
||||
pos = temp_str;
|
||||
}
|
||||
|
||||
return pos;
|
||||
}
|
||||
|
||||
static char *
|
||||
_efl_ui_spin_button_theme_group_get(Evas_Object *obj, Efl_Ui_Spin_Button_Data *sd)
|
||||
{
|
||||
const char *pos = NULL;
|
||||
const char *cur_group = elm_widget_theme_element_get(obj);
|
||||
Eina_Strbuf *new_group = eina_strbuf_new();
|
||||
size_t len = 0;
|
||||
|
||||
if (cur_group)
|
||||
{
|
||||
len = strlen(cur_group);
|
||||
pos = _theme_group_modify_pos_get(cur_group, "horizontal", len);
|
||||
if (!pos)
|
||||
pos = _theme_group_modify_pos_get(cur_group, "vertical", len);
|
||||
|
||||
// TODO: change separator when it is decided.
|
||||
// can skip when prev_group == cur_group
|
||||
if (!pos)
|
||||
{
|
||||
eina_strbuf_append(new_group, cur_group);
|
||||
eina_strbuf_append(new_group, "/");
|
||||
}
|
||||
else
|
||||
{
|
||||
eina_strbuf_append_length(new_group, cur_group, pos - cur_group);
|
||||
}
|
||||
}
|
||||
|
||||
if (efl_ui_dir_is_horizontal(sd->dir, EINA_TRUE))
|
||||
eina_strbuf_append(new_group, "horizontal");
|
||||
else
|
||||
eina_strbuf_append(new_group, "vertical");
|
||||
|
||||
return eina_strbuf_release(new_group);
|
||||
}
|
||||
|
||||
|
||||
EOLIAN static Efl_Ui_Theme_Apply
|
||||
_efl_ui_spin_button_efl_ui_widget_theme_apply(Eo *obj, Efl_Ui_Spin_Button_Data *sd EINA_UNUSED)
|
||||
{
|
||||
Efl_Ui_Theme_Apply int_ret = EFL_UI_THEME_APPLY_FAILED;
|
||||
char *group;
|
||||
|
||||
group = _efl_ui_spin_button_theme_group_get(obj, sd);
|
||||
if (group)
|
||||
{
|
||||
elm_widget_theme_element_set(obj, group);
|
||||
free(group);
|
||||
}
|
||||
|
||||
int_ret = efl_ui_widget_theme_apply(efl_super(obj, MY_CLASS));
|
||||
if (!int_ret) return EFL_UI_THEME_APPLY_FAILED;
|
||||
|
@ -766,11 +827,22 @@ _efl_ui_spin_button_efl_ui_widget_theme_apply(Eo *obj, Efl_Ui_Spin_Button_Data *
|
|||
EOLIAN static Eo *
|
||||
_efl_ui_spin_button_efl_object_constructor(Eo *obj, Efl_Ui_Spin_Button_Data *sd)
|
||||
{
|
||||
if (!elm_widget_theme_klass_get(obj))
|
||||
elm_widget_theme_klass_set(obj, "spin_button");
|
||||
obj = efl_constructor(efl_super(obj, MY_CLASS));
|
||||
char *group;
|
||||
|
||||
obj = efl_constructor(efl_super(obj, MY_CLASS));
|
||||
elm_widget_sub_object_parent_add(obj);
|
||||
elm_widget_theme_klass_set(obj, "spin_button");
|
||||
|
||||
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, NULL);
|
||||
|
||||
group = _efl_ui_spin_button_theme_group_get(obj, sd);
|
||||
if (!elm_widget_theme_object_set(obj, wd->resize_obj,
|
||||
elm_widget_theme_klass_get(obj),
|
||||
group,
|
||||
elm_widget_theme_style_get(obj)))
|
||||
CRI("Failed to set layout!");
|
||||
|
||||
free(group);
|
||||
|
||||
sd->first_interval = 0.85;
|
||||
|
||||
|
@ -812,6 +884,20 @@ _efl_ui_spin_button_efl_object_constructor(Eo *obj, Efl_Ui_Spin_Button_Data *sd)
|
|||
return obj;
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_efl_ui_spin_button_efl_ui_direction_direction_set(Eo *obj, Efl_Ui_Spin_Button_Data *sd, Efl_Ui_Dir dir)
|
||||
{
|
||||
sd->dir = dir;
|
||||
|
||||
efl_ui_widget_theme_apply(obj);
|
||||
}
|
||||
|
||||
EOLIAN static Efl_Ui_Dir
|
||||
_efl_ui_spin_button_efl_ui_direction_direction_get(const Eo *obj EINA_UNUSED, Efl_Ui_Spin_Button_Data *sd)
|
||||
{
|
||||
return sd->dir;
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_efl_ui_spin_button_efl_ui_range_range_value_set(Eo *obj, Efl_Ui_Spin_Button_Data *sd EINA_UNUSED, double val)
|
||||
{
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
class Efl.Ui.Spin_Button (Efl.Ui.Spin, Efl.Ui.Focus.Composition,
|
||||
class Efl.Ui.Spin_Button (Efl.Ui.Spin, Efl.Ui.Focus.Composition, Efl.Ui.Direction,
|
||||
Efl.Access.Value, Efl.Access.Widget.Action)
|
||||
{
|
||||
[[A Button Spin.
|
||||
|
@ -68,6 +68,7 @@ class Efl.Ui.Spin_Button (Efl.Ui.Spin, Efl.Ui.Focus.Composition,
|
|||
Efl.Ui.Widget.widget_event;
|
||||
Efl.Ui.Focus.Object.on_focus_update;
|
||||
Efl.Ui.Range.range_value { set; }
|
||||
Efl.Ui.Direction.direction { get; set; }
|
||||
Efl.Access.Object.i18n_name { get; }
|
||||
Efl.Access.Value.value_and_text { get; set; }
|
||||
Efl.Access.Value.range { get; }
|
||||
|
|
|
@ -10,6 +10,8 @@ struct _Efl_Ui_Spin_Button_Data
|
|||
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,
|
||||
start continuous change of values until mouse up */
|
||||
Efl_Ui_Dir dir;
|
||||
|
||||
Eina_Bool entry_visible : 1;
|
||||
Eina_Bool entry_reactivate : 1;
|
||||
Eina_Bool editable : 1;
|
||||
|
|
|
@ -125,15 +125,15 @@ _fields_init(Eo *obj)
|
|||
efl_ui_range_min_max_set(efl_added, 1, 12),
|
||||
efl_ui_spin_button_circulate_set(efl_added, EINA_TRUE),
|
||||
efl_ui_spin_button_editable_set(efl_added, EINA_TRUE),
|
||||
efl_event_callback_add(efl_added, EFL_UI_SPIN_EVENT_CHANGED,_field_changed_cb, obj),
|
||||
elm_widget_element_update(obj, efl_added, "spin_button"));
|
||||
efl_ui_direction_set(efl_added, EFL_UI_DIR_VERTICAL),
|
||||
efl_event_callback_add(efl_added, EFL_UI_SPIN_EVENT_CHANGED,_field_changed_cb, obj));
|
||||
|
||||
pd->min = efl_add(EFL_UI_SPIN_BUTTON_CLASS, obj,
|
||||
efl_ui_range_min_max_set(efl_added, 0, 59),
|
||||
efl_ui_spin_button_circulate_set(efl_added, EINA_TRUE),
|
||||
efl_ui_spin_button_editable_set(efl_added, EINA_TRUE),
|
||||
efl_event_callback_add(efl_added, EFL_UI_SPIN_EVENT_CHANGED,_field_changed_cb, obj),
|
||||
elm_widget_element_update(obj, efl_added, "spin_button"));
|
||||
efl_ui_direction_set(efl_added, EFL_UI_DIR_VERTICAL),
|
||||
efl_event_callback_add(efl_added, EFL_UI_SPIN_EVENT_CHANGED,_field_changed_cb, obj));
|
||||
|
||||
pd->ampm = efl_add(EFL_UI_BUTTON_CLASS, obj,
|
||||
efl_event_callback_add(efl_added, EFL_UI_EVENT_CLICKED, _field_changed_cb, obj),
|
||||
|
|
Loading…
Reference in New Issue