Eclipse RCP: Как я могу обновить представление при изменении выбранного редактора? - PullRequest
2 голосов
/ 29 ноября 2010

Это должно быть довольно распространенной проблемой, но я не смог найти ничего полезного по теме.

Мы разрабатываем приложение с Eclipse RCP.Приложение показывает данные в редакторе, в котором обычно открыто несколько экземпляров.В дополнительном представлении вы можете редактировать значения редактора.Когда значения изменяются в представлении, они обновляются в редакторе, и устанавливается грязный флаг.

Пока все работает нормально.Чего нам не хватает: Когда другой экземпляр редактора получает фокус, наше представление должно показать данные этого редактора.

Мне удалось сделать это для двух представлений.Второе представление успешно обновляется с использованием TableViewer в качестве поставщика выбора и регистрации SelectionListener в другом представлении.Я попробовал то же самое для редактора, используя Viewer, который я вложил в подкласс ContentViewer, но он не работал.

Может ли этот подход работать?Или мне нужен другой подход к проблеме?

Ответы [ 2 ]

3 голосов
/ 04 декабря 2010

Может быть, вы можете создать подкласс своего представления из PageBookView , а затем предоставить специальный адаптер для вашего редактора.Outline View реализован с использованием этого подхода.

2 голосов
/ 29 ноября 2010

Спасибо, cerealk, это было именно то, что мне было нужно. :-)

Обновление вида при выборе другого редактора

public class myView {

    // Create an IPartListener2 
    IPartListener2 pl = new IPartListener2() {

        // If the Editor I'm interested in was updated ...
             public void partActivated(IWorkbenchPartReference ref) {
                  IWorkbenchPart part = ref.getPart(true);
                  if (part instanceof DetailEditor) {

                  // ... update the view
                  Contact contactFromSelectedEditor = ((DetailEditor) part).detailComposite.contact;
                  detailComposite.update(contactFromSelectedEditor);
                  }
             }
        ...
        }

    // Add the IPartListener2 to the page   
    IWorkbenchPage page = this.getSite().getPage();
    page.addPartListener(pl);

}


Зачем использовать IPartListener2 вместо IPartListener

IPartListener2 заменяет IPartListener на 3.5.

Как объяснено в этом этом ответе :

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

Это Слушатель также скажет вам, когда часть становится видимой или скрытой или когда ввод редактора изменяется.

...