⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 abstractgraphicaleditor.java

📁 对eclipse gef进行封装,可以生成图形化编辑器
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/*******************************************************************************
 * $Header: /cvsroot/EOS6/work_dir/niegy/com.primeton.studio.gef.ui/src/com/primeton/studio/gef/ui/editor/AbstractGraphicalEditor.java,v 1.10 2006/12/20 02:57:07 niegy Exp $
 * $Revision: 1.10 $
 * $Date: 2006/12/20 02:57:07 $
 *
 *==============================================================================
 *
 * Copyright (c) 2001-2006 Primeton Technologies, Ltd.
 * All rights reserved. 
 * 
 * Created on 2006-9-27
 *******************************************************************************/


package com.primeton.studio.gef.ui.editor;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.reflect.InvocationTargetException;
import java.util.Collections;
import java.util.EventObject;
import java.util.HashMap;
import java.util.Map;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRunnable;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.SubProgressMonitor;
import org.eclipse.draw2d.ConnectionLayer;
import org.eclipse.draw2d.PositionConstants;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl;
import org.eclipse.gef.ContextMenuProvider;
import org.eclipse.gef.DefaultEditDomain;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.EditPartFactory;
import org.eclipse.gef.EditPartViewer;
import org.eclipse.gef.GraphicalEditPart;
import org.eclipse.gef.GraphicalViewer;
import org.eclipse.gef.KeyHandler;
import org.eclipse.gef.KeyStroke;
import org.eclipse.gef.LayerConstants;
import org.eclipse.gef.RootEditPart;
import org.eclipse.gef.commands.CommandStack;
import org.eclipse.gef.dnd.TemplateTransferDragSourceListener;
import org.eclipse.gef.dnd.TemplateTransferDropTargetListener;
import org.eclipse.gef.editparts.ScalableFreeformRootEditPart;
import org.eclipse.gef.editparts.ZoomManager;
import org.eclipse.gef.palette.PaletteRoot;
import org.eclipse.gef.requests.CreationFactory;
import org.eclipse.gef.ui.actions.ActionRegistry;
import org.eclipse.gef.ui.actions.AlignmentAction;
import org.eclipse.gef.ui.actions.DeleteAction;
import org.eclipse.gef.ui.actions.DirectEditAction;
import org.eclipse.gef.ui.actions.GEFActionConstants;
import org.eclipse.gef.ui.actions.MatchHeightAction;
import org.eclipse.gef.ui.actions.MatchWidthAction;
import org.eclipse.gef.ui.actions.RedoAction;
import org.eclipse.gef.ui.actions.UndoAction;
import org.eclipse.gef.ui.actions.ZoomInAction;
import org.eclipse.gef.ui.actions.ZoomOutAction;
import org.eclipse.gef.ui.palette.PaletteViewer;
import org.eclipse.gef.ui.palette.PaletteViewerProvider;
import org.eclipse.gef.ui.palette.FlyoutPaletteComposite.FlyoutPreferences;
import org.eclipse.gef.ui.parts.GraphicalEditorWithFlyoutPalette;
import org.eclipse.gef.ui.parts.SelectionSynchronizer;
import org.eclipse.gef.ui.rulers.RulerComposite;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.jface.dialogs.MessageDialogWithToggle;
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.util.TransferDropTargetListener;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.actions.ActionFactory;
import org.eclipse.ui.actions.WorkspaceModifyOperation;
import org.eclipse.ui.dialogs.SaveAsDialog;
import org.eclipse.ui.part.FileEditorInput;
import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
import org.eclipse.ui.views.properties.IPropertySheetPage;

import com.primeton.studio.gef.core.Diagram;
import com.primeton.studio.gef.core.ModelManager;
import com.primeton.studio.gef.ui.Constants;
import com.primeton.studio.gef.ui.GefToolsUtil;
import com.primeton.studio.gef.ui.GefUiPlugin;
import com.primeton.studio.gef.ui.action.AttributeAction;
import com.primeton.studio.gef.ui.action.CopyNodeAction;
import com.primeton.studio.gef.ui.action.CutNodeAction;
import com.primeton.studio.gef.ui.action.EnterAction;
import com.primeton.studio.gef.ui.action.GroupNodeAction;
import com.primeton.studio.gef.ui.action.OperandAction;
import com.primeton.studio.gef.ui.action.PasteNodeAction;
import com.primeton.studio.gef.ui.action.SelectAllAction;
import com.primeton.studio.gef.ui.action.ShowPropertiesAction;
import com.primeton.studio.gef.ui.action.UnGroupNodeAction;
import com.primeton.studio.gef.ui.parts.CoreTreeEditPartFactory;
import com.primeton.studio.gef.ui.parts.DiagramEditPartFactory;
import com.primeton.studio.gef.ui.parts.ExtenderReader;
import com.primeton.studio.gef.ui.properties.AbstractPropertyMenuManager;
import com.primeton.studio.gef.ui.properties.PropertySheetEntryEx;
import com.primeton.studio.gef.ui.properties.PropertySheetPageEx;

/**
 * gef编辑器抽象类,其他gef相关编辑器继承该类
 *
 * @author niegy (mailto:niegy@primeton.com)
 */
/*
 * 修改历史
 * $Log: AbstractGraphicalEditor.java,v $
 * Revision 1.10  2006/12/20 02:57:07  niegy
 * 重构代码
 *
 * Revision 1.9  2006/12/16 09:04:42  niegy
 * 重构代码
 *
 * Revision 1.8  2006/12/12 08:26:39  niegy
 * 重构代码,实现一般图元的编辑框
 *
 * Revision 1.7  2006/12/11 08:36:58  niegy
 * 重构代码
 *
 * Revision 1.6  2006/12/11 04:04:00  niegy
 * 重构代码
 *
 * Revision 1.5  2006/12/08 07:04:32  niegy
 * 重构代码
 *
 * Revision 1.4  2006/12/05 05:18:59  niegy
 * 修改模型,增加连线的扩展点
 *
 * Revision 1.3  2006/11/22 07:07:39  niegy
 * 增加table
 *
 * Revision 1.2  2006/11/18 12:13:54  niegy
 * 增加容器模型
 *
 * Revision 1.1  2006/11/17 03:15:13  niegy
 * create
 * 
 */
public abstract class AbstractGraphicalEditor extends
        GraphicalEditorWithFlyoutPalette {

    /** Preference ID used to persist the palette location. */
    private static final String PALETTE_DOCK_LOCATION = "AbstractGraphicalEditorPaletteFactory.Location"; //$NON-NLS-1$
    /** Preference ID used to persist the palette size. */
    private static final String PALETTE_SIZE = "AbstractGraphicalEditorPaletteFactory.Size"; //$NON-NLS-1$
    /** Preference ID used to persist the flyout palette's state. */
    private static final String PALETTE_STATE = "AbstractGraphicalEditorPaletteFactory.State"; //$NON-NLS-1$
    
    /**
     *  粘贴板组件,装载图形
     */   
    private static Map paletteMap = new HashMap();
    
    private OutlinePage outLinePage = null;
    
    /**
     * 定义一个RulerComposite类型的变量
     */
    private RulerComposite rulerComp;
    
    /**
     * 命令栈
     */
    private CommandStack fCommandStack = new CommandStack();
    
    /**
     * 粘贴板视图提供者
     */
    private PaletteViewerProvider paletteViewerProvider = null;
    
    /**
     * 拖拉监听
     */
    private TemplateTransferDragSourceListener transferDragSourceListener = null;
    
    private final Resource resource = new XMLResourceImpl();
    
    private FlyoutPreferences flyoutPreferences = null;
    
    private Object fModel;
    
    private EditPartFactory fEditPartFactory;
    
    private AbstractContextMenuProvider fContextMenuProvider;
    
    private AbstractPropertyMenuManager fPropertyMenuManager;
    
    private KeyHandler keyHandler;
    
    private  ModelManager modelManager;

    public AbstractGraphicalEditor(){
        DefaultEditDomain editDomain = new DefaultEditDomain(this);
        editDomain.setCommandStack(fCommandStack);
        setEditDomain(editDomain);
        fEditPartFactory = new CoreTreeEditPartFactory(this);
        modelManager = createModelManager();
        fPropertyMenuManager = createMenuManager();
    }
    
    /**
     * 创建粘贴板组件
     */
    protected PaletteRoot getPaletteRoot() {
    	if(paletteMap.get(getPluginId()) == null){
    		PaletteRoot root = createPalette();
    		paletteMap.put(getPluginId(), root);
    		return root;
    	}else
    		return  (PaletteRoot)paletteMap.get(getPluginId());
       
    }

    public CommandStack getCommandStack(){
    	return fCommandStack;
    }
    
    /**
     * 创建粘贴板图元
     * @return
     */
    protected PaletteRoot createPalette() {
        // TODO Auto-generated method stub
        PaletteRoot palette = new PaletteRoot();
        palette.add(GefToolsUtil.createToolPaletteContainer(palette,getPluginId()));
        palette.addAll(GefToolsUtil.createNodesPaletteContainer(getPluginId(),isExistNote()));
        return palette;
    }
    

	abstract public String getPluginId();
    
    

    
    protected  static boolean isExistNote(){
    	return true;
    }
    


      
    /**
     * 返回模型跟节点
     * @return
     */
	public Object getModel() {
		// TODO Auto-generated method stub
		  return fModel;
	}
    
    /**
     * 根据文件资源创建模型
     * @param file
     * @return
     * @throws CoreException
     */
	protected Object create(IFile file) throws CoreException {
		// TODO Auto-generated method stub
        if (file.exists())
        {
            try
            {
            	modelManager.load(file.getFullPath());                	        
                GefUiPlugin.getDefault().setErrorStatusMessage(null);
            }
            catch (Exception e)
            {              
                GefUiPlugin.getDefault().setErrorStatusMessage(e.getMessage());
                modelManager.createNewDiagram(file.getFullPath());
            }

            fModel = modelManager.getModel();
            if (null == fModel)
            {
                fModel = createDiagram();//SystemDesignFactory.eINSTANCE.createSystem();
            }
            String key = getPluginId() + ((FileEditorInput)getEditorInput()).getFile().getFullPath().toOSString();
            GefToolsUtil.iniLinkId((Diagram)fModel, key);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -