2010-01-24 3 views
1

Я расширение Eclipse, используя плагину инфраструктуру Eclipse, и я пришел в проблему:Как отключить мнемонику?

Я создал редактор Eclipse, и я хотел бы, чтобы отключить мнемоническое меню Eclipse, например: ALT + а эквивалентно в меню Поиск. Потому что мне нужны эти комбинации (Alt + ...) в моем редакторе. что делать?

ответ

1

В соответствии с рекомендациями this thread:

создать собственные схемы и добавить сочетания клавиш, необходимые для этого. В файле ини настройки добавьте следующую строку:

org.eclipse.ui/KEY_CONFIGURATION_ID = <your scheme id> 

См Keybindings.

alt text http://www.vogella.de/articles/EclipseCommands/images/keybinding30.gif

в Paul Webster puts it:

Вы можете изменить ярлык в один из 3 способов

  1. создать новую схему без родителя. Затем вы можете определить столько клавиш, сколько хотите, так как вы не увидите никаких привязок по умолчанию.
  2. создать новую схему с родительской схемой по умолчанию. Вы наследуете все привязки по умолчанию, но все, что вы определили в своей схеме, будут иметь приоритет (я думаю :)
  3. создать дочерний контекст вне контекста, содержащего некоторые привязки. Любые ключи, которые вы определяете в своем контексте, будут иметь приоритет над исходным контекстом.

Другим решением, для конкретного ключа обработки событий только для одного SWT компоненты, сохраняя при этом схемы по умолчанию для остального, чтобы добавить прослушиватель (см this thread):

final Listener keyDownFilter = new Listener() 
{ 
    private void postKeyEvent(final int type, final char character, final int keyCode) 
    { 
     final Display display = PlatformUI.getWorkbench().getDisplay(); 
     final Event event = new Event(); 
     event.type = type; 
     event.character = character; 
     event.keyCode = keyCode; 
     display.post(event); 
    } 

    /* (non-Javadoc) 
    * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event) 
    */ 
    public void handleEvent(Event ev) 
    { 
     if (ev.widget == RichText.this.editorControl) 
     { 
      if ((ev.keyCode == SWT.CR || ev.keyCode == SWT.KEYPAD_CR) && (ev.stateMask & SWT.SHIFT) == 0) 
      { 
       ev.doit = false; 
       postKeyEvent(SWT.KeyDown, (char) 0, SWT.SHIFT); 
       postKeyEvent(SWT.KeyDown, ev.character, ev.keyCode); 
       postKeyEvent(SWT.KeyUp, (char) 0, SWT.SHIFT); 
      } 
     } 
    } 
}; 

final Display display = PlatformUI.getWorkbench().getDisplay(); 
display.addFilter(SWT.KeyDown, keyDownFilter); 
this.editorControl.addDisposeListener(new DisposeListener() 
{ 
    /* (non-Javadoc) 
    * @see org.eclipse.swt.events.DisposeListener#widgetDisposed(org.eclipse.swt.events.DisposeEvent) 
    */ 
    public void widgetDisposed(final DisposeEvent ev) 
    { 
     display.removeFilter(SWT.KeyDown, keyDownFilter); 
    } 
}); 
+0

Спасибо за ответ. Я попробовал то, что вы рекомендовали, но это не сработало. Фактически, я уже использую свою схему проректора, когда мой редактор активен (используя IBindigService в FocusListener). В этом случае ярлыки eclipse не работают, но меню «Файл» активируется, когда я нажимаю «ALT + F», например (Alt + a активирует меню поиска), и мне нужны его комбинации (Alt + ...) в моем редакторе, когда они представляют мнемоническое меню Eclipse! – Imen

+0

@Imen: извините, что прочитал это. Надеюсь, вы найдете решение и опубликуете его здесь. Пробовали ли вы опрос детского контекста, чтобы проверить, захватывает ли он некоторые из этих ключевых событий? – VonC

+0

@ VONC: Во-первых, спасибо за интерес, который вы проявили в моей проблеме. Я попытался использовать фильтр, как вы рекомендовали, но проблема в том, что при нажатии ALT мой редактор перехватывает ключ, а также Elipse. поэтому мой редактор теряет фокус, а меню Eclipse активировано (File, Search ..). Я не понимаю ваш вопрос? – Imen

0

схема AN ключи переопределить Alt

<extension 
    point="org.eclipse.ui.bindings"> 
    <scheme 
     id="myscheme" 
     name="My Scheme" 
     parentId="org.eclipse.ui.defaultAcceleratorConfiguration"> 
    </scheme> 
    <key 
     commandId="mycommand" 
     contextId="mycontext" 
     schemeId="myscheme" 
     sequence="Alt+A"> 
    </key> 
    <key 
     commandId="mycommand" 
     contextId="mycontext" 
     schemeId="myscheme" 
     sequence="Alt"> 
    </key> 

команда

<extension 
    point="org.eclipse.ui.commands"> 
    <command 
     id="mycommand" 
     name="My Command"> 
    </command> 

0

Это помогло мне empty.scheme: Поместите на вершине своего IApplication.start()

public Object start(IApplicationContext context) { 
    // set the default shortcuts 
PlatformUI.getPreferenceStore().setDefault(IWorkbenchPreferenceConstants.KEY_CONFIGURATION_ID, "your.scheme"); //$NON-NLS-1$ 
    // start your app 
} 

и у вас будет схема по умолчанию устанавливается на ваш.