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 + -
显示快捷键?