2017-11-09 3 views
3

SWTBot을 사용하여 비 -e4 RCP 응용 프로그램을 테스트 중이므로 내보기 크기를 변경해야합니다. 나는 실패프로그래밍 방식으로 Eclipse에서보기 크기 조정

  • 이클립스 3 API (NO 지원)
  • 내보기의 크기를 조정하여 내보기 크기 조정 (이러한 API) SWTBot를 사용하지 않고 내보기의 크기를 조정하려고

    (띠 바 이동) 기본 e4 모델 사용 (크기 조정 작동하지 않음)

e4 모델 솔기가 유망하지만 예상하지 못했지만 작동하지 않습니다.

내가 할 수

  • 내보기의 MPart 받기 : view = ePartService.findPart(ID)
  • 받기 MTrimmedWindow : window = (view as EObject).eContainer as MTrimmedWindow

내가 할 수없는

  • 로케일 올바른 MPartSashContainer
  • 이동 띠 -바 setContainerData()

와 나는 직접적인 부모 MPart 이동할 수있는 방법

  • 을 알고 싶습니다 (예를 들어, MPartStack)
  • eContainer()와 같은 일반적인 EObject 메소드가 M ... 객체에없는 이유는 무엇입니까?
+0

'MPart' (다른 모든'MUIElement' 객체) 당신에게 즉시 부모를주는'의 getParent() '메소드가 있습니다. –

+0

불행히도 내 "보기"MPart에 대해 null을 반환합니다. ( –

+0

아직 컨테이너에 추가되지 않았습니다 ** 항상 ** 표시되는 부분에 대한 부모를 반환합니다 –

답변

1

좋아, 해결책을 찾았습니다.

보기가 e4 UI 트리의 일부가 아닙니다. view.eContainer은 직접 MWindow입니다. 올바른 지점에 배치하기 위해 뷰는에 연결됩니다. 즉, e4 UI 트리의 일부이며 getParent() != null입니다. 뷰의 크기를 조정하기 위해

단계는 다음과 같습니다

  • 쇼보기
  • MPartStack을 찾아보기 MPlaceholder을 찾아`
  • 다시 그리기 위젯
  • containerData을 설정 객체 MPartSashContainer' (예,이 경우 작동하지 않는 솔기 자동 업데이트)

예 :

EModelService modelService = PlatformUI.getWorkbench().getService(EModelService.class); 
EPartService partService = PlatformUI.getWorkbench().getService(EPartService.class); 

// Show view 
IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); 
page.showView(MyView.ID, null, IWorkbenchPage.VIEW_ACTIVATE); 

MPart view = partService.findPart(MyView.ID); 
// view.getParent() => null, because 'view' is not a part of the e4 UI-model! 
// It is connected to the Model using MPlaceholder 

// Let's find the placeholder 
MWindow window = (MWindow)(((EObject)eView).eContainer); 
MPlaceholder placeholder = modelService.findPlaceholderFor(window, view); 

MUIElement element = placeholder; 
MPartStack partStack = null; 
while (element != null) { 
    // This may not suite your configuration of views/stacks/sashes 
    if (element instanceof MPartStack && ((Object)element.parent) instanceof MPartSashContainer) { 
      partStack = (MPartStack)element; 
      break; 
     } 
     element = element.parent; 
    } 
} 
if (partStack == null) { /* handle error */ } 

// Now let's change the width weights 
for (MUIElement element : partStack.getParent().getChildren()) { 
    if (element == partStack) { 
     element.setContainerData("50"); // Width for my view 
    } else { 
     element.setContainerData("25"); // Widths for other views & editors 
    } 
} 

// Surprisingly I had to redraw tho UI manually 
// There is for sure a better way to do it. Here is my (quick & very dirty): 
partStack.toBeRendered = false 
partStack.toBeRendered = true 
관련 문제