/******************************************************************************* * Copyright (c) 2008, 2012 Obeo. * 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: * Obeo - initial API and implementation *******************************************************************************/ package org.eclipse.emf.eef.runtime.ui.editors.pages; import java.util.ArrayList; import java.util.List; import org.eclipse.emf.common.notify.AdapterFactory; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.edit.domain.EditingDomain; import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.swt.graphics.Image; import org.eclipse.ui.forms.editor.FormEditor; import org.eclipse.ui.forms.editor.FormPage; import org.eclipse.ui.forms.widgets.ScrolledForm; /** * @author <a href="mailto:goulwen.lefur@obeo.fr">Goulwen Le Fur</a> */ public abstract class AbstractEEFEditorPage extends FormPage implements EEFEditorPage { /** * Form of this page */ protected ScrolledForm form; /** * This keeps track of the editing domain that is used to track all changes to the model. */ protected EditingDomain editingDomain; /** * AdapterFactory to use */ protected AdapterFactory adapterFactory; /** * Page input */ protected Object input; /** * Page title */ private String pageTitle; /** * Page image */ private Image pageImage; /** * Page filters */ protected List<ViewerFilter> filters; /** * Page actions */ protected List<Action> actions; /** * @param editor * containing editor * @param id * page id * @param name * page name */ public AbstractEEFEditorPage(FormEditor editor, String id, String name) { super(editor, id, name); this.filters = new ArrayList<ViewerFilter>(); this.actions = new ArrayList<Action>(); } /** * @return the editingDomain */ public EditingDomain getEditingDomain() { return editingDomain; } /** * @param editingDomain * the editingDomain to set */ public void setEditingDomain(EditingDomain editingDomain) { this.editingDomain = editingDomain; } /** * @return the adapterFactory */ public AdapterFactory getAdapterFactory() { return adapterFactory; } /** * @param adapterFactory * the adapterFactory to set */ public void setAdapterFactory(AdapterFactory adapterFactory) { this.adapterFactory = adapterFactory; } /** * Defines the title of the page * * @param title * the title to define */ public void setPageTitle(String title) { if (title != null) { this.pageTitle = title; if (formInitialized()) refreshFormTitle(); } } /** * Sets the image to be rendered to the left of the title. * * @param image * the title image */ public void setImage(Image image) { if (image != null) { this.pageImage = image; if (formInitialized()) { refreshFormImage(); } } } /** * @return <code>true</code> if the form is initialized */ protected boolean formInitialized() { return form != null; } /** * @param input * the input of the page */ public void setInput(Object newEObject) { if (newEObject != input) { input = newEObject; refresh(); } } public void refresh() { if (formInitialized()) { refreshFilters(); refreshFormContents(); refreshFormTitle(); refreshFormImage(); refreshToolbar(); } } /** * refresh page actions. */ protected void refreshToolbar() { if (getManagedForm().getForm() != null) { if (!actions.isEmpty()) { IToolBarManager toolBarManager = getManagedForm().getForm().getToolBarManager(); for (Action action : actions) { toolBarManager.add(action); } toolBarManager.update(true); } } } /** * Refresh the form title */ protected void refreshFormTitle() { if (pageTitle != null) { form.setText(pageTitle); } else { Object titleProvider = null; if (input instanceof ResourceSet) { titleProvider = ((ResourceSet)input).getResources().get(0); } else { titleProvider = input; } if (adapterFactory != null) { form.setText(new AdapterFactoryLabelProvider(adapterFactory).getText(titleProvider)); } } } /** * Refresh the image form */ protected void refreshFormImage() { if (pageImage != null) { form.setImage(pageImage); } else { Object imageProvider = null; if (input instanceof ResourceSet) { imageProvider = ((ResourceSet)input).getResources().get(0); } else { imageProvider = input; } if (adapterFactory != null) { form.setImage(new AdapterFactoryLabelProvider(adapterFactory).getImage(imageProvider)); } } } /** * Graphical refresh of the page */ protected abstract void refreshFormContents(); /** * Add the given filter to the page viewer * * @param filter * the page viewer filter */ public void addFilter(ViewerFilter filter) { filters.add(filter); if (getModelViewer() != null) { getModelViewer().addFilter(filter); } } /** * Add the given action to the form page * * @param filter * the action to add */ public void addAction(Action action) { actions.add(action); if (getManagedForm() != null && getManagedForm().getForm() != null) { getManagedForm().getForm().getToolBarManager().add(action); } } /** * refresh viewer filters. */ protected void refreshFilters() { if (getModelViewer() != null) { for (ViewerFilter filter : filters) { getModelViewer().addFilter(filter); } } } }