mirror of
https://github.com/HeidiSQL/HeidiSQL.git
synced 2025-08-26 11:17:57 +08:00
Allow space bar to modify checkbox columns "Allow NULL" and "Unsigned". Fixes issue #1605
This commit is contained in:
@ -95,6 +95,7 @@ object frmTableEditor: TfrmTableEditor
|
|||||||
OnGetImageIndex = listColumnsGetImageIndex
|
OnGetImageIndex = listColumnsGetImageIndex
|
||||||
OnGetNodeDataSize = listColumnsGetNodeDataSize
|
OnGetNodeDataSize = listColumnsGetNodeDataSize
|
||||||
OnInitNode = listColumnsInitNode
|
OnInitNode = listColumnsInitNode
|
||||||
|
OnKeyPress = listColumnsKeyPress
|
||||||
OnNewText = listColumnsNewText
|
OnNewText = listColumnsNewText
|
||||||
OnNodeMoved = listColumnsNodeMoved
|
OnNodeMoved = listColumnsNodeMoved
|
||||||
Columns = <
|
Columns = <
|
||||||
|
@ -171,6 +171,9 @@ type
|
|||||||
procedure listColumnsGetNodeDataSize(Sender: TBaseVirtualTree; var NodeDataSize: Integer);
|
procedure listColumnsGetNodeDataSize(Sender: TBaseVirtualTree; var NodeDataSize: Integer);
|
||||||
procedure listColumnsNodeMoved(Sender: TBaseVirtualTree; Node: PVirtualNode);
|
procedure listColumnsNodeMoved(Sender: TBaseVirtualTree; Node: PVirtualNode);
|
||||||
procedure popupSQLmemoPopup(Sender: TObject);
|
procedure popupSQLmemoPopup(Sender: TObject);
|
||||||
|
procedure listColumnsKeyPress(Sender: TObject; var Key: Char);
|
||||||
|
procedure vtHandleClickOrKeyPress(Sender: TVirtualStringTree;
|
||||||
|
Node: PVirtualNode; Column: TColumnIndex; HitPositions: THitPositions);
|
||||||
private
|
private
|
||||||
{ Private declarations }
|
{ Private declarations }
|
||||||
FLoaded: Boolean;
|
FLoaded: Boolean;
|
||||||
@ -1159,22 +1162,44 @@ end;
|
|||||||
procedure TfrmTableEditor.listColumnsClick(Sender: TObject);
|
procedure TfrmTableEditor.listColumnsClick(Sender: TObject);
|
||||||
var
|
var
|
||||||
VT: TVirtualStringTree;
|
VT: TVirtualStringTree;
|
||||||
Col: PTableColumn;
|
|
||||||
Click: THitInfo;
|
Click: THitInfo;
|
||||||
begin
|
begin
|
||||||
// Handle click event
|
// Handle click event
|
||||||
VT := Sender as TVirtualStringTree;
|
VT := Sender as TVirtualStringTree;
|
||||||
VT.GetHitTestInfoAt(Mouse.CursorPos.X-VT.ClientOrigin.X, Mouse.CursorPos.Y-VT.ClientOrigin.Y, True, Click);
|
VT.GetHitTestInfoAt(Mouse.CursorPos.X-VT.ClientOrigin.X, Mouse.CursorPos.Y-VT.ClientOrigin.Y, True, Click);
|
||||||
if not Assigned(Click.HitNode) then
|
vtHandleClickOrKeyPress(VT, Click.HitNode, Click.HitColumn, Click.HitPositions);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
procedure TfrmTableEditor.listColumnsKeyPress(Sender: TObject; var Key: Char);
|
||||||
|
var
|
||||||
|
VT: TVirtualStringTree;
|
||||||
|
begin
|
||||||
|
// Space/click on checkbox column
|
||||||
|
VT := Sender as TVirtualStringTree;
|
||||||
|
if (Ord(Key) = VK_SPACE) and (VT.FocusedColumn in [4, 5]) then
|
||||||
|
vtHandleClickOrKeyPress(VT, VT.FocusedNode, VT.FocusedColumn, []);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TfrmTableEditor.vtHandleClickOrKeyPress(Sender: TVirtualStringTree;
|
||||||
|
Node: PVirtualNode; Column: TColumnIndex; HitPositions: THitPositions);
|
||||||
|
var
|
||||||
|
Col: PTableColumn;
|
||||||
|
VT: TVirtualStringTree;
|
||||||
|
begin
|
||||||
|
if (not Assigned(Node)) or (Column = NoColumn) then
|
||||||
Exit;
|
Exit;
|
||||||
|
VT := Sender as TVirtualStringTree;
|
||||||
// For checkboxes, cell editors are disabled, instead toggle their state
|
// For checkboxes, cell editors are disabled, instead toggle their state
|
||||||
if CellEditingAllowed(Click.HitNode, Click.HitColumn) then begin
|
if CellEditingAllowed(Node, Column) then begin
|
||||||
Col := VT.GetNodeData(Click.HitNode);
|
Col := VT.GetNodeData(Node);
|
||||||
case Click.HitColumn of
|
case Column of
|
||||||
4: begin
|
4: begin
|
||||||
Col.Unsigned := not Col.Unsigned;
|
Col.Unsigned := not Col.Unsigned;
|
||||||
Col.Status := esModified;
|
Col.Status := esModified;
|
||||||
VT.InvalidateNode(Click.HitNode);
|
VT.InvalidateNode(Node);
|
||||||
end;
|
end;
|
||||||
5: begin
|
5: begin
|
||||||
Col.AllowNull := not Col.AllowNull;
|
Col.AllowNull := not Col.AllowNull;
|
||||||
@ -1182,19 +1207,18 @@ begin
|
|||||||
if (not Col.AllowNull) and (Col.DefaultType in [cdtNull, cdtNullUpdateTS]) then
|
if (not Col.AllowNull) and (Col.DefaultType in [cdtNull, cdtNullUpdateTS]) then
|
||||||
Col.DefaultType := cdtText;
|
Col.DefaultType := cdtText;
|
||||||
Col.Status := esModified;
|
Col.Status := esModified;
|
||||||
VT.InvalidateNode(Click.HitNode);
|
VT.InvalidateNode(Node);
|
||||||
end;
|
end;
|
||||||
else begin
|
else begin
|
||||||
// All other cells go into edit mode please
|
// All other cells go into edit mode please
|
||||||
// Explicitely done on OnClick, not in OnFocusChanged which seemed annoying for keyboard users
|
// Explicitely done on OnClick, not in OnFocusChanged which seemed annoying for keyboard users
|
||||||
if Assigned(Click.HitNode) and (Click.HitColumn > NoColumn) and (hiOnItemLabel in Click.HitPositions) then
|
if hiOnItemLabel in HitPositions then
|
||||||
VT.EditNode(Click.HitNode, Click.HitColumn);
|
VT.EditNode(Node, Column);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure TfrmTableEditor.listColumnsCreateEditor(Sender: TBaseVirtualTree;
|
procedure TfrmTableEditor.listColumnsCreateEditor(Sender: TBaseVirtualTree;
|
||||||
Node: PVirtualNode; Column: TColumnIndex; out EditLink: IVTEditLink);
|
Node: PVirtualNode; Column: TColumnIndex; out EditLink: IVTEditLink);
|
||||||
var
|
var
|
||||||
|
Reference in New Issue
Block a user