본문 바로가기

JAVA/Eclipse plugin

MultiPageEditor Page 위에 중첩 에디터 구현

프로젝트 수행 도중 디자인 설계 에디터 우측에 접었다 폈다하는 텍스트 에디터를 추가해야 하는 필요성이 생겨 중첩된 에디터 구현 해보았다. 

기본적인 아이디어는 MultiPageEditor의 "addPage" 함수를 참조 하였다.


public void addPage(int index, IEditorPart editor, IEditorInput input) 


기본 컨셉은 에디터가 생성되기 위해서는 "IEditorSite" 인스턴스가 필요한데 이는 부모 에디터인MultiPageEditor의 MultiPageEditorSite 클래스를 생성하여 구하고 이를 중첩하여 생성 시킬 에디터의 init(IEditorSite, IEditorInput)에 전달하여 기능을 구현하는 것이다.


▼중첩 에디터 예시

▼중첩 에디터 구현 예시 코드

private void buildSubHtmlEditor(Composite parent)
{
	// 1. html 에디터의 부모 컴포지트 생성
	Composite editorComposite = new Composite(parent, SWT.BORDER);
	editorComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
	editorComposite.setLayout(new FillLayout());
	
	// 2. 중첩하여 생성되는 html에디터 생성 		
	htmlEditor = new HtmlEditor(true);
	
	// 3. html 에디터의 부모 에디터를 활용하여 생성한 IEditorSite객체 생성
	// 이 예에서는 html에디터가 MultiPageEditor위에 생성됨으로 MultiPageEditorSite 클래스를 생성하여 IEditorSite를 얻는다. 
	IEditorSite editorSite = new MultiPageEditorSite(parentEditor, htmlEditor);
	
	try {
		// 4. init()로 html 에디터 초기화 
		// IEditorSite 와 IEditorInput 객체를 전달하여 초기화 
		htmlEditor.init(editorSite, parentEditor.getEditorInput());
	} catch (PartInitException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
		return;
	}
	
	// 5. html 에디터의 부모 컴포지트를 설정한다.
	htmlEditor.createPartControl(editorComposite);		
}