/**
* Դ�������ƣ�CellLinkMouseListener.java
* �������Ȩ���������ӹɷ�����˾ ��Ȩ����
* ϵͳ���ƣ�JRES Studio
* ģ�����ƣ�com.hundsun.ares.studio.jres.ui
* ����˵����$desc
* ����ĵ���
* ���ߣ���Ҷ��
*/
package com.hundsun.ares.studio.ui.viewers.link;
import org.apache.log4j.Logger;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.viewers.ColumnViewer;
import org.eclipse.jface.viewers.ViewerCell;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.graphics.Point;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.ide.IDE;
import com.hundsun.ares.studio.core.IARESResource;
import com.hundsun.ares.studio.core.builder.IAresMarkers;
import com.hundsun.ares.studio.core.model.util.Pair;
/**
* @author gongyf
*
*/
public class CellLinkMouseListener extends MouseAdapter {
private Logger logger = Logger.getLogger(getClass());
private ColumnViewer viewer;
private ICellLinkProvider provider;
/**
* @param viewer
* @param provider
*/
public CellLinkMouseListener(ColumnViewer viewer, ICellLinkProvider provider) {
super();
this.viewer = viewer;
this.provider = provider;
}
/* (non-Javadoc)
* @see org.eclipse.swt.events.MouseAdapter#mouseUp(org.eclipse.swt.events.MouseEvent)
*/
@Override
public void mouseUp(MouseEvent e) {
if ((e.stateMask & SWT.CTRL) != 0 && e.button == 1) {
// �������Ctrl����������
ViewerCell cell = viewer.getCell(new Point(e.x, e.y));
if (cell == null) {
return;
}
Pair<EObject, IARESResource> object = provider.getLinkedObject(cell);
if (object == null || object.first == null || object.second == null) {
return;
}
try {
IMarker marker = object.second.getResource().createMarker(IAresMarkers.BOOK_MARKER_ID);
marker.setAttribute(IMarker.LOCATION, object.first.eResource().getURIFragment(object.first));
String editorId = IDE.getEditorDescriptor(object.second.getElementName()).getId();
marker.setAttribute(IDE.EDITOR_ID_ATTR, editorId);
IDE.openEditor(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(), marker);
marker.delete();
} catch (PartInitException ex) {
logger.error(ex.getMessage(), ex);
} catch (CoreException ex) {
logger.error(ex.getMessage(), ex);
}
}
}
}