/**
* �������Ȩ���������ӹɷ�����˾ ��Ȩ����
* ϵͳ���ƣ�JRES Studio
*/
package com.hundsun.ares.studio.jres.metadata.ui.block;
import java.util.Iterator;
import java.util.List;
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.CellEditor;
import org.eclipse.jface.viewers.IContentProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.TreeViewer;
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.utils.DictoniaryUtils;
import com.hundsun.ares.studio.jres.metadata.ui.viewer.DictionaryColumnViewerProblemView;
import com.hundsun.ares.studio.jres.metadata.ui.viewer.MetadataColumnLabelProvider;
import com.hundsun.ares.studio.jres.model.metadata.MetadataPackage;
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.ColumnViewerMoveBottomAction;
import com.hundsun.ares.studio.ui.editor.actions.ColumnViewerMoveDownAction;
import com.hundsun.ares.studio.ui.editor.actions.ColumnViewerMoveTopAction;
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.actions.IUpdateAction;
import com.hundsun.ares.studio.ui.editor.blocks.ActionRegistry;
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.IEditingSupportDecorator;
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.ReferenceContentProvider;
import com.hundsun.ares.studio.ui.validate.IProblemPool;
/**
* @author gongyf
*
*/
public class DictionaryDetailViewerBlock extends TableViewerBlock {
/**�ֵ���Ŀ�Ƿ������ֵ���������ֵ���Ŀ*/
private boolean detailColumnIsRef = false;
private TreeViewer parentViewer;
private ColumnViewerAddAction itemAddAction;
private ColumnViewerInsertAction insertAction;
private ColumnViewerDeleteAction itemDeleteAction;
private ColumnViewerMoveUpAction itemMoveUpAction;
private ColumnViewerMoveDownAction itemMoveDownAction;
private ColumnViewerMoveTopAction itemMoveTopAction;
private ColumnViewerMoveBottomAction itemMoveBottomAction;
private ColumnViewerPasteAction pasteAction;
/**
* @param editingDomain
* @param resource
* @param problemPool
* @param parentViewer
*/
public DictionaryDetailViewerBlock(EditingDomain editingDomain,
IARESResource resource, IProblemPool problemPool, TreeViewer parentViewer) {
super();
this.editingDomain = editingDomain;
this.resource = resource;
this.problemPool = problemPool;
this.parentViewer = parentViewer;
}
/**
* @param detailColumnIsRef the detailColumnIsRef to set
*/
public void setDetailColumnIsRef(boolean detailColumnIsRef) {
this.detailColumnIsRef = detailColumnIsRef;
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.jres.ui.pages.ColumnViewerBlock#getID()
*/
@Override
protected String getID() {
return getClass().getName();
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.jres.ui.pages.ColumnViewerBlock#getColumnViewerContentProvider()
*/
@Override
protected IContentProvider getColumnViewerContentProvider() {
return new ReferenceContentProvider(MetadataPackage.Literals.DICTIONARY_TYPE__ITEMS);
}
@Override
protected EStructuralFeature getHeadColumnFeature() {
return MetadataPackage.Literals.DICTIONARY_ITEM__VALUE;
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.jres.ui.pages.ColumnViewerBlock#createActions()
*/
@Override
protected void createActions() {
super.createActions();
IAction action = itemAddAction = new ColumnViewerAddAction(
getColumnViewer(),
getEditingDomain(),
null,
MetadataPackage.Literals.DICTIONARY_TYPE__ITEMS,
MetadataPackage.Literals.DICTIONARY_ITEM);
getActionRegistry().registerAction(action);
getSelectionActions().add(action.getId());
insertAction = new ColumnViewerInsertAction(
getColumnViewer(),
getEditingDomain(),
null,
MetadataPackage.Literals.DICTIONARY_TYPE__ITEMS,
MetadataPackage.Literals.DICTIONARY_ITEM);
getActionRegistry().registerAction(insertAction);
getSelectionActions().add(insertAction.getId());
action = itemDeleteAction = new ColumnViewerDeleteAction(getColumnViewer(), getEditingDomain());
getActionRegistry().registerAction(action);
getSelectionActions().add(action.getId());
action = itemMoveTopAction = new ColumnViewerMoveTopAction(
getColumnViewer(),
getEditingDomain(),
null,
MetadataPackage.Literals.DICTIONARY_TYPE__ITEMS);
getActionRegistry().registerAction(action);
getSelectionActions().add(action.getId());
getStackActions().add(action.getId());
action = itemMoveBottomAction = new ColumnViewerMoveBottomAction(
getColumnViewer(),
getEditingDomain(),
null,
MetadataPackage.Literals.DICTIONARY_TYPE__ITEMS);
getActionRegistry().registerAction(action);
getSelectionActions().add(action.getId());
getStackActions().add(action.getId());
action = itemMoveUpAction = new ColumnViewerMoveUpAction(
getColumnViewer(),
getEditingDomain(),
null,
MetadataPackage.Literals.DICTIONARY_TYPE__ITEMS);
getActionRegistry().registerAction(action);
getSelectionActions().add(action.getId());
getStackActions().add(action.getId());
action = itemMoveDownAction = new ColumnViewerMoveDownAction(
getColumnViewer(),
getEditingDomain(),
null,
MetadataPackage.Literals.DICTIONARY_TYPE__ITEMS);
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());
getEditableControl().addEditableUnit(new ActionEditableUnit(itemAddAction));
getEditableControl().addEditableUnit(new ActionEditableUnit(itemDeleteAction));
getEditableControl().addEditableUnit(new ActionEditableUnit(itemMoveUpAction));
getEditableControl().addEditableUnit(new ActionEditableUnit(itemMoveDownAction));
getEditableControl().addEditableUnit(new ActionEditableUnit(itemMoveTopAction));
getEditableControl().addEditableUnit(new ActionEditableUnit(itemMoveBottomAction));
}
/* (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);
itemMoveTopAction.setOwner((EObject) input);
itemMoveBottomAction.setOwner((EObject) input);
pasteAction.setOwner((EObject) input);
pasteAction.setReference(MetadataPackage.Literals.DICTIONARY_TYPE__ITEMS);
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_INSERT_ITEM);
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;
DictionaryColumnViewerProblemView problemView = new DictionaryColumnViewerProblemView(treeViewer,parentViewer);
DictionaryItemEditingSupportDecorator decorator = new DictionaryItemEditingSupportDecorator();
/**�ֵ���*/
{
TableViewerColumn column = new TableViewerColumn(treeViewer, SWT.LEFT);
column.getColumn().setText("�ֵ�����");
column.getColumn().setWidth(120);
EObjectColumnLabelProvider provider = new MetadataColumnLabelProvider(MetadataPackage.Literals.DICTIONARY_ITEM__VALUE ,getARESResource()){
@Override
public Color getBackground(Object element) {
if(detailColumnIsRef){
return Display.getDefault().getSystemColor(SWT.COLOR_GRAY);
}
return super.getBackground(element);
}
};
provider.setDiagnosticProvider(problemView);
column.setLabelProvider(provider);
TextEditingSupport tes = new TextEditingSupport(treeViewer, MetadataPackage.Literals.DICTIONARY_ITEM__VALUE);
tes.setDecorator(decorator);
column.setEditingSupport(tes);
column.getColumn().setMoveable(true);
}
/**�ֵ���˵��*/
{
TableViewerColumn column = new TableViewerColumn(treeViewer, SWT.LEFT);
column.getColumn().setText("��������");
column.getColumn().setWidth(200);
EObjectColumnLabelProvider provider = new MetadataColumnLabelProvider(MetadataPackage.Literals.DICTIONARY_ITEM__CHINESE_NAME , getARESResource()){
@Override
public Color getBackground(Object element) {
if(detailColumnIsRef){
return Display.getDefault().getSystemColor(SWT.COLOR_GRAY);
}
return super.getBackground(element);
}
};
provider.setDiagnosticProvider(problemView);
column.setLabelProvider(provider);
TextEditingSupport tes = new TextEditingSupport(treeViewer, MetadataPackage.Literals.DICTIONARY_ITEM__CHINESE_NAME);
tes.setDecorator(decorator);
column.setEditingSupport(tes);
column.getColumn().setMoveable(true);
}
/**����ID*/
if(!DictoniaryUtils.isHideDictionaryConstant(resource.getARESProject())){
TableViewerColumn column = new TableViewerColumn(treeViewer, SWT.LEFT);
column.getColumn().setText("�ֵ䳣��");
column.getColumn().setWidth(120);
EObjectColumnLabelProvider provider = new MetadataColumnLabelProvider(MetadataPackage.Literals.DICTIONARY_ITEM__CONSTANT_NAME ,getARESResource()){
@Override
public Color getBackground(Object element) {
if(detailColumnIsRef){
return Display.getDefault().getSystemColor(SWT.COLOR_GRAY);
}
return super.getBackground(element);
}
};
provider.setDiagnosticProvider(problemView);
column.setLabelProvider(provider);
TextEditingSupport tes = new TextEditingSupport(treeViewer, MetadataPackage.Literals.DICTIONARY_ITEM__CONSTANT_NAME);
tes.setDecorator(decorator);
column.setEditingSupport(tes);
column.getColumn().setMoveable(true);
}
/**��ע*/
{
TableViewerColumn column = new TableViewerColumn(treeViewer, SWT.LEFT);
column.getColumn().setText("˵��");
column.getColumn().setWidth(200);
EObjectColumnLabelProvider provider = new MetadataColumnLabelProvider(MetadataPackage.Literals.DICTIONARY_ITEM__DESCRIPTION , getARESResource()){
@Override
public Color getBackground(Object element) {
if(detailColumnIsRef){
return Display.getDefault().getSystemColor(SWT.COLOR_GRAY);
}
return super.getBackground(element);
}
};
provider.setDiagnosticProvider(problemView);
column.setLabelProvider(provider);
TextEditingSupport tes = new TextEditingSupport(treeViewer, MetadataPackage.Literals.DICTIONARY_ITEM__DESCRIPTION);
tes.setDecorator(decorator);
column.setEditingSupport(tes);
column.getColumn().setMoveable(true);
}
// ������չ��֧��
ExtensibleModelUtils.createExtensibleModelTableViewerColumns(getColumnViewer(), getARESResource(),
MetadataPackage.Literals.DICTIONARY_ITEM, problemView);
// getEditableControl().addEditableUnit(new JresDefaultEditableUnit(columnViewer.getControl()));
getProblemPool().addView(problemView);
}
@Override
protected void createToolbarItems(ToolBarManager manager) {
//������ϸ��IJ����б�
IAction action = getActionRegistry().getAction(IActionIDConstant.CV_ADD);
manager.add(action);
action = getActionRegistry().getAction(IMetadataActionIDConstant.CV_INSERT_ITEM);
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);
action = getActionRegistry().getAction(IActionIDConstant.CV_MOVE_TOP);
manager.add(action);
action = getActionRegistry().getAction(IActionIDConstant.CV_MOVE_BOTTOM);
manager.add(action);
}
@Override
protected void updateActions(final List<String> actionIds) {
Display.getDefault().syncExec(new Runnable() {
@Override
public void run() {
ActionRegistry registry = getActionRegistry();
Iterator<String> iter = actionIds.iterator();
while (iter.hasNext()) {
IAction action = registry.getAction(iter.next());
if (action instanceof IUpdateAction)
if(detailColumnIsRef){
action.setEnabled(false);
}else{
((IUpdateAction) action).update();
}
}
}
});
}
//TODO#������# #��#��С��#�ѱ��� #2011-8-11#24 #10 #�����ֵ����á��ֵ���Ŀ���á����ֵ����б��е�����ӦΪֻ��
class DictionaryItemEditingSupportDecorator implements
IEditingSupportDecorator {
/*
* (non-Javadoc)
*
* @see
* com.hundsun.ares.studio.jres.ui.editingsupports.IEditingSupportDecorator
* #decorateGetCellEditor(org.eclipse.jface.viewers.CellEditor,
* java.lang.Object)
*/
@Override
public CellEditor decorateGetCellEditor(CellEditor cellEditor,
Object element) {
return cellEditor;
}
/*
* (non-Javadoc)
*
* @see
* com.hundsun.ares.studio.jres.ui.editingsupports.IEditingSupportDecorator
* #decorateCanEdit(boolean, java.lang.Object)
*/
@Override
public boolean decorateCanEdit(boolean canEdit, Object element) {
if (detailColumnIsRef) {
return false;
}
return canEdit;
}
}
}