| /******************************************************************************* |
| * Copyright (c) 2000, 2010 IBM Corporation 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: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.gef.internal.ui.palette.editparts; |
| |
| 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.jface.resource.ImageDescriptor; |
| import org.eclipse.ui.IMemento; |
| |
| 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.PaletteColorUtil; |
| import org.eclipse.gef.palette.PaletteDrawer; |
| import org.eclipse.gef.palette.PaletteTemplateEntry; |
| import org.eclipse.gef.ui.palette.PaletteViewerPreferences; |
| import org.eclipse.gef.ui.palette.editparts.IPinnableEditPart; |
| import org.eclipse.gef.ui.palette.editparts.PaletteAnimator; |
| import org.eclipse.gef.ui.palette.editparts.PaletteEditPart; |
| |
| /** |
| * EditPart for a PaletteDrawer |
| * |
| * @author Pratik Shah |
| */ |
| public class DrawerEditPart extends PaletteEditPart implements |
| IPinnableEditPart { |
| |
| private static final String PROPERTY_EXPANSION_STATE = "expansion"; //$NON-NLS-1$ |
| private static final String PROPERTY_PINNED_STATE = "pinned"; //$NON-NLS-1$ |
| |
| /** |
| * Constructor |
| * |
| * @param drawer |
| * The PaletteDrawer that this EditPart is representing |
| */ |
| public DrawerEditPart(PaletteDrawer drawer) { |
| super(drawer); |
| } |
| |
| /** |
| * @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#createFigure() |
| */ |
| public IFigure createFigure() { |
| DrawerFigure fig = new DrawerFigure(getViewer().getControl()) { |
| IFigure buildTooltip() { |
| return createToolTip(); |
| } |
| }; |
| fig.setExpanded(getDrawer().isInitiallyOpen()); |
| fig.setPinned(getDrawer().isInitiallyPinned()); |
| |
| fig.getCollapseToggle().addFocusListener(new FocusListener.Stub() { |
| public void focusGained(FocusEvent fe) { |
| getViewer().select(DrawerEditPart.this); |
| } |
| }); |
| |
| fig.getScrollpane().getContents() |
| .addLayoutListener(getPaletteAnimator()); |
| |
| return fig; |
| } |
| |
| /** |
| * @see org.eclipse.core.runtime.IAdaptable#getAdapter(Class) |
| */ |
| 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); |
| } |
| |
| private PaletteAnimator getPaletteAnimator() { |
| return (PaletteAnimator) getViewer().getEditPartRegistry().get( |
| PaletteAnimator.class); |
| } |
| |
| /** |
| * Convenience method that provides access to the PaletteDrawer that is the |
| * model. |
| * |
| * @return The model PaletteDrawer |
| */ |
| public PaletteDrawer getDrawer() { |
| return (PaletteDrawer) getPaletteEntry(); |
| } |
| |
| /** |
| * Convenience method to get the DrawerFigure for the model drawer. |
| * |
| * @return The DrawerFigure created in {@link #createFigure()} |
| */ |
| public DrawerFigure getDrawerFigure() { |
| return (DrawerFigure) getFigure(); |
| } |
| |
| /** |
| * @see org.eclipse.gef.GraphicalEditPart#getContentPane() |
| */ |
| public IFigure getContentPane() { |
| return getDrawerFigure().getContentPane(); |
| } |
| |
| public boolean isExpanded() { |
| return getDrawerFigure().isExpanded(); |
| } |
| |
| public boolean isPinnedOpen() { |
| return getDrawerFigure().isPinnedOpen(); |
| } |
| |
| /** |
| * @see org.eclipse.gef.ui.palette.editparts.PaletteEditPart#nameNeededInToolTip() |
| */ |
| protected boolean nameNeededInToolTip() { |
| return false; |
| } |
| |
| /** |
| * @return <code>true</code> if the DrawerFigure can be pinned open. This is |
| * only true when the drawer is expanded and the auto-collapse |
| * strategy is |
| * <code>PaletteViewerPreferences.COLLAPSE_AS_NEEDED</code>. |
| */ |
| public boolean canBePinned() { |
| return getDrawerFigure().isPinShowing(); |
| } |
| |
| /** |
| * @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() { |
| getDrawerFigure().setToolTip(createToolTip()); |
| |
| ImageDescriptor img = getDrawer().getSmallIcon(); |
| if (img == null && getDrawer().showDefaultIcon()) { |
| img = InternalImages.DESC_FOLDER_OPEN; |
| } |
| setImageDescriptor(img); |
| |
| getDrawerFigure().setTitle(getPaletteEntry().getLabel()); |
| getDrawerFigure().setLayoutMode(getLayoutSetting()); |
| |
| boolean showPin = getPreferenceSource().getAutoCollapseSetting() == PaletteViewerPreferences.COLLAPSE_AS_NEEDED; |
| getDrawerFigure().showPin(showPin); |
| |
| Color background = getDrawer().getDrawerType().equals( |
| PaletteTemplateEntry.PALETTE_TYPE_TEMPLATE) ? PaletteColorUtil.WIDGET_LIST_BACKGROUND |
| : null; |
| getDrawerFigure().getScrollpane().setBackgroundColor(background); |
| } |
| |
| /** |
| * @see org.eclipse.gef.editparts.AbstractEditPart#register() |
| */ |
| protected void register() { |
| super.register(); |
| getPaletteAnimator().addDrawer(this); |
| getFigure().addLayoutListener(getPaletteAnimator()); |
| } |
| |
| /** |
| * @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()); |
| setPinnedOpen(new Boolean(memento.getString(PROPERTY_PINNED_STATE)) |
| .booleanValue()); |
| RangeModel rModel = getDrawerFigure().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()); |
| memento.putString(PROPERTY_PINNED_STATE, |
| new Boolean(isPinnedOpen()).toString()); |
| RangeModel rModel = getDrawerFigure().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 DrawerFigure |
| * |
| * @param expanded |
| * <code>true</code> if the drawer is expanded; false otherwise. |
| */ |
| public void setExpanded(boolean expanded) { |
| getDrawerFigure().setExpanded(expanded); |
| } |
| |
| /** |
| * @see org.eclipse.gef.ui.palette.editparts.PaletteEditPart#setImageInFigure(Image) |
| */ |
| protected void setImageInFigure(Image image) { |
| getDrawerFigure().setTitleIcon(image); |
| } |
| |
| public void setPinnedOpen(boolean pinned) { |
| getDrawerFigure().setPinned(pinned); |
| } |
| |
| /** |
| * @see org.eclipse.gef.EditPart#setSelected(int) |
| */ |
| public void setSelected(int value) { |
| super.setSelected(value); |
| getDrawerFigure().getCollapseToggle().requestFocus(); |
| } |
| |
| /** |
| * @see org.eclipse.gef.editparts.AbstractEditPart#unregister() |
| */ |
| protected void unregister() { |
| getPaletteAnimator().removeDrawer(this); |
| super.unregister(); |
| } |
| |
| } |