/** * Դ�������ƣ�MetadataListViewerBlock.java * �������Ȩ���������ӹɷ����޹�˾ ��Ȩ���� * ϵͳ���ƣ�JRES Studio * ģ�����ƣ�com.hundsun.ares.studio.jres.metadata.ui * ����˵����$desc * ����ĵ��� * ���ߣ� */ package com.hundsun.ares.studio.jres.metadata.ui.block; import java.util.ArrayList; import java.util.List; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.edit.domain.EditingDomain; import org.eclipse.emf.edit.ui.dnd.LocalTransfer; import org.eclipse.emf.edit.ui.dnd.ViewerDragAdapter; 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.dialogs.IDialogSettings; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.jface.viewers.ColumnViewerEditorActivationStrategy; import org.eclipse.jface.viewers.IContentProvider; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.dnd.DND; import org.eclipse.swt.dnd.Transfer; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeColumn; import org.eclipse.ui.IWorkbenchPartSite; import org.eclipse.ui.forms.editor.FormPage; import org.eclipse.ui.forms.widgets.FormToolkit; import com.hundsun.ares.studio.core.IARESResource; import com.hundsun.ares.studio.jres.metadata.ui.editors.OperationButtonGroupControl; import com.hundsun.ares.studio.jres.metadata.ui.editors.dnd.MetadataDropAdapter; import com.hundsun.ares.studio.jres.metadata.ui.viewer.MetadataTreeContentProvider; import com.hundsun.ares.studio.jres.metadata.ui.viewer.MetadataTreeContentProvider.CategoryListener; import com.hundsun.ares.studio.jres.model.metadata.MetadataPackage; import com.hundsun.ares.studio.jres.model.metadata.MetadataResourceData; import com.hundsun.ares.studio.ui.editor.actions.IUpdateAction; import com.hundsun.ares.studio.ui.editor.blocks.TreeViewerBlock; import com.hundsun.ares.studio.ui.validate.IProblemPool; import com.hundsun.ares.studio.ui.viewers.link.CellLinkColumnViewerEditorActivationStrategy; import com.hundsun.ares.studio.ui.viewers.link.CellLinkMouseListener; import com.hundsun.ares.studio.ui.viewers.link.ICellLinkProvider; /** * @author yanwj06282 * */ public abstract class MetadataListViewerBlock extends TreeViewerBlock implements ICellLinkProvider{ protected static final String SHOW_CATEGORY = "show_category"; private EditingDomain editingDomain; private IARESResource resource; private IProblemPool problemPool; private IWorkbenchPartSite site; private FormPage page; private OperationButtonGroupControl obgc; private MetadataTreeContentProvider contentProvider; // ���Ƿ���ʾ����״̬�仯���е�AcitonIDs�������list��action������ʾ����״̬�л���ʱ��ˢ�¡� protected List<String> categoryWareActions = new ArrayList<String>(); public MetadataListViewerBlock(FormPage page,EditingDomain editingDomain,IWorkbenchPartSite site, IARESResource resource, IProblemPool problemPool) { this.page = page; this.site = site; this.editingDomain = editingDomain; this.resource = resource; this.problemPool = problemPool; } @Override protected EStructuralFeature getHeadColumnFeature() { return MetadataPackage.Literals.NAMED_ELEMENT__NAME; } /** * @return the editingDomain */ public EditingDomain getEditingDomain() { return editingDomain; } /** * @return the resource */ public IARESResource getARESResource() { return resource; } /** * @return the problemPool */ public IProblemPool getProblemPool() { return problemPool; } /** * @return the site */ public IWorkbenchPartSite getSite() { return site; } public FormPage getFormPage (){ return page; } /** * ��ȡ��չ������ * @return */ public OperationButtonGroupControl getOperationControl() { return obgc; } @Override protected abstract String getID(); @Override protected Control createViewerButtons(Composite parent, FormToolkit toolkit) { Composite client = toolkit.createComposite(parent); ToolBar toolbar = new ToolBar(client, SWT.VERTICAL); ToolBarManager toolbarManager = new ToolBarManager(toolbar); createToolbarItems(toolbarManager); toolbarManager.add(new Separator(OperationButtonGroupControl.GROUP_ID)); obgc = new OperationButtonGroupControl(toolbarManager); GridLayoutFactory.fillDefaults().applyTo(client); GridDataFactory.fillDefaults().grab(true, true).applyTo(toolbar); toolbarManager.update(true); toolkit.adapt(toolbar, false, false); return client; } @Override public void setInput(Object input) { super.setInput(input); obgc.setData((MetadataResourceData) input); obgc.setARESResource(resource); obgc.refresh(); } @Override protected void configureColumnViewer(TreeViewer viewer) { super.configureColumnViewer(viewer); addDragSupport(viewer); TreeViewer treeViewer = viewer; treeViewer.getTree().addMouseListener(new CellLinkMouseListener(viewer, this)); } protected void addDragSupport(TreeViewer viewer){ int dndOperations = DND.DROP_COPY | DND.DROP_MOVE; Transfer[] transfers = new Transfer[] { LocalTransfer.getInstance() }; //�༭���б�֧����ק���� viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(viewer)); viewer.addDropSupport(dndOperations, transfers, new MetadataDropAdapter(viewer, getEditingDomain())); } /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.ui.pages.ColumnViewerBlock#createColumnViewerEditorActivationStrategy(org.eclipse.jface.viewers.ColumnViewer) */ @Override protected ColumnViewerEditorActivationStrategy createColumnViewerEditorActivationStrategy( TreeViewer viewer) { // ��ֹ��Ctrl���ֱ༭�� return new CellLinkColumnViewerEditorActivationStrategy(viewer); } @Override protected IContentProvider getColumnViewerContentProvider() { //��ʼ��ʱΪ������ʾ contentProvider = new MetadataTreeContentProvider(); contentProvider.addShowCategoryStateChangeListener(new CategoryListener() { @Override public void showCategoryStateChanged() { for (String id : categoryWareActions) { IAction action = getActionRegistry().getAction(id); if (action != null) { if (action instanceof IUpdateAction) { ((IUpdateAction) action).update(); } } } } }); return contentProvider; } @Override protected void storeState(IDialogSettings settings) { super.storeState(settings); storeShowCategoryState(settings); } protected void storeShowCategoryState(IDialogSettings settings) { // ������� if (contentProvider != null) { boolean showCategory = contentProvider.isShowCategory(); settings.put(SHOW_CATEGORY, showCategory); } } @Override protected void restoreState(IDialogSettings settings) { super.restoreState(settings); restoreShowCategoryState(settings); } protected void restoreShowCategoryState(IDialogSettings settings) { if (contentProvider != null) { boolean showCategory = getDefaultShowCategory(); if (settings.get(SHOW_CATEGORY) != null) { showCategory = settings.getBoolean(SHOW_CATEGORY); } contentProvider.setShowCategory(showCategory); } } /** * Ĭ�Ϸ���״̬ * @return */ protected abstract boolean getDefaultShowCategory(); @Override protected void createMenus(IMenuManager menuManager) {} @Override protected void createActions() { // FIXME ���Ƶ�ʱ�򣬻᲻����ΪReference����MetadataItem�������� } @Override protected void createColumns(TreeViewer viewer){ } /** * ��ȡ��һ�б��� * Ĭ�Ϸ��ء�ID�� * @return */ protected String getTreeViewerFirstColumnName() { TreeViewer viewer = getColumnViewer(); if(null != viewer) { Tree tree = viewer.getTree(); if(null != tree) { TreeColumn firstCol = tree.getColumn(0); if(null != firstCol){ return firstCol.getText(); } } } return "ID"; } }