| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- IMPLEMENTATION MODULE GtkDemo ;
- FROM DemoImpl IMPORT DoLinks, DoListBox, DoFlowBox, DoExpander, DoCss;
- FROM SYSTEM IMPORT ADDRESS;
- TYPE
- Demo = RECORD
- title: ARRAY [0..63] OF CHAR;
- keywords: ARRAY [0..127] OF CHAR;
- build: BuildProc;
- END;
- VAR
- demos: ARRAY [0..31] OF Demo;
- n: CARDINAL;
- PROCEDURE Copy (VAR dst: ARRAY OF CHAR; src: ARRAY OF CHAR);
- VAR
- i: CARDINAL;
- BEGIN
- i := 0;
- WHILE (i < HIGH(dst)) AND (i <= HIGH(src)) AND (src[i] # 0C) DO
- dst[i] := src[i];
- INC(i)
- END;
- dst[i] := 0C
- END Copy;
- PROCEDURE Equal (a, b: ARRAY OF CHAR) : BOOLEAN;
- VAR
- i: CARDINAL;
- BEGIN
- i := 0;
- WHILE (a[i] # 0C) AND (b[i] # 0C) DO
- IF a[i] # b[i] THEN RETURN FALSE END;
- INC(i)
- END;
- RETURN a[i] = b[i]
- END Equal;
- PROCEDURE Register (title, keywords: ARRAY OF CHAR; build: BuildProc);
- BEGIN
- IF n <= HIGH(demos) THEN
- Copy(demos[n].title, title);
- Copy(demos[n].keywords, keywords);
- demos[n].build := build;
- INC(n)
- END
- END Register;
- PROCEDURE Count () : CARDINAL;
- BEGIN
- RETURN n
- END Count;
- PROCEDURE TitleOf (i: CARDINAL; VAR title: ARRAY OF CHAR);
- BEGIN
- IF i < n THEN Copy(title, demos[i].title) ELSE title[0] := 0C END
- END TitleOf;
- PROCEDURE KeywordsOf (i: CARDINAL; VAR keywords: ARRAY OF CHAR);
- BEGIN
- IF i < n THEN Copy(keywords, demos[i].keywords) ELSE keywords[0] := 0C END
- END KeywordsOf;
- PROCEDURE BuildByTitle (title: ARRAY OF CHAR; doWidget: ADDRESS) : ADDRESS;
- VAR
- i: CARDINAL;
- buf: ARRAY [0..63] OF CHAR;
- BEGIN
- i := 0;
- WHILE i < n DO
- TitleOf(i, buf);
- IF Equal(buf, title) THEN RETURN demos[i].build(doWidget) END;
- INC(i)
- END;
- RETURN NIL
- END BuildByTitle;
- BEGIN
- n := 0;
- Register("Links", "hyperlinks markup label uri anchor", DoLinks);
- Register("List Box", "list rows selection box", DoListBox);
- Register("Flow Box", "flow grid reflow colors swatches", DoFlowBox);
- Register("Expander", "disclosure triangle expand collapse", DoExpander);
- Register("CSS Basics", "css styling theme provider", DoCss)
- END GtkDemo.
|