LazControls: Improve selection by keys in TreeFilterEdit / TreeView. From b7800.

This commit is contained in:
Juha 2024-03-10 06:38:16 +02:00
parent 36c308d1f6
commit 8836534b9c

View File

@ -670,7 +670,12 @@ end;
procedure TTreeFilterEdit.MoveNext(ASelect: Boolean); procedure TTreeFilterEdit.MoveNext(ASelect: Boolean);
begin begin
if Assigned(fFilteredTreeview) then if Assigned(fFilteredTreeview) then
begin
ASelect := ASelect
and (tvoAllowMultiSelect in fFilteredTreeview.Options)
and (msShiftSelect in fFilteredTreeview.MultiSelectStyle);
fFilteredTreeview.MoveToNextNode(ASelect); fFilteredTreeview.MoveToNextNode(ASelect);
end;
end; end;
procedure TTreeFilterEdit.MovePageDown(ASelect: Boolean); procedure TTreeFilterEdit.MovePageDown(ASelect: Boolean);
@ -688,7 +693,12 @@ end;
procedure TTreeFilterEdit.MovePrev(ASelect: Boolean); procedure TTreeFilterEdit.MovePrev(ASelect: Boolean);
begin begin
if Assigned(fFilteredTreeview) then if Assigned(fFilteredTreeview) then
begin
ASelect := ASelect
and (tvoAllowMultiSelect in fFilteredTreeview.Options)
and (msShiftSelect in fFilteredTreeview.MultiSelectStyle);
fFilteredTreeview.MoveToPrevNode(ASelect); fFilteredTreeview.MoveToPrevNode(ASelect);
end;
end; end;
function TTreeFilterEdit.ReturnKeyHandled: Boolean; function TTreeFilterEdit.ReturnKeyHandled: Boolean;
@ -707,31 +717,25 @@ begin
end; end;
procedure TTreeFilterEdit.EditKeyDown(var Key: Word; Shift: TShiftState); procedure TTreeFilterEdit.EditKeyDown(var Key: Word; Shift: TShiftState);
//
function AllowMultiSelectWithShift: Boolean; inline;
begin
Result := (ssShift in Shift) and (msShiftSelect in fFilteredTreeview.MultiSelectStyle);
end;
//
begin begin
inherited EditKeyDown(Key, Shift); inherited EditKeyDown(Key, Shift);
if Key = 0 then exit; if Key = 0 then exit;
if fFilteredTreeview <> nil then if fFilteredTreeview <> nil then
begin begin
// current node // expand/collapse current node
if (Key = VK_LEFT) and (Shift = [ssAlt]) then if (Key = VK_LEFT) and (Shift = [ssAlt]) then
begin begin
fFilteredTreeview.MoveLeft(AllowMultiSelectWithShift); fFilteredTreeview.MoveLeft;
Key := 0; Key := 0;
end end
else if (Key = VK_RIGHT) and (Shift = [ssAlt]) then else if (Key = VK_RIGHT) and (Shift = [ssAlt]) then
begin begin
fFilteredTreeview.MoveRight(AllowMultiSelectWithShift); fFilteredTreeview.MoveRight;
Key := 0; Key := 0;
end end
// full tree // expand/collapse full tree
else if (Key = VK_LEFT) and (Shift = [ssShift, ssAlt]) then else if (Key = VK_LEFT) and (Shift = [ssShift, ssAlt]) then
begin begin
fFilteredTreeview.FullCollapse; fFilteredTreeview.FullCollapse;