언어 설정

Menu
Sites
Language
edc part 제어

part

         {
             name: "image";
             type: "IMAGE";

...

 

위처럼 선언된 edc 파일 내부에 들어있는 part 부분을 조건에 따라, 

show/hide를 결정하고 싶은데 어떤 방법이 있을까요?

 

 

Responses

4 댓글
colin Rao

Hi,

f.y.i

edc reference: https://docs.enlightenment.org/efl/1.15.0/edcref.html

check the part description section: Group.Parts.Part.Description

possible you can try to define multi state for a part, set different visible value(0 or 1), and define the program section to change the state according to singles/events. 

Kim

자세하게 글을 작성하지 않아서, 다시금 질문 하겠습니다.

 

현재 수행하려는 동작은 edc 파일에 정의된 part를 c 소스상에서

조건에 따라서 각각의 part를  보여주고 숨기는 동작을 수행하려 합니다.

pius lee

두가지 방법이 있습니다.

1. part를 직접 Evas_Object로 가져와서 코드상에서 evas_object_hide/show를 호출 하는 방법.

2. EDC파일 안에서 program tag로 "signal"에 따라 part의 description을 바꾸는 방법.

 

1번은 비교적 간단하지만 간단한만큼 hide/show 이외의 다른 작업을 하기가 2번보다 쉽지 않습니다.

간단하게 edje_object_part_object_get 함수를 사용해서 Evas_Object 형태로 part를 가져온 후, evas_object_show/hide를 호출 해주면 됩니다.

만약에 elementary의 layout (layout의 child들도 마찬가지) 에서 사용한 edc라면  elm_layout_edje_get 함수를 사용해 edje 객체를 가져오고,

그 객체에 edje_object_part_object_get을 사용하면 됩니다.

 

2. EDC의 program 부분 에서는 part 의 description을 바꿀 수 있고, 이를 특정 signal이 오면 동작하게 할 수 있습니다.

아주 간단한 작업이 아니라면 이 방법을 추천 드리는데, 생각보다 1번보다 어렵지 않고, 좀 더 그럴싸해 보이기 때문입니다.

part { name: "something";
    type: RECT;
    description { state: "default" 0.0;
        align: 0.5 0.5;
        min: 100 100;
        fixed: 1 1;
    }
    description { state: "disabled" 0.0;
        inherit: "default" 0.0;
        visible: 0;
    }
}

이런식으로 part에 description으로 part의 상태를 보이게 혹은 안보이게 미리 설정 합니다.

그다음에 program 부분을 작성합니다.

// 1
program {
    name: "something_show";
    signal: "mysignal,something,show";
    source: "mycode";
    action: STATE_SET "default" 0.0;
    target: "something";
}

// 2
program { 
    name: "something_hide";
    signal: "mysignal,something,hide";
    source: "mycode";
    action: STATE_SET "disabled" 0.0;
    target: "something";
}

물론 이것들은 EDC 안의 programs 안에 들어가야 합니다. 각각 설명 해보자면,  

 

1번 스크립

 - something_show 라는 이름을 가진 program입니다. 

      - 사실 여기서 이름은 별로 의미가 없습니다. 이름이 의미가 있는 경우는, 다른 program에서 after 등으로 연계해서 사용할때 필요합니다.

 - "mysingle,something,show" 라는 signal이 "mycode" 라는 source를 통해 들어오면 동작 합니다.

 - "something" part의 description을 "default" 0.0 이라는 state로 변경 합니다.

2. 1번과 동일하지만, "mysingle,something,hide" 라는 signal을 받으면 "something"을 "disabled" 0.0 으로 변경합니다.

 

이렇게 EDC가 만들어져 있는 경우, 코드상에서 다음과 같은 코드로 이 program을 동작 시킬 수 있습니다.

// if you use EDJE only 

Evas_Object *obj = edje_object_add(evas_object_evas_get(win));
edje_object_file_set(obj, "some/path/for/edj", "group name");

// for hide something
edje_object_signal_emit(obj, "mysingle,something,hide", "mycode");

// for show something
edje_object_signal_emit(obj, "mysingle,something,show", "mycode");



// if you use EDC with Elementary

Evas_Object *obj = elm_layout_add(win);
elm_layout_file_set(obj, "some/path/for/edj", "group name");

// for hide something
elm_layout_signal_emit(obj, "mysingle,something,hide", "mycode");

// for show something
elm_layout_signal_emit(obj, "mysingle,something,show", "mycode");

 

EDJE 와 Elementary 버전 2가지가 있습니다. 보시면 아시겠지만 사용 함수만 틀릴뿐 거의 동일합니다. (Elementary가 EDJE로 만들어져 있기 때문입니다!)

PS)

아래 Alex Dem의 comment를 보면, script를 program에서 사용하고 있습니다. 이 script는 embryo라는 이름의 script로 EDC안에서 사용할 수 있습니다.

사실 EDC에서는 embryo 뿐만 아니라 Lua도 사용할 수 있고, 이를 위해 edje에서는 message 함수들이 있으며, signal처럼 단순히 신호를 준다 안준다가 아니라,

parameter들도 전달할 수 있습니다. 하지만 이런것들을 모두 사용하기엔 script가 너무 복잡하며, (문서도 찾기 힘들죠...) 현재 원하시는 동작들은 모두 program 구문으로 해결 되므로, 그냥 program만 사용하시길 추천 합니다.

 

 

Alex Dem

Hi,
Something like this maybe could be useful:
target:

            part
            {
                name: "some_image";
                type: IMAGE;
                description
                {
                    fixed: 1 1;
                    rel1 { relative: 0.0 0.93; }
                    rel2 { relative: 1.0 1.0; }
                    visible: 1;
                    image.normal: IMAGE_PATH"bar.png";
                }
                description
                {
                    state: "noimage" 0.0;
                    fixed: 1 1;
                    rel1 { relative: 0.0 0.93; }
                    rel2 { relative: 1.0 1.0; }
                    visible: 0;
                    image.normal: IMAGE_PATH"bar.png";
                }
            } 


source:

            part
            {
                name: "button";
                type: IMAGE;
                description
                {
                    fixed: 1 1;
                    rel1 { relative: 0.05 0.865; }
                    rel2 { relative: 0.20 0.965; }
                    visible: 1;
                    image.normal: IMAGE_PATH"button_image.png";
                }
            } 

programm:
 

            program
            {
                name: "clicked_button";
                signal: "mouse,clicked,1";
                source: "button";
                script {
                    set_state(PART:"some_image", "default", 0.0);
                }
            } //program

Click to "button" should hide "some_image"
Alexey.