Files
HeidiSQL/source/column_selection.pas

206 lines
5.3 KiB
ObjectPascal

unit column_selection;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, CheckLst, ExtCtrls, Registry, TntCheckLst, WideStrings;
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: TTNTCheckListBox;
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, helpers;
{$R *.dfm}
procedure TColumnSelectionForm.FormCreate(Sender: TObject);
begin
InheritFont(Font);
end;
{**
FormShow
}
procedure TColumnSelectionForm.FormShow(Sender: TObject);
begin
// Take column names from listColumns and add here
chklistColumns.Items.Text := GetVTCaptions(Mainform.Childwin.ListColumns).Text;
// Check items!
if Mainform.Childwin.FDataGridSelect.Count = 0 then // Simply check all items
ToggleCheckListBox( chklistColumns, True )
else // Only check selected items
ToggleCheckListBox( chklistColumns, True, Mainform.Childwin.FDataGridSelect );
// Call check-event to update state of "Select / Deselect all" checkbox
chklistColumnsClickCheck( Sender );
// Restore last used sorting state from registry
chkSort.Checked := Mainform.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.Childwin.FDataGridSelect.Clear;
for i := 0 to chklistColumns.Items.Count - 1 do
begin
if chklistColumns.Checked[i] then
Mainform.Childwin.FDataGridSelect.Add(chklistColumns.Items[i]);
end;
// If all columns were selected, delete existing superflous reg-value
// Otherwise, save value
if Mainform.Childwin.FDataGridSelect.Count = chklistColumns.Items.Count then
Mainform.Childwin.FDataGridSelect.Clear;
Mainform.Childwin.viewdata(Sender);
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
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
// 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;
// Add all fieldnames again and check those which are in the checkedfields list
chklistColumns.Items.BeginUpdate;
chklistColumns.Items.Text := GetVTCaptions(Mainform.Childwin.ListColumns).Text;
for i := 0 to chklistColumns.Items.Count-1 do
begin
if checkedfields.IndexOf( chklistColumns.Items[i] ) > -1 then
chklistColumns.Checked[i] := True;
end;
chklistColumns.Items.EndUpdate;
end;
end;
procedure TColumnSelectionForm.btnCancelClick(Sender: TObject);
begin
Mainform.Childwin.tbtnDataColumns.Down := False;
Close;
end;
{**
Cancel this dialog if the user clicks elsewhere on childwin
}
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.