package com.hundsun.ares.studio.jres.metadata.ui.block;
import org.apache.commons.lang.StringUtils;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.edit.domain.EditingDomain;
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.CellLabelProvider;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.IContentProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.widgets.Display;
import com.hundsun.ares.studio.core.IARESResource;
import com.hundsun.ares.studio.jres.metadata.ui.actions.IMetadataActionIDConstant;
import com.hundsun.ares.studio.jres.metadata.ui.editors.editingsupport.FuncProxyContentProposalHelper;
import com.hundsun.ares.studio.jres.metadata.ui.editors.editingsupport.FuncProxyContentProposalProvider;
import com.hundsun.ares.studio.jres.metadata.ui.menu.actions.BatchAddFunctionProxyAction;
import com.hundsun.ares.studio.jres.metadata.ui.menu.actions.RecoverRefMenuFunctionsAction;
import com.hundsun.ares.studio.jres.metadata.ui.utils.MenuUtils;
import com.hundsun.ares.studio.jres.metadata.ui.viewer.MetadataColumnLabelProvider;
import com.hundsun.ares.studio.jres.model.metadata.FunctionProxy;
import com.hundsun.ares.studio.jres.model.metadata.MenuItem;
import com.hundsun.ares.studio.jres.model.metadata.MetadataPackage;
import com.hundsun.ares.studio.ui.ColumnViewerHoverToolTip;
import com.hundsun.ares.studio.ui.editor.actions.ColumnViewerAddAction;
import com.hundsun.ares.studio.ui.editor.actions.ColumnViewerCopyAction;
import com.hundsun.ares.studio.ui.editor.actions.ColumnViewerDeleteAction;
import com.hundsun.ares.studio.ui.editor.actions.ColumnViewerInsertAction;
import com.hundsun.ares.studio.ui.editor.actions.ColumnViewerMoveDownAction;
import com.hundsun.ares.studio.ui.editor.actions.ColumnViewerMoveUpAction;
import com.hundsun.ares.studio.ui.editor.actions.ColumnViewerPasteAction;
import com.hundsun.ares.studio.ui.editor.actions.CopyCellAction;
import com.hundsun.ares.studio.ui.editor.actions.CopyColumnAction;
import com.hundsun.ares.studio.ui.editor.actions.IActionIDConstant;
import com.hundsun.ares.studio.ui.editor.blocks.TableViewerBlock;
import com.hundsun.ares.studio.ui.editor.editable.ActionEditableUnit;
import com.hundsun.ares.studio.ui.editor.editingsupport.JresTextEditingSupportWithContentAssist;
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.ReferenceContentProvider;
import com.hundsun.ares.studio.ui.validate.IProblemPool;
public class FunctionProxyViewerBlock extends TableViewerBlock {
private ColumnViewerAddAction itemAddAction;
private ColumnViewerInsertAction insertAction;
private ColumnViewerDeleteAction itemDeleteAction;
private ColumnViewerMoveUpAction itemMoveUpAction;
private ColumnViewerMoveDownAction itemMoveDownAction;
private ColumnViewerPasteAction pasteAction;
/**
* @param editingDomain
* @param resource
* @param problemPool
*/
public FunctionProxyViewerBlock(EditingDomain editingDomain,
IARESResource resource, IProblemPool problemPool) {
super();
this.editingDomain = editingDomain;
this.resource = resource;
this.problemPool = problemPool;
}
@Override
protected String getID() {
return getClass().getName();
}
@Override
protected IContentProvider getColumnViewerContentProvider() {
return new ReferenceContentProvider(MetadataPackage.Literals.MENU_ITEM__FUNCTION_PROXYS);
}
@Override
protected EStructuralFeature getHeadColumnFeature() {
return MetadataPackage.Literals.FUNCTION_PROXY__FUN_CODE;
}
@Override
protected void createActions() {
super.createActions();
IAction action = itemAddAction = new ColumnViewerAddAction(
getColumnViewer(),
getEditingDomain(),
null,
MetadataPackage.Literals.MENU_ITEM__FUNCTION_PROXYS,
MetadataPackage.Literals.FUNCTION_PROXY);
getActionRegistry().registerAction(action);
getSelectionActions().add(action.getId());
insertAction = new ColumnViewerInsertAction(
getColumnViewer(),
getEditingDomain(),
null,
MetadataPackage.Literals.MENU_ITEM__FUNCTION_PROXYS,
MetadataPackage.Literals.FUNCTION_PROXY);
getActionRegistry().registerAction(insertAction);
getSelectionActions().add(insertAction.getId());
action = itemDeleteAction = new ColumnViewerDeleteAction(getColumnViewer(), getEditingDomain());
getActionRegistry().registerAction(action);
getSelectionActions().add(action.getId());
action = itemMoveUpAction = new ColumnViewerMoveUpAction(
getColumnViewer(),
getEditingDomain(),
null,
MetadataPackage.Literals.MENU_ITEM__FUNCTION_PROXYS);
getActionRegistry().registerAction(action);
getSelectionActions().add(action.getId());
getStackActions().add(action.getId());
action = itemMoveDownAction = new ColumnViewerMoveDownAction(
getColumnViewer(),
getEditingDomain(),
null,
MetadataPackage.Literals.MENU_ITEM__FUNCTION_PROXYS);
getActionRegistry().registerAction(action);
getSelectionActions().add(action.getId());
getStackActions().add(action.getId());
IAction copyAction = new ColumnViewerCopyAction(getColumnViewer());
getActionRegistry().registerAction(copyAction);
getSelectionActions().add(copyAction.getId());
IAction copyCellAction = new CopyCellAction(getColumnViewer());
getActionRegistry().registerAction(copyCellAction);
IAction copyColumnAction = new CopyColumnAction(getColumnViewer());
getActionRegistry().registerAction(copyColumnAction);
pasteAction = new ColumnViewerPasteAction(getColumnViewer(), getEditingDomain(), null, null);
getActionRegistry().registerAction(pasteAction);
getClipboardActions().add(pasteAction.getId());
action = new BatchAddFunctionProxyAction(getColumnViewer(), getEditingDomain(),resource);
getActionRegistry().registerAction(action);
getSelectionActions().add(action.getId());
IAction recoverAction = new RecoverRefMenuFunctionsAction(getColumnViewer(), getEditingDomain(), resource);
getActionRegistry().registerAction(recoverAction);
getSelectionActions().add(recoverAction.getId());
getEditableControl().addEditableUnit(new ActionEditableUnit(itemAddAction));
getEditableControl().addEditableUnit(new ActionEditableUnit(itemDeleteAction));
getEditableControl().addEditableUnit(new ActionEditableUnit(itemMoveUpAction));
getEditableControl().addEditableUnit(new ActionEditableUnit(itemMoveDownAction));
getEditableControl().addEditableUnit(new ActionEditableUnit(action));
getEditableControl().addEditableUnit(new ActionEditableUnit(recoverAction));
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.jres.ui.pages.ColumnViewerBlock#setInput(java.lang.Object)
*/
@Override
public void setInput(Object input) {
insertAction.setOwner((EObject) input);
itemAddAction.setOwner((EObject) input);
itemMoveUpAction.setOwner((EObject) input);
itemMoveDownAction.setOwner((EObject) input);
pasteAction.setOwner((EObject) input);
pasteAction.setReference(MetadataPackage.Literals.MENU_ITEM__FUNCTION_PROXYS);
super.setInput(input);
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.jres.ui.pages.ColumnViewerBlock#createMenus(org.eclipse.jface.action.IMenuManager)
*/
@Override
protected void createMenus(IMenuManager menuManager) {
IAction action = getActionRegistry().getAction(IActionIDConstant.CV_ADD);
menuManager.add(action);
action = getActionRegistry().getAction(IMetadataActionIDConstant.CV_BATCH_ADD);
menuManager.add(action);
action = getActionRegistry().getAction(IMetadataActionIDConstant.CV_RECOVER_FUNCTIONS);
menuManager.add(action);
action = getActionRegistry().getAction(IActionIDConstant.CV_DELETE);
menuManager.add(action);
menuManager.add(new Separator());
action = getActionRegistry().getAction(IActionIDConstant.CV_COPY);
menuManager.add(action);
action = getActionRegistry().getAction(CopyCellAction.ID);
menuManager.add(action);
action = getActionRegistry().getAction(CopyColumnAction.ID);
menuManager.add(action);
action = getActionRegistry().getAction(IActionIDConstant.CV_PASTE);
menuManager.add(action);
menuManager.add(new Separator());
action = getActionRegistry().getAction(IActionIDConstant.CV_MOVE_UP);
menuManager.add(action);
action = getActionRegistry().getAction(IActionIDConstant.CV_MOVE_DOWN);
menuManager.add(action);
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.jres.ui.pages.ColumnViewerBlock#createColumns(org.eclipse.jface.viewers.ColumnViewer)
*/
@Override
protected void createColumns(TableViewer columnViewer) {
final TableViewer treeViewer = (TableViewer) columnViewer;
EObjectColumnViewerProblemView problemView = new EObjectColumnViewerProblemView(treeViewer);
/**֤��ģʽ��Ϊ�˵���,����ģʽ��Ϊ������*/
{
TableViewerColumn column = new TableViewerColumn(treeViewer, SWT.LEFT);
if(MenuUtils.isStockDepartment()){
column.getColumn().setText("�˵���");
}else{
column.getColumn().setText("������");
}
column.getColumn().setWidth(120);
CellLabelProvider provider = new ColumnLabelProvider(){
@Override
public String getText(Object element) {
if(element instanceof FunctionProxy){
return ((MenuItem)((FunctionProxy) element).eContainer()).getName();
}else{
return StringUtils.EMPTY;
}
}
@Override
public Color getBackground(Object element) {
return Display.getDefault().getSystemColor(SWT.COLOR_GRAY);
}
};
column.setLabelProvider(provider);
column.getColumn().setMoveable(true);
}
/**֤��ģʽ��Ϊ���ܺ�,����ģʽ��Ϊ�ӽ�����*/
{
TableViewerColumn column = new TableViewerColumn(treeViewer, SWT.LEFT);
if(MenuUtils.isStockDepartment()){
column.getColumn().setText("���ܱ��");
}else{
column.getColumn().setText("�ӽ�����");
}
column.getColumn().setWidth(120);
EObjectColumnLabelProvider provider = new MetadataColumnLabelProvider(MetadataPackage.Literals.FUNCTION_PROXY__FUN_CODE ,getARESResource());
provider.setDiagnosticProvider(problemView);
column.setLabelProvider(provider);
FuncProxyContentProposalHelper helper = new FuncProxyContentProposalHelper(resource);
FuncProxyContentProposalProvider proposalProvider = new FuncProxyContentProposalProvider(helper,resource);
//����EditingSupport,
JresTextEditingSupportWithContentAssist es = new JresTextEditingSupportWithContentAssist(
treeViewer,
MetadataPackage.Literals.FUNCTION_PROXY__FUN_CODE,
proposalProvider);
column.setEditingSupport(es);
}
/**��������*/
{
TableViewerColumn column = new TableViewerColumn(treeViewer, SWT.LEFT);
column.getColumn().setText("��������");
column.getColumn().setWidth(120);
CellLabelProvider provider = new ColumnLabelProvider(){
@Override
public String getText(Object element) {
if(element instanceof FunctionProxy){
return MenuUtils.getFunctionByName(resource, ((FunctionProxy) element).getFunCode()).getChineseName();
}else{
return StringUtils.EMPTY;
}
}
@Override
public Color getBackground(Object element) {
return Display.getDefault().getSystemColor(SWT.COLOR_GRAY);
}
};
column.setLabelProvider(provider);
column.getColumn().setMoveable(true);
}
/**��ע*/
{
TableViewerColumn column = new TableViewerColumn(treeViewer, SWT.LEFT);
column.getColumn().setText("˵��");
column.getColumn().setWidth(200);
EObjectColumnLabelProvider provider = new EObjectColumnLabelProvider(MetadataPackage.Literals.FUNCTION_PROXY__DESCRIPTION){
@Override
public Color getBackground(Object element) {
return Display.getDefault().getSystemColor(SWT.COLOR_GRAY);
}
@Override
public String getText(Object element) {
if(element instanceof FunctionProxy){
return MenuUtils.getFunctionByName(resource, ((FunctionProxy) element).getFunCode()).getDescription();
}else{
return StringUtils.EMPTY;
}
}
@Override
public String getToolTipText(Object element) {
String text = super.getToolTipText(element);
if(StringUtils.isBlank(text)){
return getText(element);
}
return text;
}
};
provider.setDiagnosticProvider(problemView);
column.setLabelProvider(provider);
column.getColumn().setMoveable(true);
}
// ������չ��֧��
MenuUtils.createFunctionProxyExtensibleModelColumns(getColumnViewer(), getARESResource(),
MetadataPackage.Literals.FUNCTION);
// getEditableControl().addEditableUnit(new JresDefaultEditableUnit(columnViewer.getControl()));
getProblemPool().addView(problemView);
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.jres.ui.pages.ColumnViewerBlock#createButtons(com.hundsun.ares.studio.jres.ui.actions.ButtonGroupManager)
*/
@Override
protected void createToolbarItems(ToolBarManager manager) {
//������ϸ��IJ����б�
IAction action = getActionRegistry().getAction(IActionIDConstant.CV_ADD);
manager.add(action);
action = getActionRegistry().getAction(IMetadataActionIDConstant.CV_BATCH_ADD);
manager.add(action);
action = getActionRegistry().getAction(IMetadataActionIDConstant.CV_RECOVER_FUNCTIONS);
manager.add(action);
action = getActionRegistry().getAction(IActionIDConstant.CV_DELETE);
manager.add(action);
action = getActionRegistry().getAction(IActionIDConstant.CV_MOVE_UP);
manager.add(action);
action = getActionRegistry().getAction(IActionIDConstant.CV_MOVE_DOWN);
manager.add(action);
}
@Override
protected void addToolTipSupport(TableViewer viewer) {
ColumnViewerHoverToolTip.enableFor(viewer);
}
}