2013-02-13 1 views
1

Я хочу, чтобы программно установить плагин действия (кнопка) Eclipse, такие, как это здесь:Можно ли запрограммировать кнопку Eclipse RCP как 'checked'?

enter image description here

Например, если пользователь нажимает ее, я не хочу, чтобы переключиться от при определенных условиях.

Этот код здесь создает действие (кнопка):

class MyAction extends Action { 
    public MyAction() { 
     super(NAME, IAction.AS_CHECK_BOX); 
    } 

    ... 
    Thread.sleep(100); wait a little bit incase there is a thread update issue 
    if (condition) 
     setChecked(true); // does not work, it does not force the button to appear as depressed. It just keeps toggling. 
    ... 
} 

По какой-то причине setChecked (правда) не работает.

+0

В общем, setChecked должен это сделать. Выполняется ли этот кусок кода, когда вы получаете свойствоChanged для этого действия? – sharakan

+0

@sharakan: Да, я вижу инструкцию sysout. Я также несколько раз нажал на него, я ошибался, о том, что было вкл/выкл. Я проверю его еще раз. – Zombies

+1

На самом деле, я действительно спрашивал, где живет этот код проверки условий. Внутри 'Action.run()'? 'IPropertyChangeListener.propertyChange()'? – sharakan

ответ

0

Проблема в том, что я считаю, что вы звоните setChecked внутри Action.run(). Поскольку одно из эффектов щелчка на флажке - проверить его, вы скрытно пытаетесь отменить действие во время его действия. На самом деле, я уверен, что набор кода фрейма проверен на true после того, как Action.run() вернется, так что он топает на вашем изменении.

Action имеет способ дать вам контроль над этим более определенным образом. Вместо того, чтобы выполнять .run(), используйте .runWithEvent(Event). Эта функция передается в объекте Event, который вы можете использовать для более тонкого управления.

В этом случае, я думаю, вы хотите установить Event.doit на false. Из документов:

Установка этого поля в значение false приведет к отмене операции.

Другой вариант

В зависимости от того, как вычисляется ваше состояние, вы можете превентивно включить/отключить опцию, когда она меняется. Таким образом, вы также можете предотвратить всплывающую подсказку или подобное объяснение, почему она отключена.

Смежные вопросы