Double Click 和 Triple Click
Double Click(双击)和 Triple Click(三击)是方便用户选择文本(当然不一定非得是选择文本)的辅助功能。本文介绍在 JTF 里面如何自定义双击行为,以及如何为 JTF 添加三击支持。
Double Click
在 Eclipse 的 Java 编辑器中,用户用鼠标在编辑区域双击时,可以看到双击处的单词会被选中,这就是 JTF 的 Double Click(双击)特性。双击时触发的动作是可以自定义的,不一定非要选择一段文本。
与双击相关的接口是 ITextDoubleClickStrategy,它只有一个方法叫做 doubleClicked,只要实现这个接口就可以了,在例子中,我添加了 ExprDoubleClickStrategy 类:
清单1. ExprDoubleClickStrategy 实现了 ITextDoubleClickStrategy 接口
public class ExprDoubleClickStrategy implements ITextDoubleClickStrategy {
public void doubleClicked(ITextViewer viewer) {
// get doc
IDocument doc = viewer.getDocument();
// get token list
TokenList tokenList = TokenManager.getTokenList(doc);
// get double click position
int offset = viewer.getSelectedRange().x;
// get token in that offset
CommonToken token = tokenList.getToken(offset);
// select whole token if token is not null
if(token != null && token.getType() != Token.EOF)
{
// select double clicked token
viewer.setSelectedRange(
token.getStartIndex(), token.getStopIndex() - token.getStartIndex() + 1);
}
}
}
这个流程非常直接,得到被点击的位置,通过位置得到相应的符号,然后选择整个符号。我们再次利用了 TokenList 来得到指定字符偏移处的符号。
和本系列第二部分一样,有了实现还得让 JTF 知道你的实现,我们再来修改 ExprConfiguation,覆盖一个 getDoubleClickStrategy 方法:
清单2. 让 JTF 知道你的 Double Click 实现
public ITextDoubleClickStrategy getDoubleClickStrategy(
ISourceViewer sourceViewer, String contentType)
{
return new ExprDoubleClickStrategy();
}
只是简单的返回我们实现的 ITextDoubleClickStrategy 而已,这样 JTF 就知道我们的双击行为了,注意双击行为也是和文本类型绑定到一起的,但是我们只有一种类型,所以没有利用这个信息。
读者可以尝试本文的例子,双击某个变量,看看是否这个变量被全部选中了。