mirror of
https://github.com/HeidiSQL/HeidiSQL.git
synced 2025-08-06 18:24:26 +08:00
In the data sorting dialog, make sure we work on a copy of the currently used list with sorted columns, not on the original. Closes #849
This commit is contained in:
@ -23,12 +23,12 @@ type
|
|||||||
procedure DisplaySortingControls(Sender: TObject);
|
procedure DisplaySortingControls(Sender: TObject);
|
||||||
private
|
private
|
||||||
{ Private declarations }
|
{ Private declarations }
|
||||||
ColumnNames : TStringList;
|
FColumnNames: TStringList;
|
||||||
OrderColumns : TOrderColArray;
|
FOrderColumns: TOrderColArray;
|
||||||
OldOrderClause : String;
|
FOldOrderClause: String;
|
||||||
procedure comboColumnsChange( Sender: TObject );
|
procedure comboColumnsChange(Sender: TObject);
|
||||||
procedure btnOrderClick( Sender: TObject );
|
procedure btnOrderClick(Sender: TObject);
|
||||||
procedure btnDeleteClick( Sender: TObject );
|
procedure btnDeleteClick(Sender: TObject);
|
||||||
procedure Modified;
|
procedure Modified;
|
||||||
public
|
public
|
||||||
{ Public declarations }
|
{ Public declarations }
|
||||||
@ -47,14 +47,14 @@ procedure TDataSortingForm.FormCreate(Sender: TObject);
|
|||||||
var
|
var
|
||||||
i: Integer;
|
i: Integer;
|
||||||
begin
|
begin
|
||||||
ColumnNames := TStringList.Create;
|
FColumnNames := TStringList.Create;
|
||||||
// Take column names from listColumns and add here
|
// Take column names from listColumns and add here
|
||||||
for i:=0 to Mainform.SelectedTableColumns.Count-1 do begin
|
for i:=0 to Mainform.SelectedTableColumns.Count-1 do begin
|
||||||
ColumnNames.Add(Mainform.SelectedTableColumns[i].Name);
|
FColumnNames.Add(Mainform.SelectedTableColumns[i].Name);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
OrderColumns := Mainform.DataGridSortColumns;
|
FOrderColumns := Copy(Mainform.DataGridSortColumns, 0, MaxInt);
|
||||||
OldOrderClause := ComposeOrderClause(OrderColumns);
|
FOldOrderClause := ComposeOrderClause(FOrderColumns);
|
||||||
|
|
||||||
// First creation of controls
|
// First creation of controls
|
||||||
DisplaySortingControls(Sender);
|
DisplaySortingControls(Sender);
|
||||||
@ -94,7 +94,7 @@ begin
|
|||||||
// Create line with controls for each order column
|
// Create line with controls for each order column
|
||||||
// TODO: disable repaint on every created control. Sending WM_SETREDRAW=0 message creates artefacts.
|
// TODO: disable repaint on every created control. Sending WM_SETREDRAW=0 message creates artefacts.
|
||||||
LockWindowUpdate(pnlBevel.Handle);
|
LockWindowUpdate(pnlBevel.Handle);
|
||||||
for i:=0 to Length(OrderColumns)-1 do begin
|
for i:=0 to Length(FOrderColumns)-1 do begin
|
||||||
// 1. Label with number
|
// 1. Label with number
|
||||||
lblNumber := TLabel.Create(self);
|
lblNumber := TLabel.Create(self);
|
||||||
lblNumber.Parent := pnlBevel;
|
lblNumber.Parent := pnlBevel;
|
||||||
@ -107,15 +107,15 @@ begin
|
|||||||
lblNumber.Caption := IntToStr(i+1) + '.';
|
lblNumber.Caption := IntToStr(i+1) + '.';
|
||||||
lblNumber.Tag := i+1;
|
lblNumber.Tag := i+1;
|
||||||
|
|
||||||
// 2. Dropdown with columnnames
|
// 2. Dropdown with column names
|
||||||
comboColumns := TComboBox.Create(self);
|
comboColumns := TComboBox.Create(self);
|
||||||
comboColumns.Parent := pnlBevel;
|
comboColumns.Parent := pnlBevel;
|
||||||
comboColumns.Width := Width2;
|
comboColumns.Width := Width2;
|
||||||
comboColumns.Left := lblNumber.Left + lblNumber.Width + Margin;
|
comboColumns.Left := lblNumber.Left + lblNumber.Width + Margin;
|
||||||
comboColumns.Top := TopPos;
|
comboColumns.Top := TopPos;
|
||||||
comboColumns.Items.Text := ColumnNames.Text;
|
comboColumns.Items.Text := FColumnNames.Text;
|
||||||
comboColumns.Style := csDropDownList; // Not editable
|
comboColumns.Style := csDropDownList; // Not editable
|
||||||
comboColumns.ItemIndex := ColumnNames.IndexOf(OrderColumns[i].ColumnName);
|
comboColumns.ItemIndex := FColumnNames.IndexOf(FOrderColumns[i].ColumnName);
|
||||||
comboColumns.Tag := i+1;
|
comboColumns.Tag := i+1;
|
||||||
comboColumns.OnChange := comboColumnsChange;
|
comboColumns.OnChange := comboColumnsChange;
|
||||||
lblNumber.Height := comboColumns.Height;
|
lblNumber.Height := comboColumns.Height;
|
||||||
@ -131,7 +131,7 @@ begin
|
|||||||
btnOrder.GroupIndex := i+1; // if > 0 enables Down = True
|
btnOrder.GroupIndex := i+1; // if > 0 enables Down = True
|
||||||
btnOrder.Glyph.Transparent := True;
|
btnOrder.Glyph.Transparent := True;
|
||||||
btnOrder.Glyph.AlphaFormat := afDefined;
|
btnOrder.Glyph.AlphaFormat := afDefined;
|
||||||
if OrderColumns[i].SortDirection = ORDER_DESC then begin
|
if FOrderColumns[i].SortDirection = ORDER_DESC then begin
|
||||||
MainForm.VirtualImageListMain.GetBitmap(110, btnOrder.Glyph);
|
MainForm.VirtualImageListMain.GetBitmap(110, btnOrder.Glyph);
|
||||||
btnOrder.Down := True;
|
btnOrder.Down := True;
|
||||||
end else begin
|
end else begin
|
||||||
@ -200,7 +200,7 @@ var
|
|||||||
combo : TComboBox;
|
combo : TComboBox;
|
||||||
begin
|
begin
|
||||||
combo := Sender as TComboBox;
|
combo := Sender as TComboBox;
|
||||||
OrderColumns[combo.Tag-1].ColumnName := combo.Text;
|
FOrderColumns[combo.Tag-1].ColumnName := combo.Text;
|
||||||
|
|
||||||
// Enables OK button
|
// Enables OK button
|
||||||
Modified;
|
Modified;
|
||||||
@ -216,12 +216,12 @@ var
|
|||||||
begin
|
begin
|
||||||
btn := Sender as TSpeedButton;
|
btn := Sender as TSpeedButton;
|
||||||
btn.Glyph := nil;
|
btn.Glyph := nil;
|
||||||
if OrderColumns[btn.Tag-1].SortDirection = ORDER_ASC then begin
|
if FOrderColumns[btn.Tag-1].SortDirection = ORDER_ASC then begin
|
||||||
MainForm.VirtualImageListMain.GetBitmap(110, btn.Glyph);
|
MainForm.VirtualImageListMain.GetBitmap(110, btn.Glyph);
|
||||||
OrderColumns[btn.Tag-1].SortDirection := ORDER_DESC;
|
FOrderColumns[btn.Tag-1].SortDirection := ORDER_DESC;
|
||||||
end else begin
|
end else begin
|
||||||
MainForm.VirtualImageListMain.GetBitmap(109, btn.Glyph);
|
MainForm.VirtualImageListMain.GetBitmap(109, btn.Glyph);
|
||||||
OrderColumns[btn.Tag-1].SortDirection := ORDER_ASC;
|
FOrderColumns[btn.Tag-1].SortDirection := ORDER_ASC;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// Enables OK button
|
// Enables OK button
|
||||||
@ -239,16 +239,16 @@ var
|
|||||||
begin
|
begin
|
||||||
btn := Sender as TButton;
|
btn := Sender as TButton;
|
||||||
|
|
||||||
if Length(OrderColumns)>1 then
|
if Length(FOrderColumns)>1 then
|
||||||
begin
|
begin
|
||||||
// Move remaining items one up
|
// Move remaining items one up
|
||||||
for i := btn.Tag-1 to Length(OrderColumns) - 2 do
|
for i := btn.Tag-1 to Length(FOrderColumns) - 2 do
|
||||||
begin
|
begin
|
||||||
OrderColumns[i] := OrderColumns[i+1];
|
FOrderColumns[i] := FOrderColumns[i+1];
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
// Delete last item
|
// Delete last item
|
||||||
SetLength(OrderColumns, Length(OrderColumns)-1);
|
SetLength(FOrderColumns, Length(FOrderColumns)-1);
|
||||||
|
|
||||||
// Refresh controls
|
// Refresh controls
|
||||||
DisplaySortingControls(Sender);
|
DisplaySortingControls(Sender);
|
||||||
@ -266,27 +266,27 @@ var
|
|||||||
i, new : Integer;
|
i, new : Integer;
|
||||||
UnusedColumns : TStringList;
|
UnusedColumns : TStringList;
|
||||||
begin
|
begin
|
||||||
SetLength( OrderColumns, Length(OrderColumns)+1 );
|
SetLength(FOrderColumns, Length(FOrderColumns)+1 );
|
||||||
new := Length(OrderColumns)-1;
|
new := Length(FOrderColumns)-1;
|
||||||
OrderColumns[new] := TOrderCol.Create;
|
FOrderColumns[new] := TOrderCol.Create;
|
||||||
|
|
||||||
// Take first unused column as default for new sort column
|
// Take first unused column as default for new sort column
|
||||||
UnusedColumns := TStringList.Create;
|
UnusedColumns := TStringList.Create;
|
||||||
UnusedColumns.AddStrings( ColumnNames );
|
UnusedColumns.AddStrings( FColumnNames );
|
||||||
for i := 0 to Length(OrderColumns) - 1 do
|
for i := 0 to Length(FOrderColumns) - 1 do
|
||||||
begin
|
begin
|
||||||
if UnusedColumns.IndexOf(OrderColumns[i].ColumnName) > -1 then
|
if UnusedColumns.IndexOf(FOrderColumns[i].ColumnName) > -1 then
|
||||||
begin
|
begin
|
||||||
UnusedColumns.Delete( UnusedColumns.IndexOf(OrderColumns[i].ColumnName) );
|
UnusedColumns.Delete( UnusedColumns.IndexOf(FOrderColumns[i].ColumnName) );
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
if UnusedColumns.Count > 0 then
|
if UnusedColumns.Count > 0 then
|
||||||
OrderColumns[new].ColumnName := UnusedColumns[0]
|
FOrderColumns[new].ColumnName := UnusedColumns[0]
|
||||||
else
|
else
|
||||||
OrderColumns[new].ColumnName := ColumnNames[0];
|
FOrderColumns[new].ColumnName := FColumnNames[0];
|
||||||
|
|
||||||
// Sort ASC by default
|
// Sort ASC by default
|
||||||
OrderColumns[new].SortDirection := ORDER_ASC;
|
FOrderColumns[new].SortDirection := ORDER_ASC;
|
||||||
|
|
||||||
// Refresh controls
|
// Refresh controls
|
||||||
DisplaySortingControls(Sender);
|
DisplaySortingControls(Sender);
|
||||||
@ -302,7 +302,7 @@ end;
|
|||||||
}
|
}
|
||||||
procedure TDataSortingForm.Modified;
|
procedure TDataSortingForm.Modified;
|
||||||
begin
|
begin
|
||||||
btnOk.Enabled := ComposeOrderClause(OrderColumns) <> OldOrderClause;
|
btnOk.Enabled := ComposeOrderClause(FOrderColumns) <> FOldOrderClause;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@ -312,7 +312,7 @@ end;
|
|||||||
procedure TDataSortingForm.btnOKClick(Sender: TObject);
|
procedure TDataSortingForm.btnOKClick(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
// TODO: apply ordering
|
// TODO: apply ordering
|
||||||
Mainform.DataGridSortColumns := OrderColumns;
|
Mainform.DataGridSortColumns := FOrderColumns;
|
||||||
InvalidateVT(Mainform.DataGrid, VTREE_NOTLOADED_PURGECACHE, False);
|
InvalidateVT(Mainform.DataGrid, VTREE_NOTLOADED_PURGECACHE, False);
|
||||||
btnCancel.OnClick(Sender);
|
btnCancel.OnClick(Sender);
|
||||||
end;
|
end;
|
||||||
|
Reference in New Issue
Block a user