значки на панели инструментов не будут обновляться автоматически

#java #eclipse #eclipse-plugin

#java #eclipse #eclipse-плагин

Вопрос:

Я разрабатываю продукт Eclipse. Я определил две разные точки зрения: редактировать и отлаживать. На панели инструментов debug perspective я разместил набор кнопок для управления процессом отладки (например, step over, step into и т.д.). Я использовал команду eclipse для реализации логики. Ниже фрагмент pluxin.xml где я объявляю команду панели инструментов.

      <toolbar
           id=".."
           label="Debug navigation command">
        ....
        <command
              commandId="org.eclipse.debug.ui.commands.Terminate"
              disabledIcon="icons/16x16/stop_disabled.ico"
              icon="icons/16x16/stop.ico"
              label="Terminate"
              style="push"
              tooltip="Terminate">
           <visibleWhen
                 checkEnabled="false">
              <with
                    variable="activeWorkbenchWindow.activePerspective">
                 <equals
                       value="org.xvr.xvrengine.perspective.debug">
                 </equals>
              </with>
           </visibleWhen>
        </command>
     </toolbar>
  

Проблема в том, что, хотя все остальные значки, связанные с командой org.eclipse.debug.ui.commands.Завершение обновляется eclipse (активно только тогда, когда процесс выбран в режиме отладки), команда, которую я определяю, не обновляется. Редактор обновляет значок команды, если я меняю перспективу, а затем переключаюсь обратно на перспективу отладки.

Как я могу обновить значок команды? возможно ли использовать значок eclipse по умолчанию? если я оставлю запись «значок» пустой, панель инструментов заполнится меткой command.

Спасибо

Комментарии:

1. Вы говорите, что значок обновлен? Вы имеете в виду включенное / отключенное состояние (которое не имеет ничего общего с опубликованным вами XML)?

2. команда панели инструментов, которую я определил, не обновляется (включена / отключена)

Ответ №1:

Есть 2 места, где вы можете контролировать включенное состояние вашей команды.

  1. в org.eclipse.ui.handlers вы можете связать свой обработчик с вашей командой и предоставить выражение enabledWhen core. Смотрите http://wiki.eclipse.org/Command_Core_Expressions и http://wiki.eclipse.org/Platform_Expression_Framework
  2. Пока ваш обработчик активен, его включенное состояние отражается в команде. Большинство обработчиков относятся к подклассу org.eclipse.core.commands.AbstractHandler. Когда ваш обработчик обновляет свое состояние с помощью org.eclipse.core.commands.AbstractHandler.setBaseEnabled(boolean) , это включенное состояние будет отражено в пользовательском интерфейсе

.

Комментарии:

1. Верно, но проблема в том, что я не определяю новую команду. Я использую тот, который предоставляется платформой отладки: «org.eclipse.debug.ui.commands. Завершить «. Могу ли я связать с ним обработчик?

2. Откуда берутся другие значки (которые обновляются правильно)? Как они вносятся?

3. как в меню «Выполнить», так и в представлении «Отладка», в правом верхнем углу представления. Я думаю, что они должны поступать из org.eclipse.debug.ui

Ответ №2:

Извините, но мне не ясно, чего вы хотите достичь. Если вы хотите создать отладчик, я предлагаю повторно использовать для этого существующую платформу, см.http://eclipse.org/articles/Article-Debugger/how-to.html и http://eclipse.org/articles/Article-Launch-Framework/launch.html

В этом случае вы автоматически получаете значки debug framework, которые обновляются соответствующим образом.

В противном случае вы могли бы проконсультироваться http://blog.eclipse-tips.com/2009/02/commands-part-5-authentication-in-rcp.html для идей динамической обработки команд.

Обновление: Альтернативный ответ: Вы могли бы использовать fireEvent(new DebugEvent(this, DebugEvent.RESUME, detail)); , как описано в конце следующей статьи Eclipse Corner: http://eclipse.org/articles/Article-Debugger/how-to.html

Это описано в части События отладки. Я полагаю, это близко к тому, что вам нужно.

Комментарии:

1. На самом деле я использую существующую платформу отладки. Это добавляет вклад в меню «Выполнить» и позволяет перемещаться по потоку процесса отладки также в режиме отладки. Но я хотел бы добавить те же команды, доступные в правом верхнем углу окна отладки или в меню «Выполнить», также на главной панели инструментов. Добавленные мной команды работают корректно, но их состояние (включить / отключить) не обновляется автоматически. Предлагаемая статья очень интересна, но я не могу понять, как я могу сделать что-то подобное.

2. Если вы создаете свой собственный вклад в меню, его включенное состояние также должно быть определено с использованием основных выражений (включено, когда указано вклад в дереве XML). Если вы уже пробовали этот вариант, то у меня, к сожалению, больше нет идей.

3. Привет, к сожалению, я думаю, что не могу использовать «enableWhen», потому что я не определил команду, я использую ту, которая определена debug framework, в которой, я думаю, уже должно быть поле enableWhen.

4. Я обновил ответ, включив альтернативный подход, используя функцию fireEvent в отладчике, указав, что состояние отладчика изменилось.