From: Marcel B. <jed...@us...> - 2003-09-21 17:38:17
|
Update of /cvsroot/jvcl/dev/JVCL3/run In directory sc8-pr-cvs1:/tmp/cvs-serv9208/dev/JVCL3/run Modified Files: JvDataProvider.pas JvDataProviderImpl.pas Log Message: * Changed named constructors to class functions to improve BCB support * Added IndexOf to IJvDataContexts * Fixed bug of not calling ContextDestroyed when a context was removed * Added ContextAdded to TJvCustomDataProvider * minor fixes Index: JvDataProvider.pas =================================================================== RCS file: /cvsroot/jvcl/dev/JVCL3/run/JvDataProvider.pas,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** JvDataProvider.pas 16 Sep 2003 20:25:46 -0000 1.10 --- JvDataProvider.pas 21 Sep 2003 17:38:10 -0000 1.11 *************** *** 75,78 **** --- 75,80 ---- function AllowProviderDesigner: Boolean; function AllowContextManager: Boolean; + function GetNotifierCount: Integer; + function GetNotifier(Index: Integer): IJvDataProviderNotify; end; *************** *** 81,84 **** --- 83,87 ---- procedure DataProviderChanging(const ADataProvider: IJvDataProvider; AReason: TDataProviderChangeReason; Source: IUnknown); procedure DataProviderChanged(const ADataProvider: IJvDataProvider; AReason: TDataProviderChangeReason; Source: IUnknown); + function Consumer: IJvDataConsumer; end; *************** *** 368,371 **** --- 371,377 ---- the context (e.g.: 'Context1\Context1.1\Context1.1.3' or '..\Context1.2') } function GetContextByName(Name: string): IJvDataContext; + { Retrieve the index of the specified context. If the context does not belong to this list the + function will return -1. } + function IndexOf(Ctx: IJvDataContext): Integer; end; Index: JvDataProviderImpl.pas =================================================================== RCS file: /cvsroot/jvcl/dev/JVCL3/run/JvDataProviderImpl.pas,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** JvDataProviderImpl.pas 18 Sep 2003 20:47:16 -0000 1.19 --- JvDataProviderImpl.pas 21 Sep 2003 17:38:10 -0000 1.20 *************** *** 142,145 **** --- 142,146 ---- procedure DataProviderChanged(const ADataProvider: IJvDataProvider; AReason: TDataProviderChangeReason; Source: IUnknown); + function Consumer: IJvDataConsumer; public destructor Destroy; override; *************** *** 294,299 **** public constructor Create; virtual; ! constructor CreateProvider(const Provider: IJvDataProvider); virtual; ! constructor CreateParent(const Parent: IJvDataItem); virtual; procedure BeforeDestruction; override; end; --- 295,300 ---- public constructor Create; virtual; ! class function CreateProvider(const Provider: IJvDataProvider): TJvBaseDataItems; virtual; ! class function CreateParent(const Parent: IJvDataItem): TJvBaseDataItems; virtual; procedure BeforeDestruction; override; end; *************** *** 500,504 **** function QueryInterface(const IID: TGUID; out Obj): HResult; override; procedure Changing(ChangeReason: TDataProviderChangeReason; Source: IUnknown = nil); ! procedure Changed(ChangeReason: TDataProviderChangeReason; Source: IUnknown = nil); class function PersistentDataItems: Boolean; virtual; class function ItemsClass: TJvDataItemsClass; virtual; --- 501,505 ---- function QueryInterface(const IID: TGUID; out Obj): HResult; override; procedure Changing(ChangeReason: TDataProviderChangeReason; Source: IUnknown = nil); ! procedure Changed(ChangeReason: TDataProviderChangeReason; Source: IUnknown = nil); class function PersistentDataItems: Boolean; virtual; class function ItemsClass: TJvDataItemsClass; virtual; *************** *** 533,540 **** --- 534,544 ---- function SelectedContext: IJvDataContext; procedure ReleaseContext; + procedure ContextAdded(Context: IJvDataContext); dynamic; procedure ContextDestroying(Context: IJvDataContext); dynamic; procedure ConsumerDestroying(Consumer: IJvDataConsumer); dynamic; function AllowProviderDesigner: Boolean; dynamic; function AllowContextManager: Boolean; dynamic; + function GetNotifierCount: Integer; + function GetNotifier(Index: Integer): IJvDataProviderNotify; property DataItemsImpl: TJvBaseDataItems read GetDataItemsImpl; *************** *** 565,573 **** function GetContext(Index: Integer): IJvDataContext; virtual; abstract; function GetContextByName(Name: string): IJvDataContext; virtual; property DsgnContext: IJvDataContext read FDsgnContext write FDsgnContext; public constructor Create(AProvider: IJvDataProvider; AAncestor: IJvDataContext); virtual; ! constructor CreateManaged(AProvider: IJvDataProvider; AAncestor: IJvDataContext; ! ManagerClass: TJvDataContextsManagerClass); end; --- 569,578 ---- function GetContext(Index: Integer): IJvDataContext; virtual; abstract; function GetContextByName(Name: string): IJvDataContext; virtual; + function IndexOf(Ctx: IJvDataContext): Integer; virtual; property DsgnContext: IJvDataContext read FDsgnContext write FDsgnContext; public constructor Create(AProvider: IJvDataProvider; AAncestor: IJvDataContext); virtual; ! class function CreateManaged(AProvider: IJvDataProvider; AAncestor: IJvDataContext; ! ManagerClass: TJvDataContextsManagerClass): TJvBaseDataContexts; virtual; end; *************** *** 786,789 **** --- 791,795 ---- procedure DataProviderChanging(const ADataProvider: IJvDataProvider; AReason: TDataProviderChangeReason; Source: IUnknown); procedure DataProviderChanged(const ADataProvider: IJvDataProvider; AReason: TDataProviderChangeReason; Source: IUnknown); + function Consumer: IJvDataConsumer; { IJvDataConsumer methods } function VCLComponent: TComponent; *************** *** 2004,2007 **** --- 2010,2018 ---- end; + function TJvProviderNotification.Consumer: IJvDataConsumer; + begin + Result := nil; + end; + destructor TJvProviderNotification.Destroy; begin *************** *** 2252,2270 **** end; ! constructor TJvBaseDataItems.CreateProvider(const Provider: IJvDataProvider); begin ! Create; ! FProvider := Provider; end; ! constructor TJvBaseDataItems.CreateParent(const Parent: IJvDataItem); begin ! CreateProvider(Parent.GetItems.Provider); ! FParent := Pointer(Parent); if (Parent <> nil) and Parent.GetItems.IsDynamic then ! FParentIntf := Parent; if (Parent <> nil) and (Parent.GetImplementer is TExtensibleInterfacedPersistent) then ! FSubAggregate := TJvBaseDataItemSubItems.Create( ! TExtensibleInterfacedPersistent(Parent.GetImplementer), Self); end; --- 2263,2281 ---- end; ! class function TJvBaseDataItems.CreateProvider(const Provider: IJvDataProvider): TJvBaseDataItems; begin ! Result := TJvDataItemsClass(Self).Create; ! Result.FProvider := Provider; end; ! class function TJvBaseDataItems.CreateParent(const Parent: IJvDataItem): TJvBaseDataItems; begin ! Result := CreateProvider(Parent.GetItems.Provider); ! Result.FParent := Pointer(Parent); if (Parent <> nil) and Parent.GetItems.IsDynamic then ! Result.FParentIntf := Parent; if (Parent <> nil) and (Parent.GetImplementer is TExtensibleInterfacedPersistent) then ! Result.FSubAggregate := TJvBaseDataItemSubItems.Create( ! TExtensibleInterfacedPersistent(Parent.GetImplementer), Result); end; *************** *** 2828,2831 **** --- 2839,2844 ---- for I := FNotifiers.Count - 1 downto 0 do (FNotifiers[I] as IJvDataProviderNotify).DataProviderChanging(Self, ChangeReason, Source); + if ChangeReason = pcrContextDelete then + ContextDestroying(IJvDataContext(Source)); end; *************** *** 2836,2839 **** --- 2849,2854 ---- for I := FNotifiers.Count - 1 downto 0 do (FNotifiers[I] as IJvDataProviderNotify).DataProviderChanged(Self, ChangeReason, Source); + if ChangeReason = pcrContextAdd then + ContextAdded(IJvDataContext(Source)); end; *************** *** 3089,3092 **** --- 3104,3111 ---- end; + procedure TJvCustomDataProvider.ContextAdded(Context: IJvDataContext); + begin + end; + procedure TJvCustomDataProvider.ContextDestroying(Context: IJvDataContext); begin *************** *** 3111,3114 **** --- 3130,3143 ---- end; + function TJvCustomDataProvider.GetNotifierCount: Integer; + begin + Result := FNotifiers.Count; + end; + + function TJvCustomDataProvider.GetNotifier(Index: Integer): IJvDataProviderNotify; + begin + Result := IJvDataProviderNotify(FNotifiers[Index]); + end; + constructor TJvCustomDataProvider.Create(AOwner: TComponent); begin *************** *** 3197,3200 **** --- 3226,3236 ---- end; + function TJvBaseDataContexts.IndexOf(Ctx: IJvDataContext): Integer; + begin + Result := GetCount - 1; + while (Result >= 0) and (Ctx <> GetContext(Result)) do + Dec(Result); + end; + constructor TJvBaseDataContexts.Create(AProvider: IJvDataProvider; AAncestor: IJvDataContext); begin *************** *** 3204,3213 **** end; ! constructor TJvBaseDataContexts.CreateManaged(AProvider: IJvDataProvider; AAncestor: IJvDataContext; ! ManagerClass: TJvDataContextsManagerClass); begin ! Create(AProvider, AAncestor); if ManagerClass <> nil then ! ManagerClass.Create(Self); end; --- 3240,3249 ---- end; ! class function TJvBaseDataContexts.CreateManaged(AProvider: IJvDataProvider; ! AAncestor: IJvDataContext; ManagerClass: TJvDataContextsManagerClass): TJvBaseDataContexts; begin ! Result := TJvDataContextsClass(Self).Create(AProvider, AAncestor); if ManagerClass <> nil then ! ManagerClass.Create(Result); end; *************** *** 3743,3746 **** --- 3779,3787 ---- DoProviderChanged(ADataProvider, AReason, Source); Changed(ccrProviderChanged); + end; + + function TJvDataConsumer.Consumer: IJvDataConsumer; + begin + Result := Self; end; |