一. 目标
- 能够选中Column。
- 对Column选择时,能够在首要选中、次要选中、取消选中显示不一样的颜色。
二. 修改GraphicalViewer,设置EditDomain,并指定ActiveTool
会发现目前的效果中,无法点选、圈选图像(Table或Column),没错,因为缺少了SelectionTool或MarqueeTool。
//
EditDomain domain = new EditDomain();
domain.setActiveTool(new SelectionTool());
graphicalViewer.setEditDomain(domain);
EditDomain 类似于GraphicalViewer的执行的上下环境,通过setActiveTool可以设置当前处于Active状态的Tool。
Tool :对鼠标事件、按键等的处理,或代理
SelectionTool :点选
MarqueeTool :圈选
三. 改写Figure
public TableColumnFigure() {
super();
this.setOpaque(true);
}
setOpaque :设置背景色不透明
public void setSelection(boolean primary, boolean selected) {
if (primary && selected) {
this.setBackgroundColor(ColorConstants.yellow);
} else if (selected) {
this.setBackgroundColor(ColorConstants.lightGray);
} else {
this.setBackgroundColor(ColorConstants.white);
}
}
- 首要选中时背景色为黄色
- 次要选中时背景色为灰色
- 未选中(取消选中)时背景色为白色
四. 给TableColumnEditPart添加SelectionEditPolicy
public class TableColumnSelectionEditPolicy extends SelectionEditPolicy {
@Override
protected void showPrimarySelection() {
TableColumnFigure figure = (TableColumnFigure) getHostFigure();
figure.setSelection(true, true);
}
@Override
protected void showSelection() {
TableColumnFigure figure = (TableColumnFigure) getHostFigure();
figure.setSelection(false, true);
}
@Override
protected void hideSelection() {
TableColumnFigure figure = (TableColumnFigure) getHostFigure();
figure.setSelection(false, false);
}
}
a) EditPolicy :
b) SelectionEditPolicy :
- showPrimarySelection : 显示首要选中的模型。默认情况下直接使用showSelection方法。
- showSelection :显示选中的模型,非首要选中的模型。
- hideSelection :取消选中
五. 注册SelectionEditPolicy
@Override
protected void createEditPolicies() {
installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE, new TableColumnSelectionEditPolicy());
}
六. 启动,查看运行效果
七. 总结
- 通过给GraphicalViewer添加EditDomain,并指定Active的Tool为SelectionTool就可以点选图像了。
- 通过添加SelectionEditPolicy,就可以处理首要选中,非首要选中,未选中(取消选中)的不同效果了。