1

Stackoverflown の仲間の皆さん、こんにちは。

私は Eclipse RCP アプリケーションを開発していますが、その中には標準のProject Explorer View.

標準の通常のプロパティorg.eclipse.core.internal.resources.Projectと一緒に表示されるように、いくつかのプロパティを に追加する必要があります。ResourceProperties View

私の思考プロセスは、別のリスナーをに追加することでしたSelectionService:

window =PlatformUI.getWorkbench().getActiveWorkbenchWindow();
window.getSelectionService().addSelectionListener("org.eclipse.ui.navigator.ProjectExplorer", listener);

このセレクション リスナーで、選択したプロジェクトを取得して変更し、セレクション サービスに渡します。

問題は、コンテンツプロバイダーなしでプログラムで選択を設定する方法がないことです。

また、私が見る限り、Project実装していないためIPropertySource、サブクラス化してメソッドを上書きするのはかなり難しいでしょうgetPropertyDescriptors/Values...

Project Explorerその場合、ビューのコンテンツ プロバイダーを取得するにはどうすればよいですか?

または、どのように選択範囲を設定できSelectionServiceますか?

どんな助け/意見も大歓迎です!

4

1 に答える 1

1

IProject実装していないにもかかわらず、既存の にプロパティを追加することに成功しましたIPropertySource(したがって、メソッドgetPropertyDescriptorsgetPropertyValueメソッドをサブクラス化して上書きすることで、いくつかの機能を追加できたはずです.

greg-449 のおかげで(を拡張する) fromStandardPropertiesAdapterFactoryを作成した機能を理解することができました。ResourcePropertySourceIProjectIResource

したがって、これをすべて回避する方法は、 のサブクラスを使用してのプロパティAdvancedPropertySectionを表示することです...IProject

キュードは次のとおりです。

ProjectExplorerのビュー ID をTabDescriptorProviderinにリンクしplugin.xmlます。

<extension point="org.eclipse.ui.views.properties.tabbed.propertyContributor">
      <propertyContributor
            contributorId="org.eclipse.ui.navigator.ProjectExplorer"
            tabDescriptorProvider="eb.tresos.bustools.connection.extraproperty.TabDescriptorProvider">
         <propertyCategory
               category="tabbedCategory">
         </propertyCategory>
      </propertyContributor>
   </extension>

その後、 を定義しTabDescriptorProvider、それをカスタム にリンクしますAdvancedPropertySection

public class TabDescriptorProvider implements ITabDescriptorProvider {

    @Override
    public ITabDescriptor[] getTabDescriptors( IWorkbenchPart part, ISelection selection ) {
        AbstractTabDescriptor[] tabs = new AbstractTabDescriptor[1];
        tabs[0] = new TabDescriptor("Aww shucks, TabDescriptorTitle");

        return tabs;
    }

    class TabDescriptor extends AbstractTabDescriptor {
        String label;

        /**
         * Constructor
         * 
         * @param label sets the label text of the tab
         */
        TabDescriptor( String label ) {
            this.label = label;
        }

        @SuppressWarnings("rawtypes")
        @Override
        public List getSectionDescriptors() {
            List<SectionDescriptor> sList = new ArrayList<SectionDescriptor>();
            sList.add( new SectionDescriptor( label ) );

            return sList;
        }

        @Override
        public String getCategory() {
            //Stub
            return "";
        }

        @Override
        public String getId() {
            //stub
            return "";
        }

        @Override
        public String getLabel() {
            return "Resource";
        }
    }

    class SectionDescriptor extends AbstractSectionDescriptor {

        String section;
        List<AbstractPropertySection> sectionTabs = new ArrayList<AbstractPropertySection>();

        public SectionDescriptor( String section ) {
            this.section = section;

        }

        /**
         * SectionId
         */
        @Override
        public String getId() {
            //stub
            return "";
        }

        /**
         * SectionClass
         */
        @Override
        public ISection getSectionClass() {
            return new AuxiliaryProjectSection();
        }

        /**
         * SectionTab
         */
        @Override
        public String getTargetTab() {
            //stub
            return "";
        }

    }

}

そしてSectionそれ自体:

public class AuxiliaryProjectSection extends AdvancedPropertySection {
    @Override
    public void setInput(IWorkbenchPart part, ISelection selection) {
        if (selection instanceof StructuredSelection) {
            Object firstElement = ((StructuredSelection)selection).getFirstElement();
            if (firstElement instanceof IProject) {
                final IProject theProject = (IProject) firstElement;
                ISelection selection2 = new StructuredSelection(new ResourcePropertySource(theProject) {

                    @Override
                    public IPropertyDescriptor[] getPropertyDescriptors() {
                        ArrayList<IPropertyDescriptor>  arrayList = new ArrayList<IPropertyDescriptor>();
                        IPropertyDescriptor[] array = {new PropertyDescriptor("ID-ul", "Labelul")};
                        arrayList.addAll(Arrays.asList(super.getPropertyDescriptors()));
                        arrayList.addAll(Arrays.asList(array));
                        return arrayList.toArray(new IPropertyDescriptor[0]);
                    }

                    @Override
                    public Object getPropertyValue(Object id) {
                        if (id.equals("ID-ul"))
                            return "Silly Value";
                        else
                            return super.getPropertyValue(id);
                    }

                });
                super.setInput(part, selection2); 
            } else {
                super.setInput(part, selection);
            }
        }
    }
}

ありがとう、グレッグ!

于 2013-11-08T07:57:59.777 に答える