Skip to content

Commit 09c6afa

Browse files
committed
feat: grid export option for exporting the focused grid column only
Refs #2490
1 parent 118e9d9 commit 09c6afa

3 files changed

Lines changed: 64 additions & 29 deletions

File tree

source/apphelpers.pas

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ TWinControlHelper = class helper for TWinControl
197197
asExportSQLDatabase, asExportSQLServerDatabase, asExportSQLOutput, asExportSQLAddComments, asExportSQLTransactions, asExportSQLRemoveAutoIncrement, asExportSQLRemoveDefiner,
198198
asGridExportWindowWidth, asGridExportWindowHeight, asGridExportOutputCopy, asGridExportOutputFile,
199199
asGridExportFilename, asGridExportRecentFiles, asGridExportEncoding, asGridExportFormat, asGridExportSelection,
200-
asGridExportColumnNames, asGridExportIncludeAutoInc, asGridExportIncludeQuery, asGridExportRemoveLinebreaks, asGridExportOpenFile,
200+
asGridExportColumnNames, asGridExportIncludeAutoInc, asGridExportFocusedColumnOnly, asGridExportIncludeQuery, asGridExportRemoveLinebreaks, asGridExportOpenFile,
201201
asGridExportSeparator, asGridExportEncloser, asGridExportTerminator, asGridExportNull,
202202

203203
asGridExportClpColumnNames, asGridExportClpIncludeAutoInc, asGridExportClpRemoveLinebreaks,
@@ -3969,6 +3969,7 @@ constructor TAppSettings.Create;
39693969
InitSetting(asGridExportSelection, 'GridExportSelection', 1);
39703970
InitSetting(asGridExportColumnNames, 'GridExportColumnNames', 0, True);
39713971
InitSetting(asGridExportIncludeAutoInc, 'GridExportAutoInc', 0, True);
3972+
InitSetting(asGridExportFocusedColumnOnly, 'GridExportFocusedColumnOnly', 0, False);
39723973
InitSetting(asGridExportIncludeQuery, 'GridExportIncludeQuery', 0, False);
39733974
InitSetting(asGridExportRemoveLinebreaks, 'GridExportRemoveLinebreaks', 0, False);
39743975
InitSetting(asGridExportOpenFile, 'GridExportOpenFile', 0, False);

source/exportgrid.dfm

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ object frmExportGrid: TfrmExportGrid
183183
RightButton.DisabledImageIndex = 107
184184
RightButton.ImageIndex = 108
185185
RightButton.Visible = True
186-
TabOrder = 5
186+
TabOrder = 6
187187
Text = ';'
188188
OnChange = editCSVChange
189189
OnRightButtonClick = editCSVRightButtonClick
@@ -198,7 +198,7 @@ object frmExportGrid: TfrmExportGrid
198198
RightButton.DisabledImageIndex = 107
199199
RightButton.ImageIndex = 108
200200
RightButton.Visible = True
201-
TabOrder = 6
201+
TabOrder = 7
202202
OnChange = editCSVChange
203203
OnRightButtonClick = editCSVRightButtonClick
204204
end
@@ -212,7 +212,7 @@ object frmExportGrid: TfrmExportGrid
212212
RightButton.DisabledImageIndex = 107
213213
RightButton.ImageIndex = 108
214214
RightButton.Visible = True
215-
TabOrder = 7
215+
TabOrder = 8
216216
Text = '\r\n'
217217
OnChange = editCSVChange
218218
OnRightButtonClick = editCSVRightButtonClick
@@ -227,11 +227,11 @@ object frmExportGrid: TfrmExportGrid
227227
end
228228
object chkIncludeQuery: TCheckBox
229229
Left = 8
230-
Top = 64
230+
Top = 87
231231
Width = 257
232232
Height = 17
233233
Caption = 'Include SQL query'
234-
TabOrder = 2
234+
TabOrder = 3
235235
end
236236
object editNull: TButtonedEdit
237237
Left = 400
@@ -243,25 +243,33 @@ object frmExportGrid: TfrmExportGrid
243243
RightButton.DisabledImageIndex = 107
244244
RightButton.ImageIndex = 108
245245
RightButton.Visible = True
246-
TabOrder = 8
246+
TabOrder = 9
247247
OnChange = editCSVChange
248248
OnRightButtonClick = editCSVRightButtonClick
249249
end
250250
object chkRemoveLinebreaks: TCheckBox
251251
Left = 8
252-
Top = 87
252+
Top = 110
253253
Width = 257
254254
Height = 17
255255
Caption = 'Remove linebreaks from contents'
256-
TabOrder = 3
256+
TabOrder = 4
257257
end
258258
object chkOpenFile: TCheckBox
259259
Left = 8
260-
Top = 110
260+
Top = 133
261261
Width = 257
262262
Height = 17
263263
Caption = 'Open file after creation'
264-
TabOrder = 4
264+
TabOrder = 5
265+
end
266+
object chkFocusedColumnOnly: TCheckBox
267+
Left = 8
268+
Top = 64
269+
Width = 265
270+
Height = 17
271+
Caption = 'Only focused column (%s)'
272+
TabOrder = 2
265273
end
266274
end
267275
object btnSetClipboardDefaults: TButton

source/exportgrid.pas

Lines changed: 44 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ interface
3030
TfrmExportGrid = class(TExtForm)
3131
btnOK: TButton;
3232
btnCancel: TButton;
33+
chkFocusedColumnOnly: TCheckBox;
3334
grpSelection: TRadioGroup;
3435
grpOutput: TGroupBox;
3536
radioOutputCopyToClipboard: TRadioButton;
@@ -201,6 +202,7 @@ procedure TfrmExportGrid.FormCreate(Sender: TObject);
201202
grpSelection.ItemIndex := 0; // Always use selected cells in copy mode
202203
chkIncludeColumnNames.Checked := AppSettings.ReadBool(asGridExportClpColumnNames);
203204
chkIncludeAutoIncrement.Checked := AppSettings.ReadBool(asGridExportClpIncludeAutoInc);
205+
chkFocusedColumnOnly.Checked := False;
204206
chkIncludeQuery.Checked := False; // Always off in copy mode
205207
chkRemoveLinebreaks.Checked := AppSettings.ReadBool(asGridExportClpRemoveLinebreaks);
206208
chkOpenFile.Checked := False; // Always off in copy mode
@@ -215,6 +217,7 @@ procedure TfrmExportGrid.FormCreate(Sender: TObject);
215217
grpSelection.ItemIndex := AppSettings.ReadInt(asGridExportSelection);
216218
chkIncludeColumnNames.Checked := AppSettings.ReadBool(asGridExportColumnNames);
217219
chkIncludeAutoIncrement.Checked := AppSettings.ReadBool(asGridExportIncludeAutoInc);
220+
chkFocusedColumnOnly.Checked := AppSettings.ReadBool(asGridExportFocusedColumnOnly);
218221
chkIncludeQuery.Checked := AppSettings.ReadBool(asGridExportIncludeQuery);
219222
chkRemoveLinebreaks.Checked := AppSettings.ReadBool(asGridExportRemoveLinebreaks);
220223
chkOpenFile.Checked := AppSettings.ReadBool(asGridExportOpenFile);
@@ -228,12 +231,19 @@ procedure TfrmExportGrid.FormCreate(Sender: TObject);
228231

229232

230233
procedure TfrmExportGrid.FormShow(Sender: TObject);
234+
var
235+
FocusedCol: String;
231236
begin
232237
// Show dialog. Expect "Grid" property to be set now by the caller.
233238
Width := AppSettings.ReadIntDpiAware(asGridExportWindowWidth, Self);
234239
Height := AppSettings.ReadIntDpiAware(asGridExportWindowHeight, Self);
235240
chkIncludeAutoIncrement.OnClick := CalcSize;
241+
chkFocusedColumnOnly.OnClick := CalcSize;
236242
CalcSize(Sender);
243+
// Show name of focused column
244+
FocusedCol := IfThen(Grid.FocusedColumn > NoColumn, Grid.Header.Columns[Grid.FocusedColumn].Text, '');
245+
chkFocusedColumnOnly.Caption := f_('Only focused column (%s)', [FocusedCol]);
246+
chkFocusedColumnOnly.Enabled := not FocusedCol.IsEmpty;
237247
end;
238248

239249

@@ -252,6 +262,7 @@ procedure TfrmExportGrid.FormClose(Sender: TObject; var Action: TCloseAction);
252262
AppSettings.WriteInt(asGridExportSelection, grpSelection.ItemIndex);
253263
AppSettings.WriteBool(asGridExportColumnNames, chkIncludeColumnNames.Checked);
254264
AppSettings.WriteBool(asGridExportIncludeAutoInc, chkIncludeAutoIncrement.Checked);
265+
AppSettings.WriteBool(asGridExportFocusedColumnOnly, chkFocusedColumnOnly.Checked);
255266
AppSettings.WriteBool(asGridExportIncludeQuery, chkIncludeQuery.Checked);
256267
AppSettings.WriteBool(asGridExportRemoveLinebreaks, chkRemoveLinebreaks.Checked);
257268
AppSettings.WriteBool(asGridExportOpenFile, chkOpenFile.Checked);
@@ -476,11 +487,12 @@ procedure TfrmExportGrid.CalcSize(Sender: TObject);
476487
var
477488
GridData: TDBQuery;
478489
Node: PVirtualNode;
479-
Col, ExcludeCol: TColumnIndex;
490+
Col, ExcludeAutoIncCol, IncludeFocusedCol: TColumnIndex;
480491
ResultCol: Integer;
481492
RowNum: PInt64;
482493
SelectedSize, AllSize: Int64;
483494
CalculatedCount, SelectedCount, AllCount: Int64;
495+
DoIncludeCol: Boolean;
484496
begin
485497
GridData := Mainform.GridResult(Grid);
486498
if not Assigned(GridData) then begin
@@ -489,10 +501,13 @@ procedure TfrmExportGrid.CalcSize(Sender: TObject);
489501
end;
490502
AllSize := 0;
491503
SelectedSize := 0;
492-
chkIncludeAutoIncrement.Enabled := GridData.AutoIncrementColumn > -1;
493-
ExcludeCol := -1;
504+
chkIncludeAutoIncrement.Enabled := (GridData.AutoIncrementColumn > -1) and (not chkFocusedColumnOnly.Checked);
505+
ExcludeAutoIncCol := -1;
494506
if chkIncludeAutoIncrement.Enabled and (not chkIncludeAutoIncrement.Checked) then
495-
ExcludeCol := GridData.AutoIncrementColumn;
507+
ExcludeAutoIncCol := GridData.AutoIncrementColumn;
508+
IncludeFocusedCol := -1;
509+
if chkFocusedColumnOnly.Enabled and chkFocusedColumnOnly.Checked then
510+
IncludeFocusedCol := Grid.FocusedColumn;
496511

497512
Node := GetNextNode(Grid, nil, False);
498513
CalculatedCount := 0;
@@ -510,7 +525,9 @@ procedure TfrmExportGrid.CalcSize(Sender: TObject);
510525
Col := Grid.Header.Columns.GetFirstVisibleColumn(True);
511526
while Col > NoColumn do begin
512527
ResultCol := Col - 1;
513-
if Col <> ExcludeCol then begin
528+
DoIncludeCol := (Col <> ExcludeAutoIncCol) and
529+
((IncludeFocusedCol < 0) or (Col = IncludeFocusedCol));
530+
if DoIncludeCol then begin
514531
Inc(AllSize, GridData.ColumnLengths(ResultCol));
515532
if vsSelected in Node.States then
516533
Inc(SelectedSize, GridData.ColumnLengths(ResultCol));
@@ -651,7 +668,7 @@ function TfrmExportGrid.FormatLatex(Text: String): String;
651668

652669
procedure TfrmExportGrid.btnOKClick(Sender: TObject);
653670
var
654-
Col, ExcludeCol: TColumnIndex;
671+
Col, ExcludeAutoIncCol, IncludeFocusedCol: TColumnIndex;
655672
ResultCol: Integer;
656673
Header, Data, tmp, Encloser, Separator, Terminator, TableName, Filename: String;
657674
Node: PVirtualNode;
@@ -666,6 +683,12 @@ procedure TfrmExportGrid.btnOKClick(Sender: TObject);
666683
Encoding: TEncoding;
667684
Bom: TBytes;
668685
CurrentExportFormat: TGridExportFormat;
686+
687+
function DoIncludeCol: Boolean;
688+
begin
689+
Result := (Col <> ExcludeAutoIncCol) and
690+
((IncludeFocusedCol < 0) or (Col = IncludeFocusedCol))
691+
end;
669692
begin
670693
Filename := GetOutputFilename(editFilename.Text, MainForm.ActiveDbObj);
671694

@@ -694,9 +717,12 @@ procedure TfrmExportGrid.btnOKClick(Sender: TObject);
694717
except
695718
TableName := _('UnknownTable');
696719
end;
697-
ExcludeCol := NoColumn;
698-
if (not chkIncludeAutoIncrement.Checked) or (not chkIncludeAutoIncrement.Enabled) then
699-
ExcludeCol := GridData.AutoIncrementColumn + 1;
720+
ExcludeAutoIncCol := NoColumn;
721+
if chkIncludeAutoIncrement.Enabled and (not chkIncludeAutoIncrement.Checked) then
722+
ExcludeAutoIncCol := GridData.AutoIncrementColumn + 1;
723+
IncludeFocusedCol := NoColumn;
724+
if chkFocusedColumnOnly.Checked then
725+
IncludeFocusedCol := Grid.FocusedColumn;
700726
// Calling (Get)ExportFormat is slow, so we store it in a local variable
701727
CurrentExportFormat := ExportFormat;
702728

@@ -759,7 +785,7 @@ procedure TfrmExportGrid.btnOKClick(Sender: TObject);
759785
CodeIndent(4) + '<tr>' + sLineBreak;
760786
Col := Grid.Header.Columns.GetFirstVisibleColumn(True);
761787
while Col > NoColumn do begin
762-
if Col <> ExcludeCol then
788+
if DoIncludeCol then
763789
Header := Header + CodeIndent(5) + '<th class="col' + IntToStr(Col) + '">' + Grid.Header.Columns[Col].Text + '</th>' + sLineBreak;
764790
Col := Grid.Header.Columns.GetNextVisibleColumn(Col);
765791
end;
@@ -779,7 +805,7 @@ procedure TfrmExportGrid.btnOKClick(Sender: TObject);
779805
while Col > NoColumn do begin
780806
// Alter column name in header if data is not raw.
781807
ResultCol := Col - 1;
782-
if Col <> ExcludeCol then begin
808+
if DoIncludeCol then begin
783809
Data := Grid.Header.Columns[Col].Text;
784810
if (GridData.DataType(ResultCol).Category in [dtcBinary, dtcSpatial]) and (not Mainform.actBlobAsText.Checked) then
785811
Data := 'HEX(' + Data + ')';
@@ -811,15 +837,15 @@ procedure TfrmExportGrid.btnOKClick(Sender: TObject);
811837
Header := Header + '{';
812838
Col := Grid.Header.Columns.GetFirstVisibleColumn(True);
813839
while Col > NoColumn do begin
814-
if Col <> ExcludeCol then
840+
if DoIncludeCol then
815841
Header := Header + ' c ';
816842
Col := Grid.Header.Columns.GetNextVisibleColumn(Col);
817843
end;
818844
Header := Header + '}' + CRLF;
819845
if chkIncludeColumnNames.Checked then begin
820846
Col := Grid.Header.Columns.GetFirstVisibleColumn(True);
821847
while Col > NoColumn do begin
822-
if Col <> ExcludeCol then
848+
if DoIncludeCol then
823849
Header := Header + FormatLatex(Grid.Header.Columns[Col].Text) + Separator;
824850
Col := Grid.Header.Columns.GetNextVisibleColumn(Col);
825851
end;
@@ -836,7 +862,7 @@ procedure TfrmExportGrid.btnOKClick(Sender: TObject);
836862
Header := TrimLeft(Separator);
837863
Col := Grid.Header.Columns.GetFirstVisibleColumn(True);
838864
while Col > NoColumn do begin
839-
if Col <> ExcludeCol then
865+
if DoIncludeCol then
840866
Header := Header + Grid.Header.Columns[Col].Text + Separator;
841867
Col := Grid.Header.Columns.GetNextVisibleColumn(Col);
842868
end;
@@ -864,7 +890,7 @@ procedure TfrmExportGrid.btnOKClick(Sender: TObject);
864890
Header := Header + TrimLeft(Separator);
865891
Col := Grid.Header.Columns.GetFirstVisibleColumn(True);
866892
while Col > NoColumn do begin
867-
if Col <> ExcludeCol then begin
893+
if DoIncludeCol then begin
868894
if chkIncludeColumnNames.Checked then
869895
Header := Header + Grid.Header.Columns[Col].Text + Separator
870896
else
@@ -878,7 +904,7 @@ procedure TfrmExportGrid.btnOKClick(Sender: TObject);
878904
Col := Grid.Header.Columns.GetFirstVisibleColumn(True);
879905
while Col > NoColumn do begin
880906
ResultCol := Col - 1;
881-
if Col <> ExcludeCol then begin
907+
if DoIncludeCol then begin
882908
Header := Header + '---';
883909
if GridData.DataType(ResultCol).Category in [dtcInteger, dtcReal] then
884910
Header := Header + ':';
@@ -946,7 +972,7 @@ procedure TfrmExportGrid.btnOKClick(Sender: TObject);
946972
Col := Grid.Header.Columns.GetFirstVisibleColumn(True);
947973
while Col > NoColumn do begin
948974
ResultCol := Col - 1;
949-
if (Col <> ExcludeCol) and (not GridData.ColIsVirtual(ResultCol)) then
975+
if DoIncludeCol and (not GridData.ColIsVirtual(ResultCol)) then
950976
tmp := tmp + GridData.Connection.QuoteIdent(Grid.Header.Columns[Col].Text)+', ';
951977
Col := Grid.Header.Columns.GetNextVisibleColumn(Col);
952978
end;
@@ -983,7 +1009,7 @@ procedure TfrmExportGrid.btnOKClick(Sender: TObject);
9831009
Col := Grid.Header.Columns.GetFirstVisibleColumn(True);
9841010
while Col > NoColumn do begin
9851011
ResultCol := Col - 1;
986-
if Col <> ExcludeCol then begin
1012+
if DoIncludeCol then begin
9871013
if (GridData.DataType(ResultCol).Category in [dtcBinary, dtcSpatial])
9881014
and (not Mainform.actBlobAsText.Checked) then begin
9891015
Data := GridData.HexValue(ResultCol);

0 commit comments

Comments
 (0)