/* Copyright 2012-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.snaker.designer; import java.io.File; import java.util.ArrayList; import java.util.EventObject; import java.util.List; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.draw2d.FigureCanvas; import org.eclipse.gef.ContextMenuProvider; import org.eclipse.gef.DefaultEditDomain; import org.eclipse.gef.GraphicalViewer; import org.eclipse.gef.commands.CommandStack; import org.eclipse.gef.editparts.ScalableFreeformRootEditPart; import org.eclipse.gef.palette.PaletteRoot; import org.eclipse.gef.ui.actions.ActionRegistry; import org.eclipse.gef.ui.parts.GraphicalEditorWithPalette; import org.eclipse.gef.ui.parts.GraphicalViewerKeyHandler; import org.eclipse.gef.ui.parts.SelectionSynchronizer; import org.eclipse.jface.viewers.ISelection; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IFileEditorInput; import org.eclipse.ui.IWorkbenchPart; import org.snaker.designer.actions.ActionHelper; import org.snaker.designer.actions.FormContextMenuProvider; import org.snaker.designer.config.ConfigManager; import org.snaker.designer.io.Environment; import org.snaker.designer.model.Form; import org.snaker.designer.palette.PaletteFactory; import org.snaker.designer.parts.FormDesignerEditPartFactory; /** * Snaker表单设计器(单页面设计) 该设计器一般作为自定义单个表单时使用,不涉及流程逻辑 * * @author yuqs * @version 1.0 */ public class SnakerFormDesignerEditor extends GraphicalEditorWithPalette implements IAdaptable { private boolean isDirty = false; private Form model; private List<String> actionIds = new ArrayList<String>(); public SnakerFormDesignerEditor() { setEditDomain(new DefaultEditDomain(this)); } @Override protected void setInput(IEditorInput input) { super.setInput(input); IFile file = ((IFileEditorInput) input).getFile(); try { File location = new File(file.getLocationURI()); model = Environment.readerForm(location.getAbsolutePath()); } catch (Exception e) { model = new Form(); } } @Override public void doSave(IProgressMonitor monitor) { try { IFile file = ((IFileEditorInput) getEditorInput()).getFile(); File location = new File(file.getLocationURI()); Environment.writer((Form) this.model, location.getAbsolutePath()); getCommandStack().markSaveLocation(); } catch (Exception e) { e.printStackTrace(); } } @Override protected PaletteRoot getPaletteRoot() { PaletteFactory factory = new PaletteFactory(); return factory.getPaletteRoot(ConfigManager.COMPONENT_TYPE_FIELD); } @Override protected void initializeGraphicalViewer() { if (model == null) { model = new Form(); } getGraphicalViewer().setContents(this.model); } @Override protected void configureGraphicalViewer() { super.configureGraphicalViewer(); GraphicalViewer viewer = getGraphicalViewer(); viewer.setRootEditPart(new ScalableFreeformRootEditPart()); viewer.setEditPartFactory(new FormDesignerEditPartFactory(this)); ContextMenuProvider provider = new FormContextMenuProvider(viewer, actionIds, getActionRegistry()); viewer.setContextMenu(provider); viewer.setKeyHandler(new GraphicalViewerKeyHandler(viewer)); ((FigureCanvas) viewer.getControl()) .setScrollBarVisibility(FigureCanvas.ALWAYS); } @Override public void commandStackChanged(EventObject event) { if (((CommandStack) event.getSource()).isDirty()) { setDirty(true); firePropertyChange(IEditorPart.PROP_DIRTY); } else { setDirty(false); } super.commandStackChanged(event); } @Override public SelectionSynchronizer getSelectionSynchronizer() { return super.getSelectionSynchronizer(); } @Override public ActionRegistry getActionRegistry() { return super.getActionRegistry(); } public Object getModel() { return this.model; } @Override public boolean isDirty() { return isDirty; } public void setDirty(boolean dirty) { if (this.isDirty != dirty) { this.isDirty = dirty; firePropertyChange(IEditorPart.PROP_DIRTY); } } public boolean isSaveAsAllowed() { return true; } @SuppressWarnings("unchecked") @Override protected void createActions() { super.createActions(); ActionHelper.registerFormActions(this, actionIds, getActionRegistry()); for (String actionId : actionIds) { getSelectionActions().add(actionId); } } @Override public void selectionChanged(IWorkbenchPart part, ISelection selection) { if (part.getSite().getWorkbenchWindow().getActivePage() == null) { return; } super.selectionChanged(part, selection); } }