diff --git a/components/tvplanit/source/vpflxds.pas b/components/tvplanit/source/vpflxds.pas index 1c62afd7c..f35c2a7a4 100644 --- a/components/tvplanit/source/vpflxds.pas +++ b/components/tvplanit/source/vpflxds.pas @@ -58,8 +58,9 @@ type TVpFieldMapping = class(TCollectionItem) public VPField: string; - DBField: string; - end; + DBField: string; + procedure Assign(Source: TPersistent); override; + end; { The TVpDataSources class is simply for clustering the FlexDataStore's } { DataSources together in the Object Inspector } @@ -203,6 +204,18 @@ implementation uses {$IFDEF VERSION6} Variants, {$ELSE} FileCtrl, {$ENDIF} VpConst; +{*****************************************************************************} +{ TVpFieldMapping } + +procedure TVpFieldMapping.Assign(Source: TPersistent); +begin + if Source is TVpFieldMapping then begin + VPField := TVpFieldMapping(Source).VPField; + DBField := TVpFieldMapping(Source).DBField; + end else + inherited Assign(Source); +end; + (*****************************************************************************) { TVpFlexDataStore } diff --git a/components/tvplanit/source/vpflxdsed1.lfm b/components/tvplanit/source/vpflxdsed1.lfm index 5e9cb22e2..9139571f8 100644 --- a/components/tvplanit/source/vpflxdsed1.lfm +++ b/components/tvplanit/source/vpflxdsed1.lfm @@ -22,15 +22,24 @@ object frmFieldMapper: TfrmFieldMapper ClientHeight = 45 ClientWidth = 409 TabOrder = 1 - object BtnClose: TButton - Left = 325 + object BtnOK: TButton + Left = 240 Height = 25 Top = 8 Width = 75 - Caption = 'Close' - OnClick = BtnCloseClick + Caption = 'OK' + ModalResult = 1 TabOrder = 0 end + object BtnCancel: TButton + Left = 320 + Height = 25 + Top = 8 + Width = 75 + Caption = 'Cancel' + ModalResult = 2 + TabOrder = 1 + end end object PageControl1: TPageControl Left = 0 diff --git a/components/tvplanit/source/vpflxdsed1.pas b/components/tvplanit/source/vpflxdsed1.pas index aa7ad7254..064598857 100644 --- a/components/tvplanit/source/vpflxdsed1.pas +++ b/components/tvplanit/source/vpflxdsed1.pas @@ -52,8 +52,9 @@ type { TfrmFieldMapper } TfrmFieldMapper = class(TForm) + BtnCancel: TButton; Panel1: TPanel; - BtnClose: TButton; + BtnOK: TButton; PageControl1: TPageControl; TabSheet1: TTabSheet; Bevel1: TBevel; @@ -75,7 +76,6 @@ type procedure VpFieldSelected(Sender: TObject); procedure VPFieldLBKeyPress(Sender: TObject; var Key: Char); procedure btnAddMappingClick(Sender: TObject); - procedure BtnCloseClick(Sender: TObject); procedure Button5Click(Sender: TObject); procedure btnDeleteMappingClick(Sender: TObject); procedure btnClearMappingsClick(Sender: TObject); @@ -168,25 +168,52 @@ procedure MapDatabaseFields(Designer: IFormDesigner; {$ENDIF}{$ENDIF} var frmFieldMapper: TfrmFieldMapper; + savedResourceMappings: TCollection; + savedContactMappings: TCollection; + savedEventMappings: TCollection; + savedTaskMappings: TCollection; begin if FlexDS = nil then Exit; - Application.CreateForm(TfrmFieldMapper, frmFieldMapper); + + savedResourceMappings := TCollection.Create(TVpFieldMapping); + savedContactMappings := TCollection.Create(TVpFieldMapping); + savedEventMappings := TCollection.Create(TVpFieldMapping); + savedTaskMappings := TCollection.Create(TVpFieldMapping); try - frmFieldMapper.FlexDS := FlexDS; - if FlexDS.ResourceDataSource <> nil then - frmFieldMapper.ResDS := FlexDS.ResourceDataSource.DataSet; - if FlexDS.EventsDataSource <> nil then - frmFieldMapper.EventsDS := FlexDS.EventsDataSource.DataSet; - if FlexDS.ContactsDataSource <> nil then - frmFieldMapper.ContactsDS := FlexDS.ContactsDataSource.DataSet; - if FlexDS.TasksDataSource <> nil then - frmFieldMapper.TasksDS := FlexDS.TasksDataSource.DataSet; - frmFieldMapper.ShowModal; + savedResourceMappings.Assign(FlexDS.ResourceMappings); + savedContactMappings.Assign(FlexDS.ContactMappings); + savedEventMappings.Assign(FlexDS.EventMappings); + savedTaskMappings.Assign(FlexDS.TaskMappings); + + Application.CreateForm(TfrmFieldMapper, frmFieldMapper); + try + frmFieldMapper.FlexDS := FlexDS; + if FlexDS.ResourceDataSource <> nil then + frmFieldMapper.ResDS := FlexDS.ResourceDataSource.DataSet; + if FlexDS.EventsDataSource <> nil then + frmFieldMapper.EventsDS := FlexDS.EventsDataSource.DataSet; + if FlexDS.ContactsDataSource <> nil then + frmFieldMapper.ContactsDS := FlexDS.ContactsDataSource.DataSet; + if FlexDS.TasksDataSource <> nil then + frmFieldMapper.TasksDS := FlexDS.TasksDataSource.DataSet; + if frmFieldMapper.ShowModal <> mrOK then begin + FlexDS.ResourceMappings.Assign(savedResourceMappings); + FlexDS.ContactMappings.Assign(savedContactMappings); + FlexDS.EventMappings.Assign(savedEventMappings); + FlexDS.TaskMappings.Assign(savedTaskMappings); + end; + finally + frmFieldMapper.Release; + end; + Designer.Modified; + finally - frmFieldMapper.Release; + savedResourceMappings.Free; + savedContactMappings.Free; + savedEventMappings.Free; + savedTaskMappings.Free; end; - Designer.Modified; end; {=====} @@ -305,7 +332,8 @@ begin Application.MessageBox(PChar('There was an error opening the following ' + 'datasets'#13#10#10 + ErrorStr + #10 + 'Field mapping for these tables will not be available until the ' - + 'errors are corrected.'), 'Error Opening Dataset(s)', 0); + + 'errors are corrected. Any previously assigned mappings will be kept.'), + 'Error Opening Dataset(s)', 0); end; {=====} @@ -329,7 +357,8 @@ begin lblFieldMappings.Left := FieldMappingsLB.Left; btnDeleteMapping.Left := ClientWidth - DatasetFieldLB.Left - btnDeleteMapping.Width; btnClearMappings.Left := btnDeleteMapping.Left; - btnClose.Left := w - DatasetFieldLB.Width - btnClose.Width; + BtnCancel.Left := w - DatasetFieldLB.Width - BtnCancel.Width; + BtnOK.Left := BtnCancel.Left - DELTA - BtnOK.Width; end; lblVPFieldsAvail.Left := RightOf(VPFieldLB) - GetLabelWidth(lblVPFieldsAvail); end; @@ -557,12 +586,6 @@ begin end; {=====} -procedure TfrmFieldMapper.BtnCloseClick(Sender: TObject); -begin - Close; -end; -{=====} - procedure TfrmFieldMapper.Button5Click(Sender: TObject); begin // Help;