/**
* <p>Copyright: Copyright (c) 2013</p>
* <p>Company: �������ӹɷ�����˾</p>
*/
package com.hundsun.ares.studio.cres.extend.ui.project;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.jface.viewers.IContentProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.TreeViewerColumn;
import org.eclipse.swt.SWT;
import com.hundsun.ares.studio.core.IARESProject;
import com.hundsun.ares.studio.cres.extend.core.constants.ICresExtendConstants;
import com.hundsun.ares.studio.cres.extend.cresextend.CresextendPackage;
import com.hundsun.ares.studio.cres.extend.ui.edit.support.CresExtendEditingSupportDecorator;
import com.hundsun.ares.studio.cres.text.assistant.CustomFunctionFactory;
import com.hundsun.ares.studio.internal.core.ARESProjectProperty;
import com.hundsun.ares.studio.ui.editor.ARESEditorPlugin;
import com.hundsun.ares.studio.ui.editor.actions.ColumnViewerAddAction;
import com.hundsun.ares.studio.ui.editor.actions.ColumnViewerDeleteAction;
import com.hundsun.ares.studio.ui.editor.actions.IActionIDConstant;
import com.hundsun.ares.studio.ui.editor.blocks.TreeViewerBlock;
import com.hundsun.ares.studio.ui.editor.editingsupport.BooleanEditingSupport;
import com.hundsun.ares.studio.ui.editor.editingsupport.TextEditingSupport;
import com.hundsun.ares.studio.ui.editor.viewers.EObjectColumnLabelProvider;
import com.hundsun.ares.studio.ui.editor.viewers.EObjectColumnViewerProblemView;
import com.hundsun.ares.studio.ui.editor.viewers.ReferenceTreeContentProvider;
import com.hundsun.ares.studio.ui.validate.IProblemPool;
/**
* @author wangxh
*
*/
public class PublicFunctionDefineBlock extends TreeViewerBlock {
protected EReference reference;
protected IARESProject project;
protected EditingDomain editingDomain;
protected IProblemPool problemPool;
protected ColumnViewerAddAction addAction;
protected EClass eclass;
/**
* @param cresProjectExtendPropertyProcDefine
* @param editingDomain
* @param resource
* @param problemPool
*/
public PublicFunctionDefineBlock(
EReference reference,
EditingDomain editingDomain, IARESProject project,
EClass eclass,
IProblemPool problemPool) {
super();
this.reference = reference;
this.editingDomain = editingDomain;
this.project = project;
this.eclass = eclass;
this.problemPool = problemPool;
}
@Override
protected String getID() {
return getClass().getName();
}
@Override
protected IContentProvider getColumnViewerContentProvider() {
return new ReferenceTreeContentProvider(this.reference);
}
@Override
protected void createActions() {
addAction = new ColumnViewerAddAction(getColumnViewer(), editingDomain,
null, reference, eclass);
getActionRegistry().registerAction(addAction);
getSelectionActions().add(addAction.getId());
IAction delAction = new ColumnViewerDeleteAction(getColumnViewer(),
editingDomain);
getActionRegistry().registerAction(delAction);
getSelectionActions().add(delAction.getId());
IAction action = new RefreshAction();
getActionRegistry().registerAction(action);
}
@Override
protected void createMenus(IMenuManager menuManager) {
IAction action = getActionRegistry().getAction(IActionIDConstant.CV_ADD);
menuManager.add(action);
menuManager.add(new Separator());
action = getActionRegistry().getAction(IActionIDConstant.CV_DELETE);
menuManager.add(action);
menuManager.add(new Separator());
action = getActionRegistry().getAction(RefreshAction.ID);
menuManager.add(action);
}
@Override
protected void createToolbarItems(ToolBarManager manager) {
// ������ť�б�
IAction action = getActionRegistry().getAction(IActionIDConstant.CV_ADD);
manager.add(action);
action = getActionRegistry().getAction(IActionIDConstant.CV_DELETE);
manager.add(action);
action = getActionRegistry().getAction(RefreshAction.ID);
manager.add(action);
}
@Override
public void setInput(Object input) {
if(input instanceof ARESProjectProperty) {
ARESProjectProperty pp = (ARESProjectProperty)input;
Object owner = pp.getMap().get(ICresExtendConstants.CRES_EXTEND_PROJECT_PROPERTY);
addAction.setOwner((EObject)owner);
super.setInput(owner);
}
}
@Override
protected void createColumns(TreeViewer viewer) {
EObjectColumnViewerProblemView problemView = new EObjectColumnViewerProblemView(viewer);
{
// �����Ƿ�����
EAttribute attribute = CresextendPackage.Literals.FILE_DEFINE__IS_USED;
// ���������
TreeViewerColumn column = new TreeViewerColumn(viewer, SWT.LEFT);
column.getColumn().setText("�Ƿ�����");
column.getColumn().setWidth(80);
// ���ñ�ǩ�ṩ��
EObjectColumnLabelProvider provider = new EObjectColumnLabelProvider(attribute);
provider.setDiagnosticProvider(problemView);
column.setLabelProvider(provider);
// 3. ����EditingSupport,
// ���ñ༭֧��
BooleanEditingSupport es = new BooleanEditingSupport(viewer, attribute);
es.setDecorator(new CresExtendEditingSupportDecorator());
column.setEditingSupport(es);
}
{
// ����������ֵ
EAttribute attribute = CresextendPackage.Literals.FILE_DEFINE__VALUE;
// ���������
TreeViewerColumn column = new TreeViewerColumn(viewer, SWT.LEFT);
column.getColumn().setText("ͷ�ļ�·��");
column.getColumn().setWidth(250);
// ���ñ�ǩ�ṩ��
EObjectColumnLabelProvider provider = new EObjectColumnLabelProvider(attribute);
provider.setDiagnosticProvider(problemView);
column.setLabelProvider(provider);
// 3. ����EditingSupport,
// ���ñ༭֧��
TextEditingSupport es = new TextEditingSupport(viewer, attribute);
es.setDecorator(new CresExtendEditingSupportDecorator());
column.setEditingSupport(es);
}
{
// ����������˵��
EAttribute attribute = CresextendPackage.Literals.FILE_DEFINE__NOTE;
// ���������
TreeViewerColumn column = new TreeViewerColumn(viewer, SWT.LEFT);
column.getColumn().setText("˵��");
column.getColumn().setWidth(350);
// ���ñ�ǩ�ṩ��
EObjectColumnLabelProvider provider = new EObjectColumnLabelProvider(attribute);
provider.setDiagnosticProvider(problemView);
column.setLabelProvider(provider);
// 3. ����EditingSupport,
// ���ñ༭֧��
TextEditingSupport es = new TextEditingSupport(viewer, attribute);
es.setDecorator(new CresExtendEditingSupportDecorator());
column.setEditingSupport(es);
}
if (this.problemPool != null) {
this.problemPool.addView(problemView);
// getEditableControl().addEditableUnit(new JresDefaultEditableUnit(viewer.getControl()));
}
}
class RefreshAction extends Action{
public static final String ID = "REFRESH_PUBLIC_FUNCTIONS";
public RefreshAction(){
setText("ˢ�¹�������");
setImageDescriptor(ARESEditorPlugin.getImageDescriptor("full/obj16/refresh.gif"));//PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_ETOOL_CLEAR));
setId(ID);
}
@Override
public void run() {
CustomFunctionFactory.eINSTANCE.clear();
CustomFunctionFactory.eINSTANCE.getAllPublicFunctions(project);
CustomFunctionFactory.eINSTANCE.getAllStructMap(project);
}
}
}