📄 abstractgraphicaleditor.java
字号:
/*******************************************************************************
* $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 + -