cfad47cfa3/t3compiler/tads3/test/data/banner_api2.t

4b825dc642cb6eb9a060e54bf8d69288fbee4904cfad47cfa334b206c65f22086bcc5d63e6f70944
1
#include <tads.h>
2
3
main(args)
4
{
5
    local win;
6
    local win2;
7
    local win3;
8
    local moreStyle;
9
10
    /* 
11
     *   use MORE mode in most of the banners unless there's a "-nomore"
12
     *   option in the arguments 
13
     */
14
    moreStyle = (args.indexOf('-nomore') == nil ? BannerStyleMoreMode : 0);
15
    
16
    "This is a test of various banner API capabilities.\n";
17
18
    win = bannerCreate(nil, BannerLast, nil, BannerTypeText, BannerAlignLeft,
19
                       20, BannerSizePercent,
20
                       BannerStyleVScroll | BannerStyleAutoVScroll
21
                       | BannerStyleBorder | moreStyle);
22
    bannerSay(win, '<body bgcolor=silver text=black>This is a
23
        vertical banner window on the left sized to 20% of the
24
        total application window size.  This window has a border
25
        and a vertical scrollbar, and automatically scrolls vertically
26
        when new contents are displayed and they don\'t fit in the
27
        window\'s existing height. [end part one]');
28
29
    "Press a key to continue...\n";
30
    inputKey();
31
32
    bannerSay(win, '\bThis is some more text, following a blank line,
33
        in the left banner window.  The goal here is to eventually
34
        provide enough text to make the window scroll past the bottom,
35
        so that we can see the auto-vscroll effect in action.
36
        [end part two]');
37
38
    "Press another key to continue...\n";
39
    inputKey();
40
41
    bannerSay(win, '\bAnd finally, some more text, again following a
42
        blank line.  This should be enough to overflow 50 lines, so
43
        it should give us auto-scrolling on the DOS console version,
44
        and should be plenty even for a fairly good-sized window in
45
        HTML mode. [end part three]');
46
47
    "Press yet another key...\n";
48
    inputKey();
49
50
    win2 = bannerCreate(win, BannerFirst, nil, BannerTypeText, BannerAlignTop,
51
                        40, BannerSizePercent, BannerStyleBorder);
52
    bannerSay(win2, '<body bgcolor=navy text=white>This is a banner that
53
        should split off the top half of the left pane. This is to exercise
54
        the parent/child parameters. [end of child banner text]');
55
56
    "Press another key...\n";
57
    inputKey();
58
59
    bannerDelete(win);
60
    bannerDelete(win2);
61
62
    win = bannerCreate(nil, BannerLast, nil, BannerTypeText, BannerAlignRight,
63
                       15, BannerSizePercent,
64
                       BannerStyleVScroll | BannerStyleBorder);
65
    bannerSay(win, '<body bgcolor=yellow text=black>This is another
66
        vertical banner.  This time, the banner is only 15% of the total
67
        screen/application window width.  This one has a border and
68
        a vertical scrollbar, but it does NOT scroll automatically when
69
        it overflows. [end part one]');
70
71
    "\bPress a key...\n";
72
    inputKey();
73
    
74
    bannerSay(win, '\bHopefully we can overflpow this one a bit more
75
        quickly because of its diminutive width.  When this one overflows,
76
        it should just sit at the top - it should not scroll down by itself.
77
        On interpreters that offer a scrollbar, of course, the user can
78
        manually scroll down; on non-scrollbar interpreters, the text after
79
        the bottom of the window will be unviewable. [end part two]');
80
81
    "\nPress a key...\n";
82
    inputKey();
83
84
    win2 = bannerCreate(nil, BannerFirst, nil, BannerTypeText,
85
                        BannerAlignBottom, 20, BannerSizePercent,
86
                        BannerStyleVScroll | BannerStyleBorder
87
                        | BannerStyleAutoVScroll | moreStyle);
88
    bannerSay(win2, '<body bgcolor=text text=bgcolor>This one is a
89
        bottom banner.  It has a scrollbar and a border, and
90
        automatic vertical scrolling.  The interesting thing about this
91
        one will be to ensure that the border is properly excluded from
92
        the scrolling area.
93
        \bNote another important thing about this banner: it\'s inserted
94
        first in the banner list, so it should be formatted to take up
95
        the entire bottom of the screen.  The right-aligned banner still
96
        on the screen from earlier should shrink vertically to give room
97
        to this banner.[end part one]');
98
    
99
    "\bPress a key...\n";
100
    inputKey();
101
102
    bannerSay(win2, '\bHere is some more text.  That should about do
103
        it.  We should not need too much, since the banner should only
104
        get about ten lines or so on a 50-line main window.  So, we
105
        should be getting pretty close to the bottom by now.
106
        \b
107
        That blank line should help!
108
        \n[end part two]');
109
110
    win3 = bannerCreate(nil, BannerBefore, win2, BannerTypeTextGrid,
111
                        BannerAlignBottom, nil, nil, 0);
112
113
    /* size the banner to a height of eight lines */
114
    bannerSetScreenColor(win3, ColorRGB(255, 255, 0));
115
    bannerSetTextColor(win3, ColorRGB(255, 0, 0), ColorTransparent);
116
    bannerGoTo(win3, 8, 1);
117
    bannerSay(win3, '\u00A0');
118
    bannerFlush(win3);
119
    bannerSizeToContents(win3);
120
121
    /* show some stuff in the banner at various positions */
122
    bannerGoTo(win3, 5, 10);
123
    bannerSay(win3, '* at row 5, column 10');
124
    bannerSetTextColor(win3, ColorRGB(0, 0, 128), ColorTransparent);
125
    bannerGoTo(win3, 7, 20);
126
    bannerSay(win3, '* at row 7, column 20');
127
128
    "\bPress a key...\n";
129
    inputKey();
130
131
    bannerGoTo(win3, 3, 10);
132
    bannerSay(win3, '> at row 3, column 10');
133
    bannerGoTo(win3, 4, 20);
134
    bannerSay(win3, '> at row 4, column 20');
135
    bannerGoTo(win3, 6, 10);
136
    bannerSay(win3, '  Here  is  a   line    with   excess   spaces.   ');
137
    bannerSay(win3, '<eol>');
138
139
    "\nPress a key...\n";
140
    inputKey();
141
142
    bannerSetScreenColor(win3, ColorRGB(255, 255, 255));
143
    bannerSetTextColor(win3, ColorRGB(0, 255, 0), ColorTransparent);
144
    bannerGoTo(win3, 5, 15);
145
    bannerSay(win3, '@ 5/15 @');
146
147
    "\nPress a key...\n";
148
    inputKey();
149
150
    bannerSetScreenColor(win3, ColorMaroon);
151
    bannerClear(win3);
152
    bannerGoTo(win3, 3, 20);
153
    bannerSay(win3, '% cleared - now at row 3, col 20');
154
155
    /* show the sizes of the banners */
156
    "\bRight banner: "; showBannerInfo(win);
157
    "\bBottom banner 1: "; showBannerInfo(win2);
158
    "\bBottom banner 2 (grid): "; showBannerInfo(win3);
159
160
    "\bPress another key...\n";
161
    inputKey();
162
163
    win3 = bannerCreate(win2, BannerFirst, nil, BannerTypeText,
164
                        BannerAlignLeft,
165
                        33, BannerSizePercent, BannerStyleBorder);
166
    bannerSay(win3, '<body bgcolor=#a000a0 text=black>This is a child
167
        banner on the left side of the second-to-bottom banner.  It
168
        should take up a third of the banner\'s width, on the left side.');
169
170
    "Another key please...\n";
171
    inputKey();
172
173
    win3 = bannerCreate(win2, BannerAfter, win3, BannerTypeText,
174
                        BannerAlignLeft,
175
                        50, BannerSizePercent, BannerStyleBorder);
176
    bannerSay(win3, '<body bgcolor=#505050 text=white>This is a second
177
        child banner.  It should appear in the middle of the second-to-bottom
178
        banner, and should take up half the remaining area (so, the bottom
179
        banner should now be split into thirds).');
180
181
    "\bPress another key to exit...\n";
182
    inputKey();
183
}
184
185
showBannerInfo(win)
186
{
187
    local info = bannerGetInfo(win);
188
189
    "align = <<info[1]>>, style = <<toString(info[2], 16)>>,
190
    rows = <<info[3]>>, columns = <<info[4]>>, pixel height = <<info[5]>>,
191
    pixel width = <<info[6]>>";
192
}