2010-02-21 12 views
2

J'extension Eclipse en utilisant l'infrastructure de plug-in Eclipse, et je suis venu un problème:ajout/suppression des actions barre d'outils lorsque l'éditeur a le focus

J'ai créé un éditeur de texte et je voudrais ajouter des actions au Barre d'outils Eclipse lorsque mon éditeur est ouvert et a un focus. Par exemple:

textViewer.getTextWidget().addFocusListener(new FocusListener(){ 
public void focusGained(FocusEvent e) { 
    /* add actions */   
} 

public void focusLost(FocusEvent e) { 
/* remove actions */   
} 

});

L'exemple suivant de extensionPoint: ActionSet, ajouter le bouton d'action à la barre d'outils en permanence:

<action 
class="MyActionClass" 
id="MyActionID" 
label="MyActionLabel" 
menubarPath="MyActionMenuBarPath" 
toolbarPath="MyActionToolBarPath" <-- this property 
    ... 
</action> 

comment faire cette dynamique?

Répondre

1

Vous pouvez consulter l'implémentation Eclipse de mises à jour de barre d'outils dynamiques similaires. Par exemple, Breadcrumb bare ne peut être activé que pour Java Editor, et le bouton «Toggle Breadcrumb» de la barre d'outils ne sera pas visible pour les autres types d'éditeurs.

alt text http://img109.imageshack.us/img109/359/eclipsetoolbarupdate.png

C'est un ToggleBreadcrumbAction, a déclaré dans plugin.xml comme

<actionSet 
     label="%javaEditorPresentationActionSet.label" 
     visible="false" 
     id="org.eclipse.jdt.ui.text.java.actionSet.presentation"> 
    <action 
      allowLabelUpdate="true" 
      style="toggle" 
      toolbarPath="org.eclipse.ui.edit.text.actionSet.presentation/Presentation" 
      id="org.eclipse.jdt.ui.edit.text.java.toggleMarkOccurrences" 
      definitionId="org.eclipse.jdt.ui.edit.text.java.toggleMarkOccurrences" 
      disabledIcon="$nl$/icons/full/dtool16/mark_occurrences.gif" 
      icon="$nl$/icons/full/etool16/mark_occurrences.gif" 
      helpContextId="toggle_mark_occurrences_action_context" 
      label="%toggleMarkOccurrences.label" 
      retarget="true" 
      tooltip="%toggleMarkOccurrences.tooltip"> 
    </action> 
    <action 
      allowLabelUpdate="true" 
      style="toggle" 
      toolbarPath="org.eclipse.ui.edit.text.actionSet.presentation/Presentation" 
      id="org.eclipse.jdt.ui.edit.text.java.toggleBreadcrumb" 
      definitionId="org.eclipse.jdt.ui.edit.text.java.toggleBreadcrumb" 
      disabledIcon="$nl$/icons/full/dtool16/toggle_breadcrumb.gif" 
      icon="$nl$/icons/full/etool16/toggle_breadcrumb.gif" 
      helpContextId="toggle_mini_browser_action_context" 
      label="%toggleBreadcrumb.label" 
      retarget="true" 
      tooltip="%toggleBreadcrumb.tooltip"> 
    </action> 
    </actionSet> 

Vous pouvez essayer le même genre de définition.

2

Merci de votre réponse, j'ai trouvé un moyen simple de faire cela, il suffit d'ajouter le point d'extension suivant si les boutons sont ActionSet:

<extension 
    point="org.eclipse.ui.actionSetPartAssociations"> 
    <actionSetPartAssociation 
     targetID="myActionSetId"> 
    <part 
      id="myEditorId"> 
    </part> 
    </actionSetPartAssociation>