그룹 관리 메뉴
이번에는 두 번째 메뉴인 [그룹 관리] 메뉴를 살펴보자. [그룹 관리]를 구현한 클래스는 TManageGroup 클래스이며 HBox에서 상속받았다. 전체 레이아웃을 보면 두 개의 VBox 안에 TCustomerTable과 버튼, TTreeControl과 버튼, 콤보 박스로 되어있다. 두 개의 복잡한 레이아웃은 클래스로 만들어서 TCustomerTable 자체의 레이아웃은 단순해졌다.
<화면 3>에서 보듯이 왼쪽은 고객의 정보를 보여주는 테이블이다. 간단하게 RecordGrid를 사용해도 되겠지만 개발자나 사용자의 요구는 다양하기 때문에 완전히 새롭게 테이블로 구성했다. 그리고 오른쪽은 트리 컨트롤로 컬에서 기본적으로 제공하는 것은 아니고, 간단한 작업을 통해 직접 만든 것이다. 물론 새로 만드는 것이 다른 언어처럼 어렵다면 컬에서 제공하는 것을 썼겠지만 기쁘게도 컬로는 매우 쉽게 구현할 수 있다.
<화면 3>의 동작 방식은 왼쪽에서 사용자를 드래그해서 오른쪽의 트리 컨트롤의 폴더에 드롭하면 그대로 추가된다. 그리고 오른쪽의 트리 컨트롤에서는 새로운 하위 그룹을 만들거나 삭제, 이름 변경 등을 할 수 있도록 팝업 메뉴가 지원된다. DHTML과 자바스크립트만 가지고는 결코 쉽지 않을 작업이지만, 소스를 보면 쉽게 구현되었음을 알 수 있을 것이다.




TCustomerTable
왼쪽 테이블을 구성하는 TCustomerTable 클래스는 TBaseTable 테이블에서 상속받았다. 테이블의 컬럼은 TTableColumn 클래스이며 테이블의 각 셀은 TTableCell 클래스이다. 가장 핵심인 TBaseTable은 ScrollBox에서 상속받았다. <그림 4>와 같이 ScrollBox 안에 VBox를 이용해서 header와 body 테이블을 따로 구성했다. 자세한 내용은 소스를 참조하기 바란다.
이제 실제 테이블을 구성한 TCustomerTable 클래스를 살펴보도록 하자. 이 클래스는 TBaseTable에서 상속받았기 때문에 수정 없이 그냥 사용한다면 전달된 RecordSet의 모든 필드를 다 표시한다. 그래서 RecordSet 중에서 특정 필드만 보여주기 위해 {get-colums} 메쏘드를 오버라이딩(overriding)했다. 그리고 {get-body-table-cell} 메쏘드를 오버라이딩하여 각 셀(TTableCell)의 모양을 원하는 형태로 정의했다. 상세한 메쏘드의 구현은 소스를 보면 쉽게 이해할 수 있을 것이다.

이번에는 두 번째 메뉴인 [그룹 관리] 메뉴를 살펴보자. [그룹 관리]를 구현한 클래스는 TManageGroup 클래스이며 HBox에서 상속받았다. 전체 레이아웃을 보면 두 개의 VBox 안에 TCustomerTable과 버튼, TTreeControl과 버튼, 콤보 박스로 되어있다. 두 개의 복잡한 레이아웃은 클래스로 만들어서 TCustomerTable 자체의 레이아웃은 단순해졌다.
<화면 3>에서 보듯이 왼쪽은 고객의 정보를 보여주는 테이블이다. 간단하게 RecordGrid를 사용해도 되겠지만 개발자나 사용자의 요구는 다양하기 때문에 완전히 새롭게 테이블로 구성했다. 그리고 오른쪽은 트리 컨트롤로 컬에서 기본적으로 제공하는 것은 아니고, 간단한 작업을 통해 직접 만든 것이다. 물론 새로 만드는 것이 다른 언어처럼 어렵다면 컬에서 제공하는 것을 썼겠지만 기쁘게도 컬로는 매우 쉽게 구현할 수 있다.
<화면 3>의 동작 방식은 왼쪽에서 사용자를 드래그해서 오른쪽의 트리 컨트롤의 폴더에 드롭하면 그대로 추가된다. 그리고 오른쪽의 트리 컨트롤에서는 새로운 하위 그룹을 만들거나 삭제, 이름 변경 등을 할 수 있도록 팝업 메뉴가 지원된다. DHTML과 자바스크립트만 가지고는 결코 쉽지 않을 작업이지만, 소스를 보면 쉽게 구현되었음을 알 수 있을 것이다.




TCustomerTable
왼쪽 테이블을 구성하는 TCustomerTable 클래스는 TBaseTable 테이블에서 상속받았다. 테이블의 컬럼은 TTableColumn 클래스이며 테이블의 각 셀은 TTableCell 클래스이다. 가장 핵심인 TBaseTable은 ScrollBox에서 상속받았다. <그림 4>와 같이 ScrollBox 안에 VBox를 이용해서 header와 body 테이블을 따로 구성했다. 자세한 내용은 소스를 참조하기 바란다.
이제 실제 테이블을 구성한 TCustomerTable 클래스를 살펴보도록 하자. 이 클래스는 TBaseTable에서 상속받았기 때문에 수정 없이 그냥 사용한다면 전달된 RecordSet의 모든 필드를 다 표시한다. 그래서 RecordSet 중에서 특정 필드만 보여주기 위해 {get-colums} 메쏘드를 오버라이딩(overriding)했다. 그리고 {get-body-table-cell} 메쏘드를 오버라이딩하여 각 셀(TTableCell)의 모양을 원하는 형태로 정의했다. 상세한 메쏘드의 구현은 소스를 보면 쉽게 이해할 수 있을 것이다.


"C++" 카테고리의 다른 글
- 읽어 볼 만한 C++ Book Series (0)2006/07/08
- 프로그램 개요와 고객 그룹 관리 - 3 (0)2006/01/08
- 프로그램 개요와 고객 그룹 관리 - 2 (0)2006/01/08
- 프로그램 개요와 고객 그룹 관리 - 1 (0)2006/01/08
- C++ 컴파일과 링크 구조를 통한 링키지의 이해 - 3 (0)2005/09/10

수안이의 컴퓨터 연구실



Leave your greetings.