From 6a6ab2a3927efac9b2543b0610de5a751dbba2a8 Mon Sep 17 00:00:00 2001 From: joost Date: Sun, 13 Jun 2010 12:26:50 +0000 Subject: [PATCH] * Call TDatalink.LayoutChanged when controls are disabled and dataset closed/opened. Bug #16428 + test git-svn-id: trunk@15422 - --- packages/fcl-db/src/base/dataset.inc | 2 ++ packages/fcl-db/tests/testdbbasics.pas | 44 ++++++++++++++++++++++---- packages/fcl-db/tests/toolsunit.pas | 7 ++++ 3 files changed, 47 insertions(+), 6 deletions(-) diff --git a/packages/fcl-db/src/base/dataset.inc b/packages/fcl-db/src/base/dataset.inc index b14b13baa6..d5e70569da 100644 --- a/packages/fcl-db/src/base/dataset.inc +++ b/packages/fcl-db/src/base/dataset.inc @@ -254,6 +254,7 @@ begin deFieldChange : HandleFieldChange(TField(Info)); deDataSetChange, deDataSetScroll : HandleScrollOrChange; + deLayoutChange : FEnableControlsEvent:=deLayoutChange; end; if not ControlsDisabled then begin @@ -1062,6 +1063,7 @@ begin else begin DoBeforeOpen; + FEnableControlsEvent:=deLayoutChange; FInternalCalcFields:=False; try FDefaultFields:=FieldCount=0; diff --git a/packages/fcl-db/tests/testdbbasics.pas b/packages/fcl-db/tests/testdbbasics.pas index b7f4330fdc..c85adbe148 100644 --- a/packages/fcl-db/tests/testdbbasics.pas +++ b/packages/fcl-db/tests/testdbbasics.pas @@ -71,6 +71,7 @@ type procedure TestMove; // bug 5048 procedure TestActiveBufferWhenClosed; procedure TestEOFBOFClosedDataset; + procedure TestLayoutChangedEvents; procedure TestDataEventsResync; procedure TestBug7007; procedure TestBug6893; @@ -267,9 +268,9 @@ begin Next; if (i > ABufferCount) and not EOF then - AssertEquals('deCheckBrowseMode:0;deDataSetScroll:-1;DataSetScrolled:1;',DataEvents) + AssertEquals('deCheckBrowseMode:0;deDataSetScroll:-1;DataSetScrolled:1;DataSetChanged;',DataEvents) else - AssertEquals('deCheckBrowseMode:0;deDataSetScroll:0;DataSetScrolled:0;',DataEvents); + AssertEquals('deCheckBrowseMode:0;deDataSetScroll:0;DataSetScrolled:0;DataSetChanged;',DataEvents); DataEvents := ''; end; AssertEquals(count,i-1); @@ -335,6 +336,37 @@ begin end; end; +procedure TTestDBBasics.TestLayoutChangedEvents; +var aDatasource : TDataSource; + aDatalink : TDataLink; + ds : tdataset; + +begin + aDatasource := TDataSource.Create(nil); + aDatalink := TTestDataLink.Create; + try + aDatalink.DataSource := aDatasource; + ds := DBConnector.GetNDataset(6); + aDatasource.DataSet:=ds; + with ds do + begin + open; + + DataEvents := ''; + DisableControls; + Active:=False; + Active:=True; + EnableControls; + AssertEquals('deLayoutChange:0;DataSetChanged;',DataEvents); + + close; + end; + finally + aDatasource.Free; + aDatalink.Free; + end; +end; + procedure TTestDBBasics.TestDataEventsResync; var i,count : integer; aDatasource : TDataSource; @@ -354,10 +386,10 @@ begin open; DataEvents := ''; Resync([rmExact]); - AssertEquals('deDataSetChange:0;',DataEvents); + AssertEquals('deDataSetChange:0;DataSetChanged;',DataEvents); DataEvents := ''; next; - AssertEquals('deCheckBrowseMode:0;DataEvent;deDataSetScroll:0;DataSetScrolled:1;',DataEvents); + AssertEquals('deCheckBrowseMode:0;DataEvent;deDataSetScroll:0;DataSetScrolled:1;DataSetChanged;',DataEvents); close; end; finally @@ -2040,7 +2072,7 @@ begin DataEvents := ''; query1.append; - AssertEquals('deCheckBrowseMode:0;deUpdateState:0;deDataSetChange:0;',DataEvents); + AssertEquals('deCheckBrowseMode:0;deUpdateState:0;deDataSetChange:0;DataSetChanged;',DataEvents); AssertEquals(5, datalink1.ActiveRecord); AssertEquals(6, datalink1.RecordCount); AssertEquals(6, query1.RecordCount); @@ -2048,7 +2080,7 @@ begin DataEvents := ''; query1.cancel; - AssertEquals('deCheckBrowseMode:0;deUpdateState:0;deDataSetChange:0;',DataEvents); + AssertEquals('deCheckBrowseMode:0;deUpdateState:0;deDataSetChange:0;DataSetChanged;',DataEvents); AssertEquals(5, datalink1.ActiveRecord); AssertEquals(6, datalink1.RecordCount); AssertEquals(6, query1.RecordCount); diff --git a/packages/fcl-db/tests/toolsunit.pas b/packages/fcl-db/tests/toolsunit.pas index 5f2d9f7105..13eb6c0b74 100644 --- a/packages/fcl-db/tests/toolsunit.pas +++ b/packages/fcl-db/tests/toolsunit.pas @@ -75,6 +75,7 @@ type TTestDataLink = class(TDataLink) protected procedure DataSetScrolled(Distance: Integer); override; + procedure DataSetChanged; override; {$IFDEF fpc} procedure DataEvent(Event: TDataEvent; Info: Ptrint); override; {$ELSE} @@ -293,6 +294,12 @@ begin inherited DataSetScrolled(Distance); end; +procedure TTestDataLink.DataSetChanged; +begin + DataEvents := DataEvents + 'DataSetChanged;'; + inherited DataSetChanged; +end; + procedure TTestDataLink.DataEvent(Event: TDataEvent; Info: Ptrint); {$ELSE} procedure TTestDataLink.DataEvent(Event: TDataEvent; Info: Longint);