Languages

Menu
Sites
Language
spinner 컨트롤 enable/disable 관련 문의

Spinner 사용중 문의 사항이 있어 글을 남기게 되었습니다.

두 가지 질문이 있는데, 가능한 부분인지 잘 모르겠네요. 조언 부탁 드립니다.

 

1. Spinner 컨트롤에 elm_spinner_min_max_set 값을 정하고

해당 값에 도달했을 경우 좌/우 버튼의 enable/disable 이 가능한가요?

 

2. Spinner 컨트롤에 ime 의 back space로 내용을 지울 경우,

해당 시점에 콜백을 받을 수 있나요? (다이얼로그의 확인버튼 disable 하기 위함입니다.)

 

Spinner API에서는 별다를 내용을 찾지 못했습니다.

위 두 문제에 대해 조언 부탁 드립니다.

Edited by: terry kim on 12 Jul, 2015
View Selected Answer

Responses

2 Replies
colin Rao

Hi,

1. Regarding enable/disable the left/right button by code.

I dont face such api, I am just consider, possilbe we can get the left/right button by call elm_object_part_content_get() with part name, then try to enable/disable it by call elm_object_disabled_set(). But I can't find the spinner layout part information from the IDE help, maybe the spinner widget don't support it currently.

2. Regarding get content changed callback while edit the spinner value by IME.

According the description from IDE help, seems it's only support the "changed", "delay,changed","language,changed" event. Also, as my testing result, the changed or delay changed callback only be called after finished the value edit by IME.

Sample code for such case:

static void
_spinnerval_changed_cb(void *data, Evas_Object *obj, void *event_info)
{
    dlog_print(DLOG_INFO, LOG_TAG, "[_spinnerval_changed_cb]Value changed to %0.f\n", elm_spinner_value_get(obj));
}
static void
_spinnerval_delay_changed_cb(void *data, Evas_Object *obj, void *event_info)
{
	dlog_print(DLOG_INFO, LOG_TAG, "[_spinnerval_changed_cb]Value delay changed to %0.f\n", elm_spinner_value_get(obj));
}


evas_object_smart_callback_add(spin, "changed", _spinnerval_changed_cb, NULL);
evas_object_smart_callback_add(spin, "delay,changed", _spinnerval_delay_changed_cb, NULL);

 

Mark as answer
pius lee

1. 일단 Spinner의 좌우에 붙은 버튼은 elm_object_part_contet로 가져올 수 있을지도 모르지만, Elementary style상에 있는 button의 이름이 Spec이나 document에 없기 때문에 구할 수 있다한들 사용하시면, 호환성 없는 코드가 만들어질 수 있습니다.

제가 권하는 방법은 elm_spinner_wrap_set 을 True로 놔서 끝에 도달하면 자동으로 overflow되게 하는 방법을 추천해 드립니다.

 

2. Colin Rao님이 쓴 답변으론 아마 IME에서 delete를 누르자마자 변경사항을 알아챌 수는 없을 것입니다.

static bool spinner_event_cb(void *data, Evas_Object *obj, Evas_Object *src, Evas_Callback_Type type, void *event_info) {
    const char *src_type = evas_object_type_get(src);
    const char *txt = elm_object_text_get(src);
    if (type == EVAS_CALLBACK_KEY_UP && !strcmp(src_type, "elm_entry") && !strcmp(txt, "")) {
        LOGI("deleted!");
    }
    return 1;
}

elm_object_event_callback_add(spinner, spinner_event_cb, NULL);

이 코드로는 spinner에서 IME를 통해 내부 String이 변경되었고, 공백 String인 경우 LOGI로 로그가 찍힙니다.