Eclipse

GEF - 원그리기

_침묵_ 2007. 3. 31. 23:54

생성한 에디터에 원을 그려보도록 하자. GEF는 MVC패턴으로 구현을 해야한다.

즉 원이라는 모델이 있고, 이를 그리기 위한 Draw2d의 Figure가 있다. 마지막으로 이를 연결하는 Editpart 가 있어야 한다.


사용자 삽입 이미지

 

GEF의 Help에 있는 GEF 구조에 관한 이미지이다. 사용자로부터 특정 Request 즉 새로 그리거나, 움직이거나등의 Action을 하게 되면 Controller와 Model, View가 유기적으로 돌아가게 된다. 이때 주된 역할은 Controller가 하게 된다.

 

간단하게 원을 그려보도록 하자.

1.Shape

원에 해당하는 모델을 생성한다. 아직 좌표나 색과 같은 정보는 필요하지 않기 때문에 빈클래스를 생성하였다. Shape는 앞으로 진행하면서 많은 변경사항이 생기게 됨으로 주의깊게 봐야 한다.

public class Shape
{
}

 

2.ShapeEditPart

Editpart의 메소드중 createFigure는 화면에 보여질 Figure를 반환하여야 한다. Figure는 Draw2d에서 제공하는 원을 반환하도록 하였다. 즉 모델에 따라 원이 반환되는 것이 아니라, Editpart에 의해 원이나 사각형이 반환되는 것이다.

public class ShapeEditPart extends AbstractGraphicalEditPart {
   protected IFigure createFigure() {
       return new Ellipse();
   }

}

 

3.ShapesEditPartFactory

EditPartFactory는 Factory 패턴이다. 즉 해당 모델에 따라 Editpart를 생성하여 반환을 한다.

public class ShapesEditPartFactory implements EditPartFactory {
   public EditPart createEditPart(EditPart context, Object model) {
       if (model instanceof Shape) {
           return new ShapeEditPart();
       }
     return null;
   }
}

이 소스를 말로 설명하면파라미터로 넘어온 Model이 Shape라면 ShapeEditPart를 생성하여 반환을 한다가 된다.

 

4.ShapesEditor

생성한 Factory를 에디터에서 알수 있도록 변경을 해줘야 한다. 그리고 팔레트에서 그리는 것이 아니라, 초기값을 넣어서 화면에 원이 나오도록 하기 때문에 수정이 필요하다.

protected void initializeGraphicalViewer() {
    super.initializeGraphicalViewer();
  
    GraphicalViewer viewer = getGraphicalViewer();
    viewer.setContents(new Shape());
 }
 protected void configureGraphicalViewer() {
    super.configureGraphicalViewer();
  
    GraphicalViewer viewer = getGraphicalViewer();
   viewer.setEditPartFactory(new ShapesEditPartFactory());
 }

 

initializeGraphicalViewer는 초기값을 넣어주도록 하였다 setContents에 Shape를 넘겨줌으로써 GEF에게 Shape를 그리도록 한다. configureGraphicalViewer는 생성한 EditpartFactory를 넘겨준다. 이렇게 넘겨줌으로써,  GEF는 Shape라는 초기 모델을 생성할때 Factory를 참조하여 ShapeEditPart를 생성하고 원을 그리게 된다.

 

그려진 결과를 보도록 하자.

 


사용자 삽입 이미지

 

원이 화면에 꽉차게 그려지게 나온다. 화면에 꽉차게 나오는 이유는 초기모델로 원을 그렸고, 초기모델은 화면에 꽉차도록 GEF에 설정이 되어있다. 다음에는 원하는 위치에 원하는 크기만큼 원이 그려지도록 하자.

'Eclipse' 카테고리의 다른 글

GEF - Editor with Palette  (0) 2007.03.31
GEF - Diagram 생성  (0) 2007.03.31
GEF - XYLayout  (0) 2007.03.31