Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2342235
  • 博文数量: 321
  • 博客积分: 3440
  • 博客等级: 中校
  • 技术积分: 2992
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-24 09:08
个人简介

我就在这里

文章分类

全部博文(321)

文章存档

2015年(9)

2014年(84)

2013年(101)

2012年(25)

2011年(29)

2010年(21)

2009年(6)

2008年(23)

2007年(23)

分类: Java

2014-11-29 19:56:22

如果我们在Eclipse RCP程序中添加TaskList View,用来管理Task或者TODO项,如下代码:

  1. PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage()
  2.     .showView("org.eclipse.ui.views.TaskList");

我们发现,创建的Task,在重启之后无法保存,而在Eclipse IDE中却不会有这个问题. 在阅读org.eclipse.ui.internal.views.markers.TasksView的代码后,我发现TasksView在程序退出时,只负责保存TasksView的布局信息。那么,需要怎么保存添加的Task呢?

如何保存TaskList

原来Task的本质是Marker,并不是保存在TasksView中,而是和Resource相关联,保存在IResource对象中。在RCP程序中,保存Marker需要调用IWorkspace的save方法,可以在preShutdown中调用,如下代码:

  1. @Override
  2. public boolean preShutdown() {
  3.  
  4.     /* Save workspace before closing the application */
  5.     final MultiStatus status = new MultiStatus(
  6.             "com.voxana.vuidesigner.diagram", 0, "Saving Workspace....",
  7.             null);
  8.     IRunnableWithProgress runnable = new IRunnableWithProgress() {
  9.  
  10.         @Override
  11.         public void run(final IProgressMonitor monitor) {
  12.             try {
  13.                 IWorkspace ws = ResourcesPlugin.getWorkspace();
  14.                 status.merge(ws.save(true, monitor));
  15.             } catch (CoreException e) {
  16.                 status.merge(e.getStatus());
  17.             }
  18.         }
  19.     };
  20.     try {
  21.         new ProgressMonitorDialog(null).run(false, false, runnable);
  22.     } catch (InvocationTargetException e) {
  23.         e.printStackTrace();
  24.     } catch (InterruptedException e) {
  25.         e.printStackTrace();
  26.     }
  27.     if (!status.isOK()) {
  28.         ErrorDialog.openError(Display.getDefault().getActiveShell(),
  29.                 "Error...", "Error while saving workspace", status);
  30.         return true;
  31.     }
  32.     return true;
  33. }

获取TaskList

如前面所说,Task(Marker的其中一种类型)是和Resource关联,保存在IResource中的。我们可以通过以下代码来获取所有Task:


  1. IResource root = ResourcesPlugin.getWorkspace().getRoot();
  2. String TypeId = "org.eclipse.core.resources.taskmarker";
  3. IMarker[] markers = resource.findMarkers(TypeId, true, IResource.DEPTH_INFINITE);

其中,第一个参数TypeId指定要获取的Marker类型;第二个参数指定是否搜索子节点的Marker;第三个参数指定搜索的深度。

在获取了IMarker后,即可通过getAttribute或者getAttributes方法来获取参数
参考



org.eclipse.ui.internal.views.markers.MarkerContentGenerator class internalGatherMarkers method

转自:http://www.cnblogs.com/Binhua-Liu/archive/2013/09/23/3318950.html

阅读(1700) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~