为 SWT 应用程序配备内容助理:通过上下文敏感的智能内容完成建议,提高最终用户的便利性和生产率
2009-12-14 00:00:00 来源:WEB开发网我们遍历标签数组,选择以指定限定符开头的所有标签。对于每个选定的标签,我们创建一个新的 CompletionProposal 实例。对于参数,我们传递完整的标签文本、这段文本应该插入的位置、文档中应该被替换的文本的长度(也就是限定符的长度),以及相对于插入文本开头的预计光标位置。
这个方法将为我们提供 WYSIWYG(“所见即所得”)的建议。内容助理的弹出窗口将列出建议,其形式与它们被选定时插入文档的形式精确一致。
处理复杂建议
前述方法并不适合于我们还必须实现的方法 computeStyleProposals() 。这里我们需要将选中的文本包装到选定的样式标签中,并使用这个新的字符串替换文档里选中的文本。由于这样的替换可能具有任何长度,在内容助理选择窗口中显示它是没有意义的。相反,显示一段简短而有意义的说明性文字,一旦选定明确的样式建议,就显示一个包含完整替换文本的预览窗口,这样会更有意义。我们可以通过使用 CompletionProposal() 构造函数的一种扩展形式来实现这点。
清单 10 显示了我们想要支持的样式标签以及关联的说明文字。同样,您可能希望添加更多的标签。
清单 10. 样式标签集合private final static String[] STYLETAGS = new String[] {
"b", "i", "code", "strong"
};
private final static String[] STYLELABELS = new String[] {
"bold", "italic", "code", "strong"
};
清单 11 显示了方法 computeStyleProposals() 。
清单 11. computeStyleProposalsprivate void computeStyleProposals(String selectedText, Point selectedRange, List propList) {
// Loop through all styles
for (int i = 0; i < STYLETAGS.length; i++) {
String tag = STYLETAGS[i];
// Compute replacement text
String replacement = "<" + tag + ">" + selectedText + "</" + tag + ">";
// Derive cursor position
int cursor = tag.length()+2;
// Compute a suitable context information
IContextInformation contextInfo =
new ContextInformation(null, STYLELABELS[i]+" Style");
// Construct proposal
CompletionProposal proposal = new CompletionProposal(replacement,
selectedRange.x, selectedRange.y, cursor, null, STYLELABELS[i],
contextInfo, replacement);
// and add to result list
propList.add(proposal);
}
}
更多精彩
赞助商链接