视图开发-添加action,过滤操作

1 创建操作,以下创建3个操作

private void makeActions() {
// 增加的操作
ImageDescriptor deleteImage = ImageKeys
.getImageDescriptor(ImageKeys.IMG_TOOL_DELETE);
deleteAction = new DeleteAdress(this, "删除", deleteImage);
deleteAction.setDisabledImageDescriptor(ImageKeys
.getImageDescriptor(ImageKeys.IMG_TOOL_DISABLEDELETE));

ImageDescriptor addImage = ImageKeys
.getImageDescriptor(ImageKeys.IMG_TOOL_ADD);
addAction = new AddAddress(this, "添加", addImage);

ImageDescriptor filterImage = ImageKeys
.getImageDescriptor(ImageKeys.IMG_TOOL_FILTER);
filterAction = new AddressFilter(viewer, "过滤...", filterImage);

}


添加到上下文菜单

private void hookContextMenu() {
MenuManager menuMgr = new MenuManager("#PopupMenu");
menuMgr.setRemoveAllWhenShown(true);
menuMgr.addMenuListener(new IMenuListener() {
public void menuAboutToShow(IMenuManager manager) {
manager.add(new Separator(
IWorkbenchActionConstants.MB_ADDITIONS));
// 增加操作
manager.add(addAction);
manager.add(new Separator());
manager.add(deleteAction);
}
});
Menu menu = menuMgr.createContextMenu(viewer.getControl());
viewer.getControl().setMenu(menu);
getSite().registerContextMenu(menuMgr, viewer);
}


添加到菜单栏和工具栏

private void contributeToActionBars() {
IActionBars bars = getViewSite().getActionBars();
// 加到菜单栏
bars.getMenuManager().add(filterAction);


// 加到工具栏
IToolBarManager manager = bars.getToolBarManager();
manager.add(addAction);
manager.add(deleteAction);
deleteAction.setEnabled(false);//初始不可以
viewer.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
deleteAction.setEnabled(!event.getSelection().isEmpty());
}//当选中item时才能激活
});
}


deleteAction的代码如下:

public class DeleteAdress extends Action {

private AddressView view;
public DeleteAdress(AddressView view, String text,
ImageDescriptor imageDescriptor){
super(text, imageDescriptor);
this.view = view;
}
public void run()
{
AddressManager.getManager().removeAddresses(
view.getSelectedAddresses());
}
}
//view.getSelectedAddresses()为AdressView中定义的用于获取选择项的函数
public AddressItem[] getSelectedAddresses() {
IStructuredSelection selection = (IStructuredSelection) viewer
.getSelection();
AddressItem[] items = new AddressItem[selection.size()];
Iterator iter = selection.iterator();
int index = 0;
while (iter.hasNext())
items[index++] = (AddressItem) iter.next();
return items;
}


addAdress代码如下:

public class AddAddress extends Action{
private AddressView view;
public AddAddress(AddressView view, String text,
ImageDescriptor imageDescriptor){
super(text, imageDescriptor);
this.view = view;
}
public void run()
{
//临时实现,将在后续章节中最终实现
AddressItem[] addresses = new AddressItem[8];
AddressItem item1 = new AddressItem("Nemo", AddressCategory.FAMILY);
AddressItem item2 = new AddressItem("Dingding", AddressCategory.VIP);
AddressItem item3 = new AddressItem("Flysky", AddressCategory.FRIENDS);
AddressItem item4 = new AddressItem("Rainny", AddressCategory.UNKNOWN);
AddressItem item5 = new AddressItem("Brighter", AddressCategory.ORDINARY);
AddressItem item6 = new AddressItem("Snow", AddressCategory.LOVER);
AddressItem item7 = new AddressItem("Denny", AddressCategory.BUSINESS);
AddressItem item8 = new AddressItem("Lily", AddressCategory.TEACHER);
addresses[0] = item1;
addresses[1] = item2;
addresses[2] = item3;
addresses[3] = item4;
addresses[4] = item5;
addresses[5] = item6;
addresses[6] = item7;
addresses[7] = item8;
AddressManager.getManager().addAddresses(addresses);
}
}

FillterAress代码如下:

public class AddressFilter extends Action {
private final Shell shell;
private final AddressViewerCategoryFilter categoryFilter;
public AddressFilter(
StructuredViewer viewer, String text, ImageDescriptor imageDescriptor)
{
super(text, imageDescriptor);
shell = viewer.getControl().getShell();
categoryFilter = new AddressViewerCategoryFilter(viewer);
}

public void run(){
InputDialog dialog =
new InputDialog(
shell,"类别过滤", "输入一个类别名称 "
+System.getProperty("line.seperator")
+"或者置空",
categoryFilter.getPattern(),
null);
if(dialog.open() == InputDialog.OK)
categoryFilter.setPattern(dialog.getValue().trim());
}
}


AddressViewerCategoryFilter为自定义的一个过滤器,用于按类别过滤:

public class AddressViewerCategoryFilter extends ViewerFilter {
@Override
public boolean select(Viewer viewer, Object parentElement, Object element) {
return matcher.match(
((AddressItem) element).getCategory().getCategoryName());
}

private final StructuredViewer viewer;
private String pattern = "";
private StringMatcher matcher;

public AddressViewerCategoryFilter(StructuredViewer viewer) {
this.viewer = viewer;
}

public String getPattern() {
return pattern;
}

//设置view的过滤器,设置字符串匹配对象
public void setPattern(String newPattern) {
boolean filtering = matcher != null;
if (newPattern != null && newPattern.trim().length() > 0) {
pattern = newPattern;
matcher = new StringMatcher(pattern, true, false);
if (!filtering)
viewer.addFilter(this);
else
viewer.refresh();
}
else {
pattern = "";
matcher = null;
if (filtering)
viewer.removeFilter(this);
}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值