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 빌리 :

ACM 포커 패(Poker Hands)

2013. 8. 20. 17:14

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

문제 및 처리 방법


Vitual Box에서 다음과 같이 네트워크 관련 오류 메시지가 나오고, 네트워크 카드가 하나도 안잡혔을때는 처리 방법을 알아보겠습니다. 

network is unreachable


위와 같에 네트워크 카드를 Vitual Box에서 제대로 설정했음에도 가상 OS에서 네트워크를 잡지 못할 경우(Linux, CentOS 사용시, 다른 Linux에서도 비슷하겠죠?), 다음과 같은 순서로 네트워크 설정을 수정 합니다. 

1. /etc/sysconfig/network-scripts 안에 있는 ifcfg-eth# 파일의 맥주소와 Vitual Box에 설정된 맥주소 확인해 다르면 파일내 맥주소 변경

2. /etc/udev/rules.d/70-persistent-net.rules 삭제 또는 편집

3. Reboot


문제 원인 


네트워크가 이미 설정된 다른 컴퓨터의 Vitual Box  이미지를 복사해 사용할 때 주로 나타나는 증상입니다. 이 경우 원본에서 설정된 네트워크 설정이 자동으로 갱신되지 않기 때문에 발생되는 문제입니다. 가상 네트워크 설정시 맥주소가 변경되는데 맥주소 불일치 발생되는 것을 해결하면 됩니다.

Posted by 빌리 :