2009-06-23 9 views
4

Ich erweitere Eclipse-Plattform mit meiner eigenen Sicht. Diese Ansicht enthält eine Aktion in ihrer Symbolleiste.Eclipse Key Bindings Konflikte

Ich möchte eine Tastenkombination Verknüpfung zu Ctrl +R für diese Aktionen verbunden erstellen. Dazu habe ich einen my.context (mein Kontext erweitert den Kontext org.eclipse.ui.window), my.command und eine Erweiterung von my.command.binding erstellt.

Dann, wenn meine Ansicht erstellt wird, in der create (*) Methode, aktiviere ich meinen Kontext:

IContextService contextService = (IContextService) getSite() 
    .getService(IContextService.class); 
contextService.activateContext(VIEW_CONTEXT_ID); 

Wenn meine Ansicht in einer Debug-Perspektive geöffnet wird, ich die folgende Warnung habe:

Warning: A conflict occurred for CTRL+R: 
    Binding(CTRL+R, 
    ParameterizedCommand(Command(org.eclipse.debug.ui.commands.RunToLine,Run to Line, 
    Resume and break when execution reaches the current line, 
    Category(org.eclipse.debug.ui.category.run,Run/Debug,Run/Debug command category,true), 
ActionDelegateHandlerProxy(null,org.eclipse.debug.internal.ui.actions.RetargetRunToLineAction), 
    ,,true),null), 
    org.eclipse.ui.defaultAcceleratorConfiguration, 
    org.eclipse.debug.ui.debugging,,,system) 
    Binding(CTRL+R, 
    ParameterizedCommand(Command(RestoreAction,Restore Chart (T-Charts), 
    Restore the initial chart display, 
    Category(TChartsActions,T-Charts Actions,null,true), 
    ActionHandler([email protected]), 
    ,,true),null), 
    org.eclipse.ui.defaultAcceleratorConfiguration, 
    com.st.tcharts.ui.view,,,system) 

Ich bin mir nicht sicher zu verstehen, warum ich diese Warnung habe ....

Gibt es mehrere aktive Kontexte zu einer bestimmten Zeit?

Wenn ich meine Verknüpfung zu Ctrl +C zum Beispiel ändern, ich habe nicht diese Warnung aber Ctrl +C wird auch an einem anderen Befehl (Kopie) im debugg Kontext binded .. . Warum ?

ich nicht klar ressources delaing über Eclipse-Kontexte im Web ...

Vielen Dank im Voraus

Manu

+0

Meine Antwort mit ein paar weiteren Ideen aktualisiert. – VonC

+0

Vielen Dank für Ihr Feedback (im Kommentar). Wenn Sie eine Lösung finden, zögern Sie nicht, es hier zu veröffentlichen (und es zur offiziellen Antwort zu machen). Ich werde es upvote;) – VonC

Antwort

2

Ich bin nicht sicher gefunden haben, warum Ihr Kontext Ihre Bindungen nicht isolieren Wenn CTRL+R bereits mit dem Befehl "Run to Line" verknüpft ist, können Sie den Handler einfach durch Ihren ändern, wie in this thread beschrieben:

(Beispiel zur Anpassung an Ihre ca se)

<handler 
     class="test.handlers.DeleteFooHandler" 
     commandId="org.eclipse.ui.edit.delete"> 
    <activeWhen> 
     <iterate 
      ifEmpty="false" 
      operator="and"> 
      <instanceof 
       value="test.model.Foo"> 
      </instanceof> 
     </iterate></activeWhen> 
</handler> 

Hinweis: dieser Ansatz auch durch this thread dargestellt ist:

IHandlerService handlerService = 
    getSite().getService(IHandlerService.class); 


IHandler myPaste = new org.eclipse.core.commands.AbstractHandler() { 
    public Object execute(ExecutionEvent event) throws ExecutionException{ 
    System.out.println("This is MyPaste"); 
    } 
}; 

Jetzt, da es sich nicht erklären, warum Sie Ihre eigenen IContext nicht deaktiviert Eclipse-Bindungen, kann ich nur finden für jetzt this thread, erklären, wenn Ihr Kontext ist oder nicht tatsächlich aktiv:

Wenn Sie ein eigenes Fenster (Dialog oder Shell) öffnen und das Workbench-Fenster nicht aktiv ist, ist auch Ihr Kontext nicht aktiv.
Sie können versuchen, Ihre Fenster-Shell auf type == window zu setzen, das auch IContextService#registerShell(*) ... verwendet, das die Standardfensterkontexte gültig lassen sollte.
Sie müssen den Kontext möglicherweise noch aktivieren, während Ihre SW-Fenster-Shell aktiv ist (mit dem Abgleich wird deaktiviert).

Worauf die OP antwortete:

Ich habe die Lösung davon durch diesen Kontext auf dem Fokus Verstärkung der erforderlichen Fenster zu aktivieren und diesen Kontext auf Fokus deaktivieren verloren und aus dem gleichen Fenster verfügen.

Vielleicht könnte das helfen.
In der Zwischenzeit können Sie unter "Platform Command Framework" nachsehen, um die "Tracing Option" zu aktivieren und genau zu sehen, welche Bindung für welchen Befehl aktiviert ist.

+0

Danke für die Antwort, aber ich denke, dass diese Lösung eine Art "Hack" ist. Wie Sie gesagt haben, was ich will, ist zu haben "mein Kontext isoliert meine Bindungen von der Eklipse" Es sollte funktionieren, aber .... –

+0

Nochmals vielen Dank für diese Ergänzungen. Ich öffne nicht mein eigenes Fenster, also hilft es mir nicht mehr. Mein Kontext ist in meiner Methode view.createPartCOntrol aktiviert und die Ansicht wird programmatisch geöffnet. Ich denke, es ist irgendwo ein Fehler .. In Eclipse oder in meinem eigenen Code ... Ich werde versuchen, mehr zu untersuchen und Sie wissen zu lassen. Nochmals vielen Dank für Ihre Zeit. –