/* ****************************************************************************** * Copyright (c) 2006-2012 XMind Ltd. and others. * * This file is a part of XMind 3. XMind releases 3 and * above are dual-licensed under the Eclipse Public License (EPL), * which is available at http://www.eclipse.org/legal/epl-v10.html * and the GNU Lesser General Public License (LGPL), * which is available at http://www.gnu.org/licenses/lgpl.html * See http://www.xmind.net/license.html for details. * * Contributors: * XMind Ltd. - initial API and implementation *******************************************************************************/ package org.xmind.ui.gallery; import org.eclipse.draw2d.Cursors; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.geometry.Point; import org.eclipse.swt.graphics.Cursor; import org.xmind.gef.EditDomain; import org.xmind.gef.GEF; import org.xmind.gef.part.GraphicalEditPart; import org.xmind.gef.part.IPart; import org.xmind.gef.part.IRequestHandler; import org.xmind.gef.policy.NullEditPolicy; import org.xmind.gef.status.StatusEvent; public class FramePart extends GraphicalEditPart { public FramePart(Object model) { setModel(model); setDecorator(FrameDecorator.DEFAULT); } protected IFigure createFigure() { return new FrameFigure(); } public FrameFigure getFigure() { return (FrameFigure) super.getFigure(); } public IFigure getContentPane() { return ((FrameFigure) super.getFigure()).getContentPane(); } protected Object[] getModelChildren(Object model) { return new Object[] { model }; } protected void declareEditPolicies(IRequestHandler reqHandler) { super.declareEditPolicies(reqHandler); reqHandler.installEditPolicy(GEF.ROLE_SELECTABLE, NullEditPolicy.getInstance()); reqHandler.installEditPolicy(GEF.ROLE_NAVIGABLE, GalleryViewer.POLICY_NAVIGABLE); } protected void register() { registerModel(getModel()); super.register(); } protected void unregister() { super.unregister(); unregisterModel(getModel()); } protected void handleStatusChanged(StatusEvent event) { if ((event.key & GEF.PART_SELECTED) != 0) { setSelected(event.newValue); } else if ((event.key & GEF.PART_PRESELECTED) != 0) { setPreselected(event.newValue); } else if ((event.key & GEF.PART_FOCUSED) != 0) { getFigure().repaint(); } else { super.handleStatusChanged(event); } } protected void setSelected(boolean selected) { getFigure().setSelected(selected); } protected void setPreselected(boolean preselected) { getFigure().setPreselected(preselected); } protected IPart findChildAt(IPart child, Point position) { if (!child.hasRole(GEF.ROLE_SELECTABLE)) return null; return super.findChildAt(child, position); } public Cursor getCursor(Point pos) { if (getContentPane().containsPoint(pos) && !getSite().getProperties().getBoolean( GalleryViewer.SolidFrames, false)) return Cursors.HAND; if (getFigure().getTitle().containsPoint(pos)) { EditDomain domain = getSite().getDomain(); if (domain != null && domain.hasTool(GEF.TOOL_EDIT)) return Cursors.HAND; } return null; } @Override protected void updateChildren() { super.updateChildren(); for (IPart child : getChildren()) { child.update(); } } }