2016-06-22 16 views
0

StyledText/SourceViewerで実装されたRCP E4テキストエディタアプリケーションでは、インセットキーのステータスを受け取る必要があります。Eclipse E4 RCP StyledText INSERT KEY状態を取得

アプリケーションは、カーソルアイコンを変更し、他の部分にINSERT状態を通知する(つまり、通常のプレーンテキストエディタのようにステータスバーコントロールに通知する)。

SWT.INSERTは、押されるキーのみをリッスンしますが、StyledTextがINSERT MODEの場合は何も聞きません。

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 

を拡張して、アプリケーションが純粋E4テキストエディタであることを意図しているので、この方法に

getInsertMode() 

を使用することを避けてきました。

ヒント?あなたはそれがキー挿入見たときのデフォルトのアクションをしないStyledTextを指示する必要があり

答えて

1

まずは事前に

ありがとう:

​​

次はあなたがコマンド、ハンドラを定義する必要がありますエディタがInsertキーを処理するためのコンテキストでKey Bindingを使用します。

ステータス表示を更新し、shoyldできINSERTコマンドのためのハンドラは、上書きモードを更新するStyledTextを伝える:

textWidget.invokeAction(ST.TOGGLE_OVERWRITE); 

また、MacのキーボードにはInsertキーを持っていないことに注意してください!

0

E4 RCPテキストエディタのsourceviewerコントロール内でINSERT_KEYを処理するのが難しいことが分かったので、gregg449の答えに追加の詳細を書きます(毎回!)。

私はバインディングコンテキスト、バインディングテーブル、コマンド、ハンドラを作成し、必要な部分(SourceViewerを実装する部分)にバインディングコンテキストを追加しました。

次のコードは、SourceViewerとInserKeyハンドラのためのものである:

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を示しています。 補足タグ "type:user"をBinding Tableに追加しないと、バインディングがまったく機能しないことに注意してください。 これは彼の本でもヴォーガのチュートリアル(http://www.vogella.com/tutorials/EclipseRCP/article.html)には反映されていません。

私はこの情報がstackoverflowの質問にあった見つけた唯一の場所:私はLinuxとWindowsの両方のための日食火星(4.5.0)を使用してい eclipse rcp keybindings don't work

新しいverionsのためならば、私はこの「バグを知りません'が解決されました。

Key Binding configuration

関連する問題