diff --git a/packages/fcl-web/src/fphtml.pp b/packages/fcl-web/src/fphtml.pp index 52b7d2d5b4..b9399a23cb 100644 --- a/packages/fcl-web/src/fphtml.pp +++ b/packages/fcl-web/src/fphtml.pp @@ -57,25 +57,69 @@ type THTMLCustomEntityProducer = class (THTMLContentProducer) private - FOnWritePage: TWriterEvent; + FOnWriteEntity: TWriterEvent; FEntity: THtmlEntities; protected - function WriteContent (aWriter : THTMLWriter) : THTMLCustomElement; override; - procedure DoWritePage (aWriter : THTMLWriter); virtual; + procedure DoWriteEntity (aWriter : THTMLWriter); virtual; + Property OnWriteEntity : TWriterEvent read FOnWriteEntity write FOnWriteEntity; + Property Entity : THtmlEntities read FEntity write FEntity default heHtml; public constructor Create(AOwner: TComponent); override; - Property OnWritePage : TWriterEvent read FOnWritePage write FOnWritePage; - Property Entity : THtmlEntities read FEntity write FEntity default heHtml; + function WriteContent (aWriter : THTMLWriter) : THTMLCustomElement; override; end; - { THTMLCustomPagContentProducer } + { THTMLEntityContentProducer } THTMLEntityProducer = class (THTMLCustomEntityProducer) published - Property OnWritePage; + Property OnWriteEntity; Property Entity; end; + { THTMLCustomPageProducer } + + THTMLCustomPageProducer = class (THTMLCustomEntityProducer) + private + FHeaderProducer : THTMLContentProducer; + FOnWriteHeader: TWriterEvent; + FOnWriteVisualBody: TWriterEvent; + FOnWriteVisualFooter: TWriterEvent; + FOnWriteVisualHeader: TWriterEvent; + FVisualHeaderProducer : THTMLContentProducer; + FVisualBodyProducer : THTMLContentProducer; + FVisualFooterProducer : THTMLContentProducer; + protected + procedure DoWriteEntity (aWriter : THTMLWriter); override; + procedure DoWriteHeader (aWriter : THTMLWriter); virtual; + procedure DoWriteVisualHeader (aWriter : THTMLWriter); virtual; + procedure DoWriteVisualBody (aWriter : THTMLWriter); virtual; + procedure DoWriteVisualFooter (aWriter : THTMLWriter); virtual; + Property HeaderProducer : THTMLContentProducer read FHeaderProducer write FHeaderProducer; + Property VisualHeaderProducer : THTMLContentProducer read FVisualHeaderProducer write FVisualHeaderProducer; + Property VisualBodyProducer : THTMLContentProducer read FVisualBodyProducer write FVisualBodyProducer; + Property VisualFooterProducer : THTMLContentProducer read FVisualFooterProducer write FVisualFooterProducer; + Property OnWriteHeader : TWriterEvent read FOnWriteHeader write FOnWriteHeader; + Property OnWriteVisualHeader : TWriterEvent read FOnWriteVisualHeader write FOnWriteVisualHeader; + Property OnWriteVisualBody : TWriterEvent read FOnWriteVisualBody write FOnWriteVisualBody; + Property OnWriteVisualFooter : TWriterEvent read FOnWriteVisualFooter write FOnWriteVisualFooter; + public + constructor Create(AOwner: TComponent); override; + end; + + { THTMLPageProducer } + + THTMLPageProducer = class (THTMLCustomPageProducer) + published + property OnWriteHeader; + property OnWriteVisualHeader; + property OnWriteVisualBody; + property OnWriteVisualFooter; + Property HeaderProducer; + Property VisualHeaderProducer; + Property VisualBodyProducer; + Property VisualFooterProducer; + end; + { THTMLCustomDatasetContentProducer } THTMLCustomDatasetContentProducer = class (THTMLContentProducer) @@ -88,11 +132,11 @@ type procedure WriteFooter (aWriter : THTMLWriter); procedure WriteRecord (aWriter : THTMLWriter); protected - function WriteContent (aWriter : THTMLWriter) : THTMLCustomElement; override; procedure DoWriteHeader (aWriter : THTMLWriter; var el : THTMLCustomElement); virtual; procedure DoWriteFooter (aWriter : THTMLWriter); virtual; procedure DoWriteRecord (aWriter : THTMLWriter); virtual; public + function WriteContent (aWriter : THTMLWriter) : THTMLCustomElement; override; Property OnWriteHeader : TWriterElementEvent read FOnWriteHeader write FOnWriteHeader; Property OnWriteFooter : TWriterEvent read FOnWriteFooter write FOnWriteFooter; Property OnWriteRecord : TWriterEvent read FOnWriteRecord write FOnWriteRecord; @@ -119,11 +163,10 @@ type FSize: integer; FUseValues: boolean; procedure SetItems(const AValue: TStrings); - protected - function WriteContent (aWriter : THTMLWriter) : THTMLCustomElement; override; public constructor create (aOwner : TComponent); override; destructor destroy; override; + function WriteContent (aWriter : THTMLWriter) : THTMLCustomElement; override; published property Items : TStrings read FItems write SetItems; property UseValues : boolean read FUseValues write FUseValues default false; @@ -318,7 +361,7 @@ begin next; end; finally - if opened then + if not opened then close; end; finally @@ -401,8 +444,11 @@ begin with aWriter.Option(FItem.asstring) do begin if FUseValues then - sel := (FValue.AsString = FPreSelected) - else + begin + if assigned(FValue) then + sel := (FValue.AsString = FPreSelected) + end + else if assigned(FItem) then sel := (FItem.AsString = FPreSelected); if assigned (FIsPreSelected) then FIsPreSelected (self, sel); @@ -514,14 +560,14 @@ function THTMLCustomEntityProducer.WriteContent(aWriter: THTMLWriter ): THTMLCustomElement; begin result := aWriter.StartElement(THtmlEntitiesClasses[FEntity]); - DoWritePage(aWriter); + DoWriteEntity(aWriter); aWriter.EndElement(THtmlEntitiesClasses[FEntity]); end; -procedure THTMLCustomEntityProducer.DoWritePage(aWriter: THTMLWriter); +procedure THTMLCustomEntityProducer.DoWriteEntity(aWriter: THTMLWriter); begin - if assigned (FOnWritePage) then - FOnWritePage (self, aWriter); + if assigned (FOnWriteEntity) then + FOnWriteEntity (self, aWriter); end; constructor THTMLCustomEntityProducer.Create(AOwner: TComponent); @@ -530,5 +576,56 @@ begin FEntity := heHtml; end; +{ THTMLCustomPageProducer } + +procedure THTMLCustomPageProducer.DoWriteEntity(aWriter: THTMLWriter); +begin + inherited DoWriteEntity(aWriter); + DoWriteHeader(aWriter); + aWriter.Startbody; + DoWriteVisualHeader(aWriter); + DoWriteVisualBody(aWriter); + DoWriteVisualFooter(aWriter); + awriter.Endbody; +end; + +procedure THTMLCustomPageProducer.DoWriteHeader(aWriter: THTMLWriter); +begin + if assigned(FOnWriteHeader) then + FOnWriteHeader(self,aWriter); + if assigned(FHeaderProducer) then + aWriter.AddElement(FHeaderProducer.WriteContent(aWriter)); +end; + +procedure THTMLCustomPageProducer.DoWriteVisualHeader(aWriter: THTMLWriter); +begin + if assigned(FOnWriteVisualHeader) then + FOnWriteVisualHeader(self,aWriter); + if assigned(FVisualHeaderProducer) then + aWriter.AddElement(FVisualHeaderProducer.WriteContent(aWriter)); +end; + +procedure THTMLCustomPageProducer.DoWriteVisualBody(aWriter: THTMLWriter); +begin + if assigned(FOnWriteVisualBody) then + FOnWriteVisualBody(self,aWriter); + if assigned(FVisualBodyProducer) then + aWriter.AddElement(FVisualBodyProducer.WriteContent(aWriter)); +end; + +procedure THTMLCustomPageProducer.DoWriteVisualFooter(aWriter: THTMLWriter); +begin + if assigned(FOnWriteVisualFooter) then + FOnWriteVisualFooter(self,aWriter); + if assigned(FVisualFooterProducer) then + aWriter.AddElement(FVisualFooterProducer.WriteContent(aWriter)); +end; + +constructor THTMLCustomPageProducer.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + Entity := heHtml; +end; + end.