Окно рабочей среды в терминологии Eclipse - это окно, которое обычно содержит меню, панель инструментов, область редактора и представления. Приложения Eclipse RCP обычно содержат одно окно, но некоторые приложения позволяют создавать несколько окон. Например, в Eclipse IDE можно открыть другое окно, выбрав «Новое окно» в меню окна. Перспективы могут быть установлены независимо в каждом окне.
Хотя несколько окон могут сбивать с толку, они также могут быть очень полезны. Например, если пользователь может работать с двумя различными источниками данных, но иметь несколько редакторов и представлений, открытых для каждого источника данных, тогда было бы полезно открыть два окна. Этого же эффекта можно достичь, открыв два экземпляра приложения RCP. Однако для этого потребовалось бы загрузить несколько копий кода и других ресурсов, потребовалась бы полная инициализация приложения для каждого источника данных и затруднилось бы перекрестное взаимодействие между окнами.
Чтобы разрешить пользователям вашего приложения RCP открывать другое окно, у вас есть два варианта.
Вы можете включить пункт меню «Новое окно» в свое приложение RCP. Это можно сделать, добавив в приложение RCP действие, предоставляемое рабочей средой. Измените свой класс ActionBarAdvisor:
добавить к объявлению поля:
private IWorkbenchAction newWindowAction;
добавить к коду, в котором вы выполняете действия (обычно это метод с именем makeActions):
newWindowAction = ActionFactory.OPEN_NEW_WINDOW.create(window);
register(newWindowAction);
добавить к коду, в котором вы создаете меню:
menu.add (newWindowAction);
где меню, как правило, меню Окно. Если в вашем приложении нет меню Window и вы хотите его создать, будет работать следующая строка:
MenuManager menu = новый MenuManager (
"&Окно",
IWorkbenchActionConstants.M_WINDOW); * * тысячу двадцать-один
Это даст вам пункт меню, который создаст новое окно так же, как пункт меню Window-> New Window в Eclipse IDE.
Однако это не дает никакого контроля над вводом. Второе окно может иметь другой набор представлений и открытых редакторов и может иметь другой набор перспектив, но оно все равно будет иметь тот же «ввод». Например, в Eclipse IDE вы можете открыть второе окно, но если вы переключите рабочие пространства, это будет применяться ко всем окнам.
Второй способ создания нового окна - это делать это программно, создавая страницы. Это позволяет вам установить «вход» в окно. Таким образом, открытие представления в одном окне может привести к отображению данных, отличных от того, если вы открыли тот же вид в другом окне.
Технически, окно не имеет ввода. Страницы имеют вход. Окно может содержать не более одной страницы. Из некоторых имен методов может показаться, что окно может иметь несколько страниц (например, getActivePage подразумевает, что есть неактивные страницы). Эти имена методов являются перенесенными с Eclipse 2.0 дней, когда было поддержано несколько страниц.
Чтобы открыть новую страницу программно:
IWorkbenchPage newPage = window.openPage(myInput);
Этот метод создаст новую страницу в заданном окне, если окно еще не содержит страницу, в противном случае будет создано новое окно для содержания страницы.
Если вы поддерживаете несколько окон с разным вводом, тогда вы должны установить заголовок в каждом окне, который будет отличать каждое окно:
newPage.getWorkbenchWindow().getShell().setText("My App - " + myInput.getName());
В некоторых ситуациях вы можете захотеть изменить ввод на окно. Вы не можете изменить вход на страницу, поэтому вы должны сделать это, закрыв существующую страницу и создав новую страницу. Следующий код закроет существующую страницу:
IWorkbenchPage activePage = window.getActivePage();
activePage.close();
Обратите внимание, что некоторые представления, предоставляемые Eclipse, используют ввод страницы. Например, представление Common Navigator будет использовать ввод страницы в качестве корневого элемента дерева навигации.
Чтобы получить доступ к вводу страницы из своего собственного просмотра, вы должны позвонить site.getPage().getInput()
. Если у вас нет контекста сайта, с которого можно начать, позвонив по следующему пункту, вы получите ввод:
.. * * PlatformUI.getWorkbench одна тысяча сорок-шесть () getActiveWorkbenchWindow () getActivePage () getInput ();. * +1047 *
Обратите внимание, что «input» - это Object. Это может быть объект любого класса, который вам нравится. Когда вы вернете его из Page::getInput()
, приведите его к соответствующему классу. Обычно вы не должны создавать новый класс для ввода. Вы можете почти всегда использовать существующий класс. Обычно это объект верхнего уровня вашей объектной модели. Платформа Eclipse ничего не делает с этим вводом, кроме как для его сохранения и передачи обратно при вызове Page::getInput()
.