XPLATFORM 101
사실 Edit 메뉴는 도구마다 특별히 다를게 없습니다.
하지만 아이템에 따라 지원되는 기능이 조금씩 달라지기 때문에
알고 있어야 하는 것이 있습니다.

Undo, Redo 는 다른 도구와 같은 기능입니다.
문제는 레벨이죠. 얼마나 많은 Undo 를 허용하느냐에 따라 성능 이슈가 있을 수 있습니다.
(물론 요즘 환경에서는 큰 차이가 없겠지만)

소스코드 단위에서는 레벨을 따로 지정하지 않고
Design 모드에서는 Undo 레벨을 지정할 수 있습니다.


기본값이 1024네요. 그정도 까지 Undo 를 한다는 것은 문제가 있겠죠.
오히려 백업쪽 프로세스를 손봐야 하지 않을까 싶습니다.

Cut, Copy, Paste, Paste Special, Delete 는 일반적인 기능입니다.
소스코드에서 문자열만이 아니라 Design 모드에서 비주얼 컴포넌트도 마찬가지로 적용됩니다.
Dataset과 같은 보이지 않는 컴포넌트도 마찬가지로 도구에서 지원이 됩니다.

한가지 특이한 것이 있는데 바로 Paste Special 입니다.
소스코드를 수정할때는 동작하지 않고 디자인 모드에서 사용하는 기능입니다.
컴포넌트를 복사하게 되면 여러가지 속성이나 이벤트도 같이 복사가 됩니다.
하지만 복사를 할때 모든 것을 다 필요로 하는 것이 아니죠.
그래서 선택적으로 복사할 수 있는 기능을 제공합니다.


속성, 스타일, 이벤트, 바인딩 정보와 같은 것들을 포함합니다.
단축키는 Ctrl + Shift + V 를 사용합니다.

Select All 은 뭐 다 선택하는 것이구요.

Find, Find in Files 메뉴는 찾기와 관련된 2가지 옵션을 제공합니다.
소스 편집창에서 문자열을 단순히 검색하는 기능과 프로젝트 내의 모든 파일에서 문자열을 찾는 기능을 제공합니다.
Find 는 소스 편집창에 바로 찾은 문자열을 표시해주게 되고
Find in Files 에서는 Find Results 창에 해당 내용을 라인 단위로 표시해줍니다.
해당 라인을 더블클릭해주면 바로 해당 파일로 이동하게 됩니다.
참고로 검색 결과창은 2개까지 사용가능합니다. 검색 대화상자에서 옵션으로 2번 결과창을 사용할지 선택할 수 있습니다.


Replace 는 뭐 크게 다른것은 없구요. 다른 도구와 마찬가지로 정규표현식을 사용할 수 있습니다.

Goto Line 은 필요한가 싶은데..ㅠㅠ
일단 편집창에서 원하는 라인으로 바로 이동하는 기능을 제공합니다.

Bookmark 는 말 그대로 책갈피 기능입니다. 소스코드만 지원하는 것이 아니라
CSS나 XML 코드등 프로젝트 내에 있는 모든 문자열로 만들어진 코드에 대해 지원이 됩니다.
따로 노트 기능은 없고 타이틀을 수정할 수 있는 기능이 있어 어떤 내용인지도 관리할 수 있습니다.


Comment Selection 은 선택한 라인을 주석 처리하는 기능입니다.
단축키는 / 인데 블럭으로 문자열이 선택한 경우에만 동작하며
한줄 주석인 경우에는 /* ... */ 을 사용하고 여러줄인 경우에는 // 을 사용합니다.
여러줄인 경우에 /* ... */ 을 사용하는 것이 좋을것 같지만 주석을 해제할때 고려할 부분이 많아
//을 사용하고 있습니다.
주석 해제는 UnComment Selection 을 사용하구요.


Refresh File Status 의 경우에는 File 메뉴에서 Reload와 같이 별 쓸모가 없어 보입니다.
아마 디자인모드와 소스모드를 동기화하기 위한 메뉴가 아닌가 싶은데
이미 자동으로 동기화를 지원하고 있어서..^^

이 정도면 Edit 메뉴에 대해서는 어느정도 이해한것이 아닌가 싶습니다.

http://cafe.naver.com/xplatform101/36 
XPLATFORM 101
도구를 사용하려면 메뉴에 대한 내용을 먼저 살펴봐야 하는데
왠지 아쉬운 면이 있어 다시 정리해봅니다.

사용하고 있는 버전은 9.1.1.100 버전입니다. 현재 투비소프트 홈페이지에서
배포되고 있는 체험판입니다.

File 메뉴부터 살펴보겠습니다.
File 메뉴는 프로젝트나 폼을 만들고 만들어진 프로젝트나 폼을 다시 열어볼 수 있고
프로젝트를 별도로 저장할 수 있도록 내보내기 기능과 가져오기 기능을 제공합니다.
그리고 기본적인 인쇄 도구도 제공하고 있습니다.

다른 도구와 큰 차이는 없는듯 합니다.

File
--- New
--- ---- Project
--- ---- Item (Form, User Object)
--- ---- File (Style Sheet, XML, Script, Xtheme)

프로젝트 생성에 대해서는 이미 많이 다루었으니..^^
프로젝트를 생성할때 화면 레이아웃으로 사용될 템플릿을 선택할 수 있습니다.
간단한 애플리케이션을 만들때에는 UX 스튜디오에서 제공하는 기본 템플릿을 사용하면
프레임에 대한 큰 수정없이 작업이 가능합니다.


하지만 일정 규모 이상의 프로젝트라면 프로젝트 템플릿을 선택하도록 권장하는 것이 좋습니다.
프로젝트 템플릿은 File 메뉴 아래에 있는 Make a Project Template 을 활용할 수 있습니다.
이름은 프로젝트 템플릿이지만 거창한 프로젝트가 아니더라도 자주 쓰는 템플릿을 공유할 수 있습니다.

Item 항목은 화면을 만들기 위한 Form 과 User Object 를 만들때 사용합니다.
User Object 는 특정한 목적을 위해 확장된 컴포넌트를 만드는 것입니다.
예를 들어 Button 을 확장해서 새로운 Super Button 컴포넌트를 만드는 것입니다.
이렇게 만들어진 새로운 컴포넌트는 메뉴에 추가되어 바로 적용할 수 있습니다.
User Object 에 대해서는 이야기가 길어질 수 있으니 차후에 다시 다루도록 하겠습니다.


스타일 시트의 경우에는 단순하게 에디터만 제공하는 것이 아니라
원하는 항목을 폼에서 추가할 수 있도록 다양한 기능을 제공합니다.
일반적으로는 이전에 작성된 파일을 가져다가 수정하겠지만 새로운 아이템을 추가하는 경우에는
이런 도구의 지원은 정말 편한 작업을 가능하게 합니다.



XML이나 스크립트는 특별한 내용은 없고
테마는 이미지와 스타일 시트등이 같이 제공되기 때문에 테마 내에서 스타일 시트 편집을 바로
연결해주고 있습니다.
이미지 같은 경우에는 편집은 지원하지 않고 미리보기 기능까지 지원합니다.



--- Open
--- ---- Project
--- ---- File

새로운 프로젝트나 파일을 생성할때와 마찬가지로 여는 작업시에도
작업에 적절한 화면 배치를 자동으로 제공합니다.
각각의 퍼스펙티브를 따로 저장하는 기능은 없네요. 뭐 물론 개인 취향이니깐..^^

Reload는 프로젝트를 다시 불러오는 기능인데 언제 쓰이는 것인지는 모르겠네요.

--- Deploy
--- ---- Project
--- ---- Current File
--- ---- Settings

작업된 파일을 배포할때 사용하는 옵션입니다. 운영에 들어가면 별도의 정책을 따르겠지만
개발 단계에서는 다양한 환경을 사용하는 경우가 많습니다.
그럴 경우에 적절하게 사용하면 되지 않을까 싶습니다.

Close, Close Project 는 열려진 파일이나 프로젝트를 닫아주는 것입니다.
Recent Files, Projects 는 최근 사용된 파일이나 프로젝트를 기본적으로 4개씩 보여줍니다.
갯수를 수정하려면 Tools > Options > Environment > General > Recent files 에서 수정하시면 됩니다.

Launch Project 는 말 그대로 프로젝트를 실행해주는 것입니다. 단축키는 Ctrl + F5

Import 는 프로젝트나 파일을 가져오는 기능을 제공합니다.
메뉴를 거치지 않고 파일 탐색기에서 프로젝트 파일을 선택하거나 원하는 파일을 선택해서 
마우스 드래그앤드롭으로 동일한 작업이 가능합니다. 편한대로 하면 된다는..

Export project 는 나중에 Import 하려는 용도로 제공하는 기능이겠죠.
Make Project Template 의 경우에는 위에서 이야기했구요. 나중에 다시 다루도록 하겠습니다.

Print, Print Setup 은 다른 도구와 크게 다르지 않을까 싶습니다.
메뉴얼에는 소스나 스크립트 출력을 위한 용도라고 하는데 
현재는 소스만 출력이 됩니다.
화면 단위 출력은 화면 크기나 여러가지 고려할 것이 많을듯 합니다.

마지막으로 Save the Project as Compiled XML 이라는 긴 제목을 가지는 메뉴는
말 그대로 압축된 XML 형식으로 저장합니다.
텍스트 에디터에서 열어보면 다음과 같이 알 수 없는 글자들이 보입니다.


이건 뭐지 싶지만 배포할때 사용하는 기능입니다.
완벽한 방안은 아니겠지만 일차적으로 코드를 예방할 수 있는 기능이라고 보면 됩니다.
원본 코드는 그대로 있고 배포할 코드만 저렇게 가공하는 것입니다.

File 메뉴만 간단하게 설명한다는 것이 말이 길어졌네요. ㅠㅠ
User Object 랑 Make a Project Template 에 대한 내용은 다음 기회에..따로..

http://cafe.naver.com/xplatform101/35 
XPLATFORM 101
엑스플랫폼이 EDA를 기본으로 만들어졌다고 해서 모든 Object가 이벤트 처리대상은 아닙니다.
앞에서도 이야기했듯이 이벤트는 '주목할할만한 상태의 변화'를 가지고 있어야 합니다.

엑스플랫폼에서 이벤트를 처리대상이 되는 Object 들은 주로 동적으로 상태가 변하는 것들입니다.
UX스튜디오에서 이벤트를 등록할 수 있는 Object 는 다음과 같습니다.

* ADL
ADL(Application) - 애플리케이션의 로딩/시작/종료 등에 대한 이벤트
- onload, onloadingglobalvariables, onloadtypedefinition, onbeforeexit, onexit 등
Frame - Frame Object 에서 발생하는 이벤트. Frame 이벤트는 ChildFrame과 Form과 긴밀한 연관성을 가지고 있습니다.
- onclose, onactivate 등
Tray - Tray 에서 발생하는 이벤트
- ondbclick, onlbuttonup, onrbuttonup
Application Menu - Application Menu 에서 발생하는 이벤트
- 많군요. ㄷㄷ

* Global Variable
Datasets
- cancolumnchange, canrowposchange, oncolumnchanged, onload, onrowposchanged, onrowsetchanged, onvaluechanged

* Service
Form, Component, Invisible Object 
- 이 정도면 거의 전부인것 같은데요. ㅠㅠ

이벤트를 고려할때 실수하는 부분 중 하나가 전이에 대한 부분입니다.
부모-자식 관계를 가지는 object 들이 배열되어 있는 경우에
이벤트가 차례로 발생하는 내용을 이해하고 있지 않으면
오류로 인지할 수 있습니다.

다음과 같은 간단한 폼이 있다고 합시다.


폼 안에 Div 가 있고 그 안에 버튼이 올려져 있습니다. 
옆에 있는 것은 이벤트 로그를 찍어줄 TextArea 입니다.

버튼을 클릭하게 되면 이벤트가 어떻게 흘러갈까요?
일단 이벤트마다 다릅니다.
엑스플랫폼의 경우 모든 이벤트가 부모에게 전이되지 않습니다.

같은 버튼의 이벤트라도 onrbuttondown 같은 경우에는 전이가 되는데 onclick 같은 경우에는 전이가 되지 않습니다.
전이가 되는 경우에는 기본값이 전이가 되도록 설정되어 있습니다.
물론 이벤트를 받아서 처리를 하지 않으면 문제가 없지만 버튼과 Div 에서 다른 형식으로 처리를 해주어야 하는 경우에는
버튼의 이벤트가 부모로 전이되지 않도록 해야 합니다.

function Div00_Button00_onrbuttondown(obj:Button, e:MouseEventInfo)
{
TextArea00.value += "button"+" from:"+e.fromobject;
}

일반적으로 버튼에서 이벤트를 생성하면 위와 같이 생성이 되는데요.
리턴값을 달지 않아도 오류로 처리되지 않습니다. 기본값이 있으니깐요.
이런 경우에는 이벤트가 Button > Div > Form 으로 흘러가게 되고
각 컴포넌트에 이벤트를 처리하는 프로세스가 있는 경우 해당 프로세스를 처리하게 됩니다.

하지만 여기서 부모로 전이되지 않도록 하려면 리턴값을 정의하려 합니다.

function Div00_Button00_onrbuttondown(obj:Button, e:MouseEventInfo)
{
TextArea00.value += "button"+" from:"+e.fromobject;
return true;
}

이렇게 해주면 상위 컴포넌트에서 이벤트가 발생하지 않습니다.
이벤트 발생시 넘어오는 이벤트 Object 에도 쓸만한 정보를 많이 찾을 수 있습니다.
예를 들어 MouseEventInfo 안에는 fromobject 라는 것이 있는데 실제 이벤트가 어디서 발생했는지
추적할 수 있습니다.

이벤트를 처리할때 또 하나 주의할점은 데이터를 변경시키는 경우입니다.
달력에서 날짜를 변경할때 spin 을 사용하는 경우 위,아래 버튼을 클릭할때마다 
onspin 이벤트가 발생합니다. 이때 화면 상으로는 데이터가 업데이트되었기 때문에
그냥 쓰면 되겠지 하고 컴포넌트의 value를 그냥 가져다 쓰면 안됩니다.
이벤트가 발생하는 순간 해당 함수내에서는 아직 value가 업데이트되지 않았기 때문이죠.
그래서 이벤트 처리 이후 변경될 값을 사용하고자 한다면 넘어오는 CalendarSpinEventInfo 이벤트 정보에서
postvalue 속성값을 사용합니다.
설명을 보면 Event 발생 이후 Component가 가질 value Property 라고 하네요.

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