GtkDemo.mod 3.3 KB

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