2016-06-22 5 views
0

Для приложения RCP E4 Text Editor, реализованного с помощью StyledText/SourceViewer, необходимо получить статус ключа вставки.Eclipse E4 RCP StyledText получить INSERT KEY state

После получения состояния (вставка, интеллектуальная вставка) приложение должно изменить значок курсора и уведомить другие части о состоянии INSERT (то есть уведомить элемент управления строки состояния, как в обычном режиме обычного текстового редактора).

SWT.INSERT только слушает нажатие клавиши, но ничего, если StyledText находится в режиме INSERT.

styledText.addKeyListener(new KeyAdapter(){ 
    public void keyPressed(KeyEvent e){ 
     if(e.keyCode == SWT.INSERT){ 
      System.out.println("INSERT KEY PRESSED!!!"); 
     } 
    } 
}; 

я избегал продлить

org.eclipse.ui.texteditor.AbstractTextEditor 

и использовать метод

getInsertMode() 

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

Подсказка?

Заранее спасибо

ответ

1

Во-первых, нужно, чтобы сказать StyledText не делать действия по умолчанию, когда он видит Вставить ключ:

textWidget.setKeyBinding(SWT.INSERT, SWT.NULL); 

Далее вам необходимо определить команду, Handler и Key Binding в контексте редактора для работы с клавишей Insert.

Обработчик для команды вставки может обновить отображение состояния и shoyld затем скажите StyledText обновить режим перезаписи:

textWidget.invokeAction(ST.TOGGLE_OVERWRITE); 

Также отметим, что Mac клавиатуры не имеют ключа вставки!

0

Поскольку я нашел некоторые трудности с обработкой INSERT_KEY в элементе управления sourceviewer для текстового редактора E4 RCP, я напишу дополнительные подробности в ответ gregg449 (отличная помощь от него, как и каждый раз!).

Следуя приведенному выше ответу, я создал контекст привязки, таблицу привязки, команду, обработчик и добавил контекст привязки к требуемой части (части, реализующей SourceViewer).

Следующий код предназначен для SourceViewer и InserKey Handler:

public class CheckKeyBindingSourceViewer extends ITextEditorPart{ 

    public SourceViewer sv = null; 
    public StyledText st = null; 

    @PostConstruct 
    public void postConstruct(Composite parent) { 
     sv = new SourceViewer(parent, null, null, true, SWT.MULTI | SWT.V_SCROLL |SWT.H_SCROLL); 
     IDocument doc = new Document(""); 
     sv.setDocument(doc); 
     st = sv.getTextWidget(); 

     //tell the StyledText not to do the default action when it sees the Insert key 
     st.setKeyBinding(SWT.INSERT, SWT.NULL); 
    } 
} 


public class InsertKeyHandler { 
    @Execute 
    public void execute(@Named(IServiceConstants.ACTIVE_PART) MPart activePart) { 
     if (activePart.getObject() instanceof ITextEditorPart){ 
      ITextEditorPart theSourceViewer = (ITextEditorPart) activePart.getObject(); 
      theSourceViewer.st.invokeAction(ST.TOGGLE_OVERWRITE); 
      //TODO 
      //Change cursor sourcewiewer, notify to Statusbar... 
     } 
    } 
} 

На следующем рисунке показана Application.e4xmi с Binding контексте и Binding таблицы созданы. Обратите внимание, что если вы не добавляете дополнительный тег «type: user» в таблицу привязки, привязки вообще не работают. Это не отражено в уроке vogella (http://www.vogella.com/tutorials/EclipseRCP/article.html) ни его книги.

Единственное место, где я нашел эту информацию было на StackOverflow вопрос: eclipse rcp keybindings don't work

Я использую затмение на Марсе (4.5.0) как для Linux и Windows, я, если не знаю, для новых verions это «ошибка 'решена.

Key Binding configuration

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