XPLATFORM 101
Div 라고 하면 HTML 태그에서 나오는 div 와 혼란스러운 부분이 있는데
일단 정의부터 확인해보겠습니다.

메뉴얼을 보면 Div를 다음과 같이 정의하고 있습니다.
하나의 화면에 여러개의 부분화면을 구성할 때 사용하는 컴포넌트로
주 화면과 독립되거나 연계된 화면을 구성할 수 있으며
다른 폼(Form)과 연결해서 사용할 수 있고
border 나 scrollbar를 사용해 영역을 분할할 수 있다.

프레임과의 차이점은 프레임은 각 프레임이 별개의 윈도우처럼 동작하는데 반해
Div는 화면을 분할해서 폼을 용이하게 사용하려는 목적이라고 볼 수 있습니다.

UX 스튜디오에서 작업은 Div 를 배치하고 해당 영역 위에 컴포넌트를 추가하면 됩니다.
코드에서 보면 다음과 같이 구성이 됩니다.
<Form id="test" ...>
    <Layout>
      <Div id="Div00" taborder="0" ...>
        <Layout>
          <Button id="Button00" taborder="0" text="Button00" position="absolute 452 78 581 122"/>
        </Layout>
      </Div>
    </Layout>

각 컴포넌트의 위치를 좌표값으로 구성하는데 Div 의 영역을 벗어나게 좌표값을 잡게 되면
스크롤이 작동합니다.


일단 한번 Div 영역에 들어오게 되면 빠져나갈 수가 없습니다.
Div 태그 밖으로 빼주어야 원하는대로 동작하겠죠.

그리고 Div 내에 포함된 컴포넌트는 다른 수준을 가지게 됩니다.
즉 버튼을 포함했다고 했을때 버튼에 직접 접근할 수 없고 Div0.Button0 과 같은 식으로 접근하게 됩니다.
그렇지 않는다면 다음과 같은 오류 메시지를 볼 수 있을 겁니다.
uxs (7704): 'Button0'은(는) 선언되지 않은 식별자입니다. (행: *)

Panel도 Div와 비슷한 것 같은데 역시 도움말의 정의를 보면
여러 컴포넌트를 Panel을 기준으로 정렬하여 화면을 구성할  때 사용하는 컴포넌트라고 되어있습니다.
Div 내 컴포넌트가 개별적인 좌표값을 가지고 정렬 처리는 툴에서 하는 반면
Panel 내 포함된 컴포넌트는 지정된 기준에 따라 정렬이 됩니다.

Panel을 생성하고 버튼을 배치한다고 해서 끝이 아니라
Panel 속성중에서 items 를 선택하고 Items를 편집해야 합니다.
배치와 관련해서는 componentalign 속성과 layout 속성이 영향을 미칩니다.
componentalign 은 레이아웃의 시작위치를 지정하며 layout 속성은 정렬과 관련된 기준을 지정합니다.
layout에서 absolute를 지정하게 되면 관련 컴포넌트의 좌표값을 그대로 가져가며
vertical이나 horizontal을 선택하게 되면 관련 속성을 따라갑니다.


Panel 을 잘 활용하면 동적으로도 화면의 배치를 변경할 수 있습니다.
좀 더 자세한 내용은 다음 기회에..

http://cafe.naver.com/xplatform101/24 
XPLATFORM 101
번역된 용어로 다중문서인터페이스라고 하며 Multiple Document Interface 의 약자입니다.
말 그대로 동시에 여러 개의 문서로 작업을 할 수 있는 어플리케이션을 제공해주는 인터페이스라고 할 수 있습니다.
각 문서(또는 어플리케이션)은 별개의 공간을 가지며 각각 작업이 가능합니다.
일반적으로 접하는 PC의 바탕화면과 동일한 인터페이스로 생각할 수 있지만 MDI라는 것은 특정 어플리케이션이나 클라이언트라는 제한된 공간이라는 차이가 있습니다.

요즘은 대부분 브라우저에서 사용하고 있는 탭 브라우저도 MDI라고 할 수 있습니다. 예전처럼 새로운 페이지를 열고 다른 것을 보기 위해서는 다음 페이지로 가거나 새로운 브라우저를 띄울 필요 없이 탭을 사용해서 사용자가 좀 더 빠르고 편하게 정보에 접근할 수 있게 하는 겁니다(탭을 이용하는 형식은 Tabbed Document Interface 라고 따로 정의하기도 하네요).

엑스플랫폼에서는 Default 로 프로젝트를 생성하면 SDI가 됩니다.
하지만 MainFrame 내에 ChildFrame이 하나만 있는 것이 아니고
FrameSet을 가지는 경우는 MDI로 정의할 수 있습니다.

겉으로 보기에는 그냥 윈도우를 여러개 올리는것처럼 보이지만 내부적으로
자원이나 메모리 관리에서부터 다양한 요소에 대한 부분을 챙겨야 합니다.

MDI가 동작하는 방식을 직접 보고자 하신다면 프로젝트를 만들어보거나 
엑스플랫폼 쇼케이스를 체험해보는 것을 권해드립니다.
* 쇼케이스는 베스트 프랙티스는 아니고 말 그대로 쇼케이스입니다.


쇼케이스의 경우에는 TDI와 MDI가 복합된 특이한 사례입니다.
하단의 탭은 각 화면단의 선택을 컨트롤하고 우측 하단의 콘트롤에서는 화면의 배치와 이동, 삭제 등의 
명령을 컨트롤 합니다.

업무 시스템에 MDI를 반영하는 것은 업무의 패턴이나 특성, 동선을 고려해서
설계할 필요가 있습니다.
많은 기능을 원한다는 것은 그만큼 다른 것을 잃을 수 있다는 것을 의미합니다.
앞에서 이야기한것처럼 MDI 기능은 단순하게 인터페이스 흉내를 내는것보다
전체적인 시스템을 어떻게 제어하고 관리할 수 있는지를 고려해봐야 합니다.
MDI 구현 가능이라고는 누구나 이야기할 수 있지만
안정적인 시스템 구현이 가능한 MDI 라는 것은 쉽게 쓸 수 없다는 것이지요.
XPLATFORM 101
앞에서 다룬 프레임에 대해 좀 더 알아보겠습니다.
기본적으로 프레임을 처리하면 새창처럼 열립니다.
다른 요소와 마찬가지로 각 속성에 대한 처리가 가능합니다.

일단 스타일부터 보면
ChildFrame 에서 관련 항목을 조정할 수 있습니다.
기본적인 프레임에 대한 속성(배경색, 그라이데이션, 경계선, 타이틀바, 상태바 높이, 색, 글꼴)에 대한 처리가 가능하고
타이틀바(TitlebarForm)와 타이틀바 우측의 버튼에 대한 제어가 가능합니다.

상태바 영역은 ChildFrame 에 한정된 것이 아니라 별도 속성(StatusbarForm)으로 분리가 되어 있습니다.
상태바에는 몇가지 추가적인 기능이 올라가기 때문에 별도로 제어되고 있는듯 합니다.

스타일이 메인 프레임과 분리가 되어 있기 때문에 아래 그림처럼 다르게 스타일 지정이 가능합니다.
물론 각 프레임에서 개별적인 지정도 가능합니다.



몇가지 속성을 살펴보면 다음과 같습니다.
- dragmovetype : 프레임 이동시 드래그 영역을 지정합니다. 기본 속성인 normal은 타이틀바가 있으면 타이틀바로 정의되고
그렇지 않은 경우에는 폼 영역이 됩니다.
전체 영역을 다 지정하고 싶다면 all 로 지정해주면 됩니다.
- showstatusbar, showtitlebar : 상태바와 타이틀바를 보여줄지를 결정합니다.
- hotkey : 각 요소를 활성화 시키기 위한 단축키를 설정할 수 있습니다.
웹에서도 가능한 기능이지만 직접 해당 요소에 지정할 수 있으며 브라우저에 상관없이 고정적인 기능이기 때문에
관리하기가 용이할 듯 합니다.
(웹의 경우에는 브라우저나 운영체제에 따라 조합이 달라지기 때문에 해당 캐릭터만 지정합니다).


기본적인 CSS와 속성을 활용하면 원하는 UI나 기능은 대부분 구현이 가능합니다.
특정 플랫폼으로 개발했는데 UX가 맘에 들지 않더라는 이야기는
플랫폼의 기능에 대한 문제보다 어떻게 기능을 설계하고
전체적인 프로세스를 고민했는지에 따라 달라집니다.
그림판으로 그림을 그리는 것과 일러스트레이터에서 그리는것은
생산성이나 품질에 차이를 줄 수 있겠지만 일러스트레이터에서 그린다고 해서
좋은 결과가 나오는 것은 아닙니다.
많은 분들이 오해(?)를 하시는 관계로 한번 챙기고 넘어갑니다.

http://cafe.naver.com/xplatform101/22