package com.hundsun.ares.studio.jres.obj.ui.editor;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EObject;
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.TreeViewer;
import org.eclipse.jface.viewers.TreeViewerColumn;
import org.eclipse.jface.viewers.ViewerCell;
import org.eclipse.swt.SWT;
import org.eclipse.ui.IWorkbenchPartSite;
import org.eclipse.ui.forms.editor.FormPage;
import com.hundsun.ares.studio.biz.BizPackage;
import com.hundsun.ares.studio.biz.ui.ObjContentProposalHelper;
import com.hundsun.ares.studio.core.IARESProject;
import com.hundsun.ares.studio.core.IARESResource;
import com.hundsun.ares.studio.core.model.util.Pair;
import com.hundsun.ares.studio.jres.metadata.ui.actions.AddChildCategoryAction;
import com.hundsun.ares.studio.jres.metadata.ui.actions.AddItemAction;
import com.hundsun.ares.studio.jres.metadata.ui.actions.AddSiblingCategoryAction;
import com.hundsun.ares.studio.jres.metadata.ui.actions.CopyAction;
import com.hundsun.ares.studio.jres.metadata.ui.actions.IMetadataActionIDConstant;
import com.hundsun.ares.studio.jres.metadata.ui.actions.InsertItemAction;
import com.hundsun.ares.studio.jres.metadata.ui.actions.MoveDownAction;
import com.hundsun.ares.studio.jres.metadata.ui.actions.MoveUpAction;
import com.hundsun.ares.studio.jres.metadata.ui.actions.PasteAction;
import com.hundsun.ares.studio.jres.metadata.ui.actions.RemoveAction;
import com.hundsun.ares.studio.jres.metadata.ui.actions.ShowCategoryAction;
import com.hundsun.ares.studio.jres.metadata.ui.block.MetadataListViewerBlock;
import com.hundsun.ares.studio.jres.metadata.ui.block.MetadataNewActionGroup;
import com.hundsun.ares.studio.jres.metadata.ui.refactor.MatadataRenameAction;
import com.hundsun.ares.studio.jres.metadata.ui.viewer.MetadataColumnViewerProblemView;
import com.hundsun.ares.studio.jres.metadata.ui.viewer.MetadataHeaderColumnLabelProvider;
import com.hundsun.ares.studio.jres.metadata.ui.viewer.MetadataItemEditingSupportDecorator;
import com.hundsun.ares.studio.jres.model.metadata.MetadataPackage;
import com.hundsun.ares.studio.jres.model.metadata.provider.LongTextEditingSupport;
import com.hundsun.ares.studio.jres.obj.ui.StdObjFieldColumnLabelProvider;
import com.hundsun.ares.studio.jres.obj.ui.StdObjFieldEditingSupportDecorator;
import com.hundsun.ares.studio.jres.obj.ui.StdObjFieldTypeContentProposalProvider;
import com.hundsun.ares.studio.ui.ColumnViewerHoverToolTip;
import com.hundsun.ares.studio.ui.editor.actions.ActionGroup;
import com.hundsun.ares.studio.ui.editor.actions.ColumnViewerDeleteAction;
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.editable.ActionEditableUnit;
import com.hundsun.ares.studio.ui.editor.editingsupport.JresTextEditingSupportWithContentAssist;
import com.hundsun.ares.studio.ui.editor.editingsupport.TextEditingSupport;
import com.hundsun.ares.studio.ui.editor.extend.ExtensibleModelUtils;
import com.hundsun.ares.studio.ui.editor.viewers.EObjectColumnLabelProvider;
import com.hundsun.ares.studio.ui.editor.viewers.EObjectColumnViewerProblemView;
import com.hundsun.ares.studio.ui.validate.IProblemPool;
public class StdObjListViewerBlock extends MetadataListViewerBlock{
public StdObjListViewerBlock(FormPage page, EditingDomain editingDomain,
IWorkbenchPartSite site, IARESResource resource,
IProblemPool problemPool) {
super(page, editingDomain, site, resource, problemPool);
}
@Override
protected void addToolTipSupport(TreeViewer viewer) {
ColumnViewerHoverToolTip.enableFor(viewer);
}
@Override
protected void createColumns(TreeViewer viewer) {
final TreeViewer treeViewer = viewer;
EObjectColumnViewerProblemView problemView = new MetadataColumnViewerProblemView(treeViewer);
/**ID*/
{
// ����������
EAttribute attribute = MetadataPackage.Literals.NAMED_ELEMENT__NAME;
// ���������
TreeViewerColumn column = new TreeViewerColumn(treeViewer, SWT.LEFT);
column.getColumn().setText("�ֶ���");
column.getColumn().setWidth(160);
column.getColumn().setMoveable(true);
// ���ñ�ǩ�ṩ��
EObjectColumnLabelProvider provider = new MetadataHeaderColumnLabelProvider(attribute,getARESResource());
provider.setDiagnosticProvider(problemView);
column.setLabelProvider(provider);
// ���ñ༭֧��
TextEditingSupport es = new TextEditingSupport(treeViewer, attribute);
es.setDecorator(new MetadataItemEditingSupportDecorator(attribute,getARESResource()));
column.setEditingSupport(es);
}
/**����*/
{
// ����������
EAttribute attribute = MetadataPackage.Literals.NAMED_ELEMENT__CHINESE_NAME;
// ���������
TreeViewerColumn column = new TreeViewerColumn(treeViewer, SWT.LEFT);
column.getColumn().setText("�ֶ�����");
column.getColumn().setWidth(150);
column.getColumn().setMoveable(true);
// ���ñ�ǩ�ṩ��
EObjectColumnLabelProvider provider = new StdObjFieldColumnLabelProvider(attribute, getARESResource().getARESProject());
provider.setDiagnosticProvider(problemView);
column.setLabelProvider(provider);
// ���ñ༭֧��
TextEditingSupport es = new TextEditingSupport(treeViewer, attribute);
es.setDecorator(new StdObjFieldEditingSupportDecorator(attribute,getARESResource()));
column.setEditingSupport(es);
column.getColumn().setMoveable(true);
}
/**ҵ����������*/
{
// ����������
EAttribute attribute = BizPackage.Literals.STANDARD_OBJ_FIELD__TYPE;
// ���������
TreeViewerColumn comlumn = new TreeViewerColumn(treeViewer, SWT.LEFT);
comlumn.getColumn().setText("�ֶ�����");
comlumn.getColumn().setWidth(130);
// ���ñ�ǩ�ṩ��
StdObjFieldColumnLabelProvider provider = new StdObjFieldColumnLabelProvider(attribute, getARESResource().getARESProject());
provider.setDiagnosticProvider(problemView);
comlumn.setLabelProvider(provider);
// 1. ��ȡaresProject
final IARESProject project = getARESResource() == null ? null : getARESResource().getARESProject();
// 2. proposal provider
ObjContentProposalHelper helper = new ObjContentProposalHelper();
StdObjFieldTypeContentProposalProvider proposalProvider = new StdObjFieldTypeContentProposalProvider(helper, project);
// 3. ����EditingSupport,
JresTextEditingSupportWithContentAssist es = new JresTextEditingSupportWithContentAssist(
treeViewer,
attribute,
proposalProvider);
es.setDecorator(new MetadataItemEditingSupportDecorator(attribute,getARESResource()));
comlumn.setEditingSupport(es);
comlumn.getColumn().setMoveable(true);
}
/**��ע*/
{
// ����������
EAttribute attribute = MetadataPackage.Literals.NAMED_ELEMENT__DESCRIPTION;
// ���������
TreeViewerColumn comlumn = new TreeViewerColumn(treeViewer, SWT.LEFT);
comlumn.getColumn().setText("˵��");
comlumn.getColumn().setWidth(200);
// ���ñ�ǩ�ṩ��
EObjectColumnLabelProvider provider = new StdObjFieldColumnLabelProvider(attribute, getARESResource().getARESProject()){
@Override
public String getToolTipText(Object element) {
String text = getText(element);
return StringUtils.isBlank(text) ? super.getToolTipText(element) : text;
}
};
provider.setDiagnosticProvider(problemView);
comlumn.setLabelProvider(provider);
// ���ñ༭֧��
TextEditingSupport es = new LongTextEditingSupport(treeViewer, attribute);
es.setDecorator(new StdObjFieldEditingSupportDecorator(attribute,getARESResource()));
comlumn.setEditingSupport(es);
comlumn.getColumn().setMoveable(true);
}
// ������չ��֧��
ExtensibleModelUtils.createExtensibleModelTreeViewerColumns(getColumnViewer(), getARESResource(),
BizPackage.Literals.STANDARD_OBJ_FIELD, problemView);
getProblemPool().addView(problemView);
}
@Override
public Pair<EObject, IARESResource> getLinkedObject(ViewerCell cell) {
return null;
}
@Override
protected String getID() {
return getClass().getName();
}
@Override
protected boolean getDefaultShowCategory() {
return false;
}
@Override
protected void createActions() {
super.createActions();
List<IAction> actions = new ArrayList<IAction>();
IAction addItemAction = new AddItemAction(getColumnViewer(), getEditingDomain(), BizPackage.Literals.STANDARD_OBJ_FIELD);
getActionRegistry().registerAction(addItemAction);
getSelectionActions().add(addItemAction.getId());
actions.add(addItemAction);
IAction actionInsert = new InsertItemAction(
getColumnViewer(),
getEditingDomain(),
BizPackage.Literals.STANDARD_OBJ_FIELD);
getActionRegistry().registerAction(actionInsert);
getSelectionActions().add(actionInsert.getId());
IAction addChildCategoryAction = new AddChildCategoryAction(getColumnViewer(), getEditingDomain());
getActionRegistry().registerAction(addChildCategoryAction);
getSelectionActions().add(addChildCategoryAction.getId());
categoryWareActions.add(addChildCategoryAction.getId());
actions.add(addChildCategoryAction);
IAction addSiblingCategoryAction = new AddSiblingCategoryAction(getColumnViewer(), getEditingDomain());
getActionRegistry().registerAction(addSiblingCategoryAction);
getSelectionActions().add(addSiblingCategoryAction.getId());
categoryWareActions.add(addSiblingCategoryAction.getId());
actions.add(addSiblingCategoryAction);
IAction columnViewerDelAction = new ColumnViewerDeleteAction(getColumnViewer(), getEditingDomain());
getActionRegistry().registerAction(columnViewerDelAction);
getSelectionActions().add(columnViewerDelAction.getId());
actions.add(columnViewerDelAction);
IAction removeAction = new RemoveAction(getColumnViewer(), getEditingDomain());
getActionRegistry().registerAction(removeAction);
getSelectionActions().add(removeAction.getId());
actions.add(removeAction);
IAction moveUpAction = new MoveUpAction(getColumnViewer(), getEditingDomain());
getActionRegistry().registerAction(moveUpAction);
getSelectionActions().add(moveUpAction.getId());
getStackActions().add(moveUpAction.getId());
actions.add(moveUpAction);
IAction moveDownAction = new MoveDownAction(getColumnViewer(), getEditingDomain());
getActionRegistry().registerAction(moveDownAction);
getSelectionActions().add(moveDownAction.getId());
getStackActions().add(moveDownAction.getId());
actions.add(moveDownAction);
IAction showCategoryAction = new ShowCategoryAction(getColumnViewer());
getActionRegistry().registerAction(showCategoryAction);
actions.add(showCategoryAction);
IAction copyAction = new CopyAction(getColumnViewer());
getActionRegistry().registerAction(copyAction);
getSelectionActions().add(copyAction.getId());
IAction copyCellAction = new CopyCellAction(getColumnViewer());
getActionRegistry().registerAction(copyCellAction);
IAction copyColumnAction = new CopyColumnAction(getColumnViewer());
getActionRegistry().registerAction(copyColumnAction);
IAction pasteAction = new PasteAction(getColumnViewer(), getEditingDomain(),
MetadataPackage.Literals.METADATA_CATEGORY, BizPackage.Literals.STANDARD_OBJ_FIELD);
getActionRegistry().registerAction(pasteAction);
getSelectionActions().add(pasteAction.getId());
getClipboardActions().add(pasteAction.getId());
categoryWareActions.add(pasteAction.getId());
for(IAction action: actions) {
getEditableControl().addEditableUnit(new ActionEditableUnit(action));
}
}
@Override
protected void createMenus(IMenuManager menuManager) {
//�������ֶα༭�����Ҽ��˵�
IAction action = getActionRegistry().getAction(IMetadataActionIDConstant.CV_ADD_ITEM);
menuManager.add(action);
action = getActionRegistry().getAction(IMetadataActionIDConstant.CV_ADD_CHILD_CATEGORY);
menuManager.add(action);
action = getActionRegistry().getAction(IMetadataActionIDConstant.CV_ADD_SLIBING_CATEGORY);
menuManager.add(action);
menuManager.add(new Separator());
action = getActionRegistry().getAction(IMetadataActionIDConstant.CV_REMOVE);
menuManager.add(action);
action = getActionRegistry().getAction(IActionIDConstant.CV_DELETE);
menuManager.add(action);
action = getActionRegistry().getAction(IMetadataActionIDConstant.CV_MOVE_UP);
menuManager.add(action);
action = getActionRegistry().getAction(IMetadataActionIDConstant.CV_MOVE_DOWN);
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(IMetadataActionIDConstant.CV_SHOW_CATEGORY);
menuManager.add(action);
action = new MatadataRenameAction(getEditingDomain(),getTreeViewerFirstColumnName(),getFormPage().getEditor(),getColumnViewer(),getARESResource());
menuManager.add(action);
action = getActionRegistry().getAction(IMetadataActionIDConstant.CV_INSERT_ITEM);
menuManager.add(action);
}
@Override
protected void createToolbarItems(ToolBarManager manager) {
super.createToolbarItems(manager);
//�������ֶα༭���IJ����б�
ActionGroup newGroup = new MetadataNewActionGroup(getActionRegistry());
manager.add(newGroup);
IAction
action = getActionRegistry().getAction(IMetadataActionIDConstant.CV_INSERT_ITEM);
manager.add(action);
action = getActionRegistry().getAction(IActionIDConstant.CV_DELETE);
manager.add(action);
action = getActionRegistry().getAction(IMetadataActionIDConstant.CV_MOVE_UP);
manager.add(action);
action = getActionRegistry().getAction(IMetadataActionIDConstant.CV_MOVE_DOWN);
manager.add(action);
}
}