mirror of
				https://gitlab.com/freepascal.org/lazarus/lazarus.git
				synced 2025-10-31 20:31:33 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			367 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
			
		
		
	
	
			367 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
| {
 | |
|  **********************************************************************
 | |
|   This file is part of the Free Pascal run time library.
 | |
| 
 | |
|   See the file COPYING.FPC, included in this distribution,
 | |
|   for details about the license.
 | |
|  **********************************************************************
 | |
| 
 | |
|   fpDBExport basic configuration dialog.
 | |
| 
 | |
|   Copyright (c) 2007 by Michael Van Canneyt, member of the Free Pascal development team
 | |
| 
 | |
| }
 | |
| unit frmBaseConfigExport;
 | |
| 
 | |
| {$mode objfpc}{$H+}
 | |
| 
 | |
| interface
 | |
| 
 | |
| uses
 | |
|   Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls,
 | |
|   ExtCtrls, ButtonPanel, EditBtn, CheckLst, ComCtrls, RTTIGrids, fpdbexport,
 | |
|   Buttons, ActnList, sdb_consts;
 | |
| 
 | |
| type
 | |
|   { TBaseConfigExportForm }
 | |
|   TBaseConfigExportForm = class(TForm)
 | |
|     AUp: TAction;
 | |
|     ADown: TAction;
 | |
|     ALFields: TActionList;
 | |
|     CLBFields: TCheckListBox;
 | |
|     EFileName: TFileNameEdit;
 | |
|     LEFileName: TLabel;
 | |
|     Label2: TLabel;
 | |
|     LCLBFields: TLabel;
 | |
|     PExportFieldList: TPanel;
 | |
|     PUPDown: TPanel;
 | |
|     PFieldProps: TPanel;
 | |
|     PFieldsTop: TPanel;
 | |
|     PCFields: TPageControl;
 | |
|     PFileName: TPanel;
 | |
|     PButtons: TButtonPanel;
 | |
|     GFormatting: TTIPropertyGrid;
 | |
|     SBup: TSpeedButton;
 | |
|     SBDown: TSpeedButton;
 | |
|     TSFields: TTabSheet;
 | |
|     TSFormatting: TTabSheet;
 | |
|     SplitterFields: TSplitter;
 | |
|     GFieldProps: TTIPropertyGrid;
 | |
|     FExporter: TCustomDatasetExporter;
 | |
|     procedure ADownExecute(Sender: TObject);
 | |
|     procedure ADownUpdate(Sender: TObject);
 | |
|     procedure AUpExecute(Sender: TObject);
 | |
|     procedure AUpUpdate(Sender: TObject);
 | |
|     procedure CLBFieldsClick(Sender: TObject);
 | |
|     procedure CLBFieldsItemClick(Sender: TObject; Index: integer);
 | |
|     procedure CLBFieldsKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
 | |
|     procedure FormCreate(Sender: TObject);
 | |
|     procedure FormDestroy(Sender: TObject);
 | |
|     procedure SetExporter(const AValue: TCustomDatasetExporter);
 | |
|     Procedure OnOKClick(Sender : TObject);
 | |
|     procedure ExporterToForm;
 | |
|   private
 | |
|     FFieldMap : TExportFields;
 | |
|     FFormatting : TCustomExportFormatSettings;
 | |
|     procedure FormToExporter;
 | |
|     procedure MoveFieldDown;
 | |
|     function MoveFieldUp: Boolean;
 | |
|     procedure SelectField(F: TExportFieldItem);
 | |
|     procedure ShowSelectedField;
 | |
|   public
 | |
|     Property Exporter : TCustomDatasetExporter Read FExporter Write SetExporter;
 | |
|   end; 
 | |
| 
 | |
| var
 | |
|   BaseConfigExportForm: TBaseConfigExportForm;
 | |
| 
 | |
| Function ShowBaseExportConfig (AExporter : TCustomDatasetExporter) : Boolean;
 | |
| 
 | |
| Procedure RegisterBaseExportConfigForm;
 | |
| 
 | |
| implementation
 | |
| 
 | |
| uses typinfo,lcltype;
 | |
| 
 | |
| {$R *.lfm}
 | |
| 
 | |
| Function ShowBaseExportConfig (AExporter : TCustomDatasetExporter) : Boolean;
 | |
| 
 | |
| begin
 | |
|   With TBaseConfigExportForm.Create(Application) do
 | |
|     Try
 | |
|       Exporter:=AExporter;
 | |
|       Result:=(ShowModal=mrOK);
 | |
|     Finally
 | |
|       Free;
 | |
|     end;
 | |
| end;
 | |
| 
 | |
| Type
 | |
| 
 | |
|   { TShowBaseConfigDialog }
 | |
| 
 | |
|   TShowBaseConfigDialog = Class(TObject)
 | |
|   Public
 | |
|     Function ShowConfig (AExporter : TCustomDatasetExporter) : Boolean;
 | |
|   end;
 | |
| 
 | |
| { TShowBaseConfigDialog }
 | |
| 
 | |
| function TShowBaseConfigDialog.ShowConfig(AExporter: TCustomDatasetExporter
 | |
|   ): Boolean;
 | |
|   
 | |
| begin
 | |
|   Result:=ShowBaseExportConfig(AExporter);
 | |
| end;
 | |
| 
 | |
| Var
 | |
|   DLG : TShowBaseConfigDialog;
 | |
| 
 | |
| Procedure RegisterBaseExportConfigForm;
 | |
| 
 | |
| Var
 | |
|   EF : TExportFormats;
 | |
|   I : Integer;
 | |
| 
 | |
| begin
 | |
|   EF:=ExportFormats;
 | |
|   For I:=0 to EF.Count-1 do
 | |
|     begin
 | |
|     If Not assigned(EF[i].OnConfigureDialog) then
 | |
|       begin
 | |
|       If DLG=Nil then
 | |
|         DLG:=TShowBaseConfigDialog.Create;
 | |
|       EF[i].OnConfigureDialog:=@DLG.ShowConfig;
 | |
|       end;
 | |
|     end;
 | |
| end;
 | |
| 
 | |
| { TBaseConfigExportForm }
 | |
| 
 | |
| procedure TBaseConfigExportForm.SetExporter(const AValue: TCustomDatasetExporter);
 | |
| begin
 | |
|   if (FExporter=AValue) then
 | |
|     exit;
 | |
|   FExporter:=AValue;
 | |
|   If Assigned(FExporter) then
 | |
|     ExporterToForm;
 | |
| end;
 | |
| 
 | |
| procedure TBaseConfigExportForm.OnOKClick(Sender: TObject);
 | |
| begin
 | |
|   ModalResult:=mrok;
 | |
|   if EFileName.Text <> '' then
 | |
|     FormToExporter
 | |
|   else
 | |
|     begin
 | |
|       MessageDlg('Information','Filename cannot be blank',mtInformation,[mbok],0);
 | |
|       EFileName.SetFocus;
 | |
|       ModalResult:=mrnone;
 | |
|     end;
 | |
| end;
 | |
| 
 | |
| procedure TBaseConfigExportForm.CLBFieldsItemClick(Sender: TObject;
 | |
|   Index: integer);
 | |
| begin
 | |
|   CLBFields.ItemIndex:=Index;
 | |
|   ShowSelectedField;
 | |
|   With CLBFields do
 | |
|     If (ItemIndex<>-1) then
 | |
|       begin
 | |
|       FFieldMap[ItemIndex].Enabled:=Checked[ItemIndex];
 | |
|       GFieldProps.PropertyEditorHook.RefreshPropertyValues;
 | |
|       end;
 | |
| end;
 | |
| 
 | |
| procedure TBaseConfigExportForm.CLBFieldsKeyUp(Sender: TObject; var Key: Word;
 | |
|   Shift: TShiftState);
 | |
| begin
 | |
|   if Shift=[ssShift] then
 | |
|     begin
 | |
|     If (Key=VK_UP)  then
 | |
|       MoveFieldUp
 | |
|     else if (Key=VK_DOWN) then
 | |
|       MoveFieldDown
 | |
|     end;
 | |
| end;
 | |
| 
 | |
| procedure TBaseConfigExportForm.CLBFieldsClick(Sender: TObject);
 | |
| begin
 | |
|   ShowSelectedField;
 | |
| end;
 | |
| 
 | |
| procedure TBaseConfigExportForm.ShowSelectedField;
 | |
| 
 | |
| begin
 | |
|   If (CLBFields.ItemIndex=-1) then
 | |
|     SelectField(Nil)
 | |
|   else
 | |
|     SelectField(FFieldMap[CLBFields.ItemIndex]);
 | |
| end;
 | |
| 
 | |
| procedure TBaseConfigExportForm.AUpExecute(Sender: TObject);
 | |
| begin
 | |
|   MoveFieldUp;
 | |
| end;
 | |
| 
 | |
| Function TBaseConfigExportForm.MoveFieldUp : Boolean;
 | |
| 
 | |
| begin
 | |
|   Result:=false;
 | |
|   With CLBFields do
 | |
|     If (ItemIndex>0) then
 | |
|       begin
 | |
|       Items.Exchange(ItemIndex,ItemIndex-1);
 | |
|       FFieldMap.Items[ItemIndex].Index:=ItemIndex-1;
 | |
|       ItemIndex:=ItemIndex-1;
 | |
|       end;
 | |
| end;
 | |
| 
 | |
| procedure TBaseConfigExportForm.ADownExecute(Sender: TObject);
 | |
| begin
 | |
|   MoveFieldDown;
 | |
| end;
 | |
| 
 | |
| procedure TBaseConfigExportForm.MoveFieldDown;
 | |
| 
 | |
| begin
 | |
|   With CLBFields do
 | |
|     If (ItemIndex<Items.Count-1) then
 | |
|       begin
 | |
|       Items.Exchange(ItemIndex,ItemIndex+1);
 | |
|       FFieldMap.Items[ItemIndex].Index:=ItemIndex+1;
 | |
|       ItemIndex:=ItemIndex+1;
 | |
|       end;
 | |
| end;
 | |
| 
 | |
| procedure TBaseConfigExportForm.ADownUpdate(Sender: TObject);
 | |
| begin
 | |
|   With CLBFields do
 | |
|     (Sender as Taction).Enabled:=(Itemindex<Items.Count-1);
 | |
| end;
 | |
| 
 | |
| procedure TBaseConfigExportForm.AUpUpdate(Sender: TObject);
 | |
| begin
 | |
|   (Sender as Taction).Enabled:=(CLBFields.Itemindex>0)
 | |
| end;
 | |
| 
 | |
| procedure TBaseConfigExportForm.FormCreate(Sender: TObject);
 | |
| begin
 | |
|   //
 | |
|   Caption:= sdb_Configuredataexport;
 | |
|   LEFileName.Caption:= sdb_Filename;
 | |
|   TSFields.Caption:= sdb_Fields;
 | |
|   TSFormatting.Caption:= sdb_Formatting;
 | |
|   LCLBFields.Caption:= sdb_Selectfieldstoexport;
 | |
|   Label2.Caption:= sdb_Propertiesforselectedfield;
 | |
|   SBup.Hint:= sdb_Moveselectedfieldup;
 | |
|   SBDown.Hint:= sdb_Moveselectedfielddown;
 | |
|   //
 | |
|   PButtons.OKButton.OnClick:=@OnOKClick;
 | |
| end;
 | |
| 
 | |
| procedure TBaseConfigExportForm.SelectField(F : TExportFieldItem);
 | |
| 
 | |
| begin
 | |
|   GFieldProps.TIObject:=F;
 | |
|   GFieldProps.Enabled:=(F<>Nil);
 | |
| end;
 | |
| 
 | |
| 
 | |
| procedure TBaseConfigExportForm.FormDestroy(Sender: TObject);
 | |
| begin
 | |
|   FreeAndNil(FFieldMap);
 | |
|   FreeAndNil(FFormatting);
 | |
| end;
 | |
| 
 | |
| procedure TBaseConfigExportForm.ExporterToForm;
 | |
| 
 | |
| Var
 | |
|   B : Boolean;
 | |
|   EF : TExportFieldItem;
 | |
|   I,J : Integer;
 | |
|   FS : TCustomExportFormatSettings;
 | |
|   
 | |
| begin
 | |
|   B:=Exporter is TCustomFileExporter;
 | |
|   B:=B or (FindPropInfo(Exporter,'FileName')<>Nil);
 | |
|   PFileName.Visible:=B;
 | |
|   If B then
 | |
|     begin
 | |
|     if Exporter is TCustomFileExporter then
 | |
|       EFileName.FileName:=TCustomFileExporter(Exporter).FileName
 | |
|     else
 | |
|       EFileName.FileName:=GetStrProp(Exporter,'FileName');
 | |
|     EFileName.Filter:=ExportFormats.ConstructFilter(Exporter);
 | |
|     end;
 | |
|   { The following construct means that only explicitly added
 | |
|     can be configured, or all fields. }
 | |
|   FreeAndNil(FFieldMap);
 | |
|   FFieldMap:=TExportFields.Create(Exporter.ExportFields.ItemClass);
 | |
|   If (Exporter.ExportFields.Count=0) then
 | |
|     Exporter.BuildDefaultFieldMap(FFieldMap)
 | |
|   else
 | |
|     For I:=0 to Exporter.ExportFields.Count-1 do
 | |
|       FFieldMap.Add.Assign(Exporter.ExportFields[i]);
 | |
|   For I:=0 to FFieldMap.Count-1 do
 | |
|     begin
 | |
|     EF:=FFieldMap[i];
 | |
|     J:=CLBFields.Items.AddObject(EF.FieldName,EF);
 | |
|     CLBFields.Checked[J]:=EF.Enabled;
 | |
|     end;
 | |
|   If (CLBFields.Items.Count>0) then
 | |
|     begin
 | |
|     CLBFields.ItemIndex:=0;
 | |
|     SelectField(FFieldMap[0])
 | |
|     end
 | |
|   else
 | |
|     begin
 | |
|     CLBFields.ItemIndex:=-1;
 | |
|     SelectField(Nil);
 | |
|     end;
 | |
|   B:=FindPropInfo(Exporter,'FormatSettings')<>Nil;
 | |
|   TSFormatting.TabVisible:=B;
 | |
|   If B then
 | |
|     begin
 | |
|     FS:=TCustomExportFormatSettings(GetObjectProp(Exporter,'FormatSettings'));
 | |
|     FFormatting:=TCustomExportFormatSettingsClass(FS.ClassType).Create(False);
 | |
|     FFormatting.Assign(FS);
 | |
|     GFormatting.TIObject:=FFormatting;
 | |
|     end
 | |
|   else
 | |
|     FreeAndNil(FFormatting);
 | |
| end;
 | |
| 
 | |
| procedure TBaseConfigExportForm.FormToExporter;
 | |
| 
 | |
| Var
 | |
|   I : Integer;
 | |
|   FS : TCustomExportFormatSettings;
 | |
| 
 | |
| begin
 | |
|   If PFileName.Visible then
 | |
|     if (Exporter is TCustomFileExporter) then
 | |
|       TCustomFileExporter(Exporter).FileName:=EFileName.FileName
 | |
|     else
 | |
|       SetStrProp(Exporter,'FileName',EFileName.FileName);
 | |
|   If (Exporter.ExportFields.Count=0) then
 | |
|     begin
 | |
|     For I:=0 to FFieldMap.Count-1 do
 | |
|       Exporter.ExportFields.Add.Assign(FFieldMap[i]);
 | |
|     end
 | |
|   else
 | |
|     For I:=0 to FFieldMap.Count-1 do
 | |
|       Exporter.ExportFields[I].Assign(FFieldMap[i]);
 | |
|   If Assigned(FFormatting) then
 | |
|     begin
 | |
|     FS:=TCustomExportFormatSettings(GetObjectProp(Exporter,'FormatSettings'));
 | |
|     FS.Assign(FFormatting);
 | |
|     end;
 | |
| end;
 | |
| 
 | |
| finalization
 | |
|   FreeAndNil(DLG);
 | |
| end.
 | |
| 
 | 
