원을 줄이기 위해서는 에디터의 그려지는 영역을 담당한 Diagram이 필요하다. Diagram은 도화지의 역할을 한다고 생각하면 된다.그리고 원은 그 위에 특정 크기만큼 그리면 되는 것이다.
Diagram위에 그려지는 원은 Diagram에서 알고 있어야 한다. 그래야 새로고침이 되거나, 자식이 이동을 했을때, 다시 그려질 수 있다. 이 목록은 Diagram에서 List로 관리를 한다.
1.ShapesDiagram
Diagram의 가장 큰 역할은 그려지는 개체를 관리하는 것이다. List의 순서는 그려질때 중요하게 사용된다. 즉 원과 원이 겹칠때 어느 원이 아래로 오게 할지는 List의 순서에 따라 정해진다.
private List shapes = new ArrayList();
return shapes;
}
shapes.add(s);
}
shapes.remove(s);
}
}
2.DiagramEditPart
Diagram하고 매핑될 Editpart는 Shape와 마찬가지로 필요하다. 조금 틀린점은 화면에 보이지 않는 Figure를 사용한다는 점과 Layout을 지정하는 것이다. Layout은 SWT에서와 마찬가지로 화면에 보여질 Figure를 어떻게 배치를 할지를 정하게 된다. 즉 Diagram이 가지고 있는 Child Model들을 배치하는 방법을 Layout에서 정하게 된다.
Figure f = new FreeformLayer();
f.setBorder(new MarginBorder(3));
f.setLayoutManager(new FreeformLayout());
return f;
}
…
}
FreeFormLayout은 xyLayout을 상속받았다. 시작위치를 0,0으로 지정한 거외에는 사실 XYLayout하고 동일하다. XYLayout은 자유롭게 배치가 가능한 Layout이다. SWT처럼 여러 Layout이 있는데, 이는 다음에 다시 기술한다.
3.DiagramEditPart
Factory에서 Model과 Editpart를 연결시킨다.
{
if (model instanceof Shape) {
return new ShapeEditPart();
}
if (model instanceof ShapesDiagram) {
return new DiagramEditPart();
}
throw new RuntimeException(
"Can't create part for model element: "
+ ((model != null) ? model.getClass().getName() : "null"));
}
4.ShapesEditor 수정
Editor에서 초기값으로 원을 지정을 했었다. 이부분을 Diagram으로 변경을 해주어야 한다.
즉 화면에 보여지는 Figure는 Diagram이 되는 것이다.
super.initializeGraphicalViewer();
GraphicalViewer viewer = getGraphicalViewer();
viewer.setContents(new ShapesDiagram());
}
이제 다시 실행해서 보면 Diagram만이 그려져있기 때문에 에디터에 아무런 Figure가 보이지 않는다. Diagram에 원을 추가해 보도록 하자.
'Eclipse' 카테고리의 다른 글
GEF - 원그리기 (0) | 2007.03.31 |
---|---|
GEF - XYLayout (0) | 2007.03.31 |
상단에 탭이 있는 Dialog 만들기 (0) | 2007.03.31 |