/*
* Copyright (c) 2008 Stiftung Deutsches Elektronen-Synchrotron,
* Member of the Helmholtz Association, (DESY), HAMBURG, GERMANY.
*
* THIS SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "../AS IS" BASIS.
* WITHOUT WARRANTY OF ANY KIND, EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED
* TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR PARTICULAR PURPOSE AND
* NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
* FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. SHOULD THE SOFTWARE PROVE DEFECTIVE
* IN ANY RESPECT, THE USER ASSUMES THE COST OF ANY NECESSARY SERVICING, REPAIR OR
* CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE.
* NO USE OF ANY SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
* DESY HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS,
* OR MODIFICATIONS.
* THE FULL LICENSE SPECIFYING FOR THE SOFTWARE THE REDISTRIBUTION, MODIFICATION,
* USAGE AND OTHER RIGHTS AND OBLIGATIONS IS INCLUDED WITH THE DISTRIBUTION OF THIS
* PROJECT IN THE FILE LICENSE.HTML. IF THE LICENSE IS NOT INCLUDED YOU MAY FIND A COPY
* AT HTTP://WWW.DESY.DE/LEGAL/LICENSE.HTM
*/
package org.csstudio.sds.ui.internal.layers;
import org.csstudio.sds.internal.model.Layer;
import org.csstudio.sds.internal.model.LayerSupport;
import org.csstudio.sds.model.ContainerModel;
import org.eclipse.gef.commands.CommandStack;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IPartListener;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.part.ViewPart;
/**
* A view which provides access to the layers of {@link ContainerModel}. This
* view tries to query the layer model from active workbench parts using a
* {@link ILayerManager} adapter.
*
* @author swende
*
*/
public final class LayerManagementView extends ViewPart implements
IPartListener {
/**
* The view�s ID.
*/
public static final String VIEW_ID = "org.csstudio.sds.ui.internal.layers.LayerManagementView";
/**
* Current layer manager adapter (is queried from active workbench parts).
*/
private ILayerManager _currentLayerManager;
/**
* The workbench part, that provided the current layer manager.
*/
private IWorkbenchPart _layerSourcePart;
/**
* The treeviewer which displays the layers.
*/
private LayerTreeViewer _layerTreeViewer;
/**
* {@inheritDoc}
*/
@Override
public void createPartControl(final Composite parent) {
// configure viewer
_layerTreeViewer = new LayerTreeViewer(getSite(), parent, VIEW_ID);
_layerTreeViewer.setCommandStack(getCommandStack());
// handle initial workbench part selection
IWorkbenchPart activePart = getViewSite().getPage().getActivePart();
if (activePart != null) {
partActivated(activePart);
}
// listen to workbench part changes
getViewSite().getPage().addPartListener(this);
}
/**
* {@inheritDoc}
*/
@Override
public void dispose() {
super.dispose();
// stop listening to the page
getViewSite().getPage().removePartListener(this);
}
/**
* {@inheritDoc}
*/
@Override
public void setFocus() {
}
/**
* {@inheritDoc}
*/
@Override
public void partActivated(final IWorkbenchPart part) {
ILayerManager layerManager = (ILayerManager) part
.getAdapter(ILayerManager.class);
if (layerManager != null && layerManager != _currentLayerManager) {
// memorize part
_layerSourcePart = part;
// memorize layer manager adapter
_currentLayerManager = layerManager;
// feed the viewer with the current layers
_layerTreeViewer.setLayerSupport(_currentLayerManager.getLayerSupport());
// pre-select the active layer
Layer activeLayer = _currentLayerManager.getLayerSupport()
.getActiveLayer();
if (activeLayer != null) {
_layerTreeViewer.setSelection(new StructuredSelection(activeLayer));
}
}
}
/**
* {@inheritDoc}
*/
@Override
public void partClosed(final IWorkbenchPart part) {
if (_layerSourcePart != null && _layerSourcePart == part) {
// forget the part
_layerSourcePart = null;
// invalidate layer manager
_currentLayerManager = null;
}
}
/**
* {@inheritDoc}
*/
@Override
public void partBroughtToTop(final IWorkbenchPart part) {
// do nothing
}
/**
* {@inheritDoc}
*/
@Override
public void partDeactivated(final IWorkbenchPart part) {
// do nothing
}
/**
* {@inheritDoc}
*/
@Override
public void partOpened(final IWorkbenchPart part) {
// do nothing
}
/**
* Returns the current access object to the layer model, which backs this
* view.
*
* @return the current access object to the layer model, which backs this
* view
*/
public LayerSupport getCurrentLayerSupport() {
return _currentLayerManager.getLayerSupport();
}
/**
* Returns the command stack that should be used to execute commands that
* deal with layers.
*
* @return the command stack that should be used to execute commands that
* deal with layers
*/
public CommandStack getCommandStack() {
CommandStack result = null;
if (_currentLayerManager != null) {
result = _currentLayerManager.getCommandStack();
}
return result;
}
}