| /******************************************************************************* |
| * Copyright (c) 2006 Sybase, Inc. 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: |
| * Sybase, Inc. - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.jst.pagedesigner.dnd.internal; |
| |
| import org.eclipse.gef.EditDomain; |
| import org.eclipse.gef.palette.ToolEntry; |
| import org.eclipse.jst.pagedesigner.commands.PaletteDropInsertCommand; |
| import org.eclipse.jst.pagedesigner.commands.SourceViewerCommand; |
| import org.eclipse.jst.pagedesigner.editors.pagedesigner.PageDesignerResources; |
| import org.eclipse.jst.pagedesigner.editors.palette.TagToolPaletteEntry; |
| import org.eclipse.swt.custom.StyledText; |
| import org.eclipse.swt.events.MouseEvent; |
| import org.eclipse.swt.events.MouseListener; |
| import org.eclipse.swt.events.MouseMoveListener; |
| import org.eclipse.swt.graphics.Point; |
| import org.eclipse.wst.sse.ui.StructuredTextEditor; |
| import org.eclipse.wst.sse.ui.internal.ExtendedEditorDropTargetAdapter; |
| |
| /** |
| * @author mengbo |
| */ |
| public class DesignerSourceMouseTrackAdapter extends |
| ExtendedEditorDropTargetAdapter implements MouseListener, |
| MouseMoveListener { |
| private int _location; |
| |
| private StructuredTextEditor _textEditor; |
| |
| private EditDomain _domain; |
| |
| /** |
| * @param textEditor |
| * @param domain |
| */ |
| public DesignerSourceMouseTrackAdapter(StructuredTextEditor textEditor, |
| EditDomain domain) { |
| super(false); |
| _textEditor = textEditor; |
| _domain = domain; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.swt.events.MouseMoveListener#mouseMove(org.eclipse.swt.events.MouseEvent) |
| */ |
| public void mouseMove(MouseEvent event) { |
| Object object = getPaletteObject(); |
| StyledText text = null; |
| if (_textEditor.getTextViewer() != null) { |
| text = _textEditor.getTextViewer().getTextWidget(); |
| } else { |
| return; |
| } |
| if (object == null) { |
| // set to default cusror |
| text.setCursor(null); |
| return; |
| } |
| Point p = new Point(event.x, event.y); |
| p = _textEditor.getTextViewer().getTextWidget().toDisplay(p); |
| SourceViewerDragDropHelper.getInstance().updateCaret(_textEditor, p); |
| _location = text.getCaretOffset(); |
| _location = SourceViewerDragDropHelper.getInstance().getValidLocation( |
| _textEditor, _location); |
| _location = SourceViewerDragDropHelper.getInstance().showCaret( |
| _textEditor, _location); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.swt.events.MouseListener#mouseUp(org.eclipse.swt.events.MouseEvent) |
| */ |
| public void mouseUp(MouseEvent event) { |
| if (event.button != 1) { |
| if (_domain.getPaletteViewer() != null) { |
| _domain.getPaletteViewer().setActiveTool(null); |
| } |
| return; |
| } |
| SourceViewerCommand command = getCommand(event); |
| if (command != null) { |
| command.execute(); |
| resetPalette(); |
| } |
| _location = 0; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.gef.palette.PaletteListener#activeToolChanged(org.eclipse.gef.ui.palette.PaletteViewer, |
| * org.eclipse.gef.palette.ToolEntry) |
| */ |
| private Object getPaletteObject() { |
| if (_domain.getPaletteViewer() != null) { |
| Object tool = _domain.getPaletteViewer().getActiveTool(); |
| if (tool instanceof TagToolPaletteEntry) { |
| return tool; |
| } |
| } |
| return null; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.swt.events.MouseListener#mouseDoubleClick(org.eclipse.swt.events.MouseEvent) |
| */ |
| public void mouseDoubleClick(MouseEvent e) { |
| // do nothing |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.swt.events.MouseListener#mouseDown(org.eclipse.swt.events.MouseEvent) |
| */ |
| public void mouseDown(MouseEvent e) { |
| // do nothing |
| } |
| |
| private PaletteDropInsertCommand getCommand(MouseEvent event) { |
| Object data = getPaletteObject(); |
| PaletteDropInsertCommand command = null; |
| if (data instanceof TagToolPaletteEntry) { |
| TagToolPaletteEntry descriptor = (TagToolPaletteEntry) data; |
| // "Create new item" |
| command = new PaletteDropInsertCommand( |
| PageDesignerResources |
| .getInstance() |
| .getString( |
| "DesignerSourceDropTargetListener.InserCommandLabel"), |
| _textEditor, descriptor, _location); |
| } |
| return command; |
| } |
| |
| private void resetPalette() { |
| if (_domain.getPaletteViewer() != null) { |
| ToolEntry tool = _domain.getPaletteViewer().getPaletteRoot() |
| .getDefaultEntry(); |
| if (tool != null) { |
| _domain.getPaletteViewer().setActiveTool(tool); |
| } |
| } |
| } |
| } |