package org.insightech.er.editor.controller.editpart.element.node; import java.beans.PropertyChangeEvent; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.geometry.Rectangle; import org.eclipse.gef.EditPolicy; import org.eclipse.gef.commands.CompoundCommand; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.InputDialog; import org.eclipse.ui.PlatformUI; import org.insightech.er.editor.controller.command.category.ChangeVGroupNameCommand; import org.insightech.er.editor.controller.editpolicy.element.node.NodeElementComponentEditPolicy; import org.insightech.er.editor.model.ERDiagram; import org.insightech.er.editor.model.diagram_contents.element.node.Location; import org.insightech.er.editor.model.diagram_contents.element.node.NodeElement; import org.insightech.er.editor.model.diagram_contents.element.node.ermodel.VGroup; import org.insightech.er.editor.view.figure.VGroupFigure; public class VGroupEditPart extends NodeElementEditPart implements IResizable { public VGroupEditPart() { super(); } /** * {@inheritDoc} */ @Override protected IFigure createFigure() { VGroup vgroup = (VGroup) this.getModel(); VGroupFigure figure = new VGroupFigure(vgroup.getName()); return figure; } @Override public void doPropertyChange(PropertyChangeEvent event) { if (event.getPropertyName().equals(VGroup.PROPERTY_CHANGE_VGROUP)) { refreshChildren(); // refresh(); refreshVisuals(); } super.doPropertyChange(event); } /** * {@inheritDoc} */ @Override protected Rectangle getRectangle() { Rectangle rectangle = super.getRectangle(); VGroup group = (VGroup) this.getModel(); ERModelEditPart rootEditPart = (ERModelEditPart) getRoot().getContents(); // ERDiagramEditPart rootEditPart = (ERDiagramEditPart) this.getRoot().getContents(); for (Object child : rootEditPart.getChildren()) { if (child instanceof NodeElementEditPart) { NodeElementEditPart editPart = (NodeElementEditPart) child; if (group.contains((NodeElement) editPart.getModel())) { Rectangle bounds = editPart.getFigure().getBounds(); if (bounds.x + bounds.width > rectangle.x + rectangle.width) { rectangle.width = bounds.x + bounds.width - rectangle.x; } if (bounds.y + bounds.height > rectangle.y + rectangle.height) { rectangle.height = bounds.y + bounds.height - rectangle.y; } if (rectangle.width != group.getWidth() || rectangle.height != group.getHeight()) { group.setLocation(new Location(group.getX(), group.getY(), rectangle.width, rectangle.height)); } } } } return rectangle; } /** * {@inheritDoc} */ @Override protected void createEditPolicies() { this.installEditPolicy(EditPolicy.COMPONENT_ROLE, new NodeElementComponentEditPolicy()); super.createEditPolicies(); } /** * {@inheritDoc} */ @Override public void performRequestOpen() { VGroup group = (VGroup) this.getModel(); ERDiagram diagram = this.getDiagram(); // VGroup copyGroup = group.clone(); InputDialog dialog = new InputDialog( PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "�O���[�v���ύX", "�O���[�v�����͂��ĉ������B", group.getName(), null); if (dialog.open() == IDialogConstants.OK_ID) { CompoundCommand command = new CompoundCommand(); command.add(new ChangeVGroupNameCommand(diagram, group, dialog.getValue())); this.executeCommand(command.unwrap()); } } }