Fix various selection bugs in column selection panel

This commit is contained in:
Ansgar Becker
2015-06-28 13:39:08 +00:00
parent d02f9822b3
commit 082368e947

View File

@ -95,15 +95,16 @@ end;
procedure TColumnSelectionForm.btnOKClick(Sender: TObject); procedure TColumnSelectionForm.btnOKClick(Sender: TObject);
var var
i: Integer; i: Integer;
Col: String;
begin begin
// Prepare string for storing in registry. // Prepare string for storing in registry.
// Use quote-character as separator to ensure columnnames can // Use quote-character as separator to ensure columnnames can
// be extracted safely later // be extracted safely later
Mainform.DataGridHiddenColumns.Clear; Mainform.DataGridHiddenColumns.Clear;
for i := 0 to chklistColumns.Items.Count - 1 do for i:=0 to Mainform.SelectedTableColumns.Count-1 do begin
begin Col := Mainform.SelectedTableColumns[i].Name;
if not chklistColumns.Checked[i] then if FCheckedColumns.IndexOf(Col) = -1 then
Mainform.DataGridHiddenColumns.Add(chklistColumns.Items[i]); Mainform.DataGridHiddenColumns.Add(Col);
end; end;
InvalidateVT(Mainform.DataGrid, VTREE_NOTLOADED_PURGECACHE, False); InvalidateVT(Mainform.DataGrid, VTREE_NOTLOADED_PURGECACHE, False);
btnCancel.OnClick(Sender); btnCancel.OnClick(Sender);
@ -116,11 +117,19 @@ end;
procedure TColumnSelectionForm.chkSelectAllClick(Sender: TObject); procedure TColumnSelectionForm.chkSelectAllClick(Sender: TObject);
var var
cb: TCheckBox; cb: TCheckBox;
i: Integer;
begin begin
// Avoid executing when checkbox was toggled by code (see proc below) // Avoid executing when checkbox was toggled by code (see proc below)
cb := Sender as TCheckBox; cb := Sender as TCheckBox;
if cb.Focused then if cb.Focused then begin
chklistColumns.CheckAll(cb.State); chklistColumns.CheckAll(cb.State);
for i:=0 to chklistColumns.Items.Count-1 do begin
if (FCheckedColumns.IndexOf(chklistColumns.Items[i]) = -1) and (cb.State = cbChecked) then
FCheckedColumns.Add(chklistColumns.Items[i]);
if (FCheckedColumns.IndexOf(chklistColumns.Items[i]) > -1) and (cb.State = cbUnchecked) then
FCheckedColumns.Delete(FCheckedColumns.IndexOf(chklistColumns.Items[i]));
end;
end;
end; end;
@ -145,6 +154,14 @@ var
i : Integer; i : Integer;
AllSelected, NoneSelected : Boolean; AllSelected, NoneSelected : Boolean;
begin begin
// Add or remove clicked item from list
if chklistColumns.ItemIndex > -1 then begin
if chklistColumns.Checked[chklistColumns.ItemIndex] then
FCheckedColumns.Add(chklistColumns.Items[chklistColumns.ItemIndex])
else
FCheckedColumns.Delete(FCheckedColumns.IndexOf(chklistColumns.Items[chklistColumns.ItemIndex]));
end;
Allselected := True; Allselected := True;
NoneSelected := True; NoneSelected := True;
for i:=0 to chklistColumns.Items.Count-1 do begin for i:=0 to chklistColumns.Items.Count-1 do begin
@ -170,12 +187,6 @@ var
i: Integer; i: Integer;
Col: String; Col: String;
begin begin
// Remember currently selected items
FCheckedColumns.Clear;
for i:=0 to chklistColumns.Items.Count-1 do begin
if chklistColumns.Checked[i] then
FCheckedColumns.Add(chklistColumns.Items[i]);
end;
// Setting Sorted to false doesn't resort anything in the list. // Setting Sorted to false doesn't resort anything in the list.
// So we have to add all items again in original order // So we have to add all items again in original order
chklistColumns.Sorted := chkSort.Checked; chklistColumns.Sorted := chkSort.Checked;