/* ****************************************************************************** * 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.xmind.gef.GEF; import org.xmind.gef.Request; import org.xmind.gef.event.MouseEvent; import org.xmind.gef.part.IPart; import org.xmind.gef.tool.ITool; import org.xmind.gef.tool.SelectTool; public class GallerySelectTool extends SelectTool { private FramePart sourceFrame = null; protected boolean isFrameAsButton() { return !getTargetViewer().getProperties().getBoolean( GalleryViewer.SolidFrames, false); } protected boolean isSingleClickToOpen() { return getTargetViewer().getProperties().getBoolean( GalleryViewer.SingleClickToOpen, false); } protected boolean isCursorInTitle(IPart p) { return p instanceof FramePart && ((FramePart) p).getFigure().getTitle() .containsPoint(getCursorPosition()); } protected boolean isTitleEditable(IPart p) { return false; } /* * (non-Javadoc) * * @see * org.xmind.gef.tool.SelectTool#handleMouseDown(org.xmind.gef.event.MouseEvent * ) */ protected boolean handleMouseDown(MouseEvent me) { if (isFrameAsButton()) { if (me.target instanceof FramePart) { FramePart frame = (FramePart) me.target; if (frame.getContentPane().containsPoint(me.cursorLocation)) { sourceFrame = frame; sourceFrame.getFigure().press(); } } } boolean ret = handleSelectionOnMouseDown(me); if (isCursorInTitle(me.target) && isTitleEditable(me.target)) { Request request = new Request(GEF.REQ_EDIT); request.setDomain(getDomain()); request.setViewer(getTargetViewer()); request.setPrimaryTarget(me.target); startEditing(me.target, request); ITool et = getTool(GEF.TOOL_EDIT); if (et != null && et == getDomain().getActiveTool()) { me.consume(); } } else if (isSingleClickToOpen()) { performOpen(); me.consume(); } return ret; } protected boolean handleSelectionOnMouseDown(MouseEvent me) { return super.handleMouseDown(me); } /* * (non-Javadoc) * * @see * org.xmind.gef.tool.SelectTool#handleMouseUp(org.xmind.gef.event.MouseEvent * ) */ public boolean handleMouseUp(MouseEvent me) { if (sourceFrame != null) { sourceFrame.getFigure().unpress(); sourceFrame = null; } return super.handleMouseUp(me); } /* * (non-Javadoc) * * @see * org.xmind.gef.tool.SelectTool#handleMouseDoubleClick(org.xmind.gef.event * .MouseEvent) */ protected boolean handleMouseDoubleClick(MouseEvent me) { if (me.target instanceof FramePart) { if (!isSingleClickToOpen() && (!isCursorInTitle(me.target) || !isTitleEditable(me.target))) { performOpen(); me.consume(); return true; } } return super.handleMouseDoubleClick(me); } protected void performOpen() { GalleryViewer viewer = (GalleryViewer) getTargetViewer(); viewer.fireOpen(); } }