提交 f8b3369f 编写于 作者: S serge-rider

#1652 Attributes DnD support (omg, that was tricky)

上级 8935ed69
......@@ -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();
......
......@@ -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()
{
......
......@@ -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;
}
......
......@@ -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();
......
......@@ -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
/*
* 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
/*
* 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
/*
* 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
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册