GtkDemo.mod 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. IMPLEMENTATION MODULE GtkDemo ;
  2. FROM DemoImpl IMPORT DoLinks, DoListBox, DoFlowBox, DoExpander, DoCss;
  3. FROM DemosBasic IMPORT DoSpinner, DoPanes, DoOverlay;
  4. FROM DemosLayout IMPORT DoSizeGroup, DoFixed2, DoLayoutManager;
  5. FROM DemosText IMPORT DoReadMore, DoRotatedText, DoTextMask, DoTextScroll, DoTextUndo;
  6. FROM DemosWindows IMPORT DoHeaderBar, DoInfoBar, DoTabs, DoAssistant;
  7. FROM DemosInput IMPORT DoPasswordEntry, DoSearchEntry, DoTaggedEntry, DoShortcutTriggers;
  8. FROM SYSTEM IMPORT ADDRESS;
  9. TYPE
  10. Demo = RECORD
  11. name: ARRAY [0..47] OF CHAR;
  12. build: BuildProc;
  13. END;
  14. VAR
  15. demos: ARRAY [0..255] OF Demo;
  16. n: CARDINAL;
  17. PROCEDURE Copy (VAR dst: ARRAY OF CHAR; src: ARRAY OF CHAR);
  18. VAR
  19. i: CARDINAL;
  20. BEGIN
  21. i := 0;
  22. WHILE (i < HIGH(dst)) AND (i <= HIGH(src)) AND (src[i] # 0C) DO
  23. dst[i] := src[i];
  24. INC(i)
  25. END;
  26. dst[i] := 0C
  27. END Copy;
  28. PROCEDURE Equal (a, b: ARRAY OF CHAR) : BOOLEAN;
  29. VAR
  30. i: CARDINAL;
  31. BEGIN
  32. i := 0;
  33. WHILE (a[i] # 0C) AND (b[i] # 0C) DO
  34. IF a[i] # b[i] THEN RETURN FALSE END;
  35. INC(i)
  36. END;
  37. RETURN a[i] = b[i]
  38. END Equal;
  39. PROCEDURE Register (name: ARRAY OF CHAR; build: BuildProc);
  40. BEGIN
  41. IF n <= HIGH(demos) THEN
  42. Copy(demos[n].name, name);
  43. demos[n].build := build;
  44. INC(n)
  45. END
  46. END Register;
  47. PROCEDURE Count () : CARDINAL;
  48. BEGIN
  49. RETURN n
  50. END Count;
  51. PROCEDURE NameOf (i: CARDINAL; VAR name: ARRAY OF CHAR);
  52. BEGIN
  53. IF i < n THEN Copy(name, demos[i].name) ELSE name[0] := 0C END
  54. END NameOf;
  55. PROCEDURE BuildByName (name: ARRAY OF CHAR; doWidget: ADDRESS) : ADDRESS;
  56. VAR
  57. i: CARDINAL;
  58. BEGIN
  59. i := 0;
  60. WHILE i < n DO
  61. IF Equal(demos[i].name, name) THEN
  62. RETURN demos[i].build(doWidget)
  63. END;
  64. INC(i)
  65. END;
  66. RETURN NIL
  67. END BuildByName;
  68. PROCEDURE IsPorted (name: ARRAY OF CHAR) : BOOLEAN;
  69. VAR
  70. i: CARDINAL;
  71. BEGIN
  72. i := 0;
  73. WHILE i < n DO
  74. IF Equal(demos[i].name, name) THEN RETURN TRUE END;
  75. INC(i)
  76. END;
  77. RETURN FALSE
  78. END IsPorted;
  79. BEGIN
  80. n := 0;
  81. Register("links", DoLinks);
  82. Register("listbox", DoListBox);
  83. Register("flowbox", DoFlowBox);
  84. Register("expander", DoExpander);
  85. Register("css_basics", DoCss);
  86. Register("spinner", DoSpinner);
  87. Register("panes", DoPanes);
  88. Register("overlay", DoOverlay);
  89. Register("sizegroup", DoSizeGroup);
  90. Register("fixed2", DoFixed2);
  91. Register("layoutmanager", DoLayoutManager);
  92. Register("read_more", DoReadMore);
  93. Register("rotated_text", DoRotatedText);
  94. Register("textmask", DoTextMask);
  95. Register("textscroll", DoTextScroll);
  96. Register("textundo", DoTextUndo);
  97. Register("headerbar", DoHeaderBar);
  98. Register("infobar", DoInfoBar);
  99. Register("tabs", DoTabs);
  100. Register("assistant", DoAssistant);
  101. Register("password_entry", DoPasswordEntry);
  102. Register("search_entry", DoSearchEntry);
  103. Register("tagged_entry", DoTaggedEntry);
  104. Register("shortcut_triggers", DoShortcutTriggers)
  105. END GtkDemo.