Действия основной панели инструментов Eclipse Kepler RCP

Google является моим лучшим другом, но информация, которую я получаю, слишком разрознена и очень неясна. Нет краткого учебника, описывающего мои потребности.

Я хочу добавить действия на главную панель инструментов моего RCP-приложения, но мне нужно подробно объяснить все способы сделать это. Но так как это StackOverflow, я буду записывать вопросы, которые приходят мне в голову, и надеюсь, что ответы подойдут.

  • Каков новый и старый способ добавления действий? Через ActionBarAdvisor или через plugin.xml?

  • Можно ли добавлять действия на главную панель инструментов ТОЛЬКО с помощью plugin.xml?

  • Сколько шагов нужно, чтобы добавить действие через расширения? (handlers, commands, menuContribution и т. д.)

  • Какой родитель лучше всего подходит для реализации действия? org.eclipse.jface.action.Action? org.eclipse.ui.menus.WorkbenchWindowControlContribution? Или даже org.eclipse.ui.commands.AbstractHandler?

  • Как насчет действий, специфичных для рабочей среды (Сохранить, Отменить, Повторить и т. д.)? Как они добавляются?

  • В Eclipse Kepler IDE кулбар выглядит красиво. Вы даже можете перемещать панели инструментов. Как это реализовано? Не удалось выяснить даже с помощью Plug-in Spy.

  • Поскольку у меня есть несколько Perspective, каждый из них будет иметь свой собственный вклад в главную панель инструментов. Значит ли это, что я обязан везде использовать расширения plugin.xml?


TL;DR: действия панели охлаждения Workbench, включая Сохранить и действия из других Perspectives. Как? (расширения actionSets == устарели).


person GGrec    schedule 25.10.2013    source источник


Ответы (1)


Действительно новый способ — использовать чистый e4 RCP, который использует новую модель приложения с командами и обработчиками! (но e4 не поддерживает большую часть существующего кода). В e4 меню и панели инструментов определяются в модели приложения. Команды и обработчики используются аналогично традиционному коду (но обработчики реализованы иначе).

Для стиля Eclipse 3, как вы обнаружили, есть беспорядок или способы делать вещи. Eclipse 4.3 не поддерживает некоторые из самых старых (и теперь они помечены в plugin.xml).

Если вы пишете RCP, который использует свой собственный ActionBarAdvisor, вы можете определить свои элементы панели инструментов там. Или вы можете определить их в plugin.xml для отдельных плагинов. Оба метода хороши. Сам Eclipse определяет основные действия в советнике, а дополнительные плагины определяют в их plugin.xmls.

Такие действия, как Сохранить, которые должны обрабатываться несколькими частями (например, редакторами), должны создаваться в советнике и использовать RetargetAction. Это позволяет каждой отдельной части связать свое собственное действие с глобально определенным действием. Это также можно сделать с помощью commands и нескольких handlers, которые ближе к стилю e4.

org.eclipse.ui.menus теперь является основной точкой расширения для добавления в меню и панели инструментов (игнорируя все устаревшие части). Это в значительной степени заставляет вас использовать commands и handlers.

Советник панели действий Eclipse — org.eclipse.ui.internal.ide.WorkbenchActionBuilder, который может помочь, хотя он большой.

Я думаю, что кулбар в Kepler построен с использованием новой модели приложения e4 со стилями с использованием хитрого CSS.

person greg-449    schedule 25.10.2013
comment
Миграция всего приложения на чистый e4 не стоит того, так как это займет немного времени. В настоящее время он использует устаревшие actionSets, viewActions и другие старые вещи, что приводит к действительно раздражающим визуальным ошибкам, особенно в Windows (немного меньше в OSX). Что вы думаете о расширении org.eclipse.ui.menus? Является ли это удобной заменой вышеперечисленному? Учитывая ваш опыт e4. - person GGrec; 26.10.2013
comment
Переход на чистый e4 сложен, особенно если вы используете какие-либо org.eclipse.ui.xx плагины или что-либо, зависящее от IWorkbench. Только действительно полезно для нового приложения (или, как и у меня, у вас много свободного времени). - person greg-449; 26.10.2013
comment
Снова тобой спасен. :-) Спасибо. - person GGrec; 26.10.2013