RCP SelectionService - PullRequest
       9

RCP SelectionService

0 голосов
/ 20 мая 2011

У меня есть два представления: одно с TreeViewer, а другое с виджетами SWT.Я хочу, чтобы действия в представлении с виджетами вызывали изменения в представлении с TreeViewer.Читая различные ресурсы по этой теме, они все говорят о том, чтобы позволить зрителям JFace создавать выборки и получать уведомления, но они не говорят о возможности инициировать эти выборки из текстового виджета, например.

МожетЯ делаю что-то вроде этого, предполагая, что представление, в котором этот код, является ISelectionProvider?

Text someText = new Text( parent, SWT.BORDER ) ;
someText.addKeyListener( new KeyListener() {
  @Override
  public void keyPressed( KeyEvent e ) {}

  @Override
  public void keyReleased( KeyEvent e ) {
    ...
    ...
    CellInfo cellInfo = new CellInfo( /*text collected while typing*/);
    currentSelection = new StructuredSelection( cellInfo ) ; 
    setSelection( currentSelection ) ;

...
...

public void setSelection( ISelection selection ) {
  Object[] list = getListeners() ;//listeners.getListeners();  
  for (int i = 0; i < list.length; i++) {  
    ((ISelectionChangedListener) list[i])  
     .selectionChanged(new SelectionChangedEvent(this, selection));  
  } 
}

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

getSite().getPage().addSelectionListener(this);

Но метод selectionChanged() никогда не вызывается.

Я предполагаю, что я делаю что-то не так со стороны производителя, так как со стороны потребителя кажется довольно простым.Есть указатели?

Спасибо!

Джон

Ответы [ 2 ]

3 голосов
/ 20 мая 2011

Вы рассказали Workbench о своем поставщике выбора? На стороне производителя в вашем createPartControl () вам нужно:

getSite().setSelectionProvider(this);
1 голос
/ 30 сентября 2011

Из-за проектного решения , которое применяется в SWT, события обычно не отправляются в ответ на программные изменения (в отличие от действий пользователя). Тем не менее, вы могли бы сделать что-то вроде:

// (1) set a new selection for the view's viewer
myViewer.setSelection(ISelection, boolean);
// (2) setup event to be fired
// (2.1) create new org.eclipse.swt.widgets.Event
Event event = new Event();
// (2.2) set some fields in event
// e.g., event.widget = myViewer.getControl();
// (3) fire event via Viewer's Control (is Widget)
myViewer.getControl().notifyListeners(SWT.Selection, event);

Но помните , что этот метод дает хороший повод выстрелить себе в ногу (из моего собственного опыта).

...