summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlmindor <Almindor@3ad0048d-3df7-0310-abae-a5850022a9f2>2008-03-22 09:57:40 +0000
committerAlmindor <Almindor@3ad0048d-3df7-0310-abae-a5850022a9f2>2008-03-22 09:57:40 +0000
commit4a23941e9e96c7d52b5f7927ecdf1c08cfe5f27f (patch)
tree0f41a970c8d0849c352f92e9989a7208035fdade
parent1e434030cf9439a31759dd7993b19db00ab87ec4 (diff)
downloadfpc-4a23941e9e96c7d52b5f7927ecdf1c08cfe5f27f.tar.gz
* implement cleanroom TDataSet.DataEvent
git-svn-id: http://svn.freepascal.org/svn/fpc/branches/cleanroom@10531 3ad0048d-3df7-0310-abae-a5850022a9f2
-rw-r--r--packages/fcl-db/src/base/dataset.inc32
1 files changed, 31 insertions, 1 deletions
diff --git a/packages/fcl-db/src/base/dataset.inc b/packages/fcl-db/src/base/dataset.inc
index 190f1c2d15..cfde1906a6 100644
--- a/packages/fcl-db/src/base/dataset.inc
+++ b/packages/fcl-db/src/base/dataset.inc
@@ -221,8 +221,38 @@ end;
Procedure TDataset.DataEvent(Event: TDataEvent; Info: Ptrint);
+ procedure HandleFieldChange(aField: TField);
+ begin
+ if aField.FieldKind in [fkData, fkInternalCalc] then
+ SetModified(True);
+
+ if State <> dsSetKey then begin
+ if aField.FieldKind = fkData then begin
+ if FInternalCalcFields then
+ RefreshInternalCalcFields(ActiveBuffer)
+ else if FAutoCalcFields and (FCalcFieldsSize <> 0) then
+ CalculateFields(ActiveBuffer);
+ end;
+
+ aField.Change;
+ end;
+ end;
+
+ procedure HandleScrollOrChange;
+ begin
+ if State <> dsInsert then
+ UpdateCursorPos;
+
+ if not ControlsDisabled then
+ DataSource.ProcessEvent(Event, Info);
+ end;
+
begin
- // Tainted
+ case Event of
+ deFieldChange : HandleFieldChange(TField(Info));
+ deDataSetChange,
+ deDataSetScroll : HandleScrollOrChange;
+ end;
end;
Procedure TDataset.DestroyFields;