XPLATFORM 101
화면 프레임을 구성하는 방법은 두가지가 있습니다.
템플릿에서 시작하는 것과 밑바닥(기본)에서 시작하는거죠.
이번에는 처음부터 프레임을 만들어보겠습니다.
상단 메뉴와 좌측 메뉴, 콘텐츠가 나오는 기본적인 화면 배치입니다.

1. 새로운 프로젝트를 만듭니다.
File > New > Project
Frame Template 는 Default 값을 그대로 사용합니다.
주의 할 점은 Add to Current Project 가 아니라 Create a new Project 를 사용합니다.

2. 생성된 프로젝트의 프레임 구조를 만들어줍니다.
ADL 에서 MainFrame 아래 기본적으로 생성되어 있는 childframe을 삭제해줍니다.


그리고 필요한 FrameSet을 추가합니다.


이렇게만 만들어놓으면 각 프레임이 어떤 역할인지 혼란스러울 수 있으니
id 값을 변경해주어도 됩니다.
각 프레임의 id 속성을 변경하면 됩니다.


프레임을 정의했으면 각 프레임에 해당하는 폼을 생성합니다.

먼저 상단 메뉴에 해당하는 폼을 만들어보겠습니다.
Menu 컴포넌트를 사용하고 폼의 크기는 메뉴의 크기와 동일하게 설정할 겁니다.

화면에 Menu 컴포넌트를 배치하고 높이를 45로 설정합니다.
Dataset은 id, title, form, level 4개의 컬럼을 가지도록 하고 데이터를 채워넣습니다.

Menu에 바인딩은 inner dataset 으로 설정합니다.


이때 3가지 항목은 필수적으로 설정을 해주어야 합니다.
captioncolumn, idcolumn, levelcolumn
그 외에 iconcolumn, enablecolumn 의 경우에는 옵션입니다.


앞에서 설정한 title, id, level 을 설정해주면 됩니다.
그리고 나면 바인딩된 데이터를 UX 스튜디오에서 확인할 수 있습니다.

* 이것은 예제이니 크기나 타입 따위는 신경쓰지 않았다는..ㄷㄷ
 


* 디자인 역시 신경쓰지 않았다는.. 그냥 blue 테마 사용
 


* 상단메뉴에 스크립트도 붙이지 않았는데 너무 내용이 길어졌네요. 메뉴랑 콘텐츠랑 상단메뉴 스크립트는 다음시간에..ㅠㅠ

http://cafe.naver.com/xplatform101/130 
XPLATFORM 101
이번에는 지난 시간에 마무리 못했던 부분을 다시 정리하겠습니다.

일단 남은 문제는 다음과 같았죠.
=========================================
* 몇가지 문제
- 사진이 있는지 없는지 그리드상에 표현이 안되는 문제
- 사진 Resize가 안되는 문제
- 처음 바인딩되면서 사진이 다 바인딩되는 문제
=========================================

첫 번째는 체크박스를 그리드에 추가해서 확인하도록 하고
두 번째는 ImageViewer의 사진 크기 조정 기능을 사용하겠습니다.
세 번째는 좀 애매하긴 한데 사진을 가져오는 시점을 실제 항목을 클릭할때 처리하도록 하겠습니다.
그리고 설리외의 모든 f(x) 멤버의 데이터를 볼 수 있도록 약간의 수정을 하겠습니다.
(셜리가 아니라 설리였군요. ㅠㅠ)

* 그리드에 체크박스 추가하기
디자인뷰에서 그리드를 더블클릭하면 Grid Contents Editor가 나옵니다.
아마 본문, 댓글, 미투 3개의 항목이 보일겁니다.
여기에 컬럼 하나를 추가할겁니다.
컬럼을 추가하는 방법은 2가지입니다.

하나는 그리드의 빈 공간을 클릭하는 겁니다.
이때는 컬럼을 추가할 수 있습니다(마지막 컬럼 다음에 추가됩니다).
컬럼 뿐 아니라 로우도 추가할 수 있습니다.


이렇게 하게되면 무조건 가장 뒷쪽에 컬럼이 추가되기 때문에 원하는 곳에 위치시킬 수가 없습니다.
예를 들어 첫 번째 열에 컬럼을 추가하고자 한다면 다른 방법을 사용합니다.
먼저 추가시키고자 하는 위치의 다음 컬럼을 선택하고 컨텍스트 메뉴를 확인합니다.


Add, Insert, Delete 메뉴가 보이죠. Add는 이전과 같이 뒷쪽에 컬럼을 추가하는 것이고 Insert는 선택한 컬럼 앞에
새로운 컬럼을 추가하게 됩니다. 컬럼뿐 아니라 로우도 마찬가지입니다.

예제에서는 그냥 마지막에 컬럼을 추가했습니다.
그리고나서 body 영역을 선택하고 해당 컬럼의 속성을 정의해줍니다.
displaytype은 checkbox로 변경하고
text 바인딩 부분에 정규표현식을 추가해서 해당 값이 있는지 없는지 확인할 수 있게 합니다.
앞에서 사진이 있는 경우에만 media 컬럼에 데이터가 담기도록 했기 때문에 아래와 같이 처리해주면 됩니다.
bind:media!=null?true:false


이제 첫 번째 문제는 이렇게 해결이 되었습니다.

* 사진 크기 조정하기
ImageViewer에는 stretch 라는 속성이 있습니다.
이 속성은 다음과 같이 정의할 수 있습니다.
none : 기본 값으로 원본 그대로 보여주는 겁니다.
fit : 해당 컴포넌트 크기에 맞게 보여줍니다. 강제로 크기를 줄여주는데 컴포넌트 크기에 꽉 차게 보여주기 때문에
이미지가 찌그러들 수 있습니다.
fixaspectratio : 단어가 복잡하지만 결론은 원본 이미지의 비율을 유지해줍니다. 우리가 원하는 해답인것 같군요.

이제 ImageViewer에서 stretch 속성을 'fixaspectratio'로 설정해줍니다.

* 그리드에서 데이터 지정하기
일단 앞에서 설정했던 ImageViewer에 대한 바인딩 설정을 지워버리고
그리드를 선택했을때 선택된 컬럼의 데이터를 넘겨주는 방식으로 변경하겠습니다.
그리드에서 해당 셀을 선택하는 이벤트는 oncellclick 입니다.
해당 이벤트는 Grid와 GridClickEventInfo 라는 두가지 값을 던져줍니다.
우리가 필요한 것은 GridClickEventInfo에서 선택된 로우에 대한 정보를 가져오는 것입니다.
그리도 Dataset에서 해당 로우의 media 값을 찾아 ImageViewer에 던져줍니다.

그럼 해당 이벤트를 처리하는 코드는 다음과 같이 만들어집니다.

ImageViewer00.image = Dataset00.getColumn(e.row, "media");

* 다른 멤버 글도 살펴보기
이제는 멤버가 늘어났으니 버튼만 가지고 컨트롤 하기는 힘들어졌네요.
그래서 ListBox를 사용하기로 했습니다.
해당 하는 컴포넌트를 배치하고 데이터는 외부에서 받아올 수도 있지만
이번에는 지정된 멤버이기 때문에 innerdataset을 설정하겠습니다.
속성중에서 innerdataset을 클릭하고 Contents Editor에서 해당 멤버의 아이디와 이름을 추가합니다.


그리고 해당 멤버를 선택할때마다 데이터를 가져올 수 있도록
ListBox에서 onitemclick 이벤트를 사용합니다.
기존 버튼 이벤트를 약간 수정해서 이벤트에서 넘어온 멤버의 값을 받아 XML을 처리하게 수정합니다.

var fx_member_me2day_id = e.itemvalue;
var dom:DomDocument = new DomDocument();
Dataset00.deleteAll();
dom.url = "http://me2day.net/api/get_posts/"+fx_member_me2day_id+".xml";

이제 f(x) 멤버를 모두 가져올(?) 준비가 되었습니다.
폼의 titletext 도 수정하고 아이콘도 수정해보죠.
아이콘은 코드에서 수정할 수는 없고 테마를 직접 수정해야 합니다.
(코드에서 할 수 있을지도..^^)

테마(css)에서는 TitlebarForm에서 icon 항목을 수정해주면 됩니다.
자 그럼 이제 나온 결과는 다음과 같습니다.


그래도 설리가 대세..ㅎㅎ

소스참고
XPLATFORM 101
지난번 이야기한것처럼 미투데이에 글 작성시 포함된 사진을 조회해보는 기능을 추가해보겠습니다.
미투데이 API를 보면 media 라는 태그가 있습니다.
아무것도 없는 상태에서 글을 작성하게 되면 media 태그에 값이 들어가지 않습니다.
하지만 동영상이나 사진, 글감이 포함되면 해당 영역에 내용을 확인할 수 있습니다.

여기서 필요한 것은 해당 글에 사진이 있는지 여부와
사진이 포함된 URL을 가져와 화면에 보여주는 것입니다.

* 사진 포함 여부
사진이 포함되면 다음과 같이 XML에 담기게 됩니다.
<media>
<me2photo>
<provider>nphoto_inf</provider>
<photoUrl>
http://me2daythumb.phinf.naver.net/20110624_175/fx_sulli_1308905231450XqyAF_JPEG/fx_sulli_1308905231_10586.png?type=w500
</photoUrl>
<photoId>phinf6t2co</photoId>
<permalink>http://me2day.net/front/me2photo?id=phinf6t2co</permalink>
</me2photo>
</media>

photoUrl과 permalink는 결국에는 같은 링크로 연결되지만 퍼머링크는 직접 이미지로 연결되는 것이
아니기때문에 여기에서는 photoUrl을 사용해야 합니다.

일단 Dataset에서 사진을 포함한 url을 추가할 수 있도록 컬럼을 추가합니다.
편의상 media 라는 컬럼을 추가합니다.
(최초 설계가 좀 문제가 있어서..ㅠㅠ)

그리고 화면상에는 이미지를 볼 수 있도록 ImageViewer 를 추가합니다.
컴포넌트에서 가져와 화면상에 넣어주면 됩니다.

이제 image URL을 Dataset에 담을 수 있또록 스크립트를 일부 수정합니다.
앞에서 Dataset 의 컬럼수만큼 반복하면서 소스를 가져오게 해놓았는데요.
이번에는 media 컬럼일 경우에는 자식노드가 있는지 확인하고
(없을 수도 있습니다).
있다면 me2photo/photoUrl 이 있는지 다시 한번 확인하고 해당 값을 가져오게 합니다.

if(Dataset00.getColID(nCol)=='media' && ColVal.get_item(0).childNodes != null)
{
var PhotoVal = ColVal.get_item(0).getElementsByPath("me2photo/photoUrl");
if(PhotoVal)
{
Dataset00.setColumn(nCurRow, Dataset00.getColID(nCol), PhotoVal.get_item(0).textContent);
}
}

그럼 사진이 있는 경우에는 사진에 맞게 데이터를 설정합니다.

이제 남은 것은 ImageViewer에 어떻게 사진을 연결해줄지를 설정하는 겁니다.
이 과정은 의외로 간단합니다.
그냥 Dataset을 ImageViewer에 연결하기만 하면 됩니다.


Dataset을 마우스로 드래그해서 ImageViewer에 올려놓으면 위의 그림과 같은 대화상자가 나타나고
속성과 컬럼 ID만 지정해주면 됩니다.
그럼 Source 창에 아래와 같은 소스가 추가됩니다.

<Bind>
      <BindItem id="item0" compid="ImageViewer00" propid="image" datasetid="Dataset00" columnid="media"/>
</Bind>

물론 그냥 바인딩을 하게 되면 중간에 컨트롤을 할 수가 없는 문제가 있긴 합니다.

자 이제 실행을 해보면 다음과 같은 결과가 나옵니다.


* 몇가지 문제
- 사진이 있는지 없는지 그리드상에 표현이 안되는 문제
- 사진 Resize가 안되는 문제
- 처음 바인딩되면서 사진이 다 바인딩되는 문제

이런 문제들은 다음 시간에 해결해보죠. ㅠㅠ

프로젝트 폴더가 약간 바뀌었네요.