demohtmlwidgets.pp 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518
  1. unit demohtmlwidgets;
  2. {$mode objfpc}
  3. interface
  4. uses
  5. sysutils, web, js, webwidget, htmlwidgets, widgetdemo;
  6. Type
  7. { TButtonDemo }
  8. TButtonDemo = class(TDemoContainer)
  9. public
  10. class function WebWidgetClass: TCustomWebWidgetClass; override;
  11. Procedure ShowDemo; override;
  12. end;
  13. { TRadioDemo }
  14. TRadioDemo = class(TDemoContainer)
  15. public
  16. class function WebWidgetClass: TCustomWebWidgetClass; override;
  17. Procedure ShowDemo; override;
  18. end;
  19. { TCheckboxDemo }
  20. TCheckboxDemo = class(TDemoContainer)
  21. public
  22. class function WebWidgetClass: TCustomWebWidgetClass; override;
  23. Procedure ShowDemo; override;
  24. end;
  25. { TTextInputDemo }
  26. TTextInputDemo = class(TDemoContainer)
  27. public
  28. class function WebWidgetClass: TCustomWebWidgetClass; override;
  29. Procedure ShowDemo; override;
  30. end;
  31. { TFileInputDemo }
  32. TFileInputDemo = class(TDemoContainer)
  33. public
  34. class function WebWidgetClass: TCustomWebWidgetClass; override;
  35. Procedure ShowDemo; override;
  36. end;
  37. { TDateInputDemo }
  38. TDateInputDemo = class(TDemoContainer)
  39. protected
  40. procedure DoChange(Sender: TObject; Event: TJSEvent); override;
  41. public
  42. class function WebWidgetClass: TCustomWebWidgetClass; override;
  43. Procedure ShowDemo; override;
  44. end;
  45. { TButtonInputDemo }
  46. TButtonInputDemo = class(TDemoContainer)
  47. private
  48. public
  49. class function WebWidgetClass: TCustomWebWidgetClass; override;
  50. Procedure ShowDemo; override;
  51. end;
  52. { THiddenInputDemo }
  53. THiddenInputDemo = class(TDemoContainer)
  54. public
  55. class function WebWidgetClass: TCustomWebWidgetClass; override;
  56. Procedure ShowDemo; override;
  57. end;
  58. { TTextAreaDemo }
  59. TTextAreaDemo = class(TDemoContainer)
  60. public
  61. class function WebWidgetClass: TCustomWebWidgetClass; override;
  62. Procedure ShowDemo; override;
  63. end;
  64. { TLabelWidgetDemo }
  65. TLabelWidgetDemo = class(TDemoContainer)
  66. public
  67. class function WebWidgetClass: TCustomWebWidgetClass; override;
  68. Procedure ShowDemo; override;
  69. end;
  70. { TTextWidgetDemo }
  71. TTextWidgetDemo = class(TDemoContainer)
  72. public
  73. class function WebWidgetClass: TCustomWebWidgetClass; override;
  74. Procedure ShowDemo; override;
  75. end;
  76. { TTextLinesWidgetDemo }
  77. TTextLinesWidgetDemo = class(TDemoContainer)
  78. public
  79. class function WebWidgetClass: TCustomWebWidgetClass; override;
  80. Procedure ShowDemo; override;
  81. end;
  82. { TSelectWidgetDemo }
  83. TSelectWidgetDemo = Class(TDemoContainer)
  84. public
  85. class function WebWidgetClass: TCustomWebWidgetClass; override;
  86. Procedure ShowDemo; override;
  87. end;
  88. { TTagWidgetDemo }
  89. TTagWidgetDemo = class(TDemoContainer)
  90. public
  91. class function WebWidgetClass: TCustomWebWidgetClass; override;
  92. end;
  93. { TDivWidgetDemo }
  94. TDivWidgetDemo = class(TDemoContainer)
  95. public
  96. class function WebWidgetClass: TCustomWebWidgetClass; override;
  97. end;
  98. { TTagWidgetDemo }
  99. { TParagraphWidget }
  100. TParagraphWidgetDemo = class(TDemoContainer)
  101. public
  102. class function WebWidgetClass: TCustomWebWidgetClass; override;
  103. end;
  104. { TAudioWidgetDemo }
  105. TAudioWidgetDemo = class(TDemoContainer)
  106. public
  107. class function WebWidgetClass: TCustomWebWidgetClass; override;
  108. end;
  109. { TVideoWidgetDemo }
  110. TVideoWidgetDemo = class(TDemoContainer)
  111. public
  112. class function WebWidgetClass: TCustomWebWidgetClass; override;
  113. end;
  114. { TEventTableWidgetDemo }
  115. TEventTableWidgetDemo = Class(TDemoContainer)
  116. private
  117. procedure DoGetCellData(Sender: TObject; Enum: TTableRowEnumerator; aCell: TTableWidgetCellData);
  118. Public
  119. class function WebWidgetClass: TCustomWebWidgetClass; override;
  120. Procedure ShowDemo; override;
  121. end;
  122. { TStringsTableWidgetDemo }
  123. TStringsTableWidgetDemo = Class(TDemoContainer)
  124. Public
  125. class function WebWidgetClass: TCustomWebWidgetClass; override;
  126. Procedure ShowDemo; override;
  127. end;
  128. implementation
  129. uses democonsts;
  130. {
  131. Countrycodes are included as a JSON javascript definition in the HTML file, countrycodes.js
  132. We define it here as an external.
  133. }
  134. {$modeswitch externalclass}
  135. Type
  136. TCountry = Class external name 'Object' (TJSObject)
  137. name,code : string;
  138. end;
  139. Var
  140. CountryCodes : Array of TCountry; external name 'countrycodes';
  141. { TStringsTableWidgetDemo }
  142. class function TStringsTableWidgetDemo.WebWidgetClass: TCustomWebWidgetClass;
  143. begin
  144. Result:=TStringsTableWidget;
  145. end;
  146. procedure TStringsTableWidgetDemo.ShowDemo;
  147. Var
  148. STW : TStringsTableWidget;
  149. I : Integer;
  150. begin
  151. inherited ShowDemo;
  152. STW:=TStringsTableWidget(WidgetInstance);
  153. STW.Classes:='table table-bordered table-striped table-hover table-sm';
  154. STW.CustomColumns.Add('ISO');
  155. STW.CustomColumns.Add('Country');
  156. STW.BeginUpdate;
  157. STW.RowCount:=Length(CountryCodes);
  158. For I:=0 to Length(CountryCodes)-1 do
  159. begin
  160. STW.Cells[0,I]:=CountryCodes[i].code;
  161. STW.Cells[1,i]:=CountryCodes[i].Name;
  162. end;
  163. STW.EndUpdate;
  164. end;
  165. { TEventTableWidgetDemo }
  166. procedure TEventTableWidgetDemo.DoGetCellData(Sender: TObject; Enum: TTableRowEnumerator; aCell: TTableWidgetCellData);
  167. begin
  168. if aCell.Kind=rkBody then
  169. case aCell.Col of
  170. 0 : aCell.Text:='Value '+IntToStr(aCell.Row+1);
  171. 1 : aCell.Widget:=TTextInputWidget.Create(Self);
  172. end;
  173. end;
  174. class function TEventTableWidgetDemo.WebWidgetClass: TCustomWebWidgetClass;
  175. begin
  176. Result:=TEventTableWidget;
  177. end;
  178. procedure TEventTableWidgetDemo.ShowDemo;
  179. begin
  180. inherited ShowDemo;
  181. TEventTableWidget(WidgetInstance).OnGetCellData:=@DoGetCellData;
  182. TEventTableWidget(WidgetInstance).CustomColumns.Add('Name');
  183. TEventTableWidget(WidgetInstance).CustomColumns.Add('Value');
  184. TEventTableWidget(WidgetInstance).RowCount:=10;
  185. end;
  186. { TVideoWidgetDemo }
  187. class function TVideoWidgetDemo.WebWidgetClass: TCustomWebWidgetClass;
  188. begin
  189. Result:=TVideoWidget;
  190. end;
  191. { TAudioWidgetDemo }
  192. class function TAudioWidgetDemo.WebWidgetClass: TCustomWebWidgetClass;
  193. begin
  194. Result:=TAudioWidget;
  195. end;
  196. { TSelectWidgetDemo }
  197. class function TSelectWidgetDemo.WebWidgetClass: TCustomWebWidgetClass;
  198. begin
  199. Result:=TSelectWidget;
  200. end;
  201. procedure TSelectWidgetDemo.ShowDemo;
  202. begin
  203. inherited ShowDemo;
  204. With TSelectWidget(WidgetInstance).Items do
  205. begin
  206. Add('Item 1');
  207. Add('Item 2');
  208. Add('Item 3');
  209. Add('Item 4');
  210. Add('Item 5');
  211. end;
  212. end;
  213. { TParagraphWidget }
  214. class function TParagraphWidgetDemo.WebWidgetClass: TCustomWebWidgetClass;
  215. begin
  216. Result:=TParagraphWidget;
  217. end;
  218. { TDivWidgetDemo }
  219. class function TDivWidgetDemo.WebWidgetClass: TCustomWebWidgetClass;
  220. begin
  221. Result:=TDivWidget
  222. end;
  223. { TTagWidgetDemo }
  224. class function TTagWidgetDemo.WebWidgetClass: TCustomWebWidgetClass;
  225. begin
  226. Result:=TTagWidget;
  227. end;
  228. { TTextLinesWidgetDemo }
  229. class function TTextLinesWidgetDemo.WebWidgetClass: TCustomWebWidgetClass;
  230. begin
  231. Result:=TTextLinesWidget;
  232. end;
  233. procedure TTextLinesWidgetDemo.ShowDemo;
  234. begin
  235. inherited ShowDemo;
  236. With TTextLinesWidget(WidgetInstance).Lines do
  237. begin
  238. beginUpdate;
  239. try
  240. Add(Lorem1);
  241. Add('');
  242. Add(Lorem2);
  243. Add('');
  244. Add(Lorem3);
  245. finally
  246. EndUpdate;
  247. end;
  248. end;
  249. end;
  250. { TTextWidgetDemo }
  251. class function TTextWidgetDemo.WebWidgetClass: TCustomWebWidgetClass;
  252. begin
  253. Result:=TTextWidget
  254. end;
  255. procedure TTextWidgetDemo.ShowDemo;
  256. begin
  257. inherited ShowDemo;
  258. TTextWidget(WidgetInstance).Text:=Lorem1;
  259. end;
  260. { TLabelWidgetDemo }
  261. class function TLabelWidgetDemo.WebWidgetClass: TCustomWebWidgetClass;
  262. begin
  263. Result:=TLabelwidget;
  264. end;
  265. procedure TLabelWidgetDemo.ShowDemo;
  266. begin
  267. inherited ShowDemo;
  268. TLabelwidget(WidgetInstance).Text:=Lorem1;
  269. end;
  270. { TTextAreaDemo }
  271. class function TTextAreaDemo.WebWidgetClass: TCustomWebWidgetClass;
  272. begin
  273. Result:=TTextAreaWidget;
  274. end;
  275. procedure TTextAreaDemo.ShowDemo;
  276. begin
  277. inherited ShowDemo;
  278. TTextAreaWidget(WidgetInstance).Rows:=20;
  279. TTextAreaWidget(WidgetInstance).Columns:=80;
  280. TTextAreaWidget(WidgetInstance).Lines.Add(Lorem1);
  281. TTextAreaWidget(WidgetInstance).Lines.Add('');
  282. TTextAreaWidget(WidgetInstance).Lines.Add(Lorem2);
  283. TTextAreaWidget(WidgetInstance).Lines.Add('');
  284. TTextAreaWidget(WidgetInstance).Lines.Add(Lorem3);
  285. end;
  286. { THiddenInputDemo }
  287. class function THiddenInputDemo.WebWidgetClass: TCustomWebWidgetClass;
  288. begin
  289. Result:=THiddenInputWidget;
  290. end;
  291. procedure THiddenInputDemo.ShowDemo;
  292. begin
  293. inherited ShowDemo;
  294. THiddenInputWidget(WidgetInstance).Value:='This value is hidden';
  295. THiddenInputWidget(WidgetInstance).ValueName:='MyHidden';
  296. end;
  297. { TButtonDemo }
  298. class function TButtonDemo.WebWidgetClass: TCustomWebWidgetClass;
  299. begin
  300. Result:=TButtonWidget;
  301. end;
  302. procedure TButtonDemo.ShowDemo;
  303. begin
  304. inherited ShowDemo;
  305. WidgetInstance.OnClick:=@DoClick;
  306. end;
  307. { TRadioDemo }
  308. class function TRadioDemo.WebWidgetClass: TCustomWebWidgetClass;
  309. begin
  310. Result:=TRadioInputWidget;
  311. end;
  312. procedure TRadioDemo.ShowDemo;
  313. begin
  314. inherited ShowDemo;
  315. TRadioInputWidget(WidgetInstance).Text:='A Radio';
  316. WidgetInstance.OnChange:=@DoChange;
  317. end;
  318. { TCheckboxDemo }
  319. class function TCheckboxDemo.WebWidgetClass: TCustomWebWidgetClass;
  320. begin
  321. Result:=TCheckboxInputWidget;
  322. end;
  323. procedure TCheckboxDemo.ShowDemo;
  324. begin
  325. inherited ShowDemo;
  326. TCheckboxInputWidget(WidgetInstance).Text:='A checkbox';
  327. WidgetInstance.OnChange:=@DoChange;
  328. end;
  329. { TTextInputDemo }
  330. class function TTextInputDemo.WebWidgetClass: TCustomWebWidgetClass;
  331. begin
  332. Result:=TTextInputWidget;
  333. end;
  334. procedure TTextInputDemo.ShowDemo;
  335. begin
  336. inherited ShowDemo;
  337. TTextInputWidget(WidgetInstance).Value:='A Text Value';
  338. WidgetInstance.OnChange:=@DoChange;
  339. end;
  340. { TDateInputDemo }
  341. procedure TDateInputDemo.DoChange(Sender: TObject; Event: TJSEvent);
  342. begin
  343. Inherited;
  344. Writeln(Sender.ClassName,' date value: ', DateToStr(TDateInputWidget(WidgetInstance).Date));
  345. end;
  346. class function TDateInputDemo.WebWidgetClass: TCustomWebWidgetClass;
  347. begin
  348. Result:=TDateInputWidget;
  349. end;
  350. procedure TDateInputDemo.ShowDemo;
  351. begin
  352. inherited ShowDemo;
  353. TDateInputWidget(WidgetInstance).Date:=Date+1;
  354. WidgetInstance.OnChange:=@DoChange;
  355. end;
  356. { TFileInputDemo }
  357. class function TFileInputDemo.WebWidgetClass: TCustomWebWidgetClass;
  358. begin
  359. Result:=TFileInputWidget;
  360. end;
  361. procedure TFileInputDemo.ShowDemo;
  362. begin
  363. inherited ShowDemo;
  364. // TFileInputWidget(WidgetInstance).FileName:='my.txt';
  365. WidgetInstance.OnChange:=@DoChange;
  366. end;
  367. { TButtonInputDemo }
  368. class function TButtonInputDemo.WebWidgetClass: TCustomWebWidgetClass;
  369. begin
  370. Result:=TButtonInputWidget;
  371. end;
  372. procedure TButtonInputDemo.ShowDemo;
  373. begin
  374. inherited ShowDemo;
  375. WidgetInstance.OnClick:=@DoClick;
  376. TButtonInputWidget(WidgetInstance).Value:='Press me';
  377. end;
  378. initialization
  379. TCheckboxDemo.RegisterDemo;
  380. TRadioDemo.RegisterDemo;
  381. TButtonDemo.RegisterDemo;
  382. TTextInputDemo.RegisterDemo;
  383. TDateInputDemo.RegisterDemo;
  384. TFileInputDemo.RegisterDemo;
  385. TButtonInputDemo.RegisterDemo;
  386. THiddenInputDemo.RegisterDemo;
  387. TTextAreaDemo.RegisterDemo;
  388. TLabelWidgetDemo.RegisterDemo;
  389. TTextWidgetDemo.RegisterDemo;
  390. TTagWidgetDemo.RegisterDemo;
  391. TDivWidgetDemo.RegisterDemo;
  392. TParagraphWidgetDemo.RegisterDemo;
  393. TSelectWidgetDemo.RegisterDemo;
  394. TAudioWidgetDemo.RegisterDemo;
  395. TVideoWidgetDemo.RegisterDemo;
  396. TEventTableWidgetDemo.RegisterDemo;
  397. TStringsTableWidgetDemo.RegisterDemo;
  398. end.