조리법:RCP에서 UI 요소 숨기기

위클립스
이동: 둘러보기, 찾기

목차

[편집] 시작

RCP에서 UI 요소 숨기기 관련 문서는 CODE&ME, Las Vogella, Miles Billsman의 글 에서 참고 하실수 있습니다.

UI 요소를 숨기는 방법은 여러 방법이 있다. perspectiveExtensions(3.5 이상 지원) 확장점, activities(3.x 이상) 확장점, ActiveManager 클래스 등 그 중에 activities 확장점을 이용한 방법을 설명 하겠다.

[편집] org.eclipse.ui.activities

먼저 플러그인 프로젝트에서 plugin.xml을 열어 확장점 탭에 간다. 확장점 탭에 org.eclipse.ui.activities 를 추가 한다.

여기에서 org.eclipse.ui.activities 확장점은 아래와 같다.

org.eclipse.ui.activities 사용자의 행동에 기반하여 활용 가능한 옵션의 수 줄이기

참조 - 자바 개발자를 위한 이클립스 바이블 제 2판 (피어슨에듀케이션코리아) p.287~288

[편집] Activity

확장점을 추가 한 후 감출지 보여줄지 하는 시작 노드 Activity 를 추가 하여 아래와 같이 작성했다.

Activities01.png

이제 감출 요소를 지정 할려면 해당 아이템의 id를 알아야 하는데 id를 알아보는 방법은 Alt+Shift+F2(Plug-in Spy)를 누르면 해당 아이콘이나 메뉴의 플러그인 정보를 볼수 있다.

간단하게 External tool 아이콘을 가려보겠다. Activities02.png 위 아이콘을 플러인 스파이를 이용하여 정보 상자를 열어 정의된 아이디를 가져온다. 또는 Plug-in Registry View에서 검색을 하여 해당 플러그인을 찾아 기여된 아이템의 아이디를 찾을 수 있다.

Activities03.png

[편집] actitityPatternBinding

해당 아이디를 알았다면 activityPatternBinding 노드를 추가하여, 이전에 추가한 Activity 아이디와 감출 아이콘의 아이디를 입력합니다.

필드 설명
activityId 지정된 Actitity의 ID
pattern regular expression을 사용하며, 보통 plugin id/ contribution id 로 검색 된다.
isEqualityPattern 이것은 선택적 속성이며, false 이면 문자열을 regular expression 으로 컴파일 합니다. true이면, 직접 비교합니다.

해당 정보를 다 입력 하였다면 아래와 같을 것이다.

Activities04.png

[편집] 결과

확인 하면 아래와 같이 아이콘이 숨겨져 있는 걸 확인 할수 있다.

Activities05.png

[편집] 숨기기 조건

해당 퍼스펙티브나 특정 조건에 의해 숨기기 원한다면 Activity에 (Enabled When)노드를 추가하여 조건을 추가하면 된다.

Core Expression 참조.

조심해야 할 점은 자바 퍼스펙티브 일 경우 라는 조건식을 넣었다면 자바 퍼스펙티브 일때 보이고 다른 퍼스텍티브 일때는 안보인다.


[편집] 아이디가 없는 아이템 숨기기(삭제)

숨길려고 하는 아이템에 아이디가 없는 경우가 발생하기도 한다. 그런 경우 필자는 메뉴의 아이템을 가져와 클래스를 비교 후 제거를 하는 방식으로 해결 했다.

IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
		ApplicationWindow appWin = null;
		if (window instanceof ApplicationWindow) {
			appWin = (ApplicationWindow) window;
		} else {
			return;
		}
		final IMenuManager manager = appWin.getMenuBarManager();
		IMenuManager projectMenu = null;
 
		IContributionItem projectItem = manager.find("project");
 
		if (projectItem == null) {
			return;
		}
		projectMenu = (IMenuManager) projectItem;
 
		IContributionItem removeItem = null;
		IMenuManager buildWorkingSetMenu = null;
		for (IContributionItem eachItem : projectMenu.getItems()) {
			if (eachItem.getId() == null && eachItem instanceof IMenuManager) {
 
				for (IContributionItem menuItem : ((IMenuManager) eachItem).getItems()) {
 
					if (menuItem instanceof ActionContributionItem == false) {
						continue;
					}
 
					removeItem = menuItem;
					buildWorkingSetMenu = (IMenuManager) eachItem;
					break;
				}
			}
		}
 
		if (buildWorkingSetMenu == null || removeItem == null) {
			return;
		}
 
		buildWorkingSetMenu.remove(removeItem);

좀 더 나은 방법이 있다면 알려주었으면 합니다.

이 기사에 대한 의견은 토론 페이지를 통해 나눌 수 있습니다.

개인 도구
이름공간
변수
행위
포탈
탐색
도움
도구모음