* Add templatename property

This commit is contained in:
Michaël Van Canneyt 2022-04-11 13:59:00 +02:00
parent b7396548f4
commit 50f19e89f7

View File

@ -20,7 +20,7 @@ unit bootstrapwidgets;
interface interface
uses uses
Classes, SysUtils, js, libjquery, libbootstrap, web, webwidget, htmlwidgets; Classes, SysUtils, js, libjquery, libbootstrap, web, webwidget, htmlwidgets, rtl.TemplateLoader;
Type Type
@ -197,18 +197,25 @@ Type
FShowOnRender: Boolean; FShowOnRender: Boolean;
FTemplate: String; FTemplate: String;
FShowing : Boolean; FShowing : Boolean;
FTemplateLoader: TCustomTemplateLoader;
FTemplateName: String;
function GetModalReferences: TModalReferences; function GetModalReferences: TModalReferences;
function HideClick(Event: TJSEvent): Boolean; function HideClick(Event: TJSEvent): Boolean;
procedure SetModalReferences(AValue: TModalReferences); procedure SetModalReferences(AValue: TModalReferences);
procedure SetTemplateLoader(AValue: TCustomTemplateLoader);
procedure SetTemplateName(AValue: String);
procedure SetTemplate(AValue: String); procedure SetTemplate(AValue: String);
protected protected
Function BootstrapHide(Event : TJSEvent) : Boolean; Function BootstrapHide(Event : TJSEvent) : Boolean;
Function DoRenderHTML(aParent, aElement: TJSHTMLElement): TJSHTMLElement; override; Function DoRenderHTML(aParent, aElement: TJSHTMLElement): TJSHTMLElement; override;
Function GetTemplateHTML: String; override; Function GetTemplateHTML: String; override;
Procedure RefreshReferences; override; Procedure RefreshReferences; override;
function GetTemplateManager: TCustomTemplateLoader; virtual;
procedure DoShow; virtual;
Function CreateReferences: TWebWidgetReferences; override; Function CreateReferences: TWebWidgetReferences; override;
Public Public
procedure GetValues(aList: TStrings); procedure GetValues(aList: TStrings);
// Show is async
Procedure Show; Procedure Show;
Procedure Hide; Procedure Hide;
Property Showing : Boolean Read FShowing; Property Showing : Boolean Read FShowing;
@ -218,6 +225,8 @@ Type
Property KeyBoard : Boolean Read FKeyBoard Write FKeyBoard; Property KeyBoard : Boolean Read FKeyBoard Write FKeyBoard;
Property Focus : Boolean Read FFocus Write FFocus; Property Focus : Boolean Read FFocus Write FFocus;
Property Template : String Read FTemplate Write SetTemplate; 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 OnHide : TOnModalHideEvent Read FOnHide Write FOnHide;
Property References : TModalReferences Read GetModalReferences Write SetModalReferences; Property References : TModalReferences Read GetModalReferences Write SetModalReferences;
end; end;
@ -230,6 +239,9 @@ Function Toasts : TToastManager;
Implementation Implementation
Resourcestring
SErrNoTemplateSet = '%s: No template set';
function Toasts: TToastManager; function Toasts: TToastManager;
begin begin
Result:=TToastManager.Instance; Result:=TToastManager.Instance;
@ -599,11 +611,17 @@ end;
{ TModalReferenceItem } { TModalReferenceItem }
procedure TModalReferenceItem.Assign(Source: TPersistent); procedure TModalReferenceItem.Assign(Source: TPersistent);
Var
MRI : TModalReferenceItem absolute Source;
begin begin
if Source is TModalReferenceItem then if Source is TModalReferenceItem then
Self.Kind:=TModalReferenceItem(Source).Kind begin
else Self.Kind:=MRI.Kind;
inherited Assign(Source); Self.InitialValue:=MRI.InitialValue;
end;
inherited Assign(Source);
end; end;
function TModalReferenceItem.GetValue: String; function TModalReferenceItem.GetValue: String;
@ -648,6 +666,7 @@ end;
function TBootstrapModal.HideClick (Event : TJSEvent): Boolean; function TBootstrapModal.HideClick (Event : TJSEvent): Boolean;
begin begin
Result:=False;
// Writeln('In hide click'); // Writeln('In hide click');
FHideEl:=TJSHtmlElement(Event.targetElement); FHideEl:=TJSHtmlElement(Event.targetElement);
Hide; Hide;
@ -663,6 +682,27 @@ begin
References.Assign(aValue); References.Assign(aValue);
end; 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); procedure TBootstrapModal.SetTemplate(AValue: String);
begin begin
if FTemplate=AValue then Exit; if FTemplate=AValue then Exit;
@ -774,7 +814,16 @@ begin
Result:=TModalReferences.Create(Self,TModalReferenceItem); Result:=TModalReferences.Create(Self,TModalReferenceItem);
end; end;
procedure TBootstrapModal.Show; function TBootstrapModal.GetTemplateManager: TCustomTemplateLoader;
begin
Result:=FTemplateLoader;
if Result=Nil then
Result:=GlobalTemplates;
end;
procedure TBootstrapModal.DoShow;
begin begin
FHideEl:=Nil; FHideEl:=Nil;
if not IsRendered then if not IsRendered then
@ -783,5 +832,22 @@ begin
FShowing:=True; FShowing:=True;
end; 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. end.