GEF(Graphical Editing Framework) 개요
정의
- 시각 기반의 고품질 에디터와 뷰를 쉽게 만들기 위한 Eclipse framework를 말함
목적
- 모델의 시각적 표현
- 마우스와 키보드를 통한 모든 이벤트 핸들링 가능
- 이클립스 워크벤치 UI(Toolbar, Outline, Properties view)와 통합성 제공
사례
- Gui builder, class diagram editor 등
-http://download.eclipse.org/tools/gef/updates/milestones/
GEF의 3요소
- Draw2d(org.eclipse.draw2d)
- swt canvs 위에 시각적인 요소를 표현하기 위한 경량 레이아웃 및 rendering toolkit
- GEF(MVC)(org.eclipse.gef)
- 상호작용하는 MVC(Model-view-controller) framework, swt 기반의 tree와 draw2d 기반의 시각 기반 editor 구현을 장려
- Zest(org.eclipse.zest)
- Draw2d 기반의 시각화 toolkit, 주로 graph를 표현하는 view를 만들 때 사용
![](https://t1.daumcdn.net/cfile/tistory/2777693D58534C6D2A)
Draw2d의 기능
- 효율적인 Rendering 지원
- 각종 figure 및 layout 지원
- cursor 및 tooltip 지원
- anchor, routing, 징식
- 복합, 투명 레이어 지원
- 유연한 좌표 시스템 지원
- 썸네일 및 스크롤 지원
- 인쇄 기능 지원
Draw2d Figure 계층 구조
- Draw2d의 최소 구성 재료
- Draw2d gui는 figure를 트리형태로 구축
- figure.add(IFugure) 호출하여 자식 추가
- Figure.remove(IFigure) 호출하여 자식 제거
Figure그리는 법
- paintFigure(Graphics)를 호출하여 자기 자신을 그린다
- 자식들을 재귀적으로 반복하며 paint(Graphics)를 호출하여 모든 자식들을 순서대로 그림
- 보더를 그린다.
- Figure의 트리 구조는 paint(Graphics)로 전체 구조가 렌더링 된다.
- 자식은 부모 위에 렌더링 된다.
Figure 바운즈
- 각각의 figure들은 바운즈를 가지고 있음.
- 바운즈는 draw2d의 클리핑 시스템이 그 외부에 그려지는 것을 막아주는 역할을 함.
- 그릴 수 있는 공간의 제약을 줌
*layout manager: figure의 자식들의 바운즈를 지정할 수 있음.
GEF의 기능
- 선택, 생성, 연결 등의 도구 제공
- Pallete 제공
- 각종 편집을 위한 Handle 제공
- tree 또는 시각 기반의 viewer 제공
- business mode 및 view 여녈 controller model 제공
- view와 model의 상호작용이 가능하도록하는 polish 구조
- feedback 및 선택을 표시하는 다양한 구현 가능
- Controller로 보내지는 다양한 종류의 요청 및 action 가능
- command stack을 통한 undo/redo 지원
Zest 기능
- graph viewer
- layout algorithm 지원
View 구축 방법
- View 생성에 참여하는 요소
- EditPartFactory
- EditParts
- GraphicalViewer
- Draw2d Figures
EditPartViewr, RootEditPart
- EditPartViewer
- SWT Control 위에 model에 대한 view를 설치
- viewer가 draw2D Figure로 구성된 경우 GraphicalViewer를 상속
-viewer에 Control, EditPartFactory, RootEditPart들을 설정,
-RootEditPart
- tree구조로 조직되는 EditPart들의 구조 root
GEF가 뷰를 구축하는 과정
- Contents라 불리는 model이 EditPartViewer에 전달
- EditPartFactory가 주어진 Model에 대해 EditPart 생성
- 생성된 EditPart는 ContentEditPart라고 칭함
- ContentEditPart가 Figure를 만들기 위해 create와 refresh 관련 Method 호출
- 어떤 Model들이 자식으로 표현되어있는지 Get관련 Method호출로 확인
- 각각 자식의 create와 refresh 관련 Method 호출후 contentpane에 부착
- 다시 getModel 함수를 호출하여 각각의 Figure이 만들어질때까지 반복