2013-11-02 2 views
0

Я разрабатываю простой плагин Eclipse. Я добавил всплывающее окно в качестве расширения и присвоил ему класс Action. Все работает отлично, за исключением отключения действия в первый раз, когда всплывающее окно открыто.Eclipse plug-in popup-action начальная доступность

Я проверяю, может ли действие быть выполнено в методе selectionChanged. Но он не может быть вызван до создания объекта MyAction. Он выполняется только после нажатия кнопки меню (он должен быть отключен, если предварительные условия не заполнены).

Как справиться с такой проблемой? Как MyAction может быть сконструирован до открытия всплывающего окна?

прилагает образец существенного кода в моем проекте (plugin.xml, MyAction.java):

<plugin> 
    <extension 
     point="org.eclipse.ui.popupMenus"> 
     <objectContribution 
      id="action.contribution1" 
      objectClass="myobject"> 
     <menu 
      id="action.menu1" 
      label="Menu" 
      path="additions"> 
     </menu> 
     <actionm 
       class="action.popup.actions.MyAction" 
       enablesFor="1" 
       id="action.newAction" 
       label="Play" 
       menubarPath="action.menu1"> 
     </action> 
     </objectContribution> 
    </extension> 
</plugin> 
public class MyAction implements IObjectActionDelegate { 
    public MyAction() { 
     super(); 
    } 

    public void setActivePart(IAction action, IWorkbenchPart targetPart) {} 

    public void run(IAction action) { 
     //some logic 
    } 

    @Override 
    public void selectionChanged(IAction action, ISelection selection) { 
     boolean enabled = false; 

     //some logic concerning enabled variable 

     action.setEnabled(enabled); 
    } 

} 

ответ

1

setActivePart должен вызываться до меню отображаются. Вы можете установить в нем действие.

Вы можете указать начальные ВОЗМОЖНОСТИ действия с использованием <enablement> элемента в plugin.xml, например:

<action 
    class="action.popup.actions.MyAction" 
    enablesFor="1" 
    id="action.newAction" 
    label="Play" 
    menubarPath="action.menu1"> 
    <enablement> 
     <with variable="selection"> 
      ... tests 
     </with> 
    </enablement> 
</action> 

наборы ВОЗМОЖНОСТЕЙ пути тестирования текущего выбора.

Примечание: Точка расширения org.eclipse.ui.popupMenus теперь устарела, вы должны посмотреть, чтобы перейти на удлинитель org.eclipse.ui.menus.

+0

Это правда, но это не влияет на первый раз, когда вызывается действие. Действие не создается, пока я не нажму на связанное меню - setActivePart не вызывается в первый раз. Поэтому я не могу выполнить первую проверку и установить включение в объекте MyAction. – Zacateras

+0

Added details of element –