Files
HeidiSQL/source/column_selection.pas
Ansgar Becker be645ac79b Unify code for refreshing Virtual Trees in a new helper method InvalidateVT. Fixes issue #1789 and issue #1790.
* Don't try to access a passed tree if it has been destroyed by some earlier event.
* Don't try to access registry in DoDisconnect after key has been closed.
* Now that DoDisconnect lives in FormDestroy it is save to call it slightly earlier, before registry has been closed. There should be no later paint events which will trigger random database queries.
2010-03-21 10:43:16 +00:00

200 lines
5.0 KiB
ObjectPascal

unit column_selection;
interface
uses
Windows, Classes, Controls, Forms, StdCtrls, CheckLst, ExtCtrls, Contnrs,
helpers;
type
TColumnSelectionForm = class(TForm)
pnlBevel: TPanel; // This panel has the only duty to display a normal border at the edges of the form
btnCancel: TButton;
btnOK: TButton;
chkSelectAll: TCheckBox;
chklistColumns: TCheckListBox;
chkSort: TCheckBox;
procedure btnCancelClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure chklistColumnsClickCheck(Sender: TObject);
procedure chkSelectAllClick(Sender: TObject);
procedure btnOKClick(Sender: TObject);
procedure chkSortClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormDeactivate(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
reg_name : String;
implementation
uses main;
{$R *.dfm}
procedure TColumnSelectionForm.FormCreate(Sender: TObject);
begin
InheritFont(Font);
end;
{**
FormShow
}
procedure TColumnSelectionForm.FormShow(Sender: TObject);
var
i: Integer;
begin
for i:=0 to Mainform.SelectedTableColumns.Count-1 do
chklistColumns.Items.Add(Mainform.SelectedTableColumns[i].Name);
// Check items!
if Mainform.DataGridHiddenColumns.Count = 0 then // Simply check all items
ToggleCheckListBox( chklistColumns, True )
else // Only check selected items
ToggleCheckListBox( chklistColumns, False, Mainform.DataGridHiddenColumns );
// Call check-event to update state of "Select / Deselect all" checkbox
chklistColumnsClickCheck( Sender );
// Restore last used sorting state from registry
chkSort.Checked := GetRegValue(REGNAME_SORTDISPLAYEDCOLUMNS, chkSort.Checked);
end;
{**
OK clicked
}
procedure TColumnSelectionForm.btnOKClick(Sender: TObject);
var
i : Integer;
begin
// Prepare string for storing in registry.
// Use quote-character as separator to ensure columnnames can
// be extracted safely later
Mainform.DataGridHiddenColumns.Clear;
for i := 0 to chklistColumns.Items.Count - 1 do
begin
if not chklistColumns.Checked[i] then
Mainform.DataGridHiddenColumns.Add(chklistColumns.Items[i]);
end;
InvalidateVT(Mainform.DataGrid, VTREE_NOTLOADED_PURGECACHE, False);
btnCancel.OnClick(Sender);
end;
{**
Select / Deselect all
}
procedure TColumnSelectionForm.chkSelectAllClick(Sender: TObject);
begin
// Avoid executing when checkbox was toggled by code (see proc below)
if (Sender as TCheckBox).Focused then
ToggleCheckListBox( chklistColumns, (Sender as TCheckBox).Checked );
end;
{**
Click within column list
Updates state of "Select / deselect all" checkbox
}
procedure TColumnSelectionForm.chklistColumnsClickCheck(Sender: TObject);
var
i : Integer;
allSelected, noneSelected : Boolean;
begin
allselected := True;
noneSelected := True;
for i := 0 to chklistColumns.Items.Count - 1 do
begin
if chklistColumns.Checked[i] then
begin
noneSelected := False;
end
else
begin
allSelected := False;
end;
end;
if noneSelected then
chkSelectAll.State := cbUnchecked
else if allSelected then
chkSelectAll.State := cbChecked
else
chkSelectAll.State := cbGrayed;
end;
{**
Sort / Unsort the list with fields
}
procedure TColumnSelectionForm.chkSortClick(Sender: TObject);
var
checkedfields : TStringList;
i: Integer;
begin
// Memorize checked items in a list
checkedfields := TStringList.Create;
for i := 0 to chklistColumns.Items.Count - 1 do begin
if chklistColumns.Checked[i] then
checkedfields.Add(chklistColumns.Items[i]);
end;
chklistColumns.Sorted := TCheckBox(Sender).Checked;
// Setting Sorted to false doesn't resort anything in the list.
// So we have to add all items again in original order
if not chklistColumns.Sorted then begin
// Add all fieldnames again
chklistColumns.Items.BeginUpdate;
chklistColumns.Clear;
for i:=0 to Mainform.SelectedTableColumns.Count-1 do
chklistColumns.Items.Add(Mainform.SelectedTableColumns[i].Name);
chklistColumns.Items.EndUpdate;
end;
// check those which are in the checkedfields list
for i := 0 to chklistColumns.Items.Count-1 do begin
chklistColumns.Checked[i] := checkedfields.IndexOf( chklistColumns.Items[i] ) > -1;
end;
end;
procedure TColumnSelectionForm.btnCancelClick(Sender: TObject);
begin
Mainform.tbtnDataColumns.Down := False;
Close;
end;
{**
Cancel this dialog if the user clicks elsewhere on mainform
}
procedure TColumnSelectionForm.FormDeactivate(Sender: TObject);
begin
btnCancel.OnClick(Sender);
end;
{**
Be sure the form is destroyed after closing.
}
procedure TColumnSelectionForm.FormClose(Sender: TObject; var Action:
TCloseAction);
begin
Action := caFree;
end;
end.