plugin开发 - eclipse官网下载



在eclipse插件开发中如何处理来自定制编辑器的属性表? (1)

在“ 属性入门”中有一个很好的例子

使用“属性”视图非常简单。
由于它显示所选对象的属性,因此使用它的第一步是确保工作台选择服务知道在视图中选择的对象 。 关于选择服务的主题有一整篇Eclipse Corner文章

public void createPartControl(Composite parent) {
    viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
    viewer.setContentProvider(new ViewContentProvider());
    viewer.setLabelProvider(new ViewLabelProvider());

    getSite().setSelectionProvider(viewer);

    viewer.setInput(getViewSite());
}

一旦你的视图有助于工作台的选择,你需要确保你的视图选择的对象有贡献属性

(提取)

public class Person implements IPropertySource {
    private String name;
    private Object street;
    private Object city;

    public Person(String name) {
        this.name = name;
        this.street = "";
        this.city = "";
    }

    public Object getEditableValue() {
        return this;
    }

    public IPropertyDescriptor[] getPropertyDescriptors() {
        return new IPropertyDescriptor[] {
                new TextPropertyDescriptor("name", "Name"),
                new TextPropertyDescriptor("street", "Street"),
                new TextPropertyDescriptor("city", "City")
        };
    }

我之前表示,这个解决方案“不一定是最正确的”。 这是因为,为了这个工作,我的域对象需要知道作为属性源的以视图为中心(和以Eclipse为中心)的概念; 总之,模型和视图之间有着紧密的联系,这不是一件好事。

使用适配器是一个更好的方法,如本文所述
人应该实施IAdaptable

另请参阅最近关于如何创建自定义属性视图的文章

如何破解“属性视图”以仅侦听特定的视图。

isImportant()方法决定是否为特定的IWorkbenchPart创建一个IPage。
我们的想法是覆盖该方法,并返回false我们不感兴趣的所有workbenchPart 。让我们先创建视图:

<view
            class="com.eclipse_tips.views.CustomPropertiesView"
            icon="icons/sample.gif"
            id="com.eclipse-tips.views.customePropertiesView"
            name="My Properties View">
</view>

CustomPropertiesView应该扩展PropertySheet并覆盖isImportant()

public class CustomPropertiesView extends PropertySheet {

 @Override
 protected boolean isImportant(IWorkbenchPart part) {
  if (part.getSite().getId().equals(IPageLayout.ID_PROJECT_EXPLORER))
   return true;
  return false;
 }
}

在这种情况下,我只是为了响应Project Explorer而忽略其他视图

根据这个线程 ,相同的原则应该是有效的编辑器,而不是一个视图。

属性表监听工作台页面选择提供程序。
选择提供者取决于哪个查看者/编辑者是活跃的
当编辑器/查看器处于活动状态时,每个编辑器/查看器都提供自己的选择提供器
这样属性表不关心谁是活动的,它只是监听选择提供者。
这种方式取决于视图,显示了一组不同的属性。
例如,“ Navigator视图提供了IResource选择,因此当导航器处于活动状态时,属性表会显示IResource属性。

本文介绍了工作台选择机制

ISelectionListener是一个简单的接口,只有一个方法。
一个典型的实现看起来像这样:

private ISelectionListener mylistener = new ISelectionListener() {
    public void selectionChanged(IWorkbenchPart sourcepart, ISelection selection) {
    if (sourcepart != MyView.this &&                               // 1
        selection instanceof IStructuredSelection) {               // 2
        doSomething(((IStructuredSelection) selection).toList());  // 3
        }
    }
};

根据您的要求,您的监听器实现可能需要处理以下代码片段中显示的以下问题:

  • 如果我们也提供选择(例如视图或编辑器 ),我们应该排除我们自己的选择事件处理。 当用户选择我们的部分(1)中的元素时,这避免了意外的结果。
  • 检查我们是否可以处理这种选择(2)。
  • 从选择中获取所选内容并进行处理(3)。

我必须在属性表中绑定我的编辑器小部件对象。因此,我可以从属性视图中查看小部件的属性。 请帮助我,如果可能的话给我一些代码片段。





plugins