formeditor.java

来自「基于eclipse的工具开发代码」· Java 代码 · 共 258 行

JAVA
258
字号
package com.cownew.uidesigner.ui;import java.io.IOException;import java.io.InputStream;import java.lang.reflect.InvocationTargetException;import java.util.EventObject;import org.eclipse.core.resources.IFile;import org.eclipse.core.resources.IWorkspace;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.draw2d.PositionConstants;import org.eclipse.gef.DefaultEditDomain;import org.eclipse.gef.GraphicalViewer;import org.eclipse.gef.KeyHandler;import org.eclipse.gef.KeyStroke;import org.eclipse.gef.dnd.TemplateTransferDragSourceListener;import org.eclipse.gef.editparts.ScalableFreeformRootEditPart;import org.eclipse.gef.palette.PaletteRoot;import org.eclipse.gef.ui.actions.AlignmentAction;import org.eclipse.gef.ui.actions.MatchHeightAction;import org.eclipse.gef.ui.actions.MatchWidthAction;import org.eclipse.gef.ui.parts.GraphicalEditorWithPalette;import org.eclipse.gef.ui.parts.GraphicalViewerKeyHandler;import org.eclipse.jface.action.IAction;import org.eclipse.jface.dialogs.ProgressMonitorDialog;import org.eclipse.swt.SWT;import org.eclipse.ui.IEditorInput;import org.eclipse.ui.IEditorPart;import org.eclipse.ui.IEditorSite;import org.eclipse.ui.IFileEditorInput;import org.eclipse.ui.IWorkbenchPart;import org.eclipse.ui.PartInitException;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 com.cownew.uidesigner.Activator;import com.cownew.uidesigner.model.Form;import com.cownew.uidesigner.parts.PartFactory;public class FormEditor extends GraphicalEditorWithPalette{	private PaletteRoot paletteRoot;	private boolean savePreviouslyNeeded;	private Form form = new Form();	public FormEditor()	{		super();		// an EditDomain is a "session" of editing which contains things		// like the CommandStack		setEditDomain(new DefaultEditDomain(this));	}	protected void configureGraphicalViewer()	{		super.configureGraphicalViewer();		GraphicalViewer viewer = getGraphicalViewer();		viewer.setRootEditPart(new ScalableFreeformRootEditPart());		viewer.setEditPartFactory(new PartFactory());		initKeyHandler(viewer);	}	private void initKeyHandler(GraphicalViewer viewer)	{		KeyHandler sharedKeyHandler = new KeyHandler();		String DELETEID = ActionFactory.DELETE.getId();		IAction actionDelete = getActionRegistry().getAction(DELETEID);		KeyStroke key_Del = KeyStroke.getPressed(SWT.DEL, 127, 0);		sharedKeyHandler.put(key_Del, actionDelete);		GraphicalViewerKeyHandler gvKeyHandler = new GraphicalViewerKeyHandler(				viewer);		KeyHandler keyHandler = gvKeyHandler.setParent(sharedKeyHandler);		viewer.setKeyHandler(keyHandler);	}	protected void initializeGraphicalViewer()	{		getGraphicalViewer().setContents(this.form);		FormTemplateTransferDropTargetListener listener = new FormTemplateTransferDropTargetListener(				getGraphicalViewer());		// 允许用户使用拖放的方式添加新图形,而不是选择加点击的方式		getGraphicalViewer().addDropTargetListener(listener);	}	protected void initializePaletteViewer()	{		super.initializePaletteViewer();		TemplateTransferDragSourceListener listener = new TemplateTransferDragSourceListener(				getPaletteViewer());		getPaletteViewer().addDragSourceListener(listener);	}	protected PaletteRoot getPaletteRoot()	{		if (this.paletteRoot == null)		{			this.paletteRoot = PaletteFactory.createPalette();		}		return this.paletteRoot;	}	@Override	protected void createActions()	{		super.createActions();		addAlignAction(PositionConstants.LEFT);		addAlignAction(PositionConstants.CENTER);		addAlignAction(PositionConstants.RIGHT);		addAlignAction(PositionConstants.TOP);		addAlignAction(PositionConstants.MIDDLE);		addAlignAction(PositionConstants.BOTTOM);		registerAction(new MatchWidthAction(this));		registerAction(new MatchHeightAction(this));	}	private void addAlignAction(int direction)	{		IAction action = new AlignmentAction((IWorkbenchPart) this, direction);		registerAction(action);	}	private void registerAction(IAction action)	{		getActionRegistry().registerAction(action);		getSelectionActions().add(action.getId());	}	public void commandStackChanged(EventObject event)	{		if (isDirty())		{			if (!this.savePreviouslyNeeded)			{				this.savePreviouslyNeeded = true;				firePropertyChange(IEditorPart.PROP_DIRTY);			}		} else		{			savePreviouslyNeeded = false;			firePropertyChange(IEditorPart.PROP_DIRTY);		}		super.commandStackChanged(event);	}	protected void setInput(IEditorInput input)	{		super.setInput(input);		IFile file = ((IFileEditorInput) input).getFile();		try		{			InputStream istream = file.getContents(false);			form = Form.makeFromStream(istream);		} catch (Exception e)		{			form = new Form();		}	}	public void doSave(IProgressMonitor monitor)	{		try		{			IFile file = ((IFileEditorInput) getEditorInput()).getFile();			file.setContents(this.form.getAsStream(), true, false, monitor);			getCommandStack().markSaveLocation();		} catch (CoreException e)		{			Activator.logException(e);		} catch (IOException e)		{			Activator.logException(e);		}	}	public void doSaveAs()	{		SaveAsDialog dialog = new SaveAsDialog(getSite().getWorkbenchWindow()				.getShell());		dialog.setOriginalFile(((IFileEditorInput) getEditorInput()).getFile());		dialog.open();		IPath path = dialog.getResult();		if (path == null)			return;		IWorkspace workspace = ResourcesPlugin.getWorkspace();		final IFile file = workspace.getRoot().getFile(path);		WorkspaceModifyOperation op = new WorkspaceModifyOperation() {			public void execute(final IProgressMonitor monitor)					throws CoreException			{				try				{					file.create(form.getAsStream(), true, monitor);				} catch (IOException e)				{					Activator.logException(e);				}			}		};		try		{			new ProgressMonitorDialog(getSite().getWorkbenchWindow().getShell())					.run(false, true, op);		} catch (InvocationTargetException e)		{			Activator.logException(e);		} catch (InterruptedException e)		{			Activator.logException(e);		}		setInput(new FileEditorInput(file));		getCommandStack().markSaveLocation();	}	public boolean isDirty()	{		return getCommandStack().isDirty();	}	public boolean isSaveAsAllowed()	{		return true;	}	public void init(IEditorSite site, IEditorInput editorInput)			throws PartInitException	{		if (!(editorInput instanceof IFileEditorInput))			throw new PartInitException(					"Invalid Input: Must be IFileEditorInput");		super.init(site, editorInput);		IFile file = ((IFileEditorInput) editorInput).getFile();		setPartName(file.getName());	}}

⌨️ 快捷键说明

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