SWT JFace: SelectionProvider не работает в TabFolder - PullRequest
1 голос
/ 25 ноября 2011

В GraphicalEditor я создал папку с вкладками:

private final String[] tabNames = { "Text", "Image" };

private ResourcesTextComposite comText;

private ResourcesImageComposite comImage;

...

public void createPartControl(Composite parent) {
    ...
    tabFolder = new TabFolder(parent, SWT.BORDER);
    for (int loopIndex = 0; loopIndex < tabNames.length; loopIndex++) {
        TabItem tabItem = new TabItem(tabFolder, SWT.NULL);
        tabItem.setText(tabNames[loopIndex]);

        if (loopIndex == 0) {
            comText = new ResourcesTextComposite(tabFolder, SWT.NONE,
                    resources);
            tabItem.setControl(comText);
        } else if (loopIndex == 1) {
            comImage = new ResourcesImageComposite(tabFolder, SWT.NONE,
                    resources);
            tabItem.setControl(comImage);
        }
    }
    ...
}

у него есть 2 элемента табуляции, и у каждого элемента есть составной элемент, а у каждого составного элемента есть TableViewer соответственно.

Я пытался сделать так, чтобы каждый TableViewer предоставлял выбор, когда пользователь выбирает соответствующий элемент вкладки (та же функция createPartControl редактора):

public void createPartControl(Composite parent) {
    ...
    tabFolder.addSelectionListener(new SelectionListener() {
        public void widgetSelected(SelectionEvent e) {
            int tabIdx = tabFolder.getSelectionIndex();
            getSite().setSelectionProvider(null);
            if (tabIdx == 0) {
                getSite().setSelectionProvider(comText.getViewer());
            } else if (tabIdx == 1) {
                getSite().setSelectionProvider(comImage.getViewer());
            }
            System.out.println("widgetSelected" + getSite() + ": "
                    + getSite().getSelectionProvider());
        }

        public void widgetDefaultSelected(SelectionEvent e) {
            widgetSelected(e);
        }
    });
    ...
}

Я надеюсь, что когда я выберу строку в TableViewer, представление Properties покажет свойства выбранной модели, я завершу те вещи IPropertySource, и они хорошо работают в других редакторах, у которых нет папок с вкладками, поэтому я думаю, что проблема должна находиться в области «Поставщик выбора».

Есть идеи или кто-нибудь сталкивался с такой же проблемой?

1 Ответ

2 голосов
/ 25 ноября 2011

Если у вас есть несколько провайдеров выбора в представлении или редакторе, вам нужно использовать посредник, такой как org.eclipse.jdt.internal.ui.viewsupport.SelectionProviderMediator.Обратите внимание, что он, к сожалению, внутренний, поэтому вам нужно скопировать его в свой собственный проект

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...