selectionChanged () из IActionDelegate в не вызывается - PullRequest
4 голосов
/ 18 февраля 2010

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

Но когда я начинаю свое затмениеи щелкните файл контекстного меню, этот метод не вызывается.
И когда я нажимаю на какое-либо действие, после любого щелчка по файлу вызывается метод selectionChanged().

Какя могу сделать так, чтобы метод selectionChanged() вызывался всегда при щелчке файлов в затмении, чтобы отключить действия перед щелчком по действию?

Ответы [ 2 ]

1 голос
/ 18 февраля 2010

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

http://web.archive.org/web/20120503153234/http://img522.i_mageshack.us/img522/448/eclipseinactivecommand.png

Это означает, что вы можете проверить, как org.eclipse.jdt.internal.ui.packageview.PackageExplorerPart управляет своим собственным контекстным меню и связанными с ним действиями.

Начните с метода menuAboutToShow(), используя класс PackageExplorerActionGroup, включая CCPActionGroup, который умеет копировать, вырезать и вставлять действия .
Последний класс неграмотно регистрирует действия, в том числе CopyToClipboardAction:
Он реализует selectionChanged метод .

public void selectionChanged(IStructuredSelection  selection) {
 try {
   List JavaDoc elements= selection.toList();
   IResource[] resources= ReorgUtils.getResources(elements);
   IJavaElement[] javaElements= ReorgUtils.getJavaElements(elements);
   if (elements.size() != resources.length + javaElements.length)
    setEnabled(false);
      else
    setEnabled(canEnable(resources, javaElements));
  } catch (JavaModelException e) {
   //no ui here - this happens on selection changes
   // http://bugs.eclipse.org/bugs/show_bug.cgi?id=19253
   if (JavaModelUtil.isExceptionToBeLogged(e))
     JavaPlugin.log(e);
   setEnabled(false);
  }
}
0 голосов
/ 13 июля 2010

Кажется, вы "страдаете" от ленивой загрузки Eclipse-плагина (как и я).Вы можете проверить книгу плагинов Eclipse или руководство для всплывающих окон (которые, я полагаю, вы используете).Вы должны использовать так называемый декларативный механизм для включения вашего элемента.В вашем случае это должно быть так же просто, как просто добавить nameFilter.Таким образом, Eclipse может избежать загрузки вашего плагина, пока он действительно не будет запущен (развязка пунктов меню и выполнение плагина).

...