Kontext ovlivňuje výběr příkazů, které jsou uživateli k dispozici ve kterýkoli daný moment. Kontexty jsou dynamičtější než aktivity. Zatímco aktivita je širší skupinou funkcí, která je uživateli k dispozici většinu času, kontexty definují zaměření uživatele po určitou dobu. Například příkazy dostupné uživateli během editace textu se mohou odlišovat od příkazů dostupných uživateli při editaci textu Java nebo při prohlížení balíčků v Průzkumníku balíčků.
Kontexty se deklarují v bodě rozšíření org.eclipse.ui.contexts. Prohlédněte si následující kontext definovaný pro editaci textu:
<extension point="org.eclipse.ui.contexts"> <context name="%context.editingText.name" description="%context.editingText.description" id="org.eclipse.ui.textEditorScope" parentId="org.eclipse.ui.contexts.window"> </context>Kontextům se přiřazuje název a popis pro účely informování uživatele o kontextu. ID kontextu se používá k navazování vložených prvků uživatelského rozhraní, např. příkazů, na určitý kontext.
Kontexty mají hierarchickou povahu. Je-li aktivní určitý kontext, jsou k dispozici příkazy dostupné v kontextu a dále nadřízené kontexty. Tuto vlastnost lze použít k definování úrovní kontextů, které tak lze odstupňovat od velmi obecných situací ke speciálním kontextům. Povšimněte si v definici kontextu uvedené výše, že je kontextu přiřazen jednoznačný identifikátor nadřízeného prvku:
<context name="%context.editingText.name" description="%context.editingText.description" id="org.eclipse.ui.textEditorScope" parentId="org.eclipse.ui.contexts.window"> </context>Nadřízený kontext definuje obecnější kontext práce v okně. Jemu nadřízený prvek definuje ještě více obecný kontext práce v okně, resp. v dialogovém okně.
<context name="%context.window.name" description="%context.window.description" id="org.eclipse.ui.contexts.window" parentId="org.eclipse.ui.contexts.dialogAndWindow"> </context> <context name="%context.dialogAndWindow.name" description="%context.dialogAndWindow.description" id="org.eclipse.ui.contexts.dialogAndWindow"> </context>
Dosud se nám podařilo definovat hierarchii kontextů. Kontext je užitečný, když je na něj odkazováno v popisu jiného příspěvku uživatelského rozhraní. Nejběžnějším použitím kontextů jsou vazby kláves. Je-li určité vazbě kláves přiřazen kontext, bude tato vazba kláves aktivní pouze pokud bude uživatel v tomto kontextu. Například následující markup definuje kořenové dialogové okno a kontext okna jako kontext vazby kláves:
<extension point="org.eclipse.ui.bindings"> <key sequence="M1+X" contextId="org.eclipse.ui.contexts.dialogAndWindow" commandId="org.eclipse.ui.edit.cut" schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"/> </extension>
Podpora kontextů pracovní plochy obsahuje rozhraní API, jež je určeno k práci s definovanými kontexty a definujícími kritérii zpřístupnění konkrétních kontextů. Většina modulů plug-in nevyžaduje zapojení tohoto rozhraní API. Lze je však použít při definování specializovaných pohledů či editorů, které definují nové kontexty.
Počátečním bodem práce s kontexty v pracovní ploše je IContextService. Moduly plug-in mohou od pracovní plochy získávat instanci podpory globálního kontextu.
IContextService contextService = (IContextService)PlatformUI.getWorkbench() .getService(IContextService.class);
Služby jako IContextService, IHandlerService, a IBindingService lze získat pomocí IServiceLocator. IWorkbench, IWorkbenchWindow, a IWorkbenchSite jsou všechno IServiceLocator.
IContextService definuje protokol pro získávání ID všech definovaných nebo zpřístupněných kontextů a pro získávání přidruženého kontextu pro konkrétní ID. Tyto objekty lze použít k procházení definicí kontextu v rozhraní API, tj. k získávání ID, názvu nebo ID nadřízeného kontextu. Příjemci mohou být registrováni u správce kontextu nebo u samotných kontextů za účelem rozpoznání změn v definici určitého kontextu nebo v samotném správci kontextu. Další informace viz balíček org.eclipse.core.commands.contexts.
Kontexty lze zpřístupnit programově:
IContextActivation activation = contextService.activateContext("org.eclipse.ui.textEditorScope");
IContextActivation je token, který lze používat k deaktivaci aktivního kontextu. Měli byste se ujistit, zda aktivujete pouze definovaný kontext.
Pokud aktivujete specifičtější kontext v rámci vaší části (buď Pohled, nebo Editor) můžete k aktivaci vašeho kontextu používat lokátor služeb části webu. Služba části IContextService se postará o aktivaci a deaktivaci kontextu při aktivaci nebo deaktivaci vaší části. Rovněž zlikviduje kontext, když je část zlikvidována.