Search in sources :

Example 1 with IServiceLocatorCreator

use of org.eclipse.ui.internal.services.IServiceLocatorCreator in project eclipse.platform.ui by eclipse-platform.

the class WorkbenchWindow method setup.

@PostConstruct
public void setup() {
    try {
        // if workbench window is opened as a result of command execution,
        // the context in which the new workbench window's commands are
        // initialized has to to match the workbench context
        final IEclipseContext windowContext = model.getContext();
        HandlerServiceImpl.push(windowContext.getParent(), null);
        // update the preference store.
        if (getModel().getPersistedState().containsKey(IPreferenceConstants.COOLBAR_VISIBLE)) {
            this.coolBarVisible = Boolean.parseBoolean(getModel().getPersistedState().get(IPreferenceConstants.COOLBAR_VISIBLE));
        } else {
            this.coolBarVisible = PrefUtil.getInternalPreferenceStore().getBoolean(IPreferenceConstants.COOLBAR_VISIBLE);
            getModel().getPersistedState().put(IPreferenceConstants.COOLBAR_VISIBLE, Boolean.toString(this.coolBarVisible));
        }
        if (getModel().getPersistedState().containsKey(IPreferenceConstants.PERSPECTIVEBAR_VISIBLE)) {
            this.perspectiveBarVisible = Boolean.parseBoolean(getModel().getPersistedState().get(IPreferenceConstants.PERSPECTIVEBAR_VISIBLE));
        } else {
            this.perspectiveBarVisible = PrefUtil.getInternalPreferenceStore().getBoolean(IPreferenceConstants.PERSPECTIVEBAR_VISIBLE);
            getModel().getPersistedState().put(IPreferenceConstants.PERSPECTIVEBAR_VISIBLE, Boolean.toString(this.perspectiveBarVisible));
        }
        IServiceLocatorCreator slc = workbench.getService(IServiceLocatorCreator.class);
        this.serviceLocator = (ServiceLocator) slc.createServiceLocator(workbench, null, () -> {
            final Shell shell = getShell();
            if (shell != null && !shell.isDisposed()) {
                close();
            }
        }, windowContext);
        windowContext.set(IExtensionTracker.class.getName(), new ContextFunction() {

            @Override
            public Object compute(IEclipseContext context, String contextKey) {
                if (tracker == null) {
                    tracker = new UIExtensionTracker(getWorkbench().getDisplay());
                }
                return tracker;
            }
        });
        windowContext.set(IWindowCloseHandler.class.getName(), (IWindowCloseHandler) window -> getWindowAdvisor().preWindowShellClose() && WorkbenchWindow.this.close());
        final ISaveHandler defaultSaveHandler = windowContext.get(ISaveHandler.class);
        final PartServiceSaveHandler localSaveHandler = new WWinPartServiceSaveHandler() {

            @Override
            public Save promptToSave(MPart dirtyPart) {
                Object object = dirtyPart.getObject();
                if (object instanceof CompatibilityPart) {
                    IWorkbenchPart part = ((CompatibilityPart) object).getPart();
                    ISaveablePart saveable = SaveableHelper.getSaveable(part);
                    if (saveable != null) {
                        if (!saveable.isSaveOnCloseNeeded()) {
                            return Save.NO;
                        }
                        return SaveableHelper.savePart(saveable, part, WorkbenchWindow.this, true) ? Save.NO : Save.CANCEL;
                    }
                }
                return defaultSaveHandler.promptToSave(dirtyPart);
            }

            @Override
            public Save[] promptToSave(Collection<MPart> dirtyParts) {
                LabelProvider labelProvider = new LabelProvider() {

                    @Override
                    public String getText(Object element) {
                        return ((MPart) element).getLocalizedLabel();
                    }
                };
                List<MPart> parts = new ArrayList<>(dirtyParts);
                ListSelectionDialog dialog = new ListSelectionDialog(getShell(), parts, ArrayContentProvider.getInstance(), labelProvider, WorkbenchMessages.EditorManager_saveResourcesMessage);
                dialog.setInitialSelections(parts.toArray());
                dialog.setTitle(WorkbenchMessages.EditorManager_saveResourcesTitle);
                if (dialog.open() == IDialogConstants.CANCEL_ID) {
                    return new Save[] { Save.CANCEL };
                }
                Object[] toSave = dialog.getResult();
                Save[] retSaves = new Save[parts.size()];
                Arrays.fill(retSaves, Save.NO);
                for (int i = 0; i < retSaves.length; i++) {
                    MPart part = parts.get(i);
                    for (Object o : toSave) {
                        if (o == part) {
                            retSaves[i] = Save.YES;
                            break;
                        }
                    }
                }
                return retSaves;
            }

            @Override
            public boolean save(MPart dirtyPart, boolean confirm) {
                Object object = dirtyPart.getObject();
                if (object instanceof CompatibilityPart) {
                    IWorkbenchPart workbenchPart = ((CompatibilityPart) object).getPart();
                    if (SaveableHelper.isSaveable(workbenchPart)) {
                        SaveablesList saveablesList = (SaveablesList) PlatformUI.getWorkbench().getService(ISaveablesLifecycleListener.class);
                        Object saveResult = saveablesList.preCloseParts(Collections.singletonList(workbenchPart), true, WorkbenchWindow.this);
                        return saveResult != null;
                    }
                } else if (isSaveOnCloseNotNeededSplitEditorPart(dirtyPart)) {
                    return true;
                }
                return super.save(dirtyPart, confirm);
            }

            private boolean saveParts(ArrayList<MPart> dirtyParts, Save[] decisions) {
                if (decisions == null || decisions.length == 0) {
                    super.saveParts(dirtyParts, true);
                }
                if (dirtyParts.size() != decisions.length) {
                    for (Save decision : decisions) {
                        if (decision == Save.CANCEL) {
                            return false;
                        }
                    }
                }
                List<MPart> dirtyPartsList = Collections.unmodifiableList(new ArrayList<>(dirtyParts));
                for (Save decision : decisions) {
                    if (decision == Save.CANCEL) {
                        return false;
                    }
                }
                for (int i = 0; i < decisions.length; i++) {
                    if (decisions[i] == Save.YES) {
                        if (!save(dirtyPartsList.get(i), false)) {
                            return false;
                        }
                    }
                }
                return true;
            }

            private boolean saveMixedParts(ArrayList<MPart> nonCompParts, ArrayList<IWorkbenchPart> compParts, boolean confirm, boolean addNonPartSources) {
                SaveablesList saveablesList = (SaveablesList) PlatformUI.getWorkbench().getService(ISaveablesLifecycleListener.class);
                if (!confirm) {
                    boolean saved = super.saveParts(nonCompParts, confirm);
                    Object saveResult = saveablesList.preCloseParts(compParts, true, WorkbenchWindow.this);
                    return ((saveResult != null) && saved);
                }
                LabelProvider labelProvider = new LabelProvider() {

                    WorkbenchPartLabelProvider workbenchLabelProvider = new WorkbenchPartLabelProvider();

                    @Override
                    public String getText(Object element) {
                        if (element instanceof Saveable) {
                            return workbenchLabelProvider.getText(element);
                        }
                        return ((MPart) element).getLocalizedLabel();
                    }
                };
                ArrayList<Object> listParts = new ArrayList<>();
                Map<IWorkbenchPart, List<Saveable>> saveableMap = saveablesList.getSaveables(compParts);
                listParts.addAll(nonCompParts);
                LinkedHashSet<Saveable> saveablesSet = new LinkedHashSet<>();
                for (IWorkbenchPart workbenchPart : compParts) {
                    List<Saveable> list = saveableMap.get(workbenchPart);
                    if (list != null) {
                        saveablesSet.addAll(list);
                    }
                }
                if (addNonPartSources) {
                    for (ISaveablesSource nonPartSource : saveablesList.getNonPartSources()) {
                        Saveable[] saveables = nonPartSource.getSaveables();
                        for (Saveable saveable : saveables) {
                            if (saveable.isDirty()) {
                                saveablesSet.add(saveable);
                            }
                        }
                    }
                }
                listParts.addAll(saveablesSet);
                ListSelectionDialog dialog = new ListSelectionDialog(getShell(), listParts, ArrayContentProvider.getInstance(), labelProvider, WorkbenchMessages.EditorManager_saveResourcesMessage);
                dialog.setInitialSelections(listParts.toArray());
                dialog.setTitle(WorkbenchMessages.EditorManager_saveResourcesTitle);
                if (dialog.open() == IDialogConstants.CANCEL_ID) {
                    return false;
                }
                Object[] toSave = dialog.getResult();
                Save[] nonCompatSaves = new Save[nonCompParts.size()];
                Save[] compatSaves = new Save[saveablesSet.size()];
                Arrays.fill(nonCompatSaves, Save.NO);
                Arrays.fill(compatSaves, Save.NO);
                for (int i = 0; i < nonCompatSaves.length; i++) {
                    MPart part = nonCompParts.get(i);
                    for (Object o : toSave) {
                        if (o == part) {
                            nonCompatSaves[i] = Save.YES;
                            break;
                        }
                    }
                }
                Map<Saveable, Save> saveOptionMap = new HashMap<>();
                for (Saveable saveable : saveablesSet) {
                    boolean found = false;
                    for (Object o : toSave) {
                        if (o == saveable) {
                            saveOptionMap.put(saveable, Save.YES);
                            found = true;
                            break;
                        }
                    }
                    if (!found) {
                        saveOptionMap.put(saveable, Save.NO);
                    }
                }
                boolean saved = saveParts(nonCompParts, nonCompatSaves);
                if (!saved) {
                    return saved;
                }
                Object saveResult = saveablesList.preCloseParts(compParts, false, true, WorkbenchWindow.this, saveOptionMap);
                return ((saveResult != null) && saved);
            }

            private void removeSaveOnCloseNotNeededParts(List<IWorkbenchPart> parts) {
                for (Iterator<IWorkbenchPart> it = parts.iterator(); it.hasNext(); ) {
                    IWorkbenchPart part = it.next();
                    ISaveablePart saveable = SaveableHelper.getSaveable(part);
                    if (saveable == null || !saveable.isSaveOnCloseNeeded()) {
                        it.remove();
                    }
                }
            }

            private void removeSaveOnCloseNotNeededSplitEditorParts(List<MPart> parts) {
                for (Iterator<MPart> it = parts.iterator(); it.hasNext(); ) {
                    MPart part = it.next();
                    if (isSaveOnCloseNotNeededSplitEditorPart(part)) {
                        it.remove();
                    }
                }
            }

            private boolean isSaveOnCloseNotNeededSplitEditorPart(MPart part) {
                boolean notNeeded = false;
                if (part instanceof MCompositePart && SplitHost.SPLIT_HOST_CONTRIBUTOR_URI.equals(part.getContributionURI())) {
                    MCompositePart compPart = (MCompositePart) part;
                    List<MPart> elements = modelService.findElements(compPart, null, MPart.class);
                    if (elements != null && elements.size() > 1) {
                        elements.remove(0);
                        for (MPart mpart : elements) {
                            Object object = mpart.getObject();
                            if (object instanceof CompatibilityPart) {
                                IWorkbenchPart workbenchPart = ((CompatibilityPart) object).getPart();
                                if (!SaveableHelper.isSaveable(workbenchPart)) {
                                    notNeeded = true;
                                } else {
                                    ISaveablePart saveable = SaveableHelper.getSaveable(workbenchPart);
                                    if (saveable == null || !saveable.isSaveOnCloseNeeded()) {
                                        notNeeded = true;
                                    } else {
                                        notNeeded = false;
                                        break;
                                    }
                                }
                            } else {
                                notNeeded = false;
                                break;
                            }
                        }
                    }
                }
                return notNeeded;
            }

            @Override
            public boolean saveParts(Collection<MPart> dirtyParts, boolean confirm, boolean closing, boolean addNonPartSources) {
                ArrayList<IWorkbenchPart> saveableParts = new ArrayList<>();
                ArrayList<MPart> nonCompatibilityParts = new ArrayList<>();
                for (MPart part : dirtyParts) {
                    Object object = part.getObject();
                    if (object instanceof CompatibilityPart) {
                        IWorkbenchPart workbenchPart = ((CompatibilityPart) object).getPart();
                        if (SaveableHelper.isSaveable(workbenchPart)) {
                            saveableParts.add(workbenchPart);
                        }
                    } else {
                        nonCompatibilityParts.add(part);
                    }
                }
                if (!saveableParts.isEmpty() && closing) {
                    removeSaveOnCloseNotNeededParts(saveableParts);
                }
                if (!nonCompatibilityParts.isEmpty() && closing) {
                    removeSaveOnCloseNotNeededSplitEditorParts(nonCompatibilityParts);
                }
                if (saveableParts.isEmpty()) {
                    if (nonCompatibilityParts.isEmpty()) {
                        // nothing to save
                        return true;
                    }
                    return super.saveParts(nonCompatibilityParts, confirm);
                } else if (!nonCompatibilityParts.isEmpty()) {
                    return saveMixedParts(nonCompatibilityParts, saveableParts, confirm, addNonPartSources);
                }
                SaveablesList saveablesList = (SaveablesList) PlatformUI.getWorkbench().getService(ISaveablesLifecycleListener.class);
                Object saveResult = saveablesList.preCloseParts(saveableParts, addNonPartSources, true, WorkbenchWindow.this, WorkbenchWindow.this);
                return (saveResult != null);
            }

            @Override
            public boolean saveParts(Collection<MPart> dirtyParts, boolean confirm) {
                return saveParts(dirtyParts, confirm, false, false);
            }
        };
        localSaveHandler.logger = logger;
        windowContext.set(ISaveHandler.class, localSaveHandler);
        windowContext.set(IWorkbenchWindow.class.getName(), this);
        windowContext.set(IPageService.class, this);
        windowContext.set(IPartService.class, partService);
        windowContext.set(ISources.ACTIVE_WORKBENCH_WINDOW_NAME, this);
        windowContext.set(ISources.ACTIVE_WORKBENCH_WINDOW_SHELL_NAME, getShell());
        EContextService cs = windowContext.get(EContextService.class);
        cs.activateContext(IContextService.CONTEXT_ID_WINDOW);
        cs.getActiveContextIds();
        initializeDefaultServices();
        /*
			 * Remove the second QuickAccess control if an older workspace is opened.
			 *
			 * An older workspace will create an ApplicationModel which already contains the
			 * QuickAccess elements, from the old "popuolateTopTrimContribution()" method.
			 * The new implementation of this method doesn't add the QuickAccess elements
			 * anymore but an old workbench.xmi still has these entries in it and so they
			 * need to be removed.
			 */
        cleanLegacyQuickAccessContribution();
        // register with the tracker
        fireWindowOpening();
        configureShell(getShell(), windowContext);
        try {
            page = new WorkbenchPage(this, input);
        } catch (WorkbenchException e) {
            WorkbenchPlugin.log(e);
        }
        menuOverride = new MenuOverrides(page);
        toolbarOverride = new ToolbarOverrides(page);
        ContextInjectionFactory.inject(page, model.getContext());
        windowContext.set(IWorkbenchPage.class, page);
        menuManager.setOverrides(menuOverride);
        ((CoolBarToTrimManager) getCoolBarManager2()).setOverrides(toolbarOverride);
        // Fill the action bars
        fillActionBars(FILL_ALL_ACTION_BARS);
        firePageOpened();
        populateTopTrimContributions();
        populateBottomTrimContributions();
        // Trim gets populated during rendering (?) so make sure we have al/
        // sides. See bug 383269 for details
        modelService.getTrim(model, SideValue.LEFT);
        modelService.getTrim(model, SideValue.RIGHT);
        // move the QuickAccess ToolControl to the correct position (only if
        // it exists)
        positionQuickAccess();
        Shell shell = (Shell) model.getWidget();
        if (model.getMainMenu() == null) {
            mainMenu = modelService.createModelElement(MMenu.class);
            mainMenu.setElementId(IWorkbenchConstants.MAIN_MENU_ID);
            mainMenu.getPersistedState().put(org.eclipse.e4.ui.workbench.IWorkbench.PERSIST_STATE, Boolean.FALSE.toString());
            renderer = (MenuManagerRenderer) rendererFactory.getRenderer(mainMenu, null);
            renderer.linkModelToManager(mainMenu, menuManager);
            renderer.reconcileManagerToModel(menuManager, mainMenu);
            model.setMainMenu(mainMenu);
            final Menu menu = (Menu) engine.createGui(mainMenu, model.getWidget(), model.getContext());
            shell.setMenuBar(menu);
            menuUpdater = () -> {
                try {
                    if (model.getMainMenu() == null || model.getWidget() == null || menu.isDisposed() || mainMenu.getWidget() == null) {
                        return;
                    }
                    MenuManagerRendererFilter.updateElementVisibility(mainMenu, renderer, menuManager, windowContext.getActiveLeaf(), 1, false);
                    menuManager.update(true);
                } finally {
                    canUpdateMenus = true;
                }
            };
            RunAndTrack menuChangeManager = new RunAndTrack() {

                @Override
                public boolean changed(IEclipseContext context) {
                    ExpressionInfo info = new ExpressionInfo();
                    IEclipseContext leafContext = windowContext.getActiveLeaf();
                    MenuManagerRendererFilter.collectInfo(info, mainMenu, renderer, leafContext, true);
                    // if one of these variables change, re-run the RAT
                    for (String name : info.getAccessedVariableNames()) {
                        leafContext.get(name);
                    }
                    if (canUpdateMenus && workbench.getDisplay() != null) {
                        canUpdateMenus = false;
                        workbench.getDisplay().asyncExec(menuUpdater);
                    }
                    return manageChanges;
                }
            };
            windowContext.runAndTrack(menuChangeManager);
        }
        eventBroker.subscribe(UIEvents.UIElement.TOPIC_WIDGET, windowWidgetHandler);
        boolean newWindow = setupPerspectiveStack(windowContext);
        partService.setPage(page);
        page.setPerspective(perspective);
        firePageActivated();
        if (newWindow) {
            page.fireInitialPartVisibilityEvents();
        } else {
            page.updatePerspectiveActionSets();
        }
        updateActionSets();
        IPreferenceStore preferenceStore = PrefUtil.getAPIPreferenceStore();
        boolean enableAnimations = preferenceStore.getBoolean(IWorkbenchPreferenceConstants.ENABLE_ANIMATIONS);
        preferenceStore.setValue(IWorkbenchPreferenceConstants.ENABLE_ANIMATIONS, false);
        // Hack!! don't show the intro if there's more than one open
        // perspective
        List<MPerspective> persps = modelService.findElements(model, null, MPerspective.class, null);
        if (persps.size() > 1) {
            PrefUtil.getAPIPreferenceStore().setValue(IWorkbenchPreferenceConstants.SHOW_INTRO, false);
            PrefUtil.saveAPIPrefs();
        }
        if (Boolean.parseBoolean(getModel().getPersistedState().get(PERSISTED_STATE_RESTORED))) {
            SafeRunnable.run(new SafeRunnable() {

                @Override
                public void run() throws Exception {
                    getWindowAdvisor().postWindowRestore();
                }
            });
        } else {
            getModel().getPersistedState().put(PERSISTED_STATE_RESTORED, Boolean.TRUE.toString());
        }
        getWindowAdvisor().postWindowCreate();
        getWindowAdvisor().openIntro();
        preferenceStore.setValue(IWorkbenchPreferenceConstants.ENABLE_ANIMATIONS, enableAnimations);
        getShell().setData(this);
        trackShellActivation();
        /**
         * When SWT zoom changes for primary monitor, prompt user to restart Eclipse to
         * apply the changes.
         */
        getShell().addListener(SWT.ZoomChanged, event -> {
            if (getShell().getDisplay().getPrimaryMonitor().equals(getShell().getMonitor())) {
                int dialogResponse = MessageDialog.open(MessageDialog.QUESTION, getShell(), WorkbenchMessages.Workbench_zoomChangedTitle, WorkbenchMessages.Workbench_zoomChangedMessage, SWT.NONE, WorkbenchMessages.Workbench_RestartButton, WorkbenchMessages.Workbench_DontRestartButton);
                if (event.doit && dialogResponse == 0) {
                    getWorkbenchImpl().restart(true);
                }
            }
        });
    } finally {
        HandlerServiceImpl.pop();
    }
}
Also used : Arrays(java.util.Arrays) ModeledPageLayout(org.eclipse.ui.internal.e4.compatibility.ModeledPageLayout) UIListenerLogging(org.eclipse.ui.internal.misc.UIListenerLogging) IWorkbenchWindow(org.eclipse.ui.IWorkbenchWindow) EventHandler(org.osgi.service.event.EventHandler) IDialogConstants(org.eclipse.jface.dialogs.IDialogConstants) IServiceLocatorCreator(org.eclipse.ui.internal.services.IServiceLocatorCreator) Point(org.eclipse.swt.graphics.Point) IUpdateService(org.eclipse.e4.ui.internal.workbench.renderers.swt.IUpdateService) PropertyChangeEvent(org.eclipse.jface.util.PropertyChangeEvent) Map(java.util.Map) HandlerServiceImpl(org.eclipse.e4.core.commands.internal.HandlerServiceImpl) IServiceScopes(org.eclipse.ui.services.IServiceScopes) MCompositePart(org.eclipse.e4.ui.model.application.ui.basic.MCompositePart) IWindowCloseHandler(org.eclipse.e4.ui.workbench.modeling.IWindowCloseHandler) MessageDialog(org.eclipse.jface.dialogs.MessageDialog) MApplication(org.eclipse.e4.ui.model.application.MApplication) ServiceLocator(org.eclipse.ui.internal.services.ServiceLocator) ISaveablePart(org.eclipse.ui.ISaveablePart) EContextService(org.eclipse.e4.ui.services.EContextService) LegacyActionPersistence(org.eclipse.ui.internal.menus.LegacyActionPersistence) IEvaluationService(org.eclipse.ui.services.IEvaluationService) PlatformUI(org.eclipse.ui.PlatformUI) MenuManager(org.eclipse.jface.action.MenuManager) IActionSetDescriptor(org.eclipse.ui.internal.registry.IActionSetDescriptor) Assert(org.eclipse.core.runtime.Assert) Set(java.util.Set) IHandler(org.eclipse.core.commands.IHandler) InvocationTargetException(java.lang.reflect.InvocationTargetException) MTrimElement(org.eclipse.e4.ui.model.application.ui.basic.MTrimElement) GroupMarker(org.eclipse.jface.action.GroupMarker) ExpressionInfo(org.eclipse.core.expressions.ExpressionInfo) WorkbenchPartLabelProvider(org.eclipse.ui.model.WorkbenchPartLabelProvider) Saveable(org.eclipse.ui.Saveable) MTrimmedWindow(org.eclipse.e4.ui.model.application.ui.basic.MTrimmedWindow) TrimBarLayout(org.eclipse.e4.ui.workbench.renderers.swt.TrimBarLayout) SWT(org.eclipse.swt.SWT) SlaveCommandService(org.eclipse.ui.internal.commands.SlaveCommandService) IPageService(org.eclipse.ui.IPageService) MToolControl(org.eclipse.e4.ui.model.application.ui.menu.MToolControl) IActionSetsListener(org.eclipse.ui.internal.menus.IActionSetsListener) MPerspective(org.eclipse.e4.ui.model.application.ui.advanced.MPerspective) IWorkbenchPartReference(org.eclipse.ui.IWorkbenchPartReference) UIEventTopic(org.eclipse.e4.ui.di.UIEventTopic) SelectionService(org.eclipse.ui.internal.e4.compatibility.SelectionService) BusyIndicator(org.eclipse.swt.custom.BusyIndicator) EPartService(org.eclipse.e4.ui.workbench.modeling.EPartService) ICoolBarManager2(org.eclipse.jface.internal.provisional.action.ICoolBarManager2) ICommandService(org.eclipse.ui.commands.ICommandService) ListenerList(org.eclipse.core.runtime.ListenerList) Position(org.eclipse.e4.ui.model.internal.Position) MUIElement(org.eclipse.e4.ui.model.application.ui.MUIElement) SplitHost(org.eclipse.e4.ui.workbench.addons.splitteraddon.SplitHost) ArrayList(java.util.ArrayList) SideValue(org.eclipse.e4.ui.model.application.ui.SideValue) IWorkbenchPart(org.eclipse.ui.IWorkbenchPart) MPerspectiveStack(org.eclipse.e4.ui.model.application.ui.advanced.MPerspectiveStack) IConfigurationElement(org.eclipse.core.runtime.IConfigurationElement) MWindow(org.eclipse.e4.ui.model.application.ui.basic.MWindow) IPropertyChangeListener(org.eclipse.jface.util.IPropertyChangeListener) LinkedHashSet(java.util.LinkedHashSet) IActionCommandMappingService(org.eclipse.ui.internal.handlers.IActionCommandMappingService) LegacyHandlerService(org.eclipse.ui.internal.handlers.LegacyHandlerService) Shell(org.eclipse.swt.widgets.Shell) MMenu(org.eclipse.e4.ui.model.application.ui.menu.MMenu) MenuManagerRenderer(org.eclipse.e4.ui.workbench.renderers.swt.MenuManagerRenderer) ActiveShellExpression(org.eclipse.ui.ActiveShellExpression) EcoreUtil(org.eclipse.emf.ecore.util.EcoreUtil) ISaveablesLifecycleListener(org.eclipse.ui.ISaveablesLifecycleListener) IEvaluationContext(org.eclipse.core.expressions.IEvaluationContext) IPresentationEngine(org.eclipse.e4.ui.workbench.IPresentationEngine) ActionCommandMappingService(org.eclipse.ui.internal.handlers.ActionCommandMappingService) ShellAdapter(org.eclipse.swt.events.ShellAdapter) PrefUtil(org.eclipse.ui.internal.util.PrefUtil) MenuManagerRendererFilter(org.eclipse.e4.ui.workbench.renderers.swt.MenuManagerRendererFilter) EModelService(org.eclipse.e4.ui.workbench.modeling.EModelService) CustomizePerspectiveDialog(org.eclipse.ui.internal.dialogs.cpd.CustomizePerspectiveDialog) IMenuManager(org.eclipse.jface.action.IMenuManager) SubContributionItem(org.eclipse.jface.action.SubContributionItem) IContextService(org.eclipse.ui.contexts.IContextService) IRunnableWithProgress(org.eclipse.jface.operation.IRunnableWithProgress) Platform(org.eclipse.core.runtime.Platform) ModalContext(org.eclipse.jface.operation.ModalContext) IEventBroker(org.eclipse.e4.core.services.events.IEventBroker) StartupRunnable(org.eclipse.ui.internal.StartupThreading.StartupRunnable) Event(org.osgi.service.event.Event) IPartService(org.eclipse.ui.IPartService) CoolBarManager2(org.eclipse.jface.internal.provisional.action.CoolBarManager2) IExtensionTracker(org.eclipse.core.runtime.dynamichelpers.IExtensionTracker) ContextInjectionFactory(org.eclipse.e4.core.contexts.ContextInjectionFactory) UIEvents(org.eclipse.e4.ui.workbench.UIEvents) WorkbenchException(org.eclipse.ui.WorkbenchException) IPreferenceStore(org.eclipse.jface.preference.IPreferenceStore) WorkbenchAdvisor(org.eclipse.ui.application.WorkbenchAdvisor) URIHelper(org.eclipse.e4.ui.internal.workbench.URIHelper) TextProcessor(org.eclipse.osgi.util.TextProcessor) IAction(org.eclipse.jface.action.IAction) IMenuService(org.eclipse.ui.menus.IMenuService) IWorkbenchRegistryConstants(org.eclipse.ui.internal.registry.IWorkbenchRegistryConstants) IToolBarManager(org.eclipse.jface.action.IToolBarManager) ISaveablesSource(org.eclipse.ui.ISaveablesSource) UIExtensionTracker(org.eclipse.ui.internal.registry.UIExtensionTracker) SlaveMenuService(org.eclipse.ui.internal.menus.SlaveMenuService) PreDestroy(javax.annotation.PreDestroy) ActionHandler(org.eclipse.jface.commands.ActionHandler) IExtensionRegistry(org.eclipse.core.runtime.IExtensionRegistry) PositionInfo(org.eclipse.e4.ui.model.internal.PositionInfo) IToolBarManager2(org.eclipse.jface.internal.provisional.action.IToolBarManager2) MMenuElement(org.eclipse.e4.ui.model.application.ui.menu.MMenuElement) IContributionManagerOverrides(org.eclipse.jface.action.IContributionManagerOverrides) IActionBarConfigurer2(org.eclipse.ui.internal.provisional.application.IActionBarConfigurer2) ProgressRegion(org.eclipse.ui.internal.progress.ProgressRegion) ToolBarManager2(org.eclipse.jface.internal.provisional.action.ToolBarManager2) IRendererFactory(org.eclipse.e4.ui.workbench.swt.factories.IRendererFactory) MElementContainer(org.eclipse.e4.ui.model.application.ui.MElementContainer) IAdaptable(org.eclipse.core.runtime.IAdaptable) NLS(org.eclipse.osgi.util.NLS) IBindingService(org.eclipse.ui.keys.IBindingService) Collection(java.util.Collection) EObject(org.eclipse.emf.ecore.EObject) Optional(org.eclipse.e4.core.di.annotations.Optional) Display(org.eclipse.swt.widgets.Display) ContextService(org.eclipse.ui.internal.contexts.ContextService) ArrayContentProvider(org.eclipse.jface.viewers.ArrayContentProvider) IWorkbenchPage(org.eclipse.ui.IWorkbenchPage) IHandlerService(org.eclipse.ui.handlers.IHandlerService) List(java.util.List) CoolBarManager(org.eclipse.jface.action.CoolBarManager) IPerspectiveDescriptor(org.eclipse.ui.IPerspectiveDescriptor) IViewDescriptor(org.eclipse.ui.views.IViewDescriptor) Entry(java.util.Map.Entry) PostConstruct(javax.annotation.PostConstruct) IHandlerActivation(org.eclipse.ui.handlers.IHandlerActivation) WorkbenchWindowAdvisor(org.eclipse.ui.application.WorkbenchWindowAdvisor) CompatibilityPart(org.eclipse.ui.internal.e4.compatibility.CompatibilityPart) SafeRunnable(org.eclipse.jface.util.SafeRunnable) PartServiceSaveHandler(org.eclipse.e4.ui.internal.workbench.PartServiceSaveHandler) ISelectionService(org.eclipse.ui.ISelectionService) ToolBarManagerRenderer(org.eclipse.e4.ui.workbench.renderers.swt.ToolBarManagerRenderer) IPerspectiveRegistry(org.eclipse.ui.IPerspectiveRegistry) EvaluationReference(org.eclipse.ui.internal.services.EvaluationReference) Rectangle(org.eclipse.swt.graphics.Rectangle) HashMap(java.util.HashMap) Logger(org.eclipse.e4.core.services.log.Logger) IWorkbenchLocationService(org.eclipse.ui.internal.services.IWorkbenchLocationService) HashSet(java.util.HashSet) Inject(javax.inject.Inject) TrimmedPartLayout(org.eclipse.e4.ui.workbench.renderers.swt.TrimmedPartLayout) Expression(org.eclipse.core.expressions.Expression) MPlaceholder(org.eclipse.e4.ui.model.application.ui.advanced.MPlaceholder) MPart(org.eclipse.e4.ui.model.application.ui.basic.MPart) ContextFunction(org.eclipse.e4.core.contexts.ContextFunction) IEclipseContext(org.eclipse.e4.core.contexts.IEclipseContext) IWorkbenchPreferenceConstants(org.eclipse.ui.IWorkbenchPreferenceConstants) RunAndTrack(org.eclipse.e4.core.contexts.RunAndTrack) WorkbenchLocationService(org.eclipse.ui.internal.services.WorkbenchLocationService) ICoolBarManager(org.eclipse.jface.action.ICoolBarManager) IWorkbenchActionConstants(org.eclipse.ui.IWorkbenchActionConstants) Iterator(java.util.Iterator) Layout(org.eclipse.swt.widgets.Layout) IPageListener(org.eclipse.ui.IPageListener) E4Workbench(org.eclipse.e4.ui.internal.workbench.E4Workbench) ISaveHandler(org.eclipse.e4.ui.workbench.modeling.ISaveHandler) ShellEvent(org.eclipse.swt.events.ShellEvent) StatusLineManager(org.eclipse.jface.action.StatusLineManager) InjectionException(org.eclipse.e4.core.di.InjectionException) MTrimBar(org.eclipse.e4.ui.model.application.ui.basic.MTrimBar) ActionBarAdvisor(org.eclipse.ui.application.ActionBarAdvisor) CommandAction(org.eclipse.ui.internal.actions.CommandAction) NullProgressMonitor(org.eclipse.core.runtime.NullProgressMonitor) ListSelectionDialog(org.eclipse.ui.dialogs.ListSelectionDialog) IContributionItem(org.eclipse.jface.action.IContributionItem) IWorkbench(org.eclipse.ui.IWorkbench) Menu(org.eclipse.swt.widgets.Menu) Collections(java.util.Collections) LabelProvider(org.eclipse.jface.viewers.LabelProvider) Control(org.eclipse.swt.widgets.Control) ISources(org.eclipse.ui.ISources) LinkedHashSet(java.util.LinkedHashSet) MPart(org.eclipse.e4.ui.model.application.ui.basic.MPart) ISaveHandler(org.eclipse.e4.ui.workbench.modeling.ISaveHandler) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) ISaveablesLifecycleListener(org.eclipse.ui.ISaveablesLifecycleListener) PartServiceSaveHandler(org.eclipse.e4.ui.internal.workbench.PartServiceSaveHandler) MPerspective(org.eclipse.e4.ui.model.application.ui.advanced.MPerspective) IWorkbenchPage(org.eclipse.ui.IWorkbenchPage) CompatibilityPart(org.eclipse.ui.internal.e4.compatibility.CompatibilityPart) IWorkbenchPart(org.eclipse.ui.IWorkbenchPart) ListenerList(org.eclipse.core.runtime.ListenerList) ArrayList(java.util.ArrayList) List(java.util.List) IServiceLocatorCreator(org.eclipse.ui.internal.services.IServiceLocatorCreator) Saveable(org.eclipse.ui.Saveable) SafeRunnable(org.eclipse.jface.util.SafeRunnable) EContextService(org.eclipse.e4.ui.services.EContextService) WorkbenchException(org.eclipse.ui.WorkbenchException) ExpressionInfo(org.eclipse.core.expressions.ExpressionInfo) MMenu(org.eclipse.e4.ui.model.application.ui.menu.MMenu) ContextFunction(org.eclipse.e4.core.contexts.ContextFunction) ISaveablesSource(org.eclipse.ui.ISaveablesSource) Collection(java.util.Collection) EObject(org.eclipse.emf.ecore.EObject) MCompositePart(org.eclipse.e4.ui.model.application.ui.basic.MCompositePart) ISaveablePart(org.eclipse.ui.ISaveablePart) Shell(org.eclipse.swt.widgets.Shell) MMenu(org.eclipse.e4.ui.model.application.ui.menu.MMenu) Menu(org.eclipse.swt.widgets.Menu) UIExtensionTracker(org.eclipse.ui.internal.registry.UIExtensionTracker) IWindowCloseHandler(org.eclipse.e4.ui.workbench.modeling.IWindowCloseHandler) IExtensionTracker(org.eclipse.core.runtime.dynamichelpers.IExtensionTracker) UIExtensionTracker(org.eclipse.ui.internal.registry.UIExtensionTracker) IWorkbenchWindow(org.eclipse.ui.IWorkbenchWindow) Point(org.eclipse.swt.graphics.Point) WorkbenchPartLabelProvider(org.eclipse.ui.model.WorkbenchPartLabelProvider) InvocationTargetException(java.lang.reflect.InvocationTargetException) WorkbenchException(org.eclipse.ui.WorkbenchException) InjectionException(org.eclipse.e4.core.di.InjectionException) RunAndTrack(org.eclipse.e4.core.contexts.RunAndTrack) IEclipseContext(org.eclipse.e4.core.contexts.IEclipseContext) IPreferenceStore(org.eclipse.jface.preference.IPreferenceStore) WorkbenchPartLabelProvider(org.eclipse.ui.model.WorkbenchPartLabelProvider) LabelProvider(org.eclipse.jface.viewers.LabelProvider) ListSelectionDialog(org.eclipse.ui.dialogs.ListSelectionDialog) PostConstruct(javax.annotation.PostConstruct)

Example 2 with IServiceLocatorCreator

use of org.eclipse.ui.internal.services.IServiceLocatorCreator in project eclipse.platform.ui by eclipse-platform.

the class MultiPageEditorPart method getPageSite.

/**
 * Returns the service locator for the given page index. This method can be used
 * to create service locators for pages that are just controls. The page index
 * must be valid.
 * <p>
 * This will return the editor site service locator for an editor, and create
 * one for a page that is just a control.
 * </p>
 *
 * @param pageIndex the index of the page
 * @return the editor for the specified page, or <code>null</code> if the
 *         specified page was not created with
 *         <code>addPage(IEditorPart,IEditorInput)</code>
 * @since 3.4
 */
protected final IServiceLocator getPageSite(int pageIndex) {
    if (pageIndex == PAGE_CONTAINER_SITE) {
        return getPageContainerSite();
    }
    Item item = getItem(pageIndex);
    if (item != null) {
        Object data = item.getData();
        if (data instanceof IEditorPart) {
            return ((IEditorPart) data).getSite();
        } else if (data instanceof IServiceLocator) {
            return (IServiceLocator) data;
        } else if (data == null) {
            IServiceLocatorCreator slc = getSite().getService(IServiceLocatorCreator.class);
            IServiceLocator sl = slc.createServiceLocator(getSite(), null, this::close);
            item.setData(sl);
            pageSites.add(sl);
            return sl;
        }
    }
    return null;
}
Also used : Item(org.eclipse.swt.widgets.Item) CTabItem(org.eclipse.swt.custom.CTabItem) IServiceLocator(org.eclipse.ui.services.IServiceLocator) IEditorPart(org.eclipse.ui.IEditorPart) IServiceLocatorCreator(org.eclipse.ui.internal.services.IServiceLocatorCreator)

Example 3 with IServiceLocatorCreator

use of org.eclipse.ui.internal.services.IServiceLocatorCreator in project eclipse.platform.ui by eclipse-platform.

the class ContributedServiceTest method testLocalServiceCreated.

@Test
// TODO
@Ignore
public void testLocalServiceCreated() throws Exception {
    IServiceLocator parent = getWorkbench().getActiveWorkbenchWindow();
    IWorkbenchLocationService wls = parent.getService(IWorkbenchLocationService.class);
    assertNotNull(wls.getWorkbenchWindow());
    IServiceLocatorCreator lc = parent.getService(IServiceLocatorCreator.class);
    IServiceLocator locator = lc.createServiceLocator(parent, null, () -> {
    });
    ILevelService l = locator.getService(ILevelService.class);
    assertNotNull(l);
    assertEquals(3, l.getLevel());
    assertEquals(3, LevelServiceFactory.instancesCreated);
    if (locator instanceof IDisposable) {
        ((IDisposable) locator).dispose();
    }
    locator = lc.createServiceLocator(parent, null, () -> {
    });
    l = locator.getService(ILevelService.class);
    assertNotNull(l);
    assertEquals(3, l.getLevel());
    assertEquals(4, LevelServiceFactory.instancesCreated);
    if (locator instanceof IDisposable) {
        ((IDisposable) locator).dispose();
    }
    locator = lc.createServiceLocator(parent, new TempLevelFactory(8), () -> {
    });
    l = locator.getService(ILevelService.class);
    assertNotNull(l);
    assertEquals(8, l.getLevel());
    assertEquals(4, LevelServiceFactory.instancesCreated);
    if (locator instanceof IDisposable) {
        ((IDisposable) locator).dispose();
    }
}
Also used : IWorkbenchLocationService(org.eclipse.ui.internal.services.IWorkbenchLocationService) IServiceLocator(org.eclipse.ui.services.IServiceLocator) IServiceLocatorCreator(org.eclipse.ui.internal.services.IServiceLocatorCreator) IDisposable(org.eclipse.ui.services.IDisposable) Ignore(org.junit.Ignore) Test(org.junit.Test)

Example 4 with IServiceLocatorCreator

use of org.eclipse.ui.internal.services.IServiceLocatorCreator in project eclipse.platform.ui by eclipse-platform.

the class MultiPageEditorPart method getPageContainerSite.

/**
 * @return A site that can be used with a header.
 * @since 3.4
 * @see #createPageContainer(Composite)
 * @see #PAGE_CONTAINER_SITE
 * @see #getPageSite(int)
 */
private IServiceLocator getPageContainerSite() {
    if (pageContainerSite == null) {
        IServiceLocatorCreator slc = getSite().getService(IServiceLocatorCreator.class);
        pageContainerSite = slc.createServiceLocator(getSite(), null, this::close);
    }
    return pageContainerSite;
}
Also used : IServiceLocatorCreator(org.eclipse.ui.internal.services.IServiceLocatorCreator)

Example 5 with IServiceLocatorCreator

use of org.eclipse.ui.internal.services.IServiceLocatorCreator in project eclipse.platform.ui by eclipse-platform.

the class ContributedServiceTest method testLocalDialogService.

@Test
// TODO
@Ignore
public void testLocalDialogService() throws Exception {
    IServiceLocator parent = getWorkbench();
    IServiceLocatorCreator lc = parent.getService(IServiceLocatorCreator.class);
    IServiceLocator locator = lc.createServiceLocator(parent, new AbstractServiceFactory() {

        @Override
        public Object create(Class serviceInterface, IServiceLocator parentLocator, IServiceLocator locator) {
            if (IWorkbenchLocationService.class.equals(serviceInterface)) {
                IWorkbenchLocationService wls = parentLocator.getService(IWorkbenchLocationService.class);
                return new WorkbenchLocationService(IServiceScopes.DIALOG_SCOPE, wls.getWorkbench(), null, null, null, null, wls.getServiceLevel() + 1);
            }
            return null;
        }
    }, () -> {
    });
    IWorkbenchLocationService wls = locator.getService(IWorkbenchLocationService.class);
    assertNotNull(wls.getWorkbench());
    assertNull(wls.getWorkbenchWindow());
    assertEquals(1, wls.getServiceLevel());
    assertEquals(IServiceScopes.DIALOG_SCOPE, wls.getServiceScope());
}
Also used : AbstractServiceFactory(org.eclipse.ui.services.AbstractServiceFactory) IWorkbenchLocationService(org.eclipse.ui.internal.services.IWorkbenchLocationService) IWorkbenchLocationService(org.eclipse.ui.internal.services.IWorkbenchLocationService) WorkbenchLocationService(org.eclipse.ui.internal.services.WorkbenchLocationService) IServiceLocator(org.eclipse.ui.services.IServiceLocator) IServiceLocatorCreator(org.eclipse.ui.internal.services.IServiceLocatorCreator) Ignore(org.junit.Ignore) Test(org.junit.Test)

Aggregations

IServiceLocatorCreator (org.eclipse.ui.internal.services.IServiceLocatorCreator)5 IWorkbenchLocationService (org.eclipse.ui.internal.services.IWorkbenchLocationService)3 IServiceLocator (org.eclipse.ui.services.IServiceLocator)3 InvocationTargetException (java.lang.reflect.InvocationTargetException)1 ArrayList (java.util.ArrayList)1 Arrays (java.util.Arrays)1 Collection (java.util.Collection)1 Collections (java.util.Collections)1 HashMap (java.util.HashMap)1 HashSet (java.util.HashSet)1 Iterator (java.util.Iterator)1 LinkedHashSet (java.util.LinkedHashSet)1 List (java.util.List)1 Map (java.util.Map)1 Entry (java.util.Map.Entry)1 Set (java.util.Set)1 PostConstruct (javax.annotation.PostConstruct)1 PreDestroy (javax.annotation.PreDestroy)1 Inject (javax.inject.Inject)1 IHandler (org.eclipse.core.commands.IHandler)1