/*******************************************************************************
* This file is protected by Copyright.
* Please refer to the COPYRIGHT file distributed with this source distribution.
*
* This file is part of REDHAWK IDE.
*
* 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
*******************************************************************************/
package gov.redhawk.ide.graphiti.ui.palette;
import org.eclipse.draw2d.ColorConstants;
import org.eclipse.draw2d.FocusEvent;
import org.eclipse.draw2d.FocusListener;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.RangeModel;
import org.eclipse.draw2d.geometry.Insets;
import org.eclipse.gef.AccessibleEditPart;
import org.eclipse.gef.ExposeHelper;
import org.eclipse.gef.MouseWheelHelper;
import org.eclipse.gef.editparts.ViewportExposeHelper;
import org.eclipse.gef.editparts.ViewportMouseWheelHelper;
import org.eclipse.gef.internal.InternalImages;
import org.eclipse.gef.internal.ui.palette.editparts.PaletteScrollBar;
import org.eclipse.gef.ui.palette.editparts.PaletteEditPart;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.accessibility.ACC;
import org.eclipse.swt.accessibility.AccessibleControlEvent;
import org.eclipse.swt.accessibility.AccessibleEvent;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.IMemento;
/**
* IDE-1112: Class created to support a tree structure in the palette
* Mostly copied from
*/
@SuppressWarnings("restriction")
public class PaletteNamespaceFolderEditPart extends PaletteEditPart {
private static final String PROPERTY_EXPANSION_STATE = "expansion"; //$NON-NLS-1$
/**
* Constructor
*
* @param folder
* The PaletteNamespaceFolder that this EditPart is representing
*/
public PaletteNamespaceFolderEditPart(PaletteNamespaceFolder folder) {
super(folder);
}
/**
* @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#createFigure()
*/
public IFigure createFigure() {
PaletteNamespaceFolderFigure fig = new PaletteNamespaceFolderFigure(getViewer().getControl()) {
IFigure buildTooltip() {
return createToolTip();
}
};
fig.setExpanded(getFolder().isInitiallyOpen());
fig.getCollapseToggle().addFocusListener(new FocusListener.Stub() {
public void focusGained(FocusEvent fe) {
getViewer().select(PaletteNamespaceFolderEditPart.this);
}
});
return fig;
}
/**
* @see org.eclipse.core.runtime.IAdaptable#getAdapter(Class)
*/
@SuppressWarnings("rawtypes")
public Object getAdapter(Class key) {
if (key == ExposeHelper.class) {
ViewportExposeHelper helper = new ViewportExposeHelper(this);
helper.setMinimumFrameCount(6);
helper.setMargin(new Insets(PaletteScrollBar.BUTTON_HEIGHT, 0,
PaletteScrollBar.BUTTON_HEIGHT, 0));
return helper;
}
if (key == MouseWheelHelper.class) {
return new ViewportMouseWheelHelper(this);
}
return super.getAdapter(key);
}
/**
* Convenience method that provides access to the PaletteNamespaceFolder that is the
* model.
*
* @return The model PaletteNamespaceFolder
*/
public PaletteNamespaceFolder getFolder() {
return (PaletteNamespaceFolder) getPaletteEntry();
}
/**
* Convenience method to get the PaletteNamespaceFolderFigure for the model drawer.
*
* @return The PaletteNamespaceFolderFigure created in {@link #createFigure()}
*/
public PaletteNamespaceFolderFigure getFolderFigure() {
return (PaletteNamespaceFolderFigure) getFigure();
}
/**
* @see org.eclipse.gef.GraphicalEditPart#getContentPane()
*/
public IFigure getContentPane() {
return getFolderFigure().getContentPane();
}
public boolean isExpanded() {
return getFolderFigure().isExpanded();
}
/**
* @see org.eclipse.gef.ui.palette.editparts.PaletteEditPart#nameNeededInToolTip()
*/
protected boolean nameNeededInToolTip() {
return false;
}
/**
* @see org.eclipse.gef.ui.palette.editparts.PaletteEditPart#createAccessible()
*/
protected AccessibleEditPart createAccessible() {
return new AccessibleGraphicalEditPart() {
public void getDescription(AccessibleEvent e) {
e.result = getPaletteEntry().getDescription();
}
public void getName(AccessibleEvent e) {
e.result = getPaletteEntry().getLabel();
}
public void getRole(AccessibleControlEvent e) {
e.detail = ACC.ROLE_TREE;
}
public void getState(AccessibleControlEvent e) {
super.getState(e);
e.detail |= isExpanded() ? ACC.STATE_EXPANDED
: ACC.STATE_COLLAPSED;
}
};
}
/**
* @see org.eclipse.gef.editparts.AbstractEditPart#refreshVisuals()
*/
protected void refreshVisuals() {
getFolderFigure().setToolTip(createToolTip());
ImageDescriptor img = getFolder().getSmallIcon();
if (img == null && getFolder().showDefaultIcon()) {
img = InternalImages.DESC_FOLDER_OPEN;
}
setImageDescriptor(img);
getFolderFigure().setTitle(getPaletteEntry().getLabel());
getFolderFigure().setLayoutMode(getLayoutSetting());
getFolderFigure().handleExpandStateChanged();
Color background = ColorConstants.white;
getFolderFigure().getScrollpane().setBackgroundColor(background);
}
/**
* @see org.eclipse.gef.editparts.AbstractEditPart#register()
*/
protected void register() {
super.register();
}
/**
* @see org.eclipse.gef.ui.palette.editparts.PaletteEditPart#restoreState(org.eclipse.ui.IMemento)
*/
public void restoreState(IMemento memento) {
setExpanded(new Boolean(memento.getString(PROPERTY_EXPANSION_STATE))
.booleanValue());
RangeModel rModel = getFolderFigure().getScrollpane().getViewport()
.getVerticalRangeModel();
rModel.setMinimum(memento.getInteger(RangeModel.PROPERTY_MINIMUM)
.intValue());
rModel.setMaximum(memento.getInteger(RangeModel.PROPERTY_MAXIMUM)
.intValue());
rModel.setExtent(memento.getInteger(RangeModel.PROPERTY_EXTENT)
.intValue());
rModel.setValue(memento.getInteger(RangeModel.PROPERTY_VALUE)
.intValue());
super.restoreState(memento);
}
/**
* @see org.eclipse.gef.ui.palette.editparts.PaletteEditPart#saveState(org.eclipse.ui.IMemento)
*/
public void saveState(IMemento memento) {
memento.putString(PROPERTY_EXPANSION_STATE,
new Boolean(isExpanded()).toString());
RangeModel rModel = getFolderFigure().getScrollpane().getViewport()
.getVerticalRangeModel();
memento.putInteger(RangeModel.PROPERTY_MINIMUM, rModel.getMinimum());
memento.putInteger(RangeModel.PROPERTY_MAXIMUM, rModel.getMaximum());
memento.putInteger(RangeModel.PROPERTY_EXTENT, rModel.getExtent());
memento.putInteger(RangeModel.PROPERTY_VALUE, rModel.getValue());
super.saveState(memento);
}
/**
* Sets the expansion state of the PaletteNamespaceFolderFigure
*
* @param expanded
* <code>true</code> if the drawer is expanded; false otherwise.
*/
public void setExpanded(boolean expanded) {
getFolderFigure().setExpanded(expanded);
}
/**
* @see org.eclipse.gef.ui.palette.editparts.PaletteEditPart#setImageInFigure(Image)
*/
protected void setImageInFigure(Image image) {
getFolderFigure().setTitleIcon(image);
}
/**
* @see org.eclipse.gef.EditPart#setSelected(int)
*/
public void setSelected(int value) {
super.setSelected(value);
getFolderFigure().getCollapseToggle().requestFocus();
}
/**
* @see org.eclipse.gef.editparts.AbstractEditPart#unregister()
*/
protected void unregister() {
super.unregister();
}
}