#java #eclipse #swt #rcp
#java #eclipse #swt #rcp
Вопрос:
Я работаю над приложением rcp с панелью инструментов для быстрого доступа к определенным действиям, включая отмену и повтор. Моя проблема в том, что эти два конкретных действия не отображаются на панели инструментов. Я обнаружил причину в workbench.xmi
файле, который генерируется при запуске приложения. Тег persistedState
с атрибутом key="persp.hiddenItems"
содержится persp.hideToolbarSC:org.eclipse.ui.edit.undo,persp.hideToolbarSC:org.eclipse.ui.edit.redo
в value="..."
атрибуте. Если я удалю эти записи из workbench.xmi
, действия отмены и повтора отображаются на панели инструментов так, как они должны.
Мой вопрос: что я могу сделать, чтобы org.eclipse.ui.edit.undo
и org.eclipse.ui.edit.redo
изначально не попадали в этот атрибут?
Изначально я использовал eclipse neon без этой проблемы, но при обновлении до eclipse 2018-12 это начало происходить.
Редактировать:
Я, наконец, заставил это работать, изменив идентификаторы моих действий отмены и повтора на что-то другое. Мне пришлось установить идентификатор с помощью setId(...)
и setActionDefinedId(...)
в конструкторах действий, а затем команды должны были быть определены в plugin.xml
под <extension point="org.eclipse.ui.commands">
в <command id="..." name="Undo"></command>
теге.
Это решение больше похоже на обходной путь, чем на реальное решение, но оно работает для меня.
Ответ №1:
Это задается hiddenToolBarItem
элементом org.eclipse.ui.perspectiveExtensions
точки расширения.
org.eclipse.ui.ide
Плагин использует это, чтобы отключить эти элементы панели инструментов:
<extension
point="org.eclipse.ui.perspectiveExtensions">
<perspectiveExtension targetID="*">
<!--
disable "print" button which is defined by org.eclipse.ui.actions.ActionFactory.PRINT
and contributed by org.eclipse.ui.internal.ide.WorkbenchActionBuilder
-->
<hiddenToolBarItem id="print" />
<!--
disable "undo" button which is defined by org.eclipse.ui.actions.ActionFactory.UNDO
and contributed by org.eclipse.ui.internal.ide.WorkbenchActionBuilder
-->
<hiddenToolBarItem id="org.eclipse.ui.edit.undo" />
<!--
disable "redo" button which is defined by org.eclipse.ui.actions.ActionFactory.REDO
and contributed by org.eclipse.ui.internal.ide.WorkbenchActionBuilder
-->
<hiddenToolBarItem id="org.eclipse.ui.edit.redo" />
</perspectiveExtension>
</extension>
Я не вижу способа очистить это, кроме как исключить подключаемый модуль.
Комментарии:
1. Похоже, что приложению это необходимо
org.eclipse.ui.ide
, поэтому исключение этого не сработало бы для меня. Еще одна вещь, которую я пробовал, — это присвоить моим действиям отмены и повтора разные идентификаторы, что, похоже, в какой-то степени работает. Проблема в том, что исключения выводятся на консоль. Я обновлю вопрос с помощью этой информации.2. Неважно, я заставил это работать, изменив идентификаторы. Я обновлю свой запрос тем, что я должен был сделать.
Ответ №2:
Я столкнулся с той же проблемой. Отмена / повтор исчезли после обновления до eclipse 2019.
Один из способов переопределить жесткое кодирование в глобальном параметре перспективы org.eclipse.ui.ide — это напрямую изменить состояние перспективы. Например. в ApplicationWorkbenchWindowAdvisor.postWindowOpen()
WorkbenchPage page = (WorkbenchPage) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
String str = page.getCurrentPerspective().getPersistedState().get(ModeledPageLayout.HIDDEN_ITEMS_KEY);
str=str.replace("persp.hideToolbarSC:org.eclipse.ui.edit.undo,", "");
str=str.replace("persp.hideToolbarSC:org.eclipse.ui.edit.redo,", "");
page.getCurrentPerspective().getPersistedState().put(ModeledPageLayout.HIDDEN_ITEMS_KEY,str);