/**
* Դ�������ƣ�BaseEditingSupport.java
* �������Ȩ���������ӹɷ�����˾ ��Ȩ����
* ϵͳ���ƣ�JRES Studio
* ģ�����ƣ�com.hundsun.ares.studio.jres.ui
* ����˵����JRES Studio�Ľ���չ�ֻ�����ܺͱ༭��ع���
* ����ĵ���
* ���ߣ�
*/
package com.hundsun.ares.studio.ui.editor.editingsupport;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.ColumnViewer;
import org.eclipse.jface.viewers.EditingSupport;
/**
* @author gongyf
*
*/
public abstract class BaseEditingSupport extends EditingSupport {
public CellEditor cellEditor;
private IEditingSupportDecorator decorator;
/**
* @param viewer
*/
public BaseEditingSupport(ColumnViewer viewer) {
super(viewer);
}
/**
* @param decorator the decorator to set
*/
public void setDecorator(IEditingSupportDecorator decorator) {
this.decorator = decorator;
}
@Override
final public CellEditor getCellEditor(Object element) {
if (decorator == null) {
return doGetCellEditor(element);
} else {
return decorator.decorateGetCellEditor(doGetCellEditor(element), element);
}
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.EditingSupport#canEdit(java.lang.Object)
*/
@Override
final protected boolean canEdit(Object element) {
if (decorator == null) {
return doCanEdit(element);
} else {
return decorator.decorateCanEdit(doCanEdit(element), element);
}
}
protected CellEditor doGetCellEditor(Object element) {
if (cellEditor == null) {
cellEditor = createCellEditor();
}
return cellEditor;
}
protected boolean doCanEdit(Object element) {
// �����EObject�����ж����ڵ�Resource�Ƿ�ֻ��
if (element instanceof EObject) {
Resource resource = ((EObject) element).eResource();
if (resource != null) {
EditingDomain editingDomain = AdapterFactoryEditingDomain.getEditingDomainFor(element);
if (editingDomain != null) {
return !editingDomain.isReadOnly(resource);
}
}
}
return true;
}
/**
* ������ʹ�õ�CellEditor
* @return
*/
protected abstract CellEditor createCellEditor();
}