moduleeditor.java

来自「一个eclipse插件源代码。用于web开发」· Java 代码 · 共 585 行 · 第 1/2 页

JAVA
585
字号
/*
 * $Header: /home/cvs/WEBPUMP2.0/WebPumpIDE_Src/WebPumpIDE/src/com/webpump/ui/gefmodule/ModuleEditor.java,v 1.2 2004/12/29 09:45:30 wang_j Exp $
 * $Revision: 1.2 $
 * $Date: 2004/12/29 09:45:30 $
 *
 * ====================================================================
 *
 * The NanJing HopeRun(IT-FOREST) Software License, Version 2.0.0
 *
 * Copyright 2003-2004 by NanJing HopeRun(IT-FOREST) Information System Co., Ltd, CHINA and
 *                        IT Forest Corporation
 * All rights reserved.
 *
 * This software is the confidential and proprietary information of
 * HopeRun(IT-FOREST) Information System Co., Ltd, CHINA and IT Forest Corporation.
 * You shall not disclose such Confidential Information and shall use it only in
 * accordance with the terms of the license agreement you entered into with
 * HopeRun(IT-FOREST) Information System Co., Ltd, CHINA and IT Forest Corporation.
 */
package com.webpump.ui.gefmodule;

import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.EventObject;
import java.util.List;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IResourceChangeEvent;
import org.eclipse.core.resources.IResourceChangeListener;
import org.eclipse.core.resources.IResourceDelta;
import org.eclipse.core.resources.IResourceDeltaVisitor;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.draw2d.LightweightSystem;
import org.eclipse.draw2d.MarginBorder;
import org.eclipse.draw2d.PositionConstants;
import org.eclipse.draw2d.Viewport;
import org.eclipse.draw2d.parts.ScrollableThumbnail;
import org.eclipse.draw2d.parts.Thumbnail;
import org.eclipse.gef.ContextMenuProvider;
import org.eclipse.gef.DefaultEditDomain;
import org.eclipse.gef.EditPartViewer;
import org.eclipse.gef.KeyHandler;
import org.eclipse.gef.KeyStroke;
import org.eclipse.gef.LayerConstants;
import org.eclipse.gef.RootEditPart;
import org.eclipse.gef.editparts.ScalableFreeformRootEditPart;
import org.eclipse.gef.editparts.ZoomManager;
import org.eclipse.gef.palette.PaletteRoot;
import org.eclipse.gef.ui.actions.ActionRegistry;
import org.eclipse.gef.ui.actions.AlignmentAction;
import org.eclipse.gef.ui.actions.CopyTemplateAction;
import org.eclipse.gef.ui.actions.DirectEditAction;
import org.eclipse.gef.ui.actions.GEFActionConstants;
import org.eclipse.gef.ui.actions.ZoomInAction;
import org.eclipse.gef.ui.actions.ZoomOutAction;
import org.eclipse.gef.ui.palette.PaletteContextMenuProvider;
import org.eclipse.gef.ui.palette.PaletteViewer;
import org.eclipse.gef.ui.parts.ContentOutlinePage;
import org.eclipse.gef.ui.parts.GraphicalEditorWithPalette;
import org.eclipse.gef.ui.parts.GraphicalViewerKeyHandler;
import org.eclipse.gef.ui.parts.ScrollingGraphicalViewer;
import org.eclipse.gef.ui.parts.TreeViewer;
import org.eclipse.gef.ui.stackview.CommandStackInspectorPage;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.dnd.Clipboard;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.actions.WorkspaceModifyOperation;
import org.eclipse.ui.dialogs.SaveAsDialog;
import org.eclipse.ui.part.FileEditorInput;
import org.eclipse.ui.part.IPageSite;
import org.eclipse.ui.part.PageBook;
import org.eclipse.ui.views.contentoutline.IContentOutlinePage;

import com.webpump.ui.gefmodule.action.CopyAction;
import com.webpump.ui.gefmodule.action.CreateSourceAction;
import com.webpump.ui.gefmodule.action.MaxMinAction;
import com.webpump.ui.gefmodule.action.PasteAction;
import com.webpump.ui.gefmodule.edit.ModelEditPartFactory;
import com.webpump.ui.gefmodule.edit.TreePartFactory;
import com.webpump.ui.gefmodule.model.Module;
import com.webpump.ui.perspective.WebpumpIDEPlugin;
import com.webpump.ui.project.ProjectInfo;
import com.webpump.ui.project.ProjectModel;


/**
 * Class for ModuleEditor
 * 
 * @author shi_l
 * @version 2.0.0 2004-5-30
 */
public class ModuleEditor extends GraphicalEditorWithPalette {

	/**
	 * Class for Outline Page
	 * 
	 * @author shi_l
	 * @version 2.0.0 2004-5-30
	 */
	class OutlinePage extends ContentOutlinePage implements IAdaptable {

		/**PageBook of the Outline Page*/
		private PageBook pageBook;
		
		/**Outline*/
		private Control outline;
		
		/**Over View*/
		private Canvas overview;
		
		/**Action of showing outline*/
		private IAction showOutlineAction;
		
		/**Action of showing overview*/
		private IAction showOverviewAction;
		
		/**ID of the outline*/
		static final int ID_OUTLINE = 0;
		
		/**ID of the over view*/
		static final int ID_OVERVIEW = 1;
		
		/***/
		private Thumbnail thumbnail;

		/**
		 * Constructor
		 * @param viewer EditPartViewer
		 */
		public OutlinePage(EditPartViewer viewer) {
			super(viewer);
		}
		
		/**
		 * Init the Outline
		 * @param pageSite IPageSite
		 */
		public void init(IPageSite pageSite) {
			super.init(pageSite);
			
			//设置?准操?
			ActionRegistry registry = getActionRegistry();
			IActionBars bars = pageSite.getActionBars();
			String id = IWorkbenchActionConstants.UNDO;
			bars.setGlobalActionHandler(id, registry.getAction(id));
			id = IWorkbenchActionConstants.REDO;
			bars.setGlobalActionHandler(id, registry.getAction(id));
			id = IWorkbenchActionConstants.DELETE;
			bars.setGlobalActionHandler(id, registry.getAction(id));
			bars.updateActionBars();
		}

		/**
		 * Config the outline view
		 */
		protected void configureOutlineViewer() {
			//配置大纲视图
			getViewer().setEditDomain(getEditDomain());
			getViewer().setEditPartFactory(new TreePartFactory());
			ContextMenuProvider provider =
				new ModuleContextMenuProvider(getViewer(), getActionRegistry());
			getViewer().setContextMenu(provider);
			getSite().registerContextMenu("com.webpump.ui.gefmodule.outline.contextmenu", //$NON-NLS-1$
			provider, getSite().getSelectionProvider());

			getViewer().setKeyHandler(getCommonKeyHandler());
			IToolBarManager tbm = getSite().getActionBars().getToolBarManager();
			showOutlineAction = new Action() {
				public void run() {
					showPage(ID_OUTLINE);
				}
			};
			showOutlineAction.setImageDescriptor(ImageDescriptor.createFromFile(ModuleEditor.class, "icons/outline.gif")); //$NON-NLS-1$
			tbm.add(showOutlineAction);
			showOverviewAction = new Action() {
				public void run() {
					showPage(ID_OVERVIEW);
				}
			};
			showOverviewAction.setImageDescriptor(ImageDescriptor.createFromFile(ModuleEditor.class, "icons/overview.gif")); //$NON-NLS-1$
			tbm.add(showOverviewAction);
			showPage(ID_OUTLINE);
		}

		/**
		 * Create Control of the outline
		 * @param parent Composite
		 */
		public void createControl(Composite parent) {
			pageBook = new PageBook(parent, SWT.NONE);
			//大纲页
			outline = getViewer().createControl(pageBook);
			//导航页
			overview = new Canvas(pageBook, SWT.NONE);
			pageBook.showPage(outline);
			configureOutlineViewer();
			hookOutlineViewer();
			initializeOutlineViewer();
		}

		/**
		 * Dispose
		 */
		public void dispose() {
			unhookOutlineViewer();
			if (thumbnail != null)
				thumbnail.deactivate();
			super.dispose();
		}

		/**
		 * Get Adapter
		 * @param type Class
		 */
		public Object getAdapter(Class type) {
			if (type == ZoomManager.class)
				return ((ScalableFreeformRootEditPart) getGraphicalViewer().getRootEditPart())
					.getZoomManager();
			return null;
		}

		/**
		 * Get control
		 * @return pageBook Control
		 */
		public Control getControl() {
			return pageBook;
		}

		/**
		 * hook outline view
		 */
		protected void hookOutlineViewer() {
			getSelectionSynchronizer().addViewer(getViewer());
		}

		/**
		 * Initialize the outlineview
		 */
		protected void initializeOutlineViewer() {
			getViewer().setContents(getModule());
		}

		/**
		 * Initialize the over view
		 */
		protected void initializeOverview() {
			//初始化导航视图
			LightweightSystem lws = new LightweightSystem(overview);
			RootEditPart rep = getGraphicalViewer().getRootEditPart();
			if (rep instanceof ScalableFreeformRootEditPart) {
				ScalableFreeformRootEditPart root = (ScalableFreeformRootEditPart) rep;
				thumbnail = new ScrollableThumbnail((Viewport) root.getFigure());
				thumbnail.setBorder(new MarginBorder(3));
				thumbnail.setSource(root.getLayer(LayerConstants.PRINTABLE_LAYERS));
				lws.setContents(thumbnail);
			}
		}

		/**
		 * Show page
		 * @param id int
		 */
		protected void showPage(int id) {
			if (id == ID_OUTLINE) {

⌨️ 快捷键说明

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