/******************************************************************************* * Copyright (c) 2008 Hallvard Traetteberg. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Hallvard Traetteberg - initial API and implementation ******************************************************************************/ package org.eclipse.e4.tm.ui; import org.eclipse.e4.tm.widgets.WidgetsPackage; import org.eclipse.emf.common.notify.Adapter; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.notify.impl.AdapterImpl; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.edit.domain.EditingDomain; import org.eclipse.emf.edit.domain.IEditingDomainProvider; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IWorkbenchPart; public class EditorPartModelContext extends AbstractModelContext { private IWorkbenchPart owner; protected IEditingDomainProvider editingDomainProvider; public EditorPartModelContext(IWorkbenchPart part) { super(); owner = part; if (part instanceof IEditingDomainProvider) { setEditingDomainProvider((IEditingDomainProvider)part); } } public void dispose() { super.dispose(); owner = null; } public IWorkbenchPart getOwner() { return owner; } private Display getDisplay() { return getOwner().getSite().getShell().getDisplay(); } // protected void fireContextChanged() { // getDisplay().asyncExec(this); // } private Adapter resourceSetAdapter = new AdapterImpl() { public void notifyChanged(Notification notification) { if (notification.getFeatureID(ResourceSet.class) == ResourceSet.RESOURCE_SET__RESOURCES) { fireContextChanged(); } } }; protected void setEditingDomainProvider(IEditingDomainProvider editingDomainProvider) { if (editingDomainProvider != this.editingDomainProvider) { if (this.editingDomainProvider != null) { this.editingDomainProvider.getEditingDomain().getResourceSet().eAdapters().remove(resourceSetAdapter); } this.editingDomainProvider = editingDomainProvider; if (this.editingDomainProvider != null) { this.editingDomainProvider.getEditingDomain().getResourceSet().eAdapters().add(resourceSetAdapter); } fireContextChanged(); } } public EObject getModel() { if (editingDomainProvider != null) { EditingDomain editingDomain = editingDomainProvider.getEditingDomain(); if (editingDomain != null) { for (Resource res: editingDomain.getResourceSet().getResources()) { for (EObject eObject: res.getContents()) { if (WidgetsPackage.eINSTANCE.getControl().isInstance(eObject)) { return eObject; } } } } } return null; } }