2016-06-09 6 views
0

플러그인에서 작업 중입니다. 사용자 정의 마커를 클릭하여 트리거되는 quickfix 메뉴에 몇 가지 추가 정보를 추가하려고합니다.이클립스 플러그인 : quickfix와 함께 대화 상자 열기

MarkerResolutionGenerator.getResolutions()에서 메소드 대화 상자를 추가하여 새 대화 상자 창을 그리지 만 quickfix 대화 상자에 동의하는 데 문제가 있습니다. 같은 시간에 그릴 수 있지만 위치를 제어 할 수 없으며 배경에 여분의 빈 대화 상자가 표시됩니다.

의견이 있으십니까? 아래 관련 코드. 처음 두 메서드는 MarkerResolutionGenerator에서 가져 왔으며 사용자 정의 클래스는 그 아래에 있습니다. (난 그냥 예에서 복사, 나는 내용에 작업하기 전에 행동을 점점 더 걱정입니다.)

@Override 
public IMarkerResolution[] getResolutions(IMarker marker) 
{ 
    IMarker problem = marker; 

    makeStuff(); 
    ... 
} 

private void makeStuff() 
{ 
    Display display = Activator.getDefault().getWorkbench().getDisplay(); 
    Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor() 
      .getSite().getWorkbenchWindow().getShell(); 

    Shell myShell = new Shell(shell, SWT.NO_TRIM); 

    MyDialog md = new MyDialog(myShell); 
    md.open(); 
} 


public class MyDialog extends Dialog 
{ 
    public MyDialog(Shell parentShell) 
    { 
     super(parentShell); 
     setShellStyle(SWT.CLOSE | SWT.MODELESS | SWT.BORDER | SWT.TITLE); 
     setBlockOnOpen(false); 
    } 

    @Override 
    protected Control createDialogArea(Composite parent) 
    { 
     Composite container = (Composite) super.createDialogArea(parent); 
     Button button = new Button(container, SWT.PUSH); 
     button.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false)); 
     button.setText("Press me"); 
     button.addSelectionListener(new SelectionAdapter() { 
      @Override 
      public void widgetSelected(SelectionEvent e) { 
       System.out.println("Pressed"); 
      } 
     }); 

     return container; 
    } 
    ... 
} 
+0

'Dialog' 그래서 당신'myShell'가 필요하지 않은 자신의 쉘 만듭니다. –

답변

0

당신이 정말로 다른 Shell를 작성해야합니까? 대화 상자의 부모 역할을 이미 사용하지 않는 이유는 무엇입니까? 이것은 "배경에 여분의 빈 대화 상자"가있는 이유 일 수 있습니다.

당신은 사용자 정의 대화 상자에서 getInitialLocation를 오버라이드 (override) 초기 위치를 설정 할 수 있어야한다 :

@Override 
protected Point getInitialLocation(Point initialSize) { 
    return new Point(10, 10); // x and y coordinates of the initial position 
} 
+0

저도 꽤 가까워졌습니다.하지만 쉘 추가가 필요하다고 생각한 이유는 활성 쉘을 사용하면 quickfix 대화 상자가 표시되지 않기 때문입니다. 빠르게 깜박 인 다음 사라져 사용자 정의 대화 상자를 나갑니다. – fang273

+0

myShell을'myShell.open()'과 함께 열면 여분의 빈 대화 상자가 생기므로 그렇게하지 않는지 확인하십시오. 문제가 재현 될 수 있도록 [MCVE] (http://stackoverflow.com/help/mcve)를 만들려고 계속 문제가 발생하는 경우 –

+0

의견을 보내 주셔서 감사합니다. myShell을 제거했지만 문제가 생겼습니다. 내가 위에 설명했다. 나는 MCVE를 만들려고 노력할 수 있지만, 내가 코드 작성을 위해 협력하고있는 사람으로부터 허가를 얻어야 할 것이다. 직계 호출자가 내부 클래스이기 때문에 내가 게시 한 코드가 이해되기를 바랍니다. – fang273