如何在项目资源管理器中的选择更改时使用自定义模型更新属性视图?

How to update properties view with a custom model when selection changes in project explorer?

我创建了一个插件项目,当在项目资源管理器中 selected 文件时,它应该从服务器获取一些数据。获取此数据后,项目资源管理器应触发属性视图,并显示从服务器获取的数据。

我尝试了以下教程:

http://www.vogella.com/tutorials/EclipsePlugIn/article.html

我不知道如何在项目资源管理器上触发属性视图select离子变化。

   public class TodoAdapterFactory implements IAdapterFactory {

    public Object getAdapter(Object adaptableObject, Class adapterType) {
        // TODO Auto-generated method stub

         if (adapterType== IPropertySource.class && adaptableObject instanceof Todo){
              return new TodoPropertySource((Todo) adaptableObject);
            }                   
        return null;
    }

    @SuppressWarnings("rawtypes")
    public Class[] getAdapterList() {
        // TODO Auto-generated method stub
        return new Class[] {
                IPropertySource.class
                };
    }
}

在上面的函数中,仅当我 select 另一个视图中的模型时才会触发属性视图。

我应该如何创建项目浏览器和属性视图之间的链接?

项目视图使用选项卡式 属性 页面,您可以使用 org.eclipse.ui.views.properties.tabbed.propertySections 扩展点添加选项卡。

以下是项目视图使用的现有属性选项卡的代码。它只使用 PropertySheetPage - 你必须解决这个问题才能使用不同的 IPropertySource.

public class AdvancedPropertySection extends AbstractPropertySection {

    protected PropertySheetPage page;

    public void createControls(Composite parent,
            final TabbedPropertySheetPage atabbedPropertySheetPage) {
        super.createControls(parent, atabbedPropertySheetPage);
        Composite composite = getWidgetFactory()
            .createFlatFormComposite(parent);
        page = new PropertySheetPage();

        page.createControl(composite);
        FormData data = new FormData();
        data.left = new FormAttachment(0, 0);
        data.right = new FormAttachment(100, 0);
        data.top = new FormAttachment(0, 0);
        data.bottom = new FormAttachment(100, 0);
        page.getControl().setLayoutData(data);

        page.getControl().addControlListener(new ControlAdapter() {

            public void controlResized(ControlEvent e) {
                atabbedPropertySheetPage.resizeScrolledComposite();
            }
        });
    }

    public void setInput(IWorkbenchPart part, ISelection selection) {
        super.setInput(part, selection);
        page.selectionChanged(part, selection);
    }

    public void dispose() {
        super.dispose();

        if (page != null) {
            page.dispose();
            page = null;
        }

    }

    public void refresh() {
        page.refresh();
    }

    public boolean shouldUseExtraSpace() {
        return true;
    }
}