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

时间:2015-01-19 07:07:33

标签: java eclipse eclipse-plugin

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

我尝试了以下教程:

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

我不知道如何在项目浏览器选择更改时触发属性视图。

   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
                };
    }
}

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

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

1 个答案:

答案 0 :(得分:1)

项目视图使用标签式属性页,您可以使用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;
    }
}