Eclipse плагин - редактор, связанный с расширением файла и перспективой - PullRequest
2 голосов
/ 28 июля 2011

Я разрабатываю плагин Tow Eclipse, у меня следующая проблема:

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

Я имею в виду, если я открываю расширение файла .XXX в перспективе 1, он использует редактор A, но если я открываю то же расширение файла .XXX в перспективе 2, он использует редактор B.

это возможно? С тех пор я использовал пусковую установку, но теперь мне нужно больше дифференциации.

Спасибо.

Ответы [ 4 ]

4 голосов
/ 28 июля 2011

(Извините, это один из тех ответов «не делай этого!».))

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

Я бы рекомендовал пойти по пути редакторов манифеста XML / Plug-in Eclipse, дляпример.Вкладки внизу позволяют пользователю выбирать между различными видами, независимо от выбора перспективы или конфигурации.

Eclipse plugin-in manifest editor

2 голосов
/ 26 декабря 2013

Хотя я согласен, что кажется странным, что редактор по умолчанию отличается для одного и того же файла в зависимости от открытой перспективы, вот как вы могли бы это сделать.

  1. Создание двух новых расширений типа контента
  2. Зарегистрируйте свой первый редактор в качестве редактора по умолчанию для 1-го нового типа контента
  3. Зарегистрируйте второй редактор в качестве редактора по умолчанию для второго нового типа контента
  4. Для каждого типа контента у вас есть «описатель типа контента». В этих классах дескрипторов пусть он проверяет страницу активной рабочей среды на предмет текущего идентификатора перспективы и, если он соответствует ожидаемому значению, тогда VALID, если идентификатор перспективы не совпадает, возвращает INVALID.
  5. Для обоих редакторов вам необходимо связать эти редакторы с типом контента, а не с расширением файла или именем файла
  6. Теперь только один тип контента будет соответствовать одновременно, в зависимости от того, какая перспектива открыта. Убедитесь, что один из типов контента является «по умолчанию», поэтому он всегда будет совпадать, если у пользователя открыта какая-то другая перспектива.

В обновление № 1 добавлено несколько примеров

Для этого есть несколько онлайн учебных пособий . Но вот пример кода, чтобы было легче увидеть, какая работа требуется. Вот как вы объявляете свои типы контента (вам понадобится два из них)

<plugin>
   <extension
         point="org.eclipse.core.contenttype.contentTypes">
      <content-type
            base-type="org.eclipse.core.runtime.xml"
            describer="com.liferay.ide.core.FirstContentTypeDescriber"
            id="com.liferay.ide.core.contentType1"
            name="First Content Type"
            priority="normal">
      </content-type>
   </extension>
</plugin>

Тогда в классе Describer вы выполняете логику сопоставления. Затем в точке расширения редактора вы ссылаетесь на тип содержимого вместо имени файла или расширения, например:

   <extension
         point="org.eclipse.ui.editors">
      <editor
            class="com.liferay.ide.ui.FirstEditor"
            default="false"
            id="com.liferay.ide.ui.editor1"
            name="My First Editor">
         <contentTypeBinding
               contentTypeId="com.liferay.ide.core.firstContentType">
         </contentTypeBinding>
      </editor>
   </extension>
1 голос
/ 28 июля 2011

Я бы порекомендовал переосмыслить ваш подход и взять некоторые подсказки от WindowBuilder: иметь один редактор, связанный с типом файла, который открывает редактор с вкладками;если добавлен второй плагин, создайте отдельную вкладку в том же редакторе.

0 голосов
/ 26 декабря 2013

Другим вариантом может быть программное изменение ассоциации типа файла с кодом Java, показанным в

Eclipse RCP: программно связать тип файла с редактором?

Тогда остается только вопрос, как выполнить этот код в случае изменения перспективы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...