| /******************************************************************************* |
| * Copyright (c) 2010, 2017 THALES GLOBAL SERVICES and others. |
| * 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.sirius.ui.tools.internal.editor; |
| |
| import org.eclipse.emf.transaction.TransactionalEditingDomain; |
| import org.eclipse.jface.action.MenuManager; |
| import org.eclipse.jface.resource.ImageRegistry; |
| import org.eclipse.jface.util.Policy; |
| import org.eclipse.jface.viewers.ISelection; |
| import org.eclipse.sirius.ecore.extender.business.api.accessor.ModelAccessor; |
| import org.eclipse.sirius.tools.api.command.ICommandFactory; |
| import org.eclipse.sirius.viewpoint.DRepresentation; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Control; |
| import org.eclipse.swt.widgets.Listener; |
| |
| /** |
| * This class manages the tree viewer for display the DTable or DTree |
| * representation. |
| * |
| * @author nlepine |
| * |
| */ |
| public abstract class AbstractDTableViewerManager { |
| |
| /** |
| * Constant for the layout Data. |
| * |
| * @See org.eclipse.jface.layout.AbstractColumnLayout.LAYOUT_DATA |
| */ |
| public static final String LAYOUT_DATA = Policy.JFACE + ".LAYOUT_DATA"; //$NON-NLS-1$ |
| |
| /** |
| * Boolean for OS. |
| */ |
| public static final boolean IS_GTK_OS = "gtk".equals(SWT.getPlatform()); //$NON-NLS-1$ |
| |
| /** |
| * Use to store the semantic column in SWT column. |
| */ |
| public static final String TABLE_COLUMN_DATA = "org.eclipse.sirius.table.ui.dTableColumn"; //$NON-NLS-1$ |
| |
| /** |
| * The imageRegistry for the action images. |
| */ |
| protected static ImageRegistry imageRegistry = new ImageRegistry(); |
| |
| /** |
| * the treeViewer associate with the DTableViewer. |
| */ |
| protected AbstractDTreeViewer treeViewer; |
| |
| /** |
| * the model editing by this Viewer. |
| */ |
| protected DRepresentation dRepresentation; |
| |
| /** |
| * The model accessor. |
| */ |
| protected final ModelAccessor accessor; |
| |
| /** |
| * The editing domain. |
| */ |
| protected final TransactionalEditingDomain editingDomain; |
| |
| /** |
| * The command factory. |
| */ |
| protected final ICommandFactory tableCommandFactory; |
| |
| /** |
| * The associated editor. |
| */ |
| protected final AbstractDTreeEditor treeEditor; |
| |
| /** |
| * Menu manager. |
| */ |
| protected final MenuManager mgr = new MenuManager("#PopupMenu"); //$NON-NLS-1$ |
| |
| /** |
| * Indicates whether the odesign file has changed since the last load of the |
| * cached menus. |
| */ |
| protected boolean descriptionFileChanged = true; |
| |
| /** |
| * Listener for the sort by column. |
| */ |
| protected Listener sortListener; |
| |
| /** |
| * The constructor. |
| * |
| * @param parent |
| * The parent composite |
| * @param input |
| * The input DTable |
| * @param editingDomain |
| * The transactional editing domain of this viewer |
| * @param accessor |
| * The accessor for the model |
| * @param tableCommandFactory |
| * The EMF command factory |
| * @param tableEditor |
| * The associated editor |
| */ |
| public AbstractDTableViewerManager(final Composite parent, final DRepresentation input, final TransactionalEditingDomain editingDomain, final ModelAccessor accessor, |
| final ICommandFactory tableCommandFactory, final AbstractDTreeEditor tableEditor) { |
| this.dRepresentation = input; |
| this.editingDomain = editingDomain; |
| this.accessor = accessor; |
| this.tableCommandFactory = tableCommandFactory; |
| this.treeEditor = tableEditor; |
| } |
| |
| public static ImageRegistry getImageRegistry() { |
| return imageRegistry; |
| } |
| |
| /** |
| * Release resources. |
| */ |
| public void dispose() { |
| // Tell the label provider to release its resources |
| treeViewer.getLabelProvider().dispose(); |
| // Dispose the menus |
| mgr.dispose(); |
| } |
| |
| /** |
| * Create the TreeViewer. |
| * |
| * @param composite |
| * parent composite for the tree viewer |
| */ |
| protected abstract void createTreeViewer(Composite composite); |
| |
| /** |
| * Initialize a cache and add, if needed, the contextual menu for the table. |
| * <BR> |
| * Cached the actions of creation and deletion in order to increase |
| * performance and not calculate it on each contextual menu.<BR> |
| * Problem for action on column header : |
| * https://bugs.eclipse.org/bugs/show_bug.cgi?id=23103 <BR> |
| */ |
| public abstract void fillMenu(); |
| |
| /** |
| * Get selection. |
| * |
| * @return currently selected item |
| */ |
| public ISelection getSelection() { |
| return treeViewer.getSelection(); |
| } |
| |
| /** |
| * Return the parent composite. |
| * |
| * @return parent composite |
| */ |
| public Control getControl() { |
| return treeViewer.getTree().getParent(); |
| } |
| |
| /** |
| * Return the accessor. |
| * |
| * @return the accessor. |
| */ |
| public ModelAccessor getAccessor() { |
| return accessor; |
| } |
| |
| /** |
| * {@inheritDoc} |
| * |
| */ |
| public AbstractDTreeViewer getTreeViewer() { |
| return treeViewer; |
| } |
| |
| /** |
| * {@inheritDoc} |
| * |
| * @see org.eclipse.sirius.table.ui.tools.internal.editor.IDTableViewer#setSelection(org.eclipse.jface.viewers.ISelection, |
| * boolean) |
| */ |
| public void setSelection(final ISelection selection, final boolean reveal) { |
| treeViewer.setSelection(selection, reveal); |
| } |
| |
| /** |
| * Return the transactional editing domain. |
| * |
| * @return the transactional editing domain |
| */ |
| public TransactionalEditingDomain getEditingDomain() { |
| return editingDomain; |
| } |
| |
| /** |
| * Return the corresponding editor. |
| * |
| * @return a table editor |
| */ |
| public AbstractDTreeEditor getEditor() { |
| return treeEditor; |
| } |
| |
| /** |
| * Changed descriptionFileChanged state. |
| * |
| * @param modified |
| * Indicates whether the odesign file has changed since the last |
| * load menus |
| */ |
| public void setDescriptionFileChanged(final boolean modified) { |
| descriptionFileChanged = modified; |
| } |
| |
| /** |
| * Update this viewer manager representation with the new given |
| * {@link DRepresentation}. It replaces all references to the old used one. |
| * |
| * @param newDRepresentation |
| * the representation that will replace the current one used. |
| */ |
| public abstract void updateDRepresentation(final DRepresentation newDRepresentation); |
| |
| } |