@@ -35,6 +35,7 @@ interface
3535 TfrmExportGrid = class (TExtForm)
3636 btnOK: TButton;
3737 btnCancel: TButton;
38+ chkFocusedColumnOnly: TCheckBox;
3839 grpSelection: TRadioGroup;
3940 grpOutput: TGroupBox;
4041 radioOutputCopyToClipboard: TRadioButton;
@@ -190,6 +191,7 @@ procedure TfrmExportGrid.FormCreate(Sender: TObject);
190191 grpSelection.ItemIndex := 0 ; // Always use selected cells in copy mode
191192 chkIncludeColumnNames.Checked := AppSettings.ReadBool(asGridExportClpColumnNames);
192193 chkIncludeAutoIncrement.Checked := AppSettings.ReadBool(asGridExportClpIncludeAutoInc);
194+ chkFocusedColumnOnly.Checked := False;
193195 chkIncludeQuery.Checked := False; // Always off in copy mode
194196 chkRemoveLinebreaks.Checked := AppSettings.ReadBool(asGridExportClpRemoveLinebreaks);
195197 chkOpenFile.Checked := False; // Always off in copy mode
@@ -204,6 +206,7 @@ procedure TfrmExportGrid.FormCreate(Sender: TObject);
204206 grpSelection.ItemIndex := AppSettings.ReadInt(asGridExportSelection);
205207 chkIncludeColumnNames.Checked := AppSettings.ReadBool(asGridExportColumnNames);
206208 chkIncludeAutoIncrement.Checked := AppSettings.ReadBool(asGridExportIncludeAutoInc);
209+ chkFocusedColumnOnly.Checked := AppSettings.ReadBool(asGridExportFocusedColumnOnly);
207210 chkIncludeQuery.Checked := AppSettings.ReadBool(asGridExportIncludeQuery);
208211 chkRemoveLinebreaks.Checked := AppSettings.ReadBool(asGridExportRemoveLinebreaks);
209212 chkOpenFile.Checked := AppSettings.ReadBool(asGridExportOpenFile);
@@ -217,10 +220,17 @@ procedure TfrmExportGrid.FormCreate(Sender: TObject);
217220
218221
219222procedure TfrmExportGrid.FormShow (Sender: TObject);
223+ var
224+ FocusedCol: String;
220225begin
221226 // Show dialog. Expect "Grid" property to be set now by the caller.
222227 chkIncludeAutoIncrement.OnClick := CalcSize;
228+ chkFocusedColumnOnly.OnClick := CalcSize;
223229 CalcSize(Sender);
230+ // Show name of focused column
231+ FocusedCol := IfThen(Grid.FocusedColumn > NoColumn, Grid.Header.Columns[Grid.FocusedColumn].Text, ' ' );
232+ chkFocusedColumnOnly.Caption := f_(' Only focused column (%s)' , [FocusedCol]);
233+ chkFocusedColumnOnly.Enabled := not FocusedCol.IsEmpty;
224234end ;
225235
226236
@@ -237,6 +247,7 @@ procedure TfrmExportGrid.FormClose(Sender: TObject; var Action: TCloseAction);
237247 AppSettings.WriteInt(asGridExportSelection, grpSelection.ItemIndex);
238248 AppSettings.WriteBool(asGridExportColumnNames, chkIncludeColumnNames.Checked);
239249 AppSettings.WriteBool(asGridExportIncludeAutoInc, chkIncludeAutoIncrement.Checked);
250+ AppSettings.WriteBool(asGridExportFocusedColumnOnly, chkFocusedColumnOnly.Checked);
240251 AppSettings.WriteBool(asGridExportIncludeQuery, chkIncludeQuery.Checked);
241252 AppSettings.WriteBool(asGridExportRemoveLinebreaks, chkRemoveLinebreaks.Checked);
242253 AppSettings.WriteBool(asGridExportOpenFile, chkOpenFile.Checked);
@@ -466,11 +477,12 @@ procedure TfrmExportGrid.CalcSize(Sender: TObject);
466477var
467478 GridData: TDBQuery;
468479 Node: PVirtualNode;
469- Col, ExcludeCol : TColumnIndex;
480+ Col, ExcludeAutoIncCol, IncludeFocusedCol : TColumnIndex;
470481 ResultCol: Integer;
471482 RowNum: PInt64;
472483 SelectedSize, AllSize: Int64;
473484 CalculatedCount, SelectedCount, AllCount: Int64;
485+ DoIncludeCol: Boolean;
474486begin
475487 GridData := Mainform.GridResult(Grid);
476488 if not Assigned(GridData) then begin
@@ -479,10 +491,13 @@ procedure TfrmExportGrid.CalcSize(Sender: TObject);
479491 end ;
480492 AllSize := 0 ;
481493 SelectedSize := 0 ;
482- chkIncludeAutoIncrement.Enabled := GridData.AutoIncrementColumn > -1 ;
483- ExcludeCol := -1 ;
494+ chkIncludeAutoIncrement.Enabled := ( GridData.AutoIncrementColumn > -1 ) and ( not chkFocusedColumnOnly.Checked) ;
495+ ExcludeAutoIncCol := -1 ;
484496 if chkIncludeAutoIncrement.Enabled and (not chkIncludeAutoIncrement.Checked) then
485- ExcludeCol := GridData.AutoIncrementColumn;
497+ ExcludeAutoIncCol := GridData.AutoIncrementColumn;
498+ IncludeFocusedCol := -1 ;
499+ if chkFocusedColumnOnly.Enabled and chkFocusedColumnOnly.Checked then
500+ IncludeFocusedCol := Grid.FocusedColumn;
486501
487502 Node := GetNextNode(Grid, nil , False);
488503 CalculatedCount := 0 ;
@@ -500,7 +515,9 @@ procedure TfrmExportGrid.CalcSize(Sender: TObject);
500515 Col := Grid.Header.Columns.GetFirstVisibleColumn(True);
501516 while Col > NoColumn do begin
502517 ResultCol := Col - 1 ;
503- if Col <> ExcludeCol then begin
518+ DoIncludeCol := (Col <> ExcludeAutoIncCol) and
519+ ((IncludeFocusedCol < 0 ) or (Col = IncludeFocusedCol));
520+ if DoIncludeCol then begin
504521 Inc(AllSize, GridData.ColumnLengths(ResultCol));
505522 if vsSelected in Node.States then
506523 Inc(SelectedSize, GridData.ColumnLengths(ResultCol));
@@ -639,7 +656,7 @@ function TfrmExportGrid.FormatLatex(Text: String): String;
639656
640657procedure TfrmExportGrid.btnOKClick (Sender: TObject);
641658var
642- Col, ExcludeCol : TColumnIndex;
659+ Col, ExcludeAutoIncCol, IncludeFocusedCol : TColumnIndex;
643660 ResultCol: Integer;
644661 Header, Data, tmp, Encloser, Separator, Terminator, TableName, Filename: String;
645662 Node: PVirtualNode;
@@ -654,6 +671,12 @@ procedure TfrmExportGrid.btnOKClick(Sender: TObject);
654671 Encoding: TEncoding;
655672 Bom: TBytes;
656673 CurrentExportFormat: TGridExportFormat;
674+
675+ function DoIncludeCol : Boolean;
676+ begin
677+ Result := (Col <> ExcludeAutoIncCol) and
678+ ((IncludeFocusedCol < 0 ) or (Col = IncludeFocusedCol))
679+ end ;
657680begin
658681 Filename := GetOutputFilename(editFilename.Text, MainForm.ActiveDbObj);
659682
@@ -682,9 +705,12 @@ procedure TfrmExportGrid.btnOKClick(Sender: TObject);
682705 except
683706 TableName := _(' UnknownTable' );
684707 end ;
685- ExcludeCol := NoColumn;
686- if (not chkIncludeAutoIncrement.Checked) or (not chkIncludeAutoIncrement.Enabled) then
687- ExcludeCol := GridData.AutoIncrementColumn + 1 ;
708+ ExcludeAutoIncCol := NoColumn;
709+ if chkIncludeAutoIncrement.Enabled and (not chkIncludeAutoIncrement.Checked) then
710+ ExcludeAutoIncCol := GridData.AutoIncrementColumn + 1 ;
711+ IncludeFocusedCol := NoColumn;
712+ if chkFocusedColumnOnly.Checked then
713+ IncludeFocusedCol := Grid.FocusedColumn;
688714 // Calling (Get)ExportFormat is slow, so we store it in a local variable
689715 CurrentExportFormat := ExportFormat;
690716
@@ -748,7 +774,7 @@ procedure TfrmExportGrid.btnOKClick(Sender: TObject);
748774 CodeIndent(4 ) + ' <tr>' + sLineBreak;
749775 Col := Grid.Header.Columns.GetFirstVisibleColumn(True);
750776 while Col > NoColumn do begin
751- if Col <> ExcludeCol then
777+ if DoIncludeCol then
752778 Header := Header + CodeIndent(5 ) + ' <th class="col' + IntToStr(Col) + ' ">' + Grid.Header.Columns[Col].Text + ' </th>' + sLineBreak;
753779 Col := Grid.Header.Columns.GetNextVisibleColumn(Col);
754780 end ;
@@ -768,7 +794,7 @@ procedure TfrmExportGrid.btnOKClick(Sender: TObject);
768794 while Col > NoColumn do begin
769795 // Alter column name in header if data is not raw.
770796 ResultCol := Col - 1 ;
771- if Col <> ExcludeCol then begin
797+ if DoIncludeCol then begin
772798 Data := Grid.Header.Columns[Col].Text;
773799 if (GridData.DataType(ResultCol).Category in [dtcBinary, dtcSpatial]) and (not Mainform.actBlobAsText.Checked) then
774800 Data := ' HEX(' + Data + ' )' ;
@@ -800,15 +826,15 @@ procedure TfrmExportGrid.btnOKClick(Sender: TObject);
800826 Header := Header + ' {' ;
801827 Col := Grid.Header.Columns.GetFirstVisibleColumn(True);
802828 while Col > NoColumn do begin
803- if Col <> ExcludeCol then
829+ if DoIncludeCol then
804830 Header := Header + ' c ' ;
805831 Col := Grid.Header.Columns.GetNextVisibleColumn(Col);
806832 end ;
807833 Header := Header + ' }' + CRLF;
808834 if chkIncludeColumnNames.Checked then begin
809835 Col := Grid.Header.Columns.GetFirstVisibleColumn(True);
810836 while Col > NoColumn do begin
811- if Col <> ExcludeCol then
837+ if DoIncludeCol then
812838 Header := Header + FormatLatex(Grid.Header.Columns[Col].Text) + Separator;
813839 Col := Grid.Header.Columns.GetNextVisibleColumn(Col);
814840 end ;
@@ -825,7 +851,7 @@ procedure TfrmExportGrid.btnOKClick(Sender: TObject);
825851 Header := TrimLeft(Separator);
826852 Col := Grid.Header.Columns.GetFirstVisibleColumn(True);
827853 while Col > NoColumn do begin
828- if Col <> ExcludeCol then
854+ if DoIncludeCol then
829855 Header := Header + Grid.Header.Columns[Col].Text + Separator;
830856 Col := Grid.Header.Columns.GetNextVisibleColumn(Col);
831857 end ;
@@ -853,7 +879,7 @@ procedure TfrmExportGrid.btnOKClick(Sender: TObject);
853879 Header := Header + TrimLeft(Separator);
854880 Col := Grid.Header.Columns.GetFirstVisibleColumn(True);
855881 while Col > NoColumn do begin
856- if Col <> ExcludeCol then begin
882+ if DoIncludeCol then begin
857883 if chkIncludeColumnNames.Checked then
858884 Header := Header + Grid.Header.Columns[Col].Text + Separator
859885 else
@@ -867,7 +893,7 @@ procedure TfrmExportGrid.btnOKClick(Sender: TObject);
867893 Col := Grid.Header.Columns.GetFirstVisibleColumn(True);
868894 while Col > NoColumn do begin
869895 ResultCol := Col - 1 ;
870- if Col <> ExcludeCol then begin
896+ if DoIncludeCol then begin
871897 Header := Header + ' ---' ;
872898 if GridData.DataType(ResultCol).Category in [dtcInteger, dtcReal] then
873899 Header := Header + ' :' ;
@@ -935,7 +961,7 @@ procedure TfrmExportGrid.btnOKClick(Sender: TObject);
935961 Col := Grid.Header.Columns.GetFirstVisibleColumn(True);
936962 while Col > NoColumn do begin
937963 ResultCol := Col - 1 ;
938- if (Col <> ExcludeCol) and (not GridData.ColIsVirtual(ResultCol)) then
964+ if DoIncludeCol and (not GridData.ColIsVirtual(ResultCol)) then
939965 tmp := tmp + GridData.Connection.QuoteIdent(Grid.Header.Columns[Col].Text)+' , ' ;
940966 Col := Grid.Header.Columns.GetNextVisibleColumn(Col);
941967 end ;
@@ -972,7 +998,7 @@ procedure TfrmExportGrid.btnOKClick(Sender: TObject);
972998 Col := Grid.Header.Columns.GetFirstVisibleColumn(True);
973999 while Col > NoColumn do begin
9741000 ResultCol := Col - 1 ;
975- if Col <> ExcludeCol then begin
1001+ if DoIncludeCol then begin
9761002 if (GridData.DataType(ResultCol).Category in [dtcBinary, dtcSpatial])
9771003 and (not Mainform.actBlobAsText.Checked) then begin
9781004 Data := GridData.HexValue(ResultCol);
0 commit comments