demobootstrap.pp 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323
  1. unit demobootstrap;
  2. {$mode objfpc}
  3. interface
  4. uses
  5. sysutils, classes, web, js, webwidget, htmlwidgets, bootstrapwidgets, widgetdemo;
  6. Type
  7. { TSimpleToastWidgetDemo }
  8. TSimpleToastWidgetDemo = class(TDemoContainer)
  9. public
  10. class function WebWidgetClass: TCustomWebWidgetClass; override;
  11. Procedure ShowDemo; override;
  12. end;
  13. { TToastManagerDemo }
  14. TToastManagerDemo = class(TDemoContainer)
  15. private
  16. procedure DoShowToast(Sender: TObject; Event: TJSEvent);
  17. Protected
  18. FLabelClosable:TLabelWidget;
  19. FLabelHeader:TLabelWidget;
  20. FLabelBody:TLabelWidget;
  21. FLabelContextual:TLabelWidget;
  22. FHeader : TTextInputWidget;
  23. FBody : TTextAreaWidget;
  24. FContextual : TSelectWidget;
  25. FClosable : TCheckboxInputWidget;
  26. FShowButton: TBootstrapButton;
  27. public
  28. Class Function Demohelp : String; override;
  29. Class Function Description : String; override;
  30. class function WebWidgetClass: TCustomWebWidgetClass; override;
  31. Function GetInspectorInstance: TObject; override;
  32. Procedure ShowDemo; override;
  33. end;
  34. { TBootstrapButtonDemo }
  35. TBootstrapButtonDemo = class(TDemoContainer)
  36. Private
  37. public
  38. class function WebWidgetClass: TCustomWebWidgetClass; override;
  39. Procedure ShowDemo; override;
  40. end;
  41. { TBootstrapModalDemo }
  42. TBootstrapModalDemo = class(TDemoContainer)
  43. Private
  44. FShow : TBootstrapButton;
  45. FHide : TBootstrapButton;
  46. FMemo : TTextAreaWidget;
  47. procedure DoHideDialog(Sender: TObject; Event: TJSEvent);
  48. procedure DoModalHide(Sender: TObject; El: TJSHTMLElement; Values: TStrings);
  49. procedure DoShowDialog(Sender: TObject; Event: TJSEvent);
  50. Function Modal : TBootstrapModal;
  51. public
  52. Class Function Demohelp : String; override;
  53. Class Function Description : String; override;
  54. class function WebWidgetClass: TCustomWebWidgetClass; override;
  55. Function GetInspectorInstance: TObject; override;
  56. Procedure ShowDemo; override;
  57. end;
  58. implementation
  59. { TBootstrapModalDemo }
  60. procedure TBootstrapModalDemo.DoHideDialog(Sender: TObject; Event: TJSEvent);
  61. begin
  62. Modal.Hide;
  63. end;
  64. procedure TBootstrapModalDemo.DoModalHide(Sender: TObject; El: TJSHTMLElement; Values: TStrings);
  65. begin
  66. Fmemo.Lines.Add('Modal closed and returned '+IntToStr(Values.Count)+' values.');
  67. FMemo.Lines.AddStrings(Values);
  68. end;
  69. procedure TBootstrapModalDemo.DoShowDialog(Sender: TObject; Event: TJSEvent);
  70. begin
  71. Modal.Show;
  72. end;
  73. function TBootstrapModalDemo.Modal: TBootstrapModal;
  74. begin
  75. Result:=WidgetInstance as TBootstrapModal;
  76. end;
  77. class function TBootstrapModalDemo.Demohelp: String;
  78. begin
  79. Result:='Bootstrap modal showas a modal template and returns list of form values on close (hide)';
  80. end;
  81. class function TBootstrapModalDemo.Description: String;
  82. begin
  83. Result:='Bootstrap modal demo';
  84. end;
  85. class function TBootstrapModalDemo.WebWidgetClass: TCustomWebWidgetClass;
  86. begin
  87. Result:=TBootStrapModal;
  88. end;
  89. function TBootstrapModalDemo.GetInspectorInstance: TObject;
  90. begin
  91. Result:=inherited GetInspectorInstance;
  92. end;
  93. Const
  94. SampleModal =
  95. '<div class="modal fade" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true"> '+
  96. ' <div class="modal-dialog" role="document">'+
  97. ' <div class="modal-content">'+
  98. ' <div class="modal-header">'+
  99. ' <h5 class="modal-title" id="exampleModalLabel">Modal title</h5>'+
  100. ' <button type="button" class="close" data-dismiss="modal" aria-label="Close">'+
  101. ' <span aria-hidden="true">&times;</span>'+
  102. ' </button>'+
  103. ' </div>'+
  104. ' <div class="modal-body">'+
  105. ' <p>Modal body text goes here.</p>'+
  106. ' </div>'+
  107. ' <div class="modal-footer">'+
  108. ' <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>'+
  109. ' <button type="button" class="btn btn-primary">Save changes</button>'+
  110. ' </div>'+
  111. ' </div>'+
  112. ' </div>'+
  113. '</div>';
  114. procedure TBootstrapModalDemo.ShowDemo;
  115. Var
  116. R : TRowWidget;
  117. C : TColWidget;
  118. Procedure AddRow;
  119. begin
  120. R:=TRowWidget.Create(Self);
  121. R.Parent:=Self;
  122. C:=TColWidget.Create(Self);
  123. C.DefaultColSpan:=6;
  124. C.Parent:=R;
  125. end;
  126. begin
  127. inherited ShowDemo;
  128. Modal.Template:=SampleModal;
  129. AddRow;
  130. C.DefaultColSpan:=6;
  131. FShow:=TBootstrapButton.Create(Self);
  132. FShow.OnClick:=@DoShowDialog;
  133. FShow.Contextual:=cPrimary;
  134. FShow.Parent:=C;
  135. FShow.Text:='Show dialog';
  136. C:=TColWidget.Create(Self);
  137. C.Parent:=R;
  138. C.DefaultColSpan:=6;
  139. FHide:=TBootstrapButton.Create(Self);
  140. FHide.OnClick:=@DoHideDialog;
  141. FHide.Contextual:=cSecondary;
  142. FHide.Parent:=C;
  143. FHide.Text:='Hide dialog';
  144. AddRow;
  145. With TLabelWidget.Create(Self) do
  146. begin
  147. Text:='Log:';
  148. Parent:=C;
  149. end;
  150. AddRow;
  151. FMemo:=TTextAreaWidget.Create(Self);
  152. FMemo.Parent:=C;
  153. FMemo.Columns:=80;
  154. FMemo.Rows:=25;
  155. Modal.OnHide:=@DoModalHide;
  156. Refresh;
  157. end;
  158. { TToastManagerDemo }
  159. procedure TToastManagerDemo.DoShowToast(Sender: TObject; Event: TJSEvent);
  160. Var
  161. T : TContextual;
  162. begin
  163. if FContextual.SelectedIndex<>-1 then
  164. T:=TContextual(FContextual.SelectedIndex)
  165. else
  166. T:=cNone;
  167. TToastManager.Instance.ShowToast(FHeader.Value,FBody.Lines.text,T,FClosable.Checked);
  168. end;
  169. class function TToastManagerDemo.Demohelp: String;
  170. begin
  171. Result:='Toast manager demo: click button to show a toast in the top-left corner';
  172. end;
  173. class function TToastManagerDemo.Description: String;
  174. begin
  175. Result:='Toast manager demo';
  176. end;
  177. class function TToastManagerDemo.WebWidgetClass: TCustomWebWidgetClass;
  178. begin
  179. Result:=Nil;
  180. end;
  181. function TToastManagerDemo.GetInspectorInstance: TObject;
  182. begin
  183. Result:=TToastManager.Instance;
  184. end;
  185. procedure TToastManagerDemo.ShowDemo;
  186. Var
  187. T : TContextual;
  188. R : TRowWidget;
  189. C : TColWidget;
  190. Procedure AddRow;
  191. begin
  192. R:=TRowWidget.Create(Self);
  193. R.Parent:=Self;
  194. C:=TColWidget.Create(Self);
  195. C.Parent:=R;
  196. end;
  197. begin
  198. inherited ShowDemo;
  199. TToastManager.Instance.ParentID:='toastarea-stack';
  200. // Contextual
  201. AddRow;
  202. FLabelContextual:=TLabelWidget.Create(Self);
  203. FLabelContextual.Text:='Contextual class for message';
  204. FContextual:=TSelectWidget.Create(Self);
  205. For T in TContextual do
  206. FContextual.Items.Add(ContextualNames[t]);
  207. FContextual.SelectedIndex:=0;
  208. FLabelContextual.LabelFor:=FContextual;
  209. FLabelContextual.Parent:=C;
  210. FContextual.Parent:=C;
  211. FContextual.Classes:='form-control';
  212. // Header
  213. AddRow;
  214. FLabelHeader:=TLabelWidget.Create(Self);
  215. FLabelHeader.Text:='Toast header';
  216. FHeader:=TTextInputWidget.Create(Self);
  217. FHeader.Value:='The message title';
  218. FLabelHeader.LabelFor:=FHeader;
  219. FLabelHeader.Parent:=C;
  220. FHeader.Parent:=C;
  221. FHeader.Classes:='form-control';
  222. // Body
  223. AddRow;
  224. FLabelBody:=TLabelWidget.Create(Self);
  225. FLabelBody.Text:='Toast body';
  226. FBody:=TTextAreaWidget.Create(Self);
  227. FBody.Lines.Text:='A nice message to show';
  228. FLabelBody.LabelFor:=FBody;
  229. FLabelBody.Parent:=C;
  230. FBody.Parent:=C;
  231. FBody.Classes:='form-control';
  232. // Closable checkbox
  233. AddRow;
  234. FLabelClosable:=TLabelWidget.Create(Self);
  235. FLabelClosable.Text:='Allow to close toast';
  236. FClosable:=TCheckboxInputWidget.Create(Self);
  237. FClosable.Classes:='form-check-input';
  238. FLabelClosable.LabelFor:=FClosable;
  239. FLabelClosable.Parent:=C;
  240. FClosable.Parent:=C;
  241. // button
  242. AddRow;
  243. FShowButton:=TBootstrapButton.Create(Self);
  244. FShowButton.Text:='Show toast';
  245. FShowButton.Parent:=C;
  246. FShowButton.OnClick:=@DoShowToast;
  247. Refresh;
  248. end;
  249. { TBootstrapButtonDemo }
  250. class function TBootstrapButtonDemo.WebWidgetClass: TCustomWebWidgetClass;
  251. begin
  252. Result:=TBootstrapButton;
  253. end;
  254. procedure TBootstrapButtonDemo.ShowDemo;
  255. begin
  256. inherited ShowDemo;
  257. WidgetInstance.OnClick:=@DoClick;
  258. end;
  259. { TToastManagerDemo }
  260. class function TSimpleToastWidgetDemo.WebWidgetClass: TCustomWebWidgetClass;
  261. begin
  262. Result:=TSimpleToastWidget;
  263. end;
  264. procedure TSimpleToastWidgetDemo.ShowDemo;
  265. begin
  266. inherited ShowDemo;
  267. end;
  268. initialization
  269. TBootstrapButtonDemo.RegisterDemo;
  270. TSimpleToastWidgetDemo.RegisterDemo;
  271. TToastManagerDemo.RegisterDemo;
  272. TBootstrapModalDemo.Registerdemo;
  273. end.