Eclipse RCP를 개발하면서 Target을 3.6 이하 버전으로 사용하다가 3.7 이후 버전을 사용하도록 변경한다면 화면 상단 툴바에 Quick Access가 무조건 나타나면서 원치 않는 UI를 노출 시키는 문제가 발생합니다.  


Quick Access 노출을 조정할 수 있는 액션이나 메뉴가 없는 상태입니다. 4.4 버전부터는 만든다는 것 같지만 현재까진 해결책이 없네요.



Quick Access를 없애기 위한 해결책을 보도록 하겠습니다. 


1. 자신의 RCP에 plugin.xml에서 다음 패키지 의존성을 추가한다.

    • org.eclipse.e4.ui.model.workbench


2. ApplicationWorkbenchWindowAdvisor.java 파일에 다음 코드를 추가한다.

package com.billy.snippet.quickaccess;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.e4.ui.model.application.ui.basic.MTrimBar;
import org.eclipse.e4.ui.model.application.ui.basic.MTrimElement;
import org.eclipse.swt.graphics.Point;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.application.ActionBarAdvisor;
import org.eclipse.ui.application.IActionBarConfigurer;
import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
import org.eclipse.ui.application.WorkbenchWindowAdvisor;
import org.eclipse.ui.internal.WorkbenchWindow;
import org.eclipse.ui.progress.UIJob;

public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {

    public ApplicationWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
        super(configurer);
    }

    public ActionBarAdvisor createActionBarAdvisor(IActionBarConfigurer configurer) {
        return new ApplicationActionBarAdvisor(configurer);
    }
    
    public void preWindowOpen() {
        IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
        configurer.setInitialSize(new Point(600, 400));
        configurer.setShowCoolBar(true);
        configurer.setShowStatusLine(false);

        // This code
        hideQuickAccess();
    }

	private void hideQuickAccess() {
		UIJob job = new UIJob("Hide quick access") {
			@Override
			public IStatus runInUIThread(IProgressMonitor monitor) {
				IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
				if (window instanceof WorkbenchWindow) {
					MTrimBar topTrim = ((WorkbenchWindow) window).getTopTrim();
					for (MTrimElement element : topTrim.getChildren()) {
						if ("SearchField".equals(element.getElementId())) {
							element.setVisible(false);
							element.setToBeRendered(false);;
							break;
						}
					}
				}
				return Status.OK_STATUS;
			}
		};
		
		job.schedule();
	}
    
}


아래와 같이 Quick Access가 없어진 것을 보실 수 있습니다.



샘플 프로젝트 코드는 아래에서 받으면 됩니다.

removeQuickAccess.zip


Tip


Quick Access를 지우니, Toolbar layout이 흐트러 질때는 다음을 확인합니다.

    • 기여한 Toolbar action이 'main'에 추가되었나요?


protected void fillCoolBar(ICoolBarManager coolBar) {
	IToolBarManager toolbar = new ToolBarManager(SWT.FLAT | SWT.RIGHT);
	coolBar.add(new ToolBarContributionItem(toolbar, "main"));   // main
        //coolBar.add(toolbar);
	toolbar.add(openViewAction);
	toolbar.add(messagePopupAction);
}


위와 같이 main이 아닌 Toolbar를 단순히 coolBar에 추가하게 되면, Layout이 흐트러집니다. 


Posted by 빌리 :

Eclipse 플랫폼을 이용하여 Eclipse Plug-in 개발시 Command를 직접 호출할 경우가 생기는데 코드 상에서 어떻게 호출 할 수 있는지 설명한다. 

코드는 간단하다. 단순히 Workbench 객체에서 관련 Service 참조 객체를 얻어온 다음 메소드로 실행 시키면 된다.


private void sampleCode() {
	IHandlerService handlerService = 
                   (IHandlerService) getSite.getService(IHandlerService.class);
	try {
		handlerService.executeCommand("Command ID", null);
	} catch (ExecutionException e) {
		e.printStackTrace();
	} catch (NotDefinedException e) {
		e.printStackTrace();
	} catch (NotEnabledException e) {
		e.printStackTrace();
	} catch (NotHandledException e) {
		e.printStackTrace();
	}
}


  • 참고 사이트

http://wiki.eclipse.org/Platform_Command_Framework


Posted by 빌리 :