У меня странная проблема с командами меню.
Я хочу сделать команду меню, которая активна в одних условиях, но неактивна в других (например, команда закрытия активна, когда конкретный объект открыт, но неактивна, когда такого объекта нет)
Я испробовал две стратегии:
переопределяет метод обработчика isEnabled()
, чтобы содержать логику, которая должна сообщать ему, активна ли команда или нет
расширение AbstractSourceProvider
, которое слушает состояние и изменяет предоставленную переменную.
В обоих подходах код работает нормально, вклад в меню активируется и деактивируется. Однако, и это проблема, она делает это, только если я переключаюсь на другое приложение (alt tab на что-то другое) и переключаю обратно. Если этого не сделать, только команда становится неактивной, но вклад в меню по-прежнему показывает ее как активную, в результате чего NotEnabledException
.
Точка расширения SourceProviderApproach
выглядит примерно так:
<extension
point="org.eclipse.ui.menus">
<menuContribution
locationURI="menu:org.eclipse.ui.main.menu?before=window">
<menu
label="File">
<command
commandId="profile.close"
label="Close"
style="push">
<activeWhen
checkEnabled="false">
<with
variable="profile.gui.ActiveProfile">
<equals
value="active">
</equals>
</with>
</activeWhen>
</command>
</menuContribution>
</extension>
Если я изменю его на validWhen
, все в порядке, команда отображается и скрывается соответственно. Но если я переключу его на activeWhen
, то появится описанная выше ситуация, я должен переключиться на другое приложение и вернуться, чтобы вклад этого меню был активным или неактивным.
Я также потратил 4 часа на отладку кода Eclipse, пытаясь определить проблему, но ничего не смог найти.
Кто-то еще сталкивался с этим и нашел обходной путь?
Спасибо,
Михай