Статьи

Как создать PageBookView

Подумайте о представлении свойств. Отображает свойства выбранного элемента в активной части. Всякий раз, когда выбор изменяется или активная часть изменяется, он отслеживает их и отображает свойства (если только вы не использовали функцию «Прикрепить к выделению», доступную с 3.5 ). Существует множество подобных представлений, которые обновляются при изменении активной части. Представление структуры, представление шаблонов, представление палитры GEF и т. Д. Если вы хотите создать такое представление, это не сложная задача — Eclipse предоставляет вам все основные функции в классе PageBookView. Все, что вам нужно, это расширить этот класс и заполнить пустоту, реализовав абстрактные методы. Вот что мы увидим в этом совете. Вариант использования — создание ActivePartTrackerView, в котором будет отображаться имя текущей активной части рабочего места.

Сначала давайте создадим представление:

<extension
point="org.eclipse.ui.views">
<view
class="com.eclipse_tips.views.SelectionView"
icon="icons/sample.gif"
id="com.eclipse-tips.views.pagebookview"
name="Selection Provider View">
</view>
</extension>

 

Содержимое PageBookView упорядочено по страницам (IPage). Может быть несколько страниц, каждая из которых связана с соответствующим IWorkbenchPart. Когда связанная часть становится активной, PageBookView автоматически переключается на соответствующую страницу. Когда PageBookView создан, он запрашивает часть начальной загрузки, вызывая метод getBootstrapPart (). Если не найдена часть начальной загрузки, используется страница по умолчанию. Эта страница по умолчанию также отображается, когда нет страниц для текущей активной части. Давайте начнем с создания этой страницы по умолчанию. Для этого нам нужно реализовать метод createDefaultPage (), который возвращает страницу по умолчанию. Давайте использовать MessagePage, которая просто отображает строку.

@Override
protected IPage createDefaultPage(PageBook book) {
MessagePage messagePage = new MessagePage();
initPage(messagePage);
messagePage.setMessage("No interested in this part");
messagePage.createControl(book);
return messagePage;
}

Теперь наш SelectionView запущен и работает, за исключением того, что он показывает статический контент, не создавая IPages для активных частей. Прежде чем мы создадим IPage, как определить, следует ли создавать IPage для данного IWorkbenchPart или игнорировать его? Это методом isImportant (). Допустим, мы хотим отвечать только на те части, которые предоставлены пользовательским интерфейсом платформы.

@Override
protected boolean isImportant(IWorkbenchPart part) {
return part.getSite().getPluginId().startsWith("org.eclipse.ui");
}

Таким образом, если проводник пакетов (предоставленный JDT) или редактор манифестов (предоставленный PDE) является активной частью, то наш SelectionView не будет создавать никаких страниц и использовать страницу по умолчанию. Если это TextEditor или Project Explorer, то он создаст страницу и покажет ее.

Чтобы создать IPage для данной детали, нам нужно переопределить метод doCreatePage (). В отличие от метода createDefaultPage (), он не возвращает IPage, а PageRec. Зачем? В этой записи страницы хранится дополнительная информация — связанная часть рабочего места и панели действий:

@Override
protected PageRec doCreatePage(IWorkbenchPart part) {
MessagePage messagePage = new MessagePage();
initPage(messagePage);
messagePage.setMessage("Page for "+part.getTitle());
messagePage.createControl(getPageBook());
return new PageRec(part, messagePage);
}

 
 

Когда вы переключаетесь между TextEditor и представлением ProjectExplore, PageBookView будет отслеживать и находить страницу для активной части и автоматически показывать ее. Когда страница больше не нужна (связанная часть закрыта), она вызывает метод doDestroyPage (). Это место, где вы в идеале должны удалить любых слушателей и распорядиться ресурсами.

Итак, весь класс идет сюда:

 
package com.eclipse_tips.views;

import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.part.IPage;
import org.eclipse.ui.part.MessagePage;
import org.eclipse.ui.part.PageBook;
import org.eclipse.ui.part.PageBookView;

/**
* @author Prakash G.R.
*
*/
public class ActivePartTrackerView extends PageBookView {

@Override
protected IPage createDefaultPage(PageBook book) {
MessagePage messagePage = new MessagePage();
initPage(messagePage);
messagePage.setMessage("No interested in this part");
messagePage.createControl(book);
return messagePage;
}

@Override
protected PageRec doCreatePage(IWorkbenchPart part) {
MessagePage messagePage = new MessagePage();
initPage(messagePage);
messagePage.setMessage("Page for "+part.getTitle());
messagePage.createControl(getPageBook());
return new PageRec(part, messagePage);
}

@Override
protected void doDestroyPage(IWorkbenchPart part, PageRec pageRecord) {
pageRecord.page.dispose();
}

@Override
protected IWorkbenchPart getBootstrapPart() {
IWorkbenchPage page = getSite().getPage();
if(page != null) {
// check whether the active part is important to us
IWorkbenchPart activePart = page.getActivePart();
return isImportant(activePart)?activePart:null;
}
return null;
}

@Override
protected boolean isImportant(IWorkbenchPart part) {
return part.getSite().getPluginId().startsWith("org.eclipse.ui");
}

}

 С http://blog.eclipse-tips.com/