diff --git a/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/command/AttributeCheckCommand.java b/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/command/AttributeCheckCommand.java index d4c7e3b16d4d0c063bf488e61184d83f3b8aa1b0..19cab7515698f35f42e68bb2ae4f235e0c2b2edf 100644 --- a/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/command/AttributeCheckCommand.java +++ b/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/command/AttributeCheckCommand.java @@ -17,7 +17,6 @@ package org.jkiss.dbeaver.ext.erd.command; import org.eclipse.gef.commands.Command; -import org.jkiss.dbeaver.ext.erd.figures.NoteFigure; import org.jkiss.dbeaver.ext.erd.part.AttributePart; /** @@ -30,7 +29,7 @@ public class AttributeCheckCommand extends Command { private boolean oldValue; public AttributeCheckCommand(AttributePart attr, boolean newValue) { - super("Set note text"); + super("Select attribute"); this.attr = attr; this.oldValue = this.attr.getAttribute().isChecked(); diff --git a/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/editor/ERDEditorPart.java b/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/editor/ERDEditorPart.java index efe1b227516758b807fb23b3297e2c5874de4257..fc7622288f4b7ebea485b57d0362dba4527a4e89 100644 --- a/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/editor/ERDEditorPart.java +++ b/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/editor/ERDEditorPart.java @@ -409,8 +409,7 @@ public abstract class ERDEditorPart extends GraphicalEditorWithFlyoutPalette viewer.setRootEditPart(rootPart); viewer.setKeyHandler(new GraphicalViewerKeyHandler(viewer)); - viewer.addDropTargetListener(new DataEditDropTargetListener(viewer)); - viewer.addDropTargetListener(new NodeDropTargetListener(viewer)); + registerDropTargetListeners(viewer); // initialize the viewer with input viewer.setEditPartFactory(getDecorator().createPartFactory()); @@ -418,6 +417,11 @@ public abstract class ERDEditorPart extends GraphicalEditorWithFlyoutPalette return viewer; } + protected void registerDropTargetListeners(GraphicalViewer viewer) { + viewer.addDropTargetListener(new DataEditDropTargetListener(viewer)); + viewer.addDropTargetListener(new NodeDropTargetListener(viewer)); + } + @Override protected void configureGraphicalViewer() { diff --git a/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/model/ERDDecoratorDefault.java b/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/model/ERDDecoratorDefault.java index 2f5b4c4c504bac6421930f79b5a81447fc5c0ec6..147f0056c03378749cd7fb4bfec25d8ec8a1ea1a 100644 --- a/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/model/ERDDecoratorDefault.java +++ b/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/model/ERDDecoratorDefault.java @@ -51,6 +51,13 @@ public class ERDDecoratorDefault implements ERDDecorator { // a group of default control tools PaletteDrawer controls = createToolsDrawer(paletteRoot); + // the selection tool + ToolEntry selectionTool = new SelectionToolEntry(); + controls.add(selectionTool); + + // use selection tool as default entry + paletteRoot.setDefaultEntry(selectionTool); + if (!readOnly) { // separator PaletteSeparator separator = new PaletteSeparator("tools"); @@ -84,12 +91,6 @@ public class ERDDecoratorDefault implements ERDDecorator { paletteRoot.add(controls); - // the selection tool - ToolEntry selectionTool = new SelectionToolEntry(); - controls.add(selectionTool); - - // use selection tool as default entry - paletteRoot.setDefaultEntry(selectionTool); return controls; } diff --git a/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/part/AttributePart.java b/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/part/AttributePart.java index bc25a352482f42de17fa175c6b3963a12356bb5c..ec1a829d843bb5a1a5b89651e433f0861454361e 100644 --- a/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/part/AttributePart.java +++ b/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/part/AttributePart.java @@ -22,13 +22,12 @@ package org.jkiss.dbeaver.ext.erd.part; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.Label; import org.eclipse.draw2d.geometry.Point; -import org.eclipse.gef.EditPart; -import org.eclipse.gef.Request; -import org.eclipse.gef.RequestConstants; +import org.eclipse.gef.*; import org.eclipse.gef.tools.DirectEditManager; import org.eclipse.jface.viewers.TextCellEditor; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; +import org.eclipse.wst.xsd.ui.internal.design.editpolicies.DragAndDropEditPolicy; import org.jkiss.dbeaver.ext.erd.ERDMessages; import org.jkiss.dbeaver.ext.erd.directedit.ColumnNameTypeCellEditorValidator; import org.jkiss.dbeaver.ext.erd.directedit.ExtendedDirectEditManager; @@ -38,10 +37,14 @@ import org.jkiss.dbeaver.ext.erd.editor.ERDGraphicalViewer; import org.jkiss.dbeaver.ext.erd.figures.AttributeItemFigure; import org.jkiss.dbeaver.ext.erd.figures.EditableLabel; import org.jkiss.dbeaver.ext.erd.model.ERDEntityAttribute; -import org.jkiss.dbeaver.ext.erd.model.ERDObject; import org.jkiss.dbeaver.ext.erd.model.ERDUtils; +import org.jkiss.dbeaver.ext.erd.policy.AttributeContainerEditPolicy; +import org.jkiss.dbeaver.ext.erd.policy.AttributeDragAndDropEditPolicy; +import org.jkiss.dbeaver.ext.erd.policy.AttributeEditPolicy; +import org.jkiss.dbeaver.ext.erd.policy.AttributeDirectEditPolicy; import java.beans.PropertyChangeEvent; +import java.util.Map; /** * Represents an editable Column object in the model @@ -90,9 +93,13 @@ public class AttributePart extends PropertyAwarePart { */ @Override protected void createEditPolicies() { - //installEditPolicy(EditPolicy.COMPONENT_ROLE, new AttributeEditPolicy()); - //installEditPolicy(EditPolicy.DIRECT_EDIT_ROLE, new ColumnDirectEditPolicy()); - //installEditPolicy(EditPolicy.LAYOUT_ROLE, null); + if (isEditEnabled()) { + installEditPolicy(EditPolicy.COMPONENT_ROLE, new AttributeEditPolicy()); + installEditPolicy(EditPolicy.CONTAINER_ROLE, new AttributeContainerEditPolicy()); + installEditPolicy(EditPolicy.DIRECT_EDIT_ROLE, new AttributeDirectEditPolicy()); + installEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE, new AttributeDragAndDropEditPolicy(this)); + //installEditPolicy(EditPolicy.LAYOUT_ROLE, null); + } } @Override @@ -186,6 +193,37 @@ public class AttributePart extends PropertyAwarePart { return (ERDEntityAttribute) getModel(); } + @Override + public DragTracker getDragTracker(Request request) { + return super.getDragTracker(request); + } + + @Override + public EditPart getTargetEditPart(Request request) { + if (RequestConstants.REQ_MOVE.equals(request.getType()) || RequestConstants.REQ_ADD.equals(request.getType())) { + return getParent(); + } + return super.getTargetEditPart(request); + } + + // Add nested figures to visuals (to make hit test work properly) + @Override + protected void registerVisuals() { + super.registerVisuals(); + Map visualPartMap = this.getViewer().getVisualPartMap(); + visualPartMap.put(getFigure().getCheckBox(), this); + visualPartMap.put(getFigure().getLabel(), this); + } + + // Remove nested figures from visuals + @Override + protected void unregisterVisuals() { + Map visualPartMap = this.getViewer().getVisualPartMap(); + visualPartMap.remove(getFigure().getLabel()); + visualPartMap.remove(getFigure().getCheckBox()); + super.unregisterVisuals(); + } + @Override public String toString() { return ERDMessages.column_ + getAttribute().getLabelText(); diff --git a/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/part/EntityPart.java b/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/part/EntityPart.java index a3d97bde5387e2b3ed8e2f4819ab18b806c7cb49..09c3e4850574c68ef162be818453eb4752691c2d 100644 --- a/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/part/EntityPart.java +++ b/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/part/EntityPart.java @@ -35,14 +35,15 @@ import org.jkiss.dbeaver.ext.erd.editor.ERDViewStyle; import org.jkiss.dbeaver.ext.erd.figures.EditableLabel; import org.jkiss.dbeaver.ext.erd.figures.EntityFigure; import org.jkiss.dbeaver.ext.erd.model.*; +import org.jkiss.dbeaver.ext.erd.policy.EntityConnectionEditPolicy; import org.jkiss.dbeaver.ext.erd.policy.EntityContainerEditPolicy; import org.jkiss.dbeaver.ext.erd.policy.EntityEditPolicy; -import org.jkiss.dbeaver.ext.erd.policy.EntityConnectionEditPolicy; import org.jkiss.dbeaver.model.DBPEvaluationContext; import org.jkiss.dbeaver.model.DBUtils; import java.beans.PropertyChangeEvent; import java.util.List; +import java.util.Map; /** * Represents the editable/resizable table which can have columns added, @@ -289,8 +290,36 @@ public class EntityPart extends NodePart { super.deactivate(); } + // Add nested figures to visuals (to make hit test work properly) + @Override + protected void registerVisuals() { + super.registerVisuals(); + Map visualPartMap = this.getViewer().getVisualPartMap(); + visualPartMap.put(getFigure().getNameLabel(), this); + visualPartMap.put(getFigure().getKeyFigure(), this); + visualPartMap.put(getFigure().getColumnsFigure(), this); + } + + // Remove nested figures from visuals + @Override + protected void unregisterVisuals() { + Map visualPartMap = this.getViewer().getVisualPartMap(); + visualPartMap.remove(getFigure().getColumnsFigure()); + visualPartMap.remove(getFigure().getKeyFigure()); + visualPartMap.remove(getFigure().getNameLabel()); + super.unregisterVisuals(); + } + + @Override + public EditPart getTargetEditPart(Request request) { + if (RequestConstants.REQ_MOVE.equals(request.getType()) || RequestConstants.REQ_ADD.equals(request.getType())) { + return this; + } + return super.getTargetEditPart(request); + } + @Override - protected void finalize() throws Throwable { - super.finalize(); + public DragTracker getDragTracker(Request request) { + return super.getDragTracker(request); } } \ No newline at end of file diff --git a/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/policy/AttributeContainerEditPolicy.java b/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/policy/AttributeContainerEditPolicy.java new file mode 100644 index 0000000000000000000000000000000000000000..ffdbaa4ddf96e4cefab565dc00d71d6791a686bc --- /dev/null +++ b/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/policy/AttributeContainerEditPolicy.java @@ -0,0 +1,66 @@ +/* + * DBeaver - Universal Database Manager + * Copyright (C) 2010-2018 Serge Rider (serge@jkiss.org) + * + * 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. + */ +/* + * Created on Jul 15, 2004 + */ +package org.jkiss.dbeaver.ext.erd.policy; + +import org.eclipse.gef.commands.Command; +import org.eclipse.gef.editpolicies.ContainerEditPolicy; +import org.eclipse.gef.requests.ChangeBoundsRequest; +import org.eclipse.gef.requests.CreateRequest; +import org.eclipse.gef.requests.GroupRequest; + +/** + * Edit policy for attribute container + * + * @author Serge Rider + */ +public class AttributeContainerEditPolicy extends ContainerEditPolicy +{ + @Override + protected Command getAddCommand(GroupRequest request) { + return super.getAddCommand(request); + } + + @Override + protected Command getCloneCommand(ChangeBoundsRequest request) { + return super.getCloneCommand(request); + } + + @Override + protected Command getCreateCommand(CreateRequest request) + { +/* + Object newObject = request.getNewObject(); + if (!(newObject instanceof ERDEntityAttribute)) + { + return null; + } + + EntityPart entityPart = (EntityPart) getHost(); + ERDEntity table = entityPart.getTable(); + ERDEntityAttribute column = (ERDEntityAttribute) newObject; + AttributeCreateCommand command = new AttributeCreateCommand(); + command.setTable(table); + command.setColumn(column); + return command; +*/ + return null; + } + +} \ No newline at end of file diff --git a/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/policy/ColumnDirectEditPolicy.java b/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/policy/AttributeDirectEditPolicy.java similarity index 94% rename from plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/policy/ColumnDirectEditPolicy.java rename to plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/policy/AttributeDirectEditPolicy.java index 1a09b13196c552a649751329d3fc7b4d97525d9f..a6fd35d4ad476d75db27380f79aba1a772dc7b6c 100644 --- a/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/policy/ColumnDirectEditPolicy.java +++ b/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/policy/AttributeDirectEditPolicy.java @@ -1,81 +1,81 @@ -/* - * DBeaver - Universal Database Manager - * Copyright (C) 2010-2018 Serge Rider (serge@jkiss.org) - * - * 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. - */ -/* - * Created on Jul 18, 2004 - */ -package org.jkiss.dbeaver.ext.erd.policy; - -import org.eclipse.gef.commands.Command; -import org.eclipse.gef.editpolicies.DirectEditPolicy; -import org.eclipse.gef.requests.DirectEditRequest; -import org.eclipse.jface.viewers.CellEditor; -import org.jkiss.dbeaver.ext.erd.part.AttributePart; - -/** - * EditPolicy for the direct editing of Column names - * - * @author Serge Rider - */ -public class ColumnDirectEditPolicy extends DirectEditPolicy -{ - - private String oldValue; - - /** - * @see DirectEditPolicy#getDirectEditCommand(org.eclipse.gef.requests.DirectEditRequest) - */ - @Override - protected Command getDirectEditCommand(DirectEditRequest request) - { -/* - AttributeResetNameTypeCommand cmd = new AttributeResetNameTypeCommand(); - ERDEntityAttribute column = (ERDEntityAttribute) getHost().getModel(); - cmd.setSource(column); - cmd.setOldName(column.getName()); - cmd.setOldType(column.getType()); - CellEditor cellEditor = request.getCellEditor(); - cmd.setNameType((String) cellEditor.getValue()); - return cmd; -*/ - return null; - } - - @Override - protected void showCurrentEditValue(DirectEditRequest request) - { - String value = (String) request.getCellEditor().getValue(); - AttributePart attributePart = (AttributePart) getHost(); - attributePart.handleNameChange(value); - } - - @Override - protected void storeOldEditValue(DirectEditRequest request) - { - CellEditor cellEditor = request.getCellEditor(); - oldValue = (String) cellEditor.getValue(); - } - - @Override - protected void revertOldEditValue(DirectEditRequest request) - { - CellEditor cellEditor = request.getCellEditor(); - cellEditor.setValue(oldValue); - AttributePart attributePart = (AttributePart) getHost(); - attributePart.revertNameChange(oldValue); - - } +/* + * DBeaver - Universal Database Manager + * Copyright (C) 2010-2018 Serge Rider (serge@jkiss.org) + * + * 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. + */ +/* + * Created on Jul 18, 2004 + */ +package org.jkiss.dbeaver.ext.erd.policy; + +import org.eclipse.gef.commands.Command; +import org.eclipse.gef.editpolicies.DirectEditPolicy; +import org.eclipse.gef.requests.DirectEditRequest; +import org.eclipse.jface.viewers.CellEditor; +import org.jkiss.dbeaver.ext.erd.part.AttributePart; + +/** + * EditPolicy for the direct editing of Column names + * + * @author Serge Rider + */ +public class AttributeDirectEditPolicy extends DirectEditPolicy +{ + + private String oldValue; + + /** + * @see DirectEditPolicy#getDirectEditCommand(org.eclipse.gef.requests.DirectEditRequest) + */ + @Override + protected Command getDirectEditCommand(DirectEditRequest request) + { +/* + AttributeResetNameTypeCommand cmd = new AttributeResetNameTypeCommand(); + ERDEntityAttribute column = (ERDEntityAttribute) getHost().getModel(); + cmd.setSource(column); + cmd.setOldName(column.getName()); + cmd.setOldType(column.getType()); + CellEditor cellEditor = request.getCellEditor(); + cmd.setNameType((String) cellEditor.getValue()); + return cmd; +*/ + return null; + } + + @Override + protected void showCurrentEditValue(DirectEditRequest request) + { + String value = (String) request.getCellEditor().getValue(); + AttributePart attributePart = (AttributePart) getHost(); + attributePart.handleNameChange(value); + } + + @Override + protected void storeOldEditValue(DirectEditRequest request) + { + CellEditor cellEditor = request.getCellEditor(); + oldValue = (String) cellEditor.getValue(); + } + + @Override + protected void revertOldEditValue(DirectEditRequest request) + { + CellEditor cellEditor = request.getCellEditor(); + cellEditor.setValue(oldValue); + AttributePart attributePart = (AttributePart) getHost(); + attributePart.revertNameChange(oldValue); + + } } \ No newline at end of file diff --git a/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/policy/AttributeDragAndDropEditPolicy.java b/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/policy/AttributeDragAndDropEditPolicy.java new file mode 100644 index 0000000000000000000000000000000000000000..00093935bebc742b61692643bf790f4c9a195875 --- /dev/null +++ b/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/policy/AttributeDragAndDropEditPolicy.java @@ -0,0 +1,60 @@ +/* + * DBeaver - Universal Database Manager + * Copyright (C) 2010-2018 Serge Rider (serge@jkiss.org) + * + * 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. + */ +/* + * Created on Jul 18, 2004 + */ +package org.jkiss.dbeaver.ext.erd.policy; + +import org.eclipse.gef.Request; +import org.eclipse.gef.RequestConstants; +import org.eclipse.gef.commands.Command; +import org.eclipse.gef.editpolicies.GraphicalEditPolicy; +import org.jkiss.dbeaver.ext.erd.command.AttributeCheckCommand; +import org.jkiss.dbeaver.ext.erd.part.AttributePart; + +/** + * EditPolicy for the direct editing of Column names + * + * @author Serge Rider + */ +public class AttributeDragAndDropEditPolicy extends GraphicalEditPolicy { + private AttributePart part; + + public AttributeDragAndDropEditPolicy(AttributePart part) { + this.part = part; + } + + @Override + public Command getCommand(Request req) { + if (RequestConstants.REQ_MOVE.equals(req.getType()) || + RequestConstants.REQ_CLONE.equals(req.getType()) || + RequestConstants.REQ_ORPHAN.equals(req.getType())) { + return new AttributeCheckCommand(part, false); + } + return super.getCommand(req); + } + + @Override + public boolean understandsRequest(Request req) { + if (RequestConstants.REQ_MOVE.equals(req.getType()) || + RequestConstants.REQ_CLONE.equals(req.getType()) || + RequestConstants.REQ_ORPHAN.equals(req.getType())) { + return true; + } + return super.understandsRequest(req); + } +} \ No newline at end of file