2016-06-09 9 views
0

Ich arbeite an einem Plugin und versuche, einige zusätzliche Informationen rund um das Quickfix-Menü hinzuzufügen, das durch Klicken auf meine benutzerdefinierten Markierungen ausgelöst wird.Eclipse Plugin: Eröffnungsdialoge neben Quickfix

Ich füge einen Methodenaufruf in MarkerResolutionGenerator.getResolutions(), um das neue Dialogfenster zu zeichnen, aber ich habe Schwierigkeiten, es mit dem Quickfix-Dialog zu vereinbaren. Ich kann es zur gleichen Zeit zeichnen, aber ich kann die Position nicht kontrollieren und es zieht auch einen zusätzlichen leeren Dialog im Hintergrund.

Irgendwelche Gedanken? Relevanter Code unten. Die ersten beiden Methoden stammen von meinem MarkerResolutionGenerator und meine benutzerdefinierte Klasse liegt darunter. (Ich kann es nur aus einem Beispiel kopiert, ich mache mir mehr Sorgen darum, es zu verhalten, bevor ich auf den Inhalt zu arbeiten.)

@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' seine eigene Schale schafft so Ihre' myShell' nicht benötigt wird. –

Antwort

0

Haben Sie wirklich einen anderen Shell erstellen müssen? Warum verwenden Sie nicht einfach die, die Sie bereits als Eltern für Ihren Dialog haben? Dies könnte der Grund für den "extra leeren Dialog im Hintergrund" sein.

Sie sollten die Ausgangsposition überschrieben getInitialLocation in Ihrem benutzerdefinierten Dialog festlegen, um:

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

Das bringt mich ziemlich nah, aber der Grund, warum ich dachte, ich brauche eine zusätzliche Shell, war, weil wenn ich die aktive Shell verwende, der Quickfix-Dialog nicht sichtbar bleibt. Es blinkt schnell, dann geht er weg und verlässt den benutzerdefinierten Dialog. – fang273

+0

Wenn Sie myShell mit 'myShell.open()' öffnen, haben Sie den zusätzlichen leeren Dialog, also stellen Sie sicher, dass Sie das nicht tun. Wenn Sie immer noch Probleme haben, versuchen Sie einen [MCVE] (http://stackoverflow.com/help/mcve) zu erstellen, damit wir das Problem reproduzieren können –

+0

Danke für den Kommentar, ich habe myShell herausgezogen, aber ich habe jetzt das Problem das habe ich oben beschrieben. Ich kann versuchen, einen MCVE zu erstellen, aber ich müsste die Erlaubnis von jemandem bekommen, mit dem ich zusammenarbeite, um ihren Code zu veröffentlichen. Hoffentlich macht der Code, den ich gepostet habe, Sinn, da der unmittelbare Anrufer eine interne Klasse ist. – fang273