Визуализация представления на основе другого представления в плагине Eclipse - PullRequest
0 голосов
/ 24 мая 2011

Я разрабатываю плагин Eclipse, который в настоящее время имеет 2 вида.В моем первом представлении у меня есть список соединений, отображаемый в TableViewer (имя и состояние соединения). Во втором представлении я хочу загрузить таблицы в базу данных (соединение).Эта загрузка будет выполнена путем нажатия на пункт меню в соединении («просмотреть детали»).Эти таблицы будут отображаться в TreeViewer, потому что они также могут иметь детей.Я попытался сделать это следующим образом:

Класс My View:

public class DBTreeView extends ViewPart {

private TreeViewer treeViewer;
private Connection root = null;

    public DBTreeView() {
        Activator.getDefault().setDbTreeView(this);
    }

    public void createPartControl(Composite parent) {
        treeViewer = new TreeViewer(parent);
        treeViewer.setContentProvider(new DBTreeContentProvider());
        treeViewer.setLabelProvider(new DBTreeLabelProvider());
    }

    public void setInput(Connection conn){
        root = conn;
        treeViewer.setInput(root);
        treeViewer.refresh();
    }
}

Я создал метод setInput, который вызывается из действия, зарегистрированного в пункте меню в представлении подключений.с текущим выбранным соединением в качестве аргумента:

Класс MViewContentsAction:

public void run(){
    selectedConnection =  Activator.getDefault().getConnectionsView().getSelectedConnection();  
    Activator.getDefault().getDbTreeView().setInput(selectedConnection);    
}

В моем классе ContentProvider:

public Object[] getChildren(Object arg0) {
    if (arg0 instanceof Connection){
        return ((Connection) arg0).getTables().toArray();
    }
    return EMPTY_ARRAY;
}

, где EMPTY_ARRAY - это ... пустой массив

Проблема, с которой я сталкиваюсь, заключается в том, что в режиме отладки этот фрагмент кода не выполняется каким-либо образом:

Activator.getDefault().getDbTreeView().setInput(selectedConnection);

А также ничего не происходит в древовидном представлении при нажатии на элемент меню.Есть идеи?Спасибо

1 Ответ

1 голос
/ 24 мая 2011

Ха.Хорошо, то, что вы делаете здесь ... не совсем правильный путь.Вам нужно зарегистрировать TableViewer в качестве поставщика выбора.

getSite().setSelectionProvider(tableViewer);

Затем определите прослушиватель выбора и добавьте его в представление с помощью средства просмотра дерева следующим образом:

ISelectionListener listener = new ISelectionListener() {
     public void selectionChanged(IWorkbenchPart part, ISelection sel) {
        if (!(sel instanceof IStructuredSelection))
           return;
        IStructuredSelection ss = (IStructuredSelection) sel;
        // rest of your code dealing with checking whether selection is what is
        //expected and if it is, setting it as an input to             
        //your tree viewer                     
       }
    };

   public void createPartControl(Composite parent) {
     getSite().getPage().addSelectionListener(listener);
  }

Теперь вход вашего дерева просмотра будет изменяться в соответствии с тем, что выбрано в просмотрщике таблицы (кстати, не забудьте вызвать treeviewer.refresh () после установки нового ввода).

См. Пример здесь .

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