package com.hundsun.ares.studio.jres.metadata.ui.block; import java.util.EventObject; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.edit.domain.EditingDomain; import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IMenuManager; 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 org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.ui.IWorkbenchPartSite; import org.eclipse.ui.plugin.AbstractUIPlugin; import com.hundsun.ares.studio.core.IARESResource; import com.hundsun.ares.studio.jres.metadata.ui.MetadataUI; import com.hundsun.ares.studio.jres.metadata.ui.actions.ExportMetadataAction; import com.hundsun.ares.studio.jres.metadata.ui.actions.IMetadataActionIDConstant; import com.hundsun.ares.studio.jres.metadata.ui.actions.ImportIDRangeAction; import com.hundsun.ares.studio.jres.metadata.ui.viewer.IDExtendLabelProvider; import com.hundsun.ares.studio.jres.metadata.ui.viewer.IDExtentEditingSupport; import com.hundsun.ares.studio.jres.metadata.ui.viewer.IDRangeContentProvider; import com.hundsun.ares.studio.jres.metadata.ui.viewer.IDRangeHeaderLabelProvider; import com.hundsun.ares.studio.jres.metadata.ui.viewer.MenuColumnViewerProblemView; import com.hundsun.ares.studio.jres.model.metadata.IDRangeList; import com.hundsun.ares.studio.jres.model.metadata.MetadataPackage; import com.hundsun.ares.studio.ui.editor.EMFFormPage; import com.hundsun.ares.studio.ui.editor.IDiagnosticProvider; import com.hundsun.ares.studio.ui.editor.blocks.TreeViewerBlock; import com.hundsun.ares.studio.ui.editor.editable.ActionEditableUnit; import com.hundsun.ares.studio.ui.editor.extend.ExtensibleModelUtils; import com.hundsun.ares.studio.ui.editor.extend.IExtensibleModelEditingSupport; import com.hundsun.ares.studio.ui.editor.extend.IExtensibleModelPropertyDescriptor; import com.hundsun.ares.studio.ui.editor.viewers.EObjectColumnViewerProblemView; import com.hundsun.ares.studio.ui.editor.viewers.RefreshViewerJob; import com.hundsun.ares.studio.ui.validate.IProblemPool; public class IDRangeListViewerBlock extends TreeViewerBlock { private EMFFormPage page; private IWorkbenchPartSite site; public IDRangeListViewerBlock(EMFFormPage page,EditingDomain editingDomain,IWorkbenchPartSite site, IProblemPool problemPool) { this.problemPool = problemPool; this.page = page; this.site = site; this.editingDomain = editingDomain; this.resource = page.getEditor().getARESResource(); } @Override protected String getID() { return getClass().getName(); } @Override protected IContentProvider getColumnViewerContentProvider() { return new IDRangeContentProvider(resource,MetadataPackage.Literals.ID_RANGE_ITEM); } @Override protected void createMenus(IMenuManager menuManager) { } @Override protected void createColumns(TreeViewer viewer) { EObjectColumnViewerProblemView problemView = new MenuColumnViewerProblemView(viewer); /**����*/ { // ��������� TreeViewerColumn column = new TreeViewerColumn(viewer, SWT.LEFT); column.getColumn().setText("ģ��"); column.getColumn().setWidth(200); // ���ñ�ǩ�ṩ�� IDRangeHeaderLabelProvider provider = new IDRangeHeaderLabelProvider(); column.setLabelProvider(provider); column.getColumn().setMoveable(true); } createExtensibleModelTreeViewerColumns(getColumnViewer(), resource, MetadataPackage.Literals.ID_RANGE_ITEM, problemView); problemPool.addView(problemView); } @Override public void commandStackChanged(EventObject event) { RefreshViewerJob.refresh(getColumnViewer(), null, true); } @Override protected void createActions() { ImportIDRangeAction importAction = new ImportIDRangeAction(resource, getColumnViewer(),page.getEditor().getInfo() ,editingDomain); getActionRegistry().registerAction(importAction); getSelectionActions().add(importAction.getId()); String dialogTitle = "��������ŷ�Χ"; String dialogMessage = "����Ŀ�еĶ���ŷ�Χ����(Excel�ļ�)."; Image dialogImage = AbstractUIPlugin.imageDescriptorFromPlugin(MetadataUI.PLUGIN_ID, "icons/full/obj16/IDRange.gif").createImage(); ExportMetadataAction exportAction = new ExportMetadataAction(resource, site,dialogTitle,dialogImage,dialogMessage); getActionRegistry().registerAction(exportAction); getSelectionActions().add(exportAction.getId()); getEditableControl().addEditableUnit(new ActionEditableUnit(importAction)); } @Override protected void createToolbarItems(ToolBarManager manager) { IAction action = getActionRegistry().getAction(IMetadataActionIDConstant.CV_IMPORT_METADATA); manager.add(action); action = getActionRegistry().getAction(IMetadataActionIDConstant.CV_EXPORT_METADATA); manager.add(action); } private void createExtensibleModelTreeViewerColumns( TreeViewer viewer, IARESResource resource, EClass eClass, IDiagnosticProvider diagnosticProvider) { if (resource == null) { return; } IExtensibleModelEditingSupport[] editingSupports = ExtensibleModelUtils .getEndabledEditingSupports(resource, eClass); GC gc = new GC(viewer.getControl()); try { for (IExtensibleModelEditingSupport support : editingSupports) { for (IExtensibleModelPropertyDescriptor descriptor : support .getPropertyDescriptors(resource, eClass)) { TreeViewerColumn tvColumn = new TreeViewerColumn(viewer, SWT.LEFT); // ���ȸ�����ʵ����������� String displayName = descriptor.getDisplayName(); Point p = gc.stringExtent(displayName); tvColumn.getColumn().setWidth(p.x + 100); tvColumn.getColumn().setText(displayName); IDExtendLabelProvider provider = new IDExtendLabelProvider( support, descriptor , (IDRangeList) page.getEditor().getInfo()); provider.setDiagnosticProvider(diagnosticProvider); tvColumn.setLabelProvider(provider); tvColumn.setEditingSupport(new IDExtentEditingSupport( viewer, support, descriptor,(IDRangeList) page.getEditor().getInfo())); tvColumn.getColumn().setMoveable(true); } } } finally { gc.dispose(); } } }