2010-02-21 2 views
2

Я расширения Eclipse, используя плагин инфраструктуры Eclipse, и я пришел в проблему:добавление/удаление панели действий при редактор имеет фокус

Я создал текстовый редактор, и я хотел бы добавить действия к Панель инструментов Eclipse, когда мой редактор открыт и имеет фокус. Например:

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

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

});

Следующий пример extensionPoint: ActionSet, добавить кнопку действия на панели инструментов перманентно:

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

как сделать это динамически?

ответ

1

Вы можете посмотреть реализацию аналогичных динамических панелей инструментов Eclipse.

Например, голова Breadcrumb может быть активирована только для редактора Java, а панель инструментов «Toggle Breadcrumb» не будет видна для других типов редакторов.

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

Это ToggleBreadcrumbAction, объявленный в plugin.xml, как

<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> 

Вы можете попробовать такое же определение.

2

Спасибо за ваш ответ, я нашел простой способ сделать это, просто добавьте следующую точку расширения, если кнопки ActionSet:

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