use of org.eclipse.ui.internal.services.ServiceLocator 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();
}
}
use of org.eclipse.ui.internal.services.ServiceLocator in project eclipse.platform.ui by eclipse-platform.
the class MenuAdditionCacheEntry method addMenuChildren.
private void addMenuChildren(final MElementContainer<MMenuElement> container, IConfigurationElement parent, String filter) {
for (final IConfigurationElement child : parent.getChildren()) {
String itemType = child.getName();
String id = MenuHelper.getId(child);
if (IWorkbenchRegistryConstants.TAG_COMMAND.equals(itemType)) {
MMenuElement element = createMenuCommandAddition(child);
container.getChildren().add(element);
} else if (IWorkbenchRegistryConstants.TAG_SEPARATOR.equals(itemType)) {
MMenuElement element = createMenuSeparatorAddition(child);
container.getChildren().add(element);
} else if (IWorkbenchRegistryConstants.TAG_MENU.equals(itemType)) {
MMenu element = createMenuAddition(child, filter);
container.getChildren().add(element);
} else if (IWorkbenchRegistryConstants.TAG_TOOLBAR.equals(itemType)) {
// $NON-NLS-1$//$NON-NLS-2$
System.out.println("Toolbar: " + id + " in " + location);
} else if (IWorkbenchRegistryConstants.TAG_DYNAMIC.equals(itemType)) {
ContextFunction generator = new ContextFunction() {
@Override
public Object compute(IEclipseContext context, String contextKey) {
ServiceLocator sl = new ServiceLocator();
sl.setContext(context);
return new DynamicMenuContributionItem(MenuHelper.getId(child), sl, child);
}
};
MMenuItem menuItem = RenderedElementUtil.createRenderedMenuItem();
menuItem.setElementId(id);
RenderedElementUtil.setContributionManager(menuItem, generator);
menuItem.setVisibleWhen(MenuHelper.getVisibleWhen(child));
container.getChildren().add(menuItem);
}
}
}
use of org.eclipse.ui.internal.services.ServiceLocator in project eclipse.platform.ui by eclipse-platform.
the class MenuAdditionCacheEntry method processToolbarChildren.
private void processToolbarChildren(ArrayList<MToolBarContribution> contributions, IConfigurationElement toolbar, String parentId, String position, boolean hasAdditions) {
MToolBarContribution toolBarContribution = MenuFactoryImpl.eINSTANCE.createToolBarContribution();
toolBarContribution.getPersistedState().put(IWorkbench.PERSIST_STATE, Boolean.FALSE.toString());
String idContrib = MenuHelper.getId(toolbar);
if (idContrib != null && idContrib.length() > 0) {
toolBarContribution.setElementId(idContrib);
}
toolBarContribution.setParentId(parentId);
toolBarContribution.setPositionInParent(position);
// $NON-NLS-1$
toolBarContribution.getTags().add("scheme:" + location.getScheme());
for (final IConfigurationElement child : toolbar.getChildren()) {
String itemType = child.getName();
if (IWorkbenchRegistryConstants.TAG_COMMAND.equals(itemType)) {
MToolBarElement element = createToolBarCommandAddition(child);
toolBarContribution.getChildren().add(element);
} else if (IWorkbenchRegistryConstants.TAG_SEPARATOR.equals(itemType)) {
MToolBarElement element = createToolBarSeparatorAddition(child);
toolBarContribution.getChildren().add(element);
} else if (IWorkbenchRegistryConstants.TAG_CONTROL.equals(itemType)) {
MToolBarElement element = createToolControlAddition(child);
toolBarContribution.getChildren().add(element);
} else if (IWorkbenchRegistryConstants.TAG_DYNAMIC.equals(itemType)) {
ContextFunction generator = new ContextFunction() {
@Override
public Object compute(IEclipseContext context, String contextKey) {
ServiceLocator sl = new ServiceLocator();
sl.setContext(context);
return new DynamicToolBarContributionItem(MenuHelper.getId(child), sl, child);
}
};
MToolBarElement element = createToolDynamicAddition(child);
RenderedElementUtil.setContributionManager(element, generator);
toolBarContribution.getChildren().add(element);
}
}
if (hasAdditions) {
contributions.add(0, toolBarContribution);
} else {
contributions.add(toolBarContribution);
}
}
use of org.eclipse.ui.internal.services.ServiceLocator in project eclipse.platform.ui by eclipse-platform.
the class Workbench method initializeDefaultServices.
/**
* Initializes all of the default services for the workbench. For initializing
* the command-based services, this also parses the registry and hooks up all
* the required listeners.
*/
private void initializeDefaultServices() {
final IContributionService contributionService = new ContributionService(getAdvisor());
serviceLocator.registerService(IContributionService.class, contributionService);
// TODO Correctly order service initialization
// there needs to be some serious consideration given to
// the services, and hooking them up in the correct order
final IEvaluationService evaluationService = serviceLocator.getService(IEvaluationService.class);
StartupThreading.runWithoutExceptions(new StartupRunnable() {
@Override
public void runWithException() {
serviceLocator.registerService(ISaveablesLifecycleListener.class, new SaveablesList());
}
});
/*
* Phase 1 of the initialization of commands. When this phase completes, all the
* services and managers will exist, and be accessible via the
* getService(Object) method.
*/
StartupThreading.runWithoutExceptions(new StartupRunnable() {
@Override
public void runWithException() {
Command.DEBUG_COMMAND_EXECUTION = Policy.DEBUG_COMMANDS;
commandManager = e4Context.get(CommandManager.class);
}
});
final CommandService[] commandService = new CommandService[1];
StartupThreading.runWithoutExceptions(new StartupRunnable() {
@Override
public void runWithException() {
commandService[0] = initializeCommandService(e4Context);
}
});
StartupThreading.runWithoutExceptions(new StartupRunnable() {
@Override
public void runWithException() {
ContextManager.DEBUG = Policy.DEBUG_CONTEXTS;
contextManager = e4Context.get(ContextManager.class);
}
});
IContextService cxs = ContextInjectionFactory.make(ContextService.class, e4Context);
final IContextService contextService = cxs;
StartupThreading.runWithoutExceptions(new StartupRunnable() {
@Override
public void runWithException() {
contextManager.addContextManagerListener(contextManagerEvent -> {
if (contextManagerEvent.isContextChanged()) {
String id = contextManagerEvent.getContextId();
if (id != null) {
defineBindingTable(id);
}
}
});
EContextService ecs = e4Context.get(EContextService.class);
ecs.activateContext(IContextService.CONTEXT_ID_DIALOG_AND_WINDOW);
}
});
serviceLocator.registerService(IContextService.class, contextService);
final IBindingService[] bindingService = new BindingService[1];
StartupThreading.runWithoutExceptions(new StartupRunnable() {
@Override
public void runWithException() {
BindingManager.DEBUG = Policy.DEBUG_KEY_BINDINGS;
bindingManager = e4Context.get(BindingManager.class);
bindingService[0] = ContextInjectionFactory.make(BindingService.class, e4Context);
}
});
// bindingService[0].readRegistryAndPreferences(commandService[0]);
serviceLocator.registerService(IBindingService.class, bindingService[0]);
final CommandImageManager commandImageManager = new CommandImageManager();
final CommandImageService commandImageService = new CommandImageService(commandImageManager, commandService[0]);
commandImageService.readRegistry();
serviceLocator.registerService(ICommandImageService.class, commandImageService);
final WorkbenchMenuService menuService = new WorkbenchMenuService(serviceLocator, e4Context);
serviceLocator.registerService(IMenuService.class, menuService);
// the service must be registered before it is initialized - its
// initialization uses the service locator to address a dependency on
// the menu service
StartupThreading.runWithoutExceptions(new StartupRunnable() {
@Override
public void runWithException() {
menuService.readRegistry();
}
});
/*
* Phase 2 of the initialization of commands. The source providers that the
* workbench provides are creating and registered with the above services. These
* source providers notify the services when particular pieces of workbench
* state change.
*/
final SourceProviderService sourceProviderService = new SourceProviderService(serviceLocator);
serviceLocator.registerService(ISourceProviderService.class, sourceProviderService);
StartupThreading.runWithoutExceptions(new StartupRunnable() {
@Override
public void runWithException() {
// this currently instantiates all players ... sigh
sourceProviderService.readRegistry();
ISourceProvider[] sourceproviders = sourceProviderService.getSourceProviders();
for (ISourceProvider sp : sourceproviders) {
evaluationService.addSourceProvider(sp);
if (!(sp instanceof ActiveContextSourceProvider)) {
contextService.addSourceProvider(sp);
}
}
}
});
StartupThreading.runWithoutExceptions(new StartupRunnable() {
@Override
public void runWithException() {
// these guys are need to provide the variables they say
// they source
FocusControlSourceProvider focusControl = (FocusControlSourceProvider) sourceProviderService.getSourceProvider(ISources.ACTIVE_FOCUS_CONTROL_ID_NAME);
serviceLocator.registerService(IFocusService.class, focusControl);
menuSourceProvider = (MenuSourceProvider) sourceProviderService.getSourceProvider(ISources.ACTIVE_MENU_NAME);
}
});
/*
* Phase 3 of the initialization of commands. This handles the creation of
* wrappers for legacy APIs. By the time this phase completes, any code trying
* to access commands through legacy APIs should work.
*/
final IHandlerService[] handlerService = new IHandlerService[1];
StartupThreading.runWithoutExceptions(new StartupRunnable() {
@Override
public void runWithException() {
handlerService[0] = new LegacyHandlerService(e4Context);
e4Context.set(IHandlerService.class, handlerService[0]);
handlerService[0].readRegistry();
}
});
workbenchContextSupport = new WorkbenchContextSupport(this, contextManager);
workbenchCommandSupport = new WorkbenchCommandSupport(bindingManager, commandManager, contextManager, handlerService[0]);
initializeCommandResolver();
bindingManager.addBindingManagerListener(bindingManagerListener);
serviceLocator.registerService(ISelectionConversionService.class, new SelectionConversionService());
backForwardListener = createBackForwardListener();
StartupThreading.runWithoutExceptions(new StartupRunnable() {
@Override
public void runWithException() {
getDisplay().addFilter(SWT.MouseDown, backForwardListener);
}
});
}
use of org.eclipse.ui.internal.services.ServiceLocator in project eclipse.platform.ui by eclipse-platform.
the class ContributionFactoryGenerator method compute.
@Override
public Object compute(IEclipseContext context, String contextKey) {
AbstractContributionFactory factory = getFactory();
final IMenuService menuService = context.get(IMenuService.class);
final ContributionRoot root = new ContributionRoot(menuService, new HashSet<>(), null, factory);
ServiceLocator sl = new ServiceLocator();
sl.setContext(context);
factory.createContributionItems(sl, root);
final List contributionItems = root.getItems();
final Map<IContributionItem, Expression> itemsToExpression = root.getVisibleWhen();
List<MUIElement> menuElements = new ArrayList<>();
for (Object obj : contributionItems) {
if (obj instanceof IContributionItem) {
IContributionItem ici = (IContributionItem) obj;
MUIElement opaqueItem = createUIElement(ici);
if (opaqueItem != null) {
if (itemsToExpression.containsKey(ici)) {
final Expression ex = itemsToExpression.get(ici);
MCoreExpression exp = UiFactoryImpl.eINSTANCE.createCoreExpression();
// $NON-NLS-1$
exp.setCoreExpressionId("programmatic." + ici.getId());
exp.setCoreExpression(ex);
opaqueItem.setVisibleWhen(exp);
}
menuElements.add(opaqueItem);
}
}
}
context.set(List.class, menuElements);
// return something disposable
return (Runnable) root::release;
}
Aggregations