수안이의 컴퓨터 연구실

  • Mainpage
  • About Me
  • Tags
  • Metapage
  • Notice
  • Location
  • Keywords
  • Guestbook
  • Admin
  • Write an Article
  • Total | 1693825
  • Today | 176
  • Yesterday | 588

Programming/C++2006/01/08 08:21

프로그램 개요와 고객 그룹 관리 - 3

김인덕

트리 컨트롤
이번에는 그룹 관리의 핵심인 오른쪽의 TTreeConrol을 살펴보자. TTreeControl의 핵심은 mtree(VBox)로 각 트리의 한 행을 child로 갖는다. 그 child는 HBox로 <그림 5>에서 화살표가 가리키는 오른쪽 레이아웃이다. 처음에는 Fill 객체로 트리 레벨에 따라 들여쓰기를 해주고 그 다음은 +/- 그림이고 마지막으로 TTreeControlItem이 들어간다. TTreeControlItem은 HBox에서 상속을 받았으며 폴더 이미지와 TTreeItem을 child로 갖는다. 트리 컨트롤에서 TTreeItem을 드래그해서 TTreeControlItem 위에 드롭할 수 있도록 하기 위해 TTreeControlItem에는 Drop 이벤트를 주고 TTreeItem은 드래그 이벤트를 주었다. 물론 TTreeControlItem은 TCustomerTable의 셀인 TTableCell 객체도 받을 수 있다.
TTreeControl에 넘겨질 트리 정보는 TTreeNode로 구성되어 있다. TTreeNode는 child를 배열로 관리하고 있으며 status 필드는 현재 노드의 상태를 나타내는데 +/-는 폴더인 경우 펼쳐진 것인지, 아닌지를 나타내며 *인 경우는 폴더가 아닌 아이템, 즉 고객을 말한다.
이번엔 TTreeControl에서 TTreeNode 객체를 받아서 어떻게 트리를 구성하는지 알아보자. TTreeControl은 한 개의 TTreeNode를 받는다. 물론 TTreeNode는 루트 노드로 하위 노드들을 child로 갖고 있다. 이 루트 노드를 써서 트리 구성을 하는 메쏘드가 {TTreeControl. refresh-controls} 메쏘드이다.



<리스트 7>을 보면 mtree(VBox)를 클리어한 후에 {make-tree} 메쏘드를 호출한다. {make-tree} 메쏘드가 하는 일은 현재 넘겨진 TTreeNode를 레벨에 맞게 mtree에 추가해 주는 것이다. 그리고 TTreeNode.status가 -인 경우는 펼쳐진 경우이므로 하위 노드를 {make-tree} 메쏘드에 넘겨 재귀 호출을 한다. +는 하위 노드를 그릴 필요가 없으므로 넘어가고 *인 경우는 폴더가 아니기 때문에 역시 넘어간다. {make-tree}가 전체 TreeNode를 따라 실행되면 마지막에 mtree에는 화면에 표시돼야 할 트리 노드 모두가 child로 추가된다. 아주 간단한 방식으로 트리를 생성하지만 제대로 동작한다.
그럼 각 노드에서 +/-가 눌린 경우는 어떻게 해야 될까? 만약 이벤트가 발생한다면 {TTreeControl.refresh-controls}를 다시 호출해서 트리를 다시 생성한다. 물론 이벤트가 발생한 노드의 status는 변경을 해줘야 한다. 다음은 TManageGroup 클래스에서 TTreeControl 생성하는 과정을 보여주고 있다.

set self.ftn-rs = {self.get-recordset-group “0”}
set self.ftn = {self.recordset-to-treenode self.ftn-rs}
set self.ftreecontrol = {TTreeControl root = self.ftn, showroot?=true}


처음에 {TManageGroup.get-recordset-group} 메쏘드를 이용해서 서버로부터 트리 데이터를 받는다. 트리 데이터는 다음과 같이 서버에서 php가 <레벨, 이름(아이디), 상태>의 형태로 컬에 넘겨주게 된다(꼭 이렇게 해야 하는 것은 아니고 서버 측과 원하는 방식대로 정의하면 된다).

1,서울시,-
2,강남구,-
3,vidkid,*
3,50bo100bo,*
1,수원시,-
2,장안구,-
3,ddurami,*
2,권선구,-


그럼 컬 쪽에서는 그것을 파싱해서 RecordSet에 넣으면 된다. 그리고 그 RecordSet을 {TManageGroup.recordset-to-treenode} 메쏘드를 이용해서 TTreeNode 객체로 만들어 준다. 마지막으로 TTreeControl를 생성한다.
이번엔 컬의 가장 큰 장점 중의 하나인 드래그 앤드 드롭 부분을 살펴보자. 앞에서 설명했듯이 드롭 이벤트를 받을 수 있는 클래스는 TTreeControlItem이고 드래그될 수 있는 클래스는 TTreeItem과 TTableCell 클래스이다. 드래그 이벤트는 간단히 드래그할 객체에 다음과 같이 해주면 된다.

set TTreeItem.dragee = {ImageDragee}




그럼 핵심 부분인 드롭 이벤트를 받기 위한 부분을 보자. <리스트 8>에서 {on-drag-over} 메쏘드는 드래그 상태에서 TTreeControlItem 위로 마우스 커서가 들어온 경우 드롭할 수 있는지 아닌지를 결정하기 위해서 실행되며 {on-drop} 메쏘드는 드롭이 된 경우에 실행된다. TTreeControlItem 클래스의 경우는 드롭된 객체의 클래스 Type을 보고 결정하게 되는데 TTableCell인 경우는 추가가 되고 TTreeItem인 경우는 이동을 하게 된다.
이것으로 TTreeControl의 핵심 부분을 모두 설명했다. 이 트리 컨트롤의 단점은 표시할 데이터가 굉장히 많아지면 느려질 수 있다는 것이다. 속도를 중요시해야 한다면 좀 더 낮은 레벨 프로그래밍을 해야 되는데 그 부분에 대해서는 기회가 된다면 다뤄보도록 하겠다. 대부분의 웹에서 동작하는 데이터를 표시하는 데에는 앞의 두 클래스로도 충분히 잘 동작할 것이다.

뛰어난 유연성으로 개발 생산성 향상
이번 연재를 통해서 독자들에게 전달하고자 했던 내용은 기존 웹 방식의 업무 틀을 벗어날 수 있다는 점과 컬을 사용하면 개발자가 만들고자 하는 컨트롤을 쉽게 만들 수 있다는 점이다. 우선 드래그 앤드 드롭과 트리 컨트롤의 사용은 분명 기존의 웹 페이지 기획 방식의 한계를 넘어섰다. 윈도우용 CS 프로그램에서는 한 화면으로 구현 가능하던 것을 억지로 2~3화면으로 나눌 필요 없이 그대로 한 화면으로 구성 가능하다는 것이다. 두 번째로 트리 컨트롤을 구성하는데, 컬만으로 쉽게 구현했으며 어떠한 고객의 요구라도 확장이 쉽다는 것이다. 만약 각 트리 노드에 그림을 3개씩 넣는다거나 두 줄로 만든다거나 아니면 메모장 같은 에디터를 넣는 경우가 생긴다면 컬은 아주 쉽게 확장할 수 있다.
컬의 도입 효과는 단지 ‘화면이 예쁘다’뿐 아니라 웹 화면을 기획하는 데 더 많은 유연성을 제공할 것이다. 그리고 웹 프로그래밍에 지친 개발자에게는 컴포넌트를 만드는 재미도 느끼게 해줄 것이다. 컴포넌트가 늘어감에 따라 개발 생산성의 비약적인 향상을 기대할 수 있다. 이번 연재에서는 아쉽게도 소스의 양은 많고 지면은 한정되어 있어 소스의 핵심 부분과 동작 방식, 레이아웃만을 설명했다. 소스를 보는 것만으로 이해하기 어려운 부분은 www.fullsource.net에 질문하거나 자료를 참조하기 바란다.

정리 | 김세미 | semsem@korea.cnet.com

참+고+자+료

컬 관련 커뮤니티 : http://www.fullsource.net
국내 컬 라이센스 영업과 기술지원 : http://www.qtii.co.kr
컬 공식 사이트 : http://www.curl.com
"C++" 카테고리의 다른 글
  • 타입 변환 [cast] (0)2006/07/22
  • 읽어 볼 만한 C++ Book Series (0)2006/07/08
  • 프로그램 개요와 고객 그룹 관리 - 3 (0)2006/01/08
  • 프로그램 개요와 고객 그룹 관리 - 2 (0)2006/01/08
  • 프로그램 개요와 고객 그룹 관리 - 1 (0)2006/01/08
2006/01/08 08:21 2006/01/08 08:21
Posted by webdizen
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/1637

Leave your greetings.

[로그인][오픈아이디란?]

«Prev  1 ... 1541 1542 1543 1544 1545 1546 1547 1548 1549 ... 3009  Next»

RSS HanRSS
Blog Image
webdizen
이곳은 컴퓨터에 대해 연구하고, 공유하고, 소통하기 위한 연구실입니다. 개인적으로는 OLAP, Data Mining, Semantic Web, Data Modeling에 대해서 연구하고 있습니다.

Categories

전체 (3009)
Webdizen (141)
Life (6)
Diary (16)
Blog (9)
IDEA (2)
Travel (10)
Book (16)
Photo (7)
Movie (8)
Music (14)
Leisure Sports (10)
Funny (6)
Hardware (121)
Software (120)
Windows (5)
Unix & Linux (120)
Installation (5)
Kernel (10)
System (34)
Develop (22)
X-Window (0)
Applicaton (31)
Security (4)
Framework (2)
Hadoop (2)
Programming (804)
Algorithm & Data Structure (1)
Assembly (38)
UNIX/Linux C (95)
C++ (128)
STL (4)
Java (38)
Win32 API (92)
ATL/COM (44)
MFC (151)
.NET (26)
WCF/WPF (4)
C# (28)
Network Programming (17)
Database Programming (12)
OpenGL / DirectX (13)
Multimedia Programming (0)
Game Programming (21)
Parallel Distributed Progra... (0)
Reverse Engineering (0)
Debugging (9)
Python (1)
Ruby (1)
Ruby on Rails (1)
QT (4)
GTK (0)
JSP (0)
PHP (6)
ASP.NET (6)
ASP (2)
Development (28)
Useful Library (2)
Data Modeling (0)
Database (105)
Oracle (4)
MSSQL (41)
MySQL (2)
Data Warehouse (2)
Data Mining (4)
Network (66)
Web (79)
DHTML (4)
XHTML (1)
Javascript (1)
CSS (1)
AJAX (9)
XML (11)
Flex (1)
Silverlight (3)
Security (91)
DoS (1)
Kernel (10)
Scanning (3)
Sniffing (0)
Spoofing (4)
Overflow (28)
Web (11)
Shell (10)
Format String (14)
Window (2)
Embedded (70)
Multimedia (27)
Mobile (14)
Graphic (24)
Management (633)
Knowledge (581)
Hadoop (0)

Notice

  • 메타 블로그 사이트에 등록
  • 새해 맞이 블로그의 변화
  • 블로그 명칭 변경
  • 도메인(www.webdizen.net) 구...
  • TEXTCUBE 1.6.1로 업그레이드...

Tags

  • M&SOFT
  • 네트워크 라인
  • 검색 제한자
  • Glide
  • 두뇌생활습관
  • T-SQL
  • ssl
  • 시스템 방어
  • 예측 모델링
  • 파티션
  • 정보 공학 모델링
  • Forensic
  • 그랜드캐년
  • 화면 캡처
  • awk
  • Programmer
  • Thread 종료
  • 서울과학고
  • 이터레이터
  • 패턴

Recent Articles

  • 트위터(Twitter)의 시작!.
  • 청년 리더의 조건.
  • 애플의 타블렛 PC - 아이패드....
  • 미래의 인터페이스 - 육감 기....
  • 기초발성법 동영상 강좌.

Recent Comments

  • 학교 과제물중 쓰레드에 대하....
    장진혁 03/17
  • 관리자만 볼 수 있는 댓글입....
    비밀방문자 03/12
  • 상대방의 이야기를 열심히 경....
    DoNuts 03/03
  • Lots of students know techn....
    Bobbi35Shannon 02/25
  • 좋은글 잘 보고 갑니다..
    Und_hacker 01/08

Recent Trackbacks

  • printf,scanf를 이용한 형식....
    yundream의 프로그래밍 이야기 03/10
  • 파일 열기/저장하기 CFileDialog.
    은마군의 나태블록 2009
  • World IT Show 2008.
    상우 :: Oranzie's BLOG 2008
  • cvs서버 설치하기.
    3인3색 2008
  • 속속 공개되는 Google Chart....
    PHP와 Web 2.0 2007

Archive

  • 2010/02 (1)
  • 2010/01 (6)
  • 2009/12 (5)
  • 2009/09 (3)
  • 2009/08 (1)

Calendar

«   2010/03   »
일 월 화 수 목 금 토
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

Bookmarks

    • Administration
      • IIS.NET
      • NTFAQ
      • OS의 모든 것
      • 리눅스포털
    • Database
      • SQL Server Central
      • SQL Team
    • Development
      • .NET Heaven
      • ASP Alliance
      • ASP.NET 2.0
      • Bullog.net
      • C# Corner
      • C++ (C PlusPlus.com)
      • C++ Reference
      • CodeGuru
      • CodePlex
      • DebugLab
      • Dev Articles
      • Devpia
      • DotNet Junkies
      • DotNet Zone
      • Driver Online
      • GOSU.NET
      • HOONS 닷넷
      • Joinc 팀블로그
      • KOSR
      • MSDN Home Page
      • OSR Online
      • Sky.ph - 개발자 커뮤니...
      • TAEYO.NET
      • The Code Project
      • WindowsClient.net
      • 김상욱의 개발자 Side
      • 조인시 위키
    • Human Networks
      • belief21c's e-space
      • I think I can
      • Invisible Rover's Blog :D
      • Rodman®
      • ■ Feel So Good~! ■
      • 까만 나비
      • 나를 가꾸는 시간.
      • 나만의 즐거움~~!
      • 단녕
      • 상우 :: Oranzie's BLOG
    • Information Technology
      • Microsoft TechNet
      • 지디넷코리아 - 글로벌...
    • Security
      • FoundStone
      • milw0rm
      • NewOrder
      • OpenRCE
      • Phrack.org
      • Reverse Engineering b1...
      • Reverse Engineering Team
      • RootKit
      • SecurityFocus
      • SecurityXploded by Nag...
      • Wow Hacker
      • Zone-H
Textcube
Louice Studio Inc.
Powered by Textcube. Original designed by Tistory.