mirror of
https://github.com/HeidiSQL/HeidiSQL.git
synced 2025-08-06 18:24:26 +08:00
Fix wrong position of dropped column on index tab. Closes #385.
This commit is contained in:
@ -1790,16 +1790,20 @@ procedure TfrmTableEditor.treeIndexesDragOver(Sender: TBaseVirtualTree;
|
|||||||
Source: TObject; Shift: TShiftState; State: TDragState; Pt: TPoint;
|
Source: TObject; Shift: TShiftState; State: TDragState; Pt: TPoint;
|
||||||
Mode: TDropMode; var Effect: Integer; var Accept: Boolean);
|
Mode: TDropMode; var Effect: Integer; var Accept: Boolean);
|
||||||
var
|
var
|
||||||
Node: PVirtualNode;
|
TargetNode: PVirtualNode;
|
||||||
|
VT: TVirtualStringtree;
|
||||||
begin
|
begin
|
||||||
// Accept nodes from the column list and allow column moving
|
// Accept nodes from the column list and allow column moving
|
||||||
|
VT := Sender as TVirtualStringtree;
|
||||||
|
TargetNode := VT.GetNodeAt(Pt.X, Pt.Y);
|
||||||
|
|
||||||
if Source = listColumns then begin
|
if Source = listColumns then begin
|
||||||
Accept := True;
|
// Do not accept above or below a root level (index) node
|
||||||
Exit;
|
Accept := (VT.GetNodeLevel(TargetNode) = 1) or (Mode = dmOnNode);
|
||||||
|
|
||||||
end else if Source = Sender then begin
|
end else if Source = Sender then begin
|
||||||
Node := Sender.GetNodeAt(Pt.X, Pt.Y);
|
Accept := Assigned(TargetNode) and (Sender.GetNodeLevel(TargetNode) = 1) and
|
||||||
Accept := Assigned(Node) and (Sender.GetNodeLevel(Node) = 1) and
|
(TargetNode <> Sender.FocusedNode) and (TargetNode.Parent = Sender.FocusedNode.Parent);
|
||||||
(Node <> Sender.FocusedNode) and (Node.Parent = Sender.FocusedNode.Parent);
|
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1820,25 +1824,40 @@ begin
|
|||||||
SourceVT := Source as TVirtualStringtree;
|
SourceVT := Source as TVirtualStringtree;
|
||||||
TargetNode := VT.GetNodeAt(Pt.X, Pt.Y);
|
TargetNode := VT.GetNodeAt(Pt.X, Pt.Y);
|
||||||
FocusedNode := VT.FocusedNode;
|
FocusedNode := VT.FocusedNode;
|
||||||
|
IndexNode := nil;
|
||||||
|
ColPos := 0;
|
||||||
if not Assigned(TargetNode) then begin
|
if not Assigned(TargetNode) then begin
|
||||||
MessageBeep(MB_ICONEXCLAMATION);
|
MessageBeep(MB_ICONEXCLAMATION);
|
||||||
Exit;
|
Exit;
|
||||||
end;
|
end;
|
||||||
if VT.GetNodeLevel(TargetNode) = 1 then begin
|
Mainform.LogSQL('TargetNode.Index: '+TargetNode.Index.ToString, lcDebug);
|
||||||
IndexNode := TargetNode.Parent;
|
|
||||||
// Find the right new position for the dropped column
|
case VT.GetNodeLevel(TargetNode) of
|
||||||
ColPos := TargetNode.Index;
|
0: begin
|
||||||
Mainform.LogSQL('TargetNode.Index: '+TargetNode.Index.ToString, lcDebug);
|
// DragOver only accepts dmOnNode in root tree level
|
||||||
if (Source = Sender) and (FocusedNode <> nil) then begin
|
IndexNode := TargetNode;
|
||||||
// Take care if user dragged from above or from below the target node
|
ColPos := IndexNode.ChildCount;
|
||||||
if (FocusedNode.Index < TargetNode.Index) and (Mode = dmAbove) and (ColPos > 0) then
|
|
||||||
Dec(ColPos);
|
|
||||||
if (FocusedNode.Index > TargetNode.Index) and (Mode = dmBelow) and (ColPos < IndexNode.ChildCount-1) then
|
|
||||||
Inc(ColPos);
|
|
||||||
end;
|
end;
|
||||||
end else begin
|
|
||||||
IndexNode := TargetNode;
|
1: begin
|
||||||
ColPos := IndexNode.ChildCount;
|
IndexNode := TargetNode.Parent;
|
||||||
|
// Find the right new position for the dropped column
|
||||||
|
ColPos := TargetNode.Index;
|
||||||
|
if Source = Sender then begin
|
||||||
|
// Drop within index tree: Take care if user dragged from above or from below the target node
|
||||||
|
if FocusedNode <> nil then begin
|
||||||
|
if (FocusedNode.Index < TargetNode.Index) and (Mode = dmAbove) and (ColPos > 0) then
|
||||||
|
Dec(ColPos);
|
||||||
|
if (FocusedNode.Index > TargetNode.Index) and (Mode = dmBelow) and (ColPos < IndexNode.ChildCount-1) then
|
||||||
|
Inc(ColPos);
|
||||||
|
end;
|
||||||
|
end else begin
|
||||||
|
// Drop from columns list
|
||||||
|
if Mode = dmBelow then
|
||||||
|
Inc(ColPos);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
if Source = Sender then
|
if Source = Sender then
|
||||||
|
Reference in New Issue
Block a user