/*******************************************************************************
* Copyright (c) 2000, 2008 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.Image;
import org.eclipse.ui.IMemento;
import org.eclipse.draw2d.Graphics;
import org.eclipse.draw2d.IFigure;
import org.eclipse.gef.AccessibleEditPart;
import org.eclipse.gef.DragTracker;
import org.eclipse.gef.Request;
import org.eclipse.gef.internal.ui.palette.PaletteColorUtil;
import org.eclipse.gef.palette.PaletteEntry;
import org.eclipse.gef.palette.PaletteTemplateEntry;
import org.eclipse.gef.ui.palette.PaletteViewerPreferences;
import org.eclipse.gef.ui.palette.editparts.PaletteEditPart;
/**
* @author Eric Bordeau, Pratik Shah
*/
public class TemplateEditPart
extends PaletteEditPart
{
private static final String SELECTION_STATE = "selection"; //$NON-NLS-1$
/**
* Constructor
*
* @param entry The model entry
*/
public TemplateEditPart(PaletteTemplateEntry entry) {
super(entry);
}
/**
* @see org.eclipse.gef.ui.palette.editparts.PaletteEditPart#createAccessible()
*/
protected AccessibleEditPart createAccessible() {
return new AccessibleGraphicalEditPart () {
public void getDescription(AccessibleEvent e) {
e.result = getTemplateEntry().getDescription();
}
public void getName(AccessibleEvent e) {
e.result = getTemplateEntry().getLabel();
}
public void getRole(AccessibleControlEvent e) {
e.detail = ACC.ROLE_LISTITEM;
}
};
}
/**
* @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#createFigure()
*/
public IFigure createFigure() {
IFigure fig = new DetailedLabelFigure() {
public IFigure getToolTip() {
return createToolTip();
}
protected void paintFigure(Graphics graphics) {
super.paintFigure(graphics);
if (isSelected()) {
graphics
.setBackgroundColor(PaletteColorUtil.getSelectedColor());
}
graphics.fillRoundRectangle(ToolEntryEditPart
.getSelectionRectangle(getLayoutSetting(), this), 3, 3);
}
};
fig.setRequestFocusEnabled(true);
return fig;
}
/**
* @see org.eclipse.gef.ui.palette.editparts.PaletteEditPart#deactivate()
*/
public void deactivate() {
((DetailedLabelFigure)getFigure()).dispose();
super.deactivate();
}
/**
* @see org.eclipse.gef.ui.palette.editparts.PaletteEditPart#getDragTracker(Request)
*/
public DragTracker getDragTracker(Request request) {
return new SingleSelectionTracker() {
protected boolean handleButtonDown(int button) {
getFigure().requestFocus();
return super.handleButtonDown(button);
}
};
}
private PaletteTemplateEntry getTemplateEntry() {
return (PaletteTemplateEntry)getModel();
}
/**
* @see org.eclipse.gef.ui.palette.editparts.PaletteEditPart#getToolTipText()
*/
protected String getToolTipText() {
String result = null;
if (getLayoutSetting() != PaletteViewerPreferences.LAYOUT_DETAILS) {
result = super.getToolTipText();
}
return result;
}
/**
* If this edit part's name is truncated in its label, the name should be prepended to
* the tooltip.
* @return whether the name needs to be included in the tooltip
*/
protected boolean nameNeededInToolTip() {
DetailedLabelFigure label = (DetailedLabelFigure)getFigure();
return label.isNameTruncated() || super.nameNeededInToolTip();
}
/**
* @see org.eclipse.gef.editparts.AbstractEditPart#refreshVisuals()
*/
protected void refreshVisuals() {
DetailedLabelFigure fig = (DetailedLabelFigure)getFigure();
PaletteEntry entry = getPaletteEntry();
fig.setName(entry.getLabel());
fig.setDescription(entry.getDescription());
if (getPreferenceSource().useLargeIcons())
setImageDescriptor(entry.getLargeIcon());
else
setImageDescriptor(entry.getSmallIcon());
int layoutMode = getLayoutSetting();
fig.setLayoutMode(layoutMode);
if (layoutMode == PaletteViewerPreferences.LAYOUT_COLUMNS) {
fig.setBorder(ToolEntryEditPart.ICON_BORDER);
} else if (layoutMode == PaletteViewerPreferences.LAYOUT_LIST
|| layoutMode == PaletteViewerPreferences.LAYOUT_DETAILS) {
fig.setBorder(ToolEntryEditPart.LIST_BORDER);
} else if (layoutMode == PaletteViewerPreferences.LAYOUT_ICONS
&& !isToolbarItem()) {
fig.setBorder(ToolEntryEditPart.ICON_BORDER);
} else {
fig.setBorder(null);
}
super.refreshVisuals();
}
public void restoreState(IMemento memento) {
setSelected(memento.getInteger(SELECTION_STATE).intValue());
super.restoreState(memento);
}
public void saveState(IMemento memento) {
memento.putInteger(SELECTION_STATE, getSelected());
super.saveState(memento);
}
/**
* @see org.eclipse.gef.ui.palette.editparts.PaletteEditPart#setImageInFigure(Image)
*/
protected void setImageInFigure(Image image) {
DetailedLabelFigure fig = (DetailedLabelFigure)getFigure();
fig.setImage(image);
}
/**
* @see org.eclipse.gef.EditPart#setSelected(int)
*/
public void setSelected(int value) {
super.setSelected(value);
DetailedLabelFigure label = (DetailedLabelFigure)getFigure();
if (value == SELECTED_PRIMARY) {
label.requestFocus();
label.setSelected(true);
} else {
label.setSelected(false);
}
label.repaint();
}
}