Определите, какой экземпляр представления в настоящее время активен в RCP? - PullRequest
0 голосов
/ 08 июля 2010

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

У меня есть графическое представление под названием Views.GraphView. Я открыл разные его экземпляры с помощью команды openGraphView, чтобы показать разные графики. Команда выглядит следующим образом:

page.showView("Views.GraphView", Integer.toString(instanceNum++), IWorkbenchPage.VIEW_ACTIVATE);

Теперь у меня есть команда под названием TreeLayout на этой панели инструментов Views.GraphView, которая предполагает изменение макета графика и будет работать с каждым экземпляром представления. Но для этого, я думаю, мне нужно определить, какой экземпляр представления активен. Команда TreeLayout выглядит примерно так:

IViewPart findView =  HandlerUtil.getActiveWorkbenchWindow(event).getActivePage(). findView( "Views.GraphView"); //I think in the findView I need to give the id of the view [but how can I put the secondary id?]

GraphView view = (GraphView) findView;
view.changeLayout();  //I wrote this method in the graph view to change the layout 

//I just tried to print the secondary id, but it did not print anyting
System.out.println("From treelayout command:- " + view.getViewSite().getSecondaryId());

Так как же определить, какой экземпляр представления активен в данный момент, и работать с ним?

Ответы [ 4 ]

1 голос
/ 08 июля 2010

Метод view.getViewSite().getSecondaryId() подходит для определения вторичного представления.Этот метод возвращает только пустую строку для «основного» вида: тот, который открывается, когда пользователь нажимает «Окно» -> «Показать вид» - «Твой вид».

Я не понимаю, почему кнопка панели инструментов вида должна работать на всехпросмотр экземпляров.На мой взгляд, вы должны иметь одну кнопку в каждой панели инструментов экземпляра вида, работающую только в своем собственном виде.Если вам действительно нужно работать от одной кнопки до ВСЕХ представлений, я думаю, вам придется сохранять ссылки на открытые представления самостоятельно, потому что я думаю, что верстак не предоставляет метод findViews, возвращающий массив представлений.

1 голос
/ 09 октября 2012

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

PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActivePart()
1 голос
/ 08 июля 2010

Вы можете использовать IWorkBenchPage.findViewReference (String viewId, String viewId) , если он возвращает ноль, представление с viewId и viewId не присутствует в текущей перспективе.

Если у вас есть ViewReference, вы можете использовать ViewReference.getView (логическое восстановление) , чтобы получить представление

так что в вашем обработчике вы получите что-то вроде:

final IWorkbenchPage page = HandlerUtil.getActiveWorkbenchWindow(
                    event).getActivePage();
final int instanceNum = 8;//the number of instances that are created
for (int index = 0; index < instanceNum; index++) {
    final IViewReference viewReference = page.findViewReference(
                        "Views.GraphView", Integer.toString(index));
    if (viewReference != null) {
        final IViewPart view = viewReference.getView(true);
        if (view instanceof GraphView) {
            final GraphView graphView = (GraphView) view;
            graphView.changeLayout();
        }
    }
}
0 голосов
/ 16 февраля 2017

Активный просмотр и отображение имени редактора в MessageDialogbox

public class Active_Workbench extends AbstractHandler{

    @Override
    public Object execute(ExecutionEvent event) throws ExecutionException {

        // A part service tracks the creation and activation of parts within a workbench page.
        IPartService service = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getPartService();

        MessageDialog.openInformation(HandlerUtil.getActiveWorkbenchWindow(
                event).getShell(), "Current Workbench Window", service.getActivePart().getTitle().toString());

        return null;
    }
}

Надеюсь, этот ответ полезен.

...