package org.insightech.er.editor;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.eclipse.gef.DefaultEditDomain;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.GraphicalViewer;
import org.eclipse.gef.MouseWheelHandler;
import org.eclipse.gef.MouseWheelZoomHandler;
import org.eclipse.gef.SnapToGeometry;
import org.eclipse.gef.SnapToGrid;
import org.eclipse.gef.ui.actions.ActionRegistry;
import org.eclipse.gef.ui.actions.ZoomComboContributionItem;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.swt.SWT;
import org.insightech.er.editor.controller.editpart.element.ERDiagramEditPartFactory;
import org.insightech.er.editor.controller.editpart.element.node.ERModelEditPart;
import org.insightech.er.editor.controller.editpart.element.node.ERTableEditPart;
import org.insightech.er.editor.controller.editpart.element.node.ERVirtualTableEditPart;
import org.insightech.er.editor.controller.editpart.element.node.VGroupEditPart;
import org.insightech.er.editor.model.ERDiagram;
import org.insightech.er.editor.model.diagram_contents.element.node.ermodel.ERModel;
import org.insightech.er.editor.model.diagram_contents.element.node.table.ERTable;
import org.insightech.er.editor.model.diagram_contents.element.node.table.ERVirtualTable;
import org.insightech.er.editor.view.ERDiagramGotoMarker;
import org.insightech.er.editor.view.ERDiagramOnePopupMenuManager;
import org.insightech.er.editor.view.action.ermodel.PlaceTableAction;
import org.insightech.er.editor.view.action.ermodel.VGroupManageAction;
import org.insightech.er.editor.view.outline.ERDiagramOutlinePage;
import org.insightech.er.editor.view.outline.ERDiagramOutlinePopupMenuManager;
/**
* TODO ON UPDATE�AON DELETE �̃v���_�E����ݒ�ł�����̂����ɐ�������<br>
* TODO �f�t�H���g�l�Ɍ^�̐�����K�p����<br>
*
*/
public class EROneDiagramEditor extends ERDiagramEditor {
private ERModel model;
public EROneDiagramEditor(ERDiagram diagram, ERModel model,
ERDiagramEditPartFactory editPartFactory,
ZoomComboContributionItem zoomComboContributionItem,
ERDiagramOutlinePage outlinePage) {
super(diagram, editPartFactory, zoomComboContributionItem, outlinePage);
this.model = model;
}
public DefaultEditDomain getDefaultEditDomain() {
return getEditDomain();
}
public ActionRegistry getDefaultActionRegistry() {
return getActionRegistry();
}
@Override
protected void createActions() {
super.createActions();
ActionRegistry registry = this.getActionRegistry();
// List<String> selectionActionList = this.getSelectionActions();
List<IAction> actionList = new ArrayList<IAction>(Arrays
.asList(new IAction[] {
new PlaceTableAction(this),
new VGroupManageAction(this),
}));
for (IAction action : actionList) {
registry.registerAction(action);
}
}
@Override
protected void initializeGraphicalViewer() {
GraphicalViewer viewer = this.getGraphicalViewer();
viewer.setEditPartFactory(editPartFactory);
this.initViewerAction(viewer);
this.initDragAndDrop(viewer);
viewer.setProperty(MouseWheelHandler.KeyGenerator.getKey(SWT.MOD1),
MouseWheelZoomHandler.SINGLETON);
viewer.setProperty(SnapToGrid.PROPERTY_GRID_ENABLED, true);
viewer.setProperty(SnapToGrid.PROPERTY_GRID_VISIBLE, true);
viewer.setProperty(SnapToGeometry.PROPERTY_SNAP_ENABLED, true);
MenuManager menuMgr = new ERDiagramOnePopupMenuManager(this.getActionRegistry(), this.model);
this.extensionLoader.addERDiagramPopupMenu(menuMgr, this.getActionRegistry());
viewer.setContextMenu(menuMgr);
viewer.setContents(model);
// viewer.getRootEditPart().setContents(editPartFactory.);
this.outlineMenuMgr = new ERDiagramOutlinePopupMenuManager(
this.diagram, this.getActionRegistry(),
this.outlinePage.getOutlineActionRegistory(), this.outlinePage.getViewer());
this.gotoMaker = new ERDiagramGotoMarker(this);
}
/**
* model���擾���܂��B
* @return model
*/
public ERModel getModel() {
return model;
}
public void setContents(ERModel newModel) {
model = newModel;
getGraphicalViewer().setContents(newModel);
newModel.changeAll();
}
public void refresh() {
model.changeAll();
}
public void reveal(ERTable table) {
ERModelEditPart editPart = (ERModelEditPart) getGraphicalViewer().getContents();
List tableParts = editPart.getChildren();
for (Object tableEditPart : tableParts) {
if (tableEditPart instanceof ERVirtualTableEditPart) {
ERVirtualTableEditPart vtableEditPart = (ERVirtualTableEditPart) tableEditPart;
if (((ERVirtualTable) vtableEditPart.getModel()).getRawTable().equals(table)) {
getGraphicalViewer().reveal(vtableEditPart);
return;
}
}
if (tableEditPart instanceof VGroupEditPart) {
// do nothing
// VGroupEditPart groupEditPart = (VGroupEditPart) tableEditPart;
// List children = groupEditPart.getChildren();
// System.out.println(children);
}
}
}
}