Набор действий утилиты readme также определяет действия с изменяемыми целями. Действие остается видимым, пока остается видимым набор действий readme, но только пока панель или редактор, реализующий действие, активны. При использовании наборов действий для указания действий с изменяемыми целями, действия создаются в описании набора действий, а не в коде. Ниже приведен фрагмент определения набора действий утилиты readme:
<extension point = "org.eclipse.ui.actionSets"> <actionSet id="org_eclipse_ui_examples_readmetool_actionSet" label="%ActionSet.name" visible="true"> ... <action id="org_eclipse_ui_examples_readmetool_readmeRetargetAction" menubarPath="window/org_eclipse_ui_examples_readmetool/slot1" toolbarPath="readme" label="%ReadmeRetargetAction.label" tooltip="%ReadmeRetargetAction.tooltip" helpContextId="org.eclipse.ui.examples.readmetool.open_browser_action_context" icon="icons/ctool16/openbrwsr.png" retarget="true"> </action> <action id="org_eclipse_ui_examples_readmetool_readmeRelabelRetargetAction" menubarPath="window/org_eclipse_ui_examples_readmetool/slot1" toolbarPath="readme" label="%ReadmeRelabelRetargetAction.label" tooltip="%ReadmeRelabelRetargetAction.tooltip" helpContextId="org.eclipse.ui.examples.readmetool.open_browser_action_context" icon="icons/ctool16/openbrwsr.png" retarget="true" allowLabelUpdate="true"> </action> ...
Действия с изменяемыми целями задаются с помощью атрибута retarget="true". Это приводит к созданию RetargetAction в наборе действий. Обратите внимание, что действия с изменяемыми целями не указывают реализующий класс, так как каждая панель или редактор в модуле может самостоятельно создать обработчик, реализующий каждое действие. Если allowLabelUpdate имеет значение истина, то вместо этого будет создан LabelRetargetAction .
Действия с изменяемыми целями будут показаны в меню окна, когда набор действий readme будет видимым. Однако они не будут доступны, если редактор утилиты readme или панель Схема не будут активны.

Что должны делать панель и редактор? Как и ранее, клиентская часть похожа на регистрацию обработчика для рабочей среды или действие редактора с изменяемой целью. Указанный в описании ИД действия следует использовать при регистрации обработчика глобальных действий.
ReadmeEditorActionBarContributor выполняет это для редактора. Сначала задаются обработчики для действий.
public ReadmeEditorActionBarContributor() {
...
handler4 = new EditorAction(MessageUtil.getString("Editor_Action4"));
handler5 = new EditorAction(MessageUtil.getString("Editor_Action5"));
handler5.setToolTipText(MessageUtil.getString("Readme_Editor_Action5"));
...
}
Обработчики регистрируются одновременно с регистрацией обработчиков действий редактора с изменяемыми целями.
public void init(IActionBars bars, IWorkbenchPage page) {
...
bars.setGlobalActionHandler(IReadmeConstants.ACTION_SET_RETARGET4, handler4);
bars.setGlobalActionHandler(IReadmeConstants.ACTION_SET_LABELRETARGET5, handler5);
...
}
Вспомните, что дополняющие классы панели действий являются общими для различных экземпляров одного редактора. Это означает, что обработчики должны быть уведомлены, если активный редактор для ReadmeEditorActionBarContributor был изменен.
public void setActiveEditor(IEditorPart editor) {
...
handler4.setActiveEditor(editor);
handler5.setActiveEditor(editor);
...
}
Для редактора больше ничего не требуется. При активации редактора эти действия должны становиться доступными.
Обратите внимание, метка для первого действия с изменяемыми целями ("Editor Action 4") не использована, так как в XML набора действий не задан allowLabelUpdate.
ReadmeContentOutlinePage задает свои обработчики там же, где были определены обработчики действий редактора с изменяемыми целями:
public void createControl(Composite parent) {
...
action = new OutlineAction(MessageUtil.getString("Outline_Action4"));
getSite().getActionBars().setGlobalActionHandler(
IReadmeConstants.ACTION_SET_RETARGET4,
action);
action = new OutlineAction(MessageUtil.getString("Outline_Action5"));
action.setToolTipText(MessageUtil.getString("Readme_Outline_Action5"));
getSite().getActionBars().setGlobalActionHandler(
IReadmeConstants.ACTION_SET_LABELRETARGET5,
action);
}
При включении схематичного представления содержимого эти действия с измененными метками должны быть видимыми.
