org.eclipse.ui.dialogs
에는 이클립스에서 제공하는 유용한 다이얼로그들이 많다.ElementTreeSelectionDialog는 트리 형태의 데이터를 출력한 후 사용자가 선택을 반영할 수 있는 다이얼로그다.
ContentProvider와 LabelProvider를 생성해 주어야 한다.
아래와 같이 간단하게 TreeSelection 다이얼로그를 사용할 수 있다.
SqlMapConfigParser parser = new SqlMapConfigParser();
SqlMapConfig sqlMapConfig =
parser.parse(ProjectHelper.getSqlMapConfigFile(javaProject.getProject()).getContents());
ElementTreeSelectionDialog dialog =
new ElementTreeSelectionDialog(getShell(), new SqlMapLabelProvider(),
new SqlMapContentProvider());
dialog.setTitle("dialog title");
dialog.setMessage("dialog message");
dialog.setInput(sqlMapConfig);
if(dialog.open() == Window.OK) {
for(Object selected: dialog.getResult()) {
if(selected instanceof SqlMap.IbatisQuery) {
ibatisStatements.add((SqlMap.IbatisQuery)selected);
}
}
tableViewer.refresh();
}
ElementTreeSelectionDialog를 사용할 때 트리의 최하단 노드만 선택할 수 있게 하거나, 선택된 노드들의 validation을 선택하게 만들면 사용하기 편할때가 있다. 이럴 경우에는
ISelectionStatusValidator
를 이용하면 된다. 아래의 코드를 참조하기 바란다.
dialog.setValidator(new ISelectionStatusValidator() {
@Override
public IStatus validate(Object[] selection) {
for(Object obj : selection) {
if (!(obj instanceof MethodDeclaration)) {
return new Status(IStatus.ERROR, IRuntimeConstants.PI_RUNTIME, IStatus.ERROR, "Only methods can be selected.", null);
}
}
return Status.OK_STATUS;
}
});
Dialog의 창 크기를 명시적으로 지정하고자 한다면
org.eclipse.pde.internal.ui.util.SWTUtil
를 이용하면 된다. SWTUtil 이름으로 된 클래스는 한 두개가 아니라서 fullyQualifiedName으로 알아두지 않으면 종종 귀찮은 일이 생긴다. SWTUtil.setDialogSize()
를 호출하기 전에 반드시 dialog.create()
먼저 해 줘야 NullPointerException이 발생하지 않는 다는 것도 알아두기 바란다.
dialog.create();
SWTUtil.setDialogSize(dialog, 600, 400);
Resources:
http://blog.cypal-solutions.com/2008/07/selection-dialogs-in-eclipse.html
댓글 없음:
댓글 쓰기