From 50f19e89f7bdaaa464e65743c72984919fe33ce5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Van=20Canneyt?= Date: Mon, 11 Apr 2022 13:59:00 +0200 Subject: [PATCH] * Add templatename property --- packages/bootstrap/bootstrapwidgets.pp | 76 ++++++++++++++++++++++++-- 1 file changed, 71 insertions(+), 5 deletions(-) diff --git a/packages/bootstrap/bootstrapwidgets.pp b/packages/bootstrap/bootstrapwidgets.pp index f455814..3af7409 100644 --- a/packages/bootstrap/bootstrapwidgets.pp +++ b/packages/bootstrap/bootstrapwidgets.pp @@ -20,7 +20,7 @@ unit bootstrapwidgets; interface uses - Classes, SysUtils, js, libjquery, libbootstrap, web, webwidget, htmlwidgets; + Classes, SysUtils, js, libjquery, libbootstrap, web, webwidget, htmlwidgets, rtl.TemplateLoader; Type @@ -197,18 +197,25 @@ Type FShowOnRender: Boolean; FTemplate: String; FShowing : Boolean; + FTemplateLoader: TCustomTemplateLoader; + FTemplateName: String; function GetModalReferences: TModalReferences; function HideClick(Event: TJSEvent): Boolean; procedure SetModalReferences(AValue: TModalReferences); + procedure SetTemplateLoader(AValue: TCustomTemplateLoader); + procedure SetTemplateName(AValue: String); procedure SetTemplate(AValue: String); protected Function BootstrapHide(Event : TJSEvent) : Boolean; Function DoRenderHTML(aParent, aElement: TJSHTMLElement): TJSHTMLElement; override; Function GetTemplateHTML: String; override; Procedure RefreshReferences; override; + function GetTemplateManager: TCustomTemplateLoader; virtual; + procedure DoShow; virtual; Function CreateReferences: TWebWidgetReferences; override; Public procedure GetValues(aList: TStrings); + // Show is async Procedure Show; Procedure Hide; Property Showing : Boolean Read FShowing; @@ -218,6 +225,8 @@ Type Property KeyBoard : Boolean Read FKeyBoard Write FKeyBoard; Property Focus : Boolean Read FFocus Write FFocus; Property Template : String Read FTemplate Write SetTemplate; + Property TemplateName : String Read FTemplateName Write SetTemplateName; + Property TemplateLoader : TCustomTemplateLoader Read FTemplateLoader Write SetTemplateLoader; Property OnHide : TOnModalHideEvent Read FOnHide Write FOnHide; Property References : TModalReferences Read GetModalReferences Write SetModalReferences; end; @@ -230,6 +239,9 @@ Function Toasts : TToastManager; Implementation +Resourcestring + SErrNoTemplateSet = '%s: No template set'; + function Toasts: TToastManager; begin Result:=TToastManager.Instance; @@ -599,11 +611,17 @@ end; { TModalReferenceItem } procedure TModalReferenceItem.Assign(Source: TPersistent); + +Var + MRI : TModalReferenceItem absolute Source; + begin if Source is TModalReferenceItem then - Self.Kind:=TModalReferenceItem(Source).Kind - else - inherited Assign(Source); + begin + Self.Kind:=MRI.Kind; + Self.InitialValue:=MRI.InitialValue; + end; + inherited Assign(Source); end; function TModalReferenceItem.GetValue: String; @@ -648,6 +666,7 @@ end; function TBootstrapModal.HideClick (Event : TJSEvent): Boolean; begin + Result:=False; // Writeln('In hide click'); FHideEl:=TJSHtmlElement(Event.targetElement); Hide; @@ -663,6 +682,27 @@ begin References.Assign(aValue); end; +procedure TBootstrapModal.SetTemplateLoader(AValue: TCustomTemplateLoader); +begin + if FTemplateLoader=AValue then Exit; + if Assigned(FTemplateLoader) then + FTemplateLoader.RemoveFreeNotification(self); + FTemplateLoader:=AValue; + if Assigned(FTemplateLoader) then + FTemplateLoader.FreeNotification(self); +end; + +procedure TBootstrapModal.SetTemplateName(AValue: String); +begin + if FTemplateName=AValue then Exit; + if Showing Then + Raise EWidgets.Create('Cannot set template name while showing bootstrap modal'); + FTemplateName:=AValue; + Template:=''; + If IsRendered then + UnRender; +end; + procedure TBootstrapModal.SetTemplate(AValue: String); begin if FTemplate=AValue then Exit; @@ -774,7 +814,16 @@ begin Result:=TModalReferences.Create(Self,TModalReferenceItem); end; -procedure TBootstrapModal.Show; +function TBootstrapModal.GetTemplateManager: TCustomTemplateLoader; + +begin + Result:=FTemplateLoader; + if Result=Nil then + Result:=GlobalTemplates; +end; + +procedure TBootstrapModal.DoShow; + begin FHideEl:=Nil; if not IsRendered then @@ -783,5 +832,22 @@ begin FShowing:=True; end; +procedure TBootstrapModal.Show; + + procedure DoShowTemplate(Sender: TObject; const aTemplate: String); + begin + Template:=GetTemplateManager.Templates[aTemplate]; + DoShow; + end; + +begin + if (Template<>'') Then + DoShow + else if TemplateName<>'' then + GetTemplateManager.IfTemplate(TemplateName,@DoShowTemplate) + else + Raise EWidgets.CreateFmt(SErrNoTemplateSet,[Name]); +end; + end.