package net.ms.designer.editors.componentdetail.ui;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.EventObject;
import java.util.List;
import net.ms.designer.core.MsProject;
import net.ms.designer.core.IOStreams;
import net.ms.designer.editors.component.ui.ComponentEditor;
import net.ms.designer.editors.componentdetail.dnd.LogicTemplateTransferDropTargetListener;
import net.ms.designer.editors.componentdetail.dnd.TextTransferDropTargetListener;
import net.ms.designer.editors.componentdetail.editparts.GraphicalPartFactory;
import net.ms.designer.editors.componentdetail.editparts.TreePartFactory;
import net.ms.designer.editors.componentdetail.models.ComponentTable;
import net.ms.designer.editors.componentdetail.models.Container;
import net.ms.designer.editors.componentdetail.models.Table;
import net.ms.designer.editors.componentdetail.tools.MyContextMenuProvider;
import net.ms.designer.editors.componentdetail.tools.PaletteFactory;
import net.ms.designer.editors.componentdetail.ui.PropertyUtils;
import net.ms.designer.editors.componentdetail.xmlpalse.WriteToComponentXML;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.gef.ContextMenuProvider;
import org.eclipse.gef.DefaultEditDomain;
import org.eclipse.gef.GraphicalViewer;
import org.eclipse.gef.dnd.TemplateTransferDragSourceListener;
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.ContentOutlinePage;
import org.eclipse.gef.ui.parts.GraphicalEditorWithPalette;
import org.eclipse.gef.ui.parts.TreeViewer;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.swt.dnd.TextTransfer;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
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.internal.UIPlugin;
import org.eclipse.ui.part.IPageSite;
import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
public class CompDetailEditor extends GraphicalEditorWithPalette implements ISelectionChangedListener{
private PaletteRoot paletteRoot;
Container cot = new Container();
IOStreams stream;
String filePath;
private MsProject project;
private boolean savePreviouslyNeeded = false;
//--------------------jia
public Container getContainer()
{
return this.cot;
}
public CompDetailEditor()
{
//System.out.println("net.ms.designer.editors.componentdetail.ui.PackageEditor.PackageEditor()");
this.setEditDomain(new DefaultEditDomain(this));
stream = new IOStreams();
}
protected void configureGraphicalViewer() {
super.configureGraphicalViewer();
GraphicalViewer viewer = this.getGraphicalViewer();
getGraphicalViewer().setRootEditPart(new ScalableFreeformRootEditPart());
getGraphicalViewer().setEditPartFactory(new GraphicalPartFactory());
ContextMenuProvider provider = new MyContextMenuProvider(viewer, getActionRegistry());
viewer.setContextMenu(provider);
viewer.addSelectionChangedListener(this);
getSite().registerContextMenu(provider, viewer);
updateActions(getSelectionActions());
//System.out.println("initcontextMenu");
}
protected void initializeGraphicalViewer() {
// cot = new Container();
// generate the diagram
try
{
// get configure directory path
String path = project.getConfigPath();
StringBuffer sb = new StringBuffer(path);
sb.append(project.getComponentName());
sb.append(".cde");
filePath = sb.toString();
File file = new File(filePath);
if(file.exists() && file.length() != 0)
{
cot = (Container)stream.inputs(filePath);
if(cot != null)
{
this.getGraphicalViewer().setContents(cot);
}
}
else
{
cot = new Container();
cot.setId(project.getComponentID());
cot.setName(project.getComponentName());
this.getGraphicalViewer().setContents(cot);
}
// this.getGraphicalViewer().addDropTargetListener(new LogicTemplateTransferDropTargetListener(getGraphicalViewer()));
// this.getGraphicalViewer().addDropTargetListener(new TextTransferDropTargetListener(getGraphicalViewer(), TextTransfer.getInstance()));
getGraphicalViewer().addDropTargetListener(new LogicTemplateTransferDropTargetListener(getGraphicalViewer()));
getGraphicalViewer().addDropTargetListener(
new TextTransferDropTargetListener(getGraphicalViewer(), TextTransfer.getInstance()));
}
catch(Exception e)
{
e.printStackTrace();
}
}
// ------------����
public void doSave(IProgressMonitor monitor) {
// WriteToComponentXML write = new WriteToComponentXML(cot , project);
// String path = project.getConfigPath();
// StringBuffer sb = new StringBuffer(path);
// StringBuffer sb1 = new StringBuffer(project.getProjectName());
// sb1.append(".");
// sb1.append(project.getPackageName());
// sb1.append(".");
// sb1.append(project.getComponentName());
// sb1.append(".xml");
// try{
// write.writeXMLFile(sb.append(sb1.toString()).toString());
// stream.outputs(cot,filePath);
// }
// catch(IOException ioe)
// {
// ioe.printStackTrace();
// }
// catch(Exception e)
// {
// e.printStackTrace();
// }
//
// getCommandStack().markSaveLocation();
// IEditorPart [] editors = UIPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow()
// .getActivePage().getEditors();
// for(int i = 0; i<editors.length;i++)
// {
// if(editors[i].getTitle().equals("ComponentEditor"))
// {
// if(editors[i].getEditorInput().getName().equals(project.getComponentName()))
// {
// List nodes = ((ComponentEditor)editors[i]).getDiagram().getNodes();
// for(int j = 0 ; j <= nodes.size(); j++)
// {
//
// }
// }
// }
// }
}
public void doSaveAs() {
}
public void setInput(IEditorInput input)
{
superSetInput(input);
project = ((net.ms.designer.core.MsEditorInput)getEditorInput()).getProject();
// try
// {
// Object tmpproject = PropertyUtils.getProperty(getEditorInput(),"project");
// project=new net.ms.designer.core.MsCProject();
//
// project.setDirectory((String )PropertyUtils.getProperty(tmpproject,"directory"));
// project.setProjectName((String )PropertyUtils.getProperty(tmpproject,"projectName"));
// project.setGenPackageName((String)PropertyUtils.getProperty(tmpproject, "genPackageName"));
// project.setPackageName((String )PropertyUtils.getProperty(tmpproject,"packageName"));
// project.setComponentName((String )PropertyUtils.getProperty(tmpproject,"componentName"));
// }
// catch (IllegalAccessException e)
// {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// catch (InvocationTargetException e)
// {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// catch (NoSuchMethodException e)
// {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
}
protected void superSetInput(IEditorInput input)
{
super.setInput(input);
}
public boolean isSaveAsAllowed() {
// TODO �Զ����ɷ������
return false;
}
public Object getAdapter(Class type) {
if (type == IContentOutlinePage.class)
return new OutlinePage();
return super.getAdapter(type);
}
PaletteFactory paletteFactory=new PaletteFactory();
protected PaletteRoot getPaletteRoot() {
if (this.paletteRoot == null) {
this.paletteRoot = paletteFactory.createPalette();
}
return this.paletteRoot;
}
protected void initializePaletteViewer() {
super.initializePaletteViewer();
//System.out.println("componentdetail.ui.PackageEditor.initializePaletteViewer()");
getPaletteViewer().addDragSourceListener(new TemplateTransferDragSourceListener(getPaletteViewer()));
}
class OutlinePage extends ContentOutlinePage {
// private PageBook pageBook;
private Control outline;
public OutlinePage() {
super(new TreeViewer());
}
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();
}
// public void createControl(Composite parent) {
// outline = getViewer().createControl(parent);
// getSelectionSynchronizer().addViewer(getViewer());
// getViewer().setEditDomain(getEditDomain());
// getViewer().setEditPartFactory(new TreePartFactory());
// getViewer().setContents(getContainer());
// }
//
// public Control getControl() {
// // return pageBook;
// return outline;
// }
public void dispose() {
getSelectionSynchronizer().removeViewer(getViewer());
super.dispose();
}
}
public void selectionChanged(SelectionChangedEvent event) {
// TODO �Զ����ɷ������
updateActions(getSelectionActions());
}
protected void createActions()
{
super.createActions();
ActionRegistry registry = getActionRegistry();
IAction action;
action = new net.ms.designer.editors.componentdetail.actions.PropertyAction(this);
registry.registerAction(action);
getSelectionActions().add(action.getId());
}
// protected void initializeOutlineViewer() {
// setContents(getContainer());
// }
// public void setContents(Object contents) {
// getViewer().setContents(contents);
// }
public boolean isDirty()
{
return isSaveOnCloseNeeded();
}
public boolean isSaveOnCloseNeeded()
{
return getCommandStack().isDirty();
}
public void commandStackChanged(EventObject event) {
if (isDirty()) {
if (!savePreviouslyNeeded()) {
setSavePreviouslyNeeded(true);
firePropertyChange(IEditorPart.PROP_DIRTY);
}
} else {
setSavePreviouslyNeeded(false);
firePropertyChange(IEditorPart.PROP_DIRTY);
}
super.commandStackChanged(event);
}
private void setSavePreviouslyNeeded(boolean value) {
savePreviouslyNeeded = value;
}
private boolean savePreviouslyNeeded() {
return savePreviouslyNeeded;
}
public MsProject getProject()
{
return this.project;
}
public void setProject(MsProject project)
{
this.project = project;
}
}