gef selectiontool selectioneditpolicy

GEF实践总结 SelectionTool与SelectionEditPolicy

一. 目标

  1. 能够选中Column。
  2. 对Column选择时,能够在首要选中、次要选中、取消选中显示不一样的颜色。


二. 修改GraphicalViewer,设置EditDomain,并指定ActiveTool
会发现目前的效果中,无法点选、圈选图像(Table或Column),没错,因为缺少了SelectionTool或MarqueeTool。

Java代码 复制代码
  1. //   
  2. EditDomain domain = new EditDomain();   
  3. domain.setActiveTool(new SelectionTool());   
  4. graphicalViewer.setEditDomain(domain);  
//
EditDomain domain = new EditDomain();
domain.setActiveTool(new SelectionTool());
graphicalViewer.setEditDomain(domain);

 

EditDomain 类似于GraphicalViewer的执行的上下环境,通过setActiveTool可以设置当前处于Active状态的Tool。
Tool :对鼠标事件、按键等的处理,或代理
SelectionTool :点选
MarqueeTool :圈选


三. 改写Figure

Java代码 复制代码
  1. public TableColumnFigure() {   
  2. super();   
  3.   
  4. this.setOpaque(true);   
  5. }  
public TableColumnFigure() {
super();

this.setOpaque(true);
}

 

setOpaque :设置背景色不透明

Java代码 复制代码
  1. public void setSelection(boolean primary, boolean selected) {   
  2. if (primary && selected) {   
  3. this.setBackgroundColor(ColorConstants.yellow);   
  4. else if (selected) {   
  5. this.setBackgroundColor(ColorConstants.lightGray);   
  6. else {   
  7. this.setBackgroundColor(ColorConstants.white);   
  8. }   
  9. }  
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);
}
}
  1. 首要选中时背景色为黄色
  2. 次要选中时背景色为灰色
  3. 未选中(取消选中)时背景色为白色

四. 给TableColumnEditPart添加SelectionEditPolicy

Java代码 复制代码
  1. public class TableColumnSelectionEditPolicy extends SelectionEditPolicy {   
  2. @Override  
  3. protected void showPrimarySelection() {   
  4. TableColumnFigure figure = (TableColumnFigure) getHostFigure();   
  5. figure.setSelection(truetrue);   
  6. }   
  7.   
  8. @Override  
  9. protected void showSelection() {   
  10. TableColumnFigure figure = (TableColumnFigure) getHostFigure();   
  11. figure.setSelection(falsetrue);   
  12. }   
  13.   
  14. @Override  
  15. protected void hideSelection() {   
  16. TableColumnFigure figure = (TableColumnFigure) getHostFigure();   
  17. figure.setSelection(falsefalse);   
  18. }   
  19. }   
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

  1. showPrimarySelection : 显示首要选中的模型。默认情况下直接使用showSelection方法。
  2. showSelection :显示选中的模型,非首要选中的模型。
  3. hideSelection :取消选中

五. 注册SelectionEditPolicy

Java代码 复制代码
  1. @Override  
  2. protected void createEditPolicies() {   
  3. installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE, new TableColumnSelectionEditPolicy());   
  4. }  
@Override
protected void createEditPolicies() {
installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE, new TableColumnSelectionEditPolicy());
}
 

六. 启动,查看运行效果



七. 总结

  1. 通过给GraphicalViewer添加EditDomain,并指定Active的Tool为SelectionTool就可以点选图像了。
  2. 通过添加SelectionEditPolicy,就可以处理首要选中,非首要选中,未选中(取消选中)的不同效果了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值