1 | // |
---|
2 | // "$Id: unittest_scrollbarsize.cxx 7913 2010-11-29 18:18:27Z greg.ercolano $" |
---|
3 | // |
---|
4 | // Unit tests for the Fast Light Tool Kit (FLTK). |
---|
5 | // |
---|
6 | // Copyright 1998-2010 by Bill Spitzak and others. |
---|
7 | // |
---|
8 | // This library is free software; you can redistribute it and/or |
---|
9 | // modify it under the terms of the GNU Library General Public |
---|
10 | // License as published by the Free Software Foundation; either |
---|
11 | // version 2 of the License, or (at your option) any later version. |
---|
12 | // |
---|
13 | // This library is distributed in the hope that it will be useful, |
---|
14 | // but WITHOUT ANY WARRANTY; without even the implied warranty of |
---|
15 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
---|
16 | // Library General Public License for more details. |
---|
17 | // |
---|
18 | // You should have received a copy of the GNU Library General Public |
---|
19 | // License along with this library; if not, write to the Free Software |
---|
20 | // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 |
---|
21 | // USA. |
---|
22 | // |
---|
23 | // Please report all bugs and problems on the following page: |
---|
24 | // |
---|
25 | // http://www.fltk.org/str.php |
---|
26 | // |
---|
27 | |
---|
28 | #include <FL/Fl_Group.H> |
---|
29 | #include <FL/Fl_Browser.H> |
---|
30 | #include <FL/Fl_Tree.H> |
---|
31 | #include <FL/Fl_Value_Slider.H> |
---|
32 | |
---|
33 | // |
---|
34 | // Test new 1.3.x global vs. local scrollbar sizing |
---|
35 | // |
---|
36 | class ScrollBarSizeTest : public Fl_Group { |
---|
37 | Fl_Browser *brow_a, *brow_b, *brow_c; |
---|
38 | Fl_Tree *tree_a, *tree_b, *tree_c; |
---|
39 | |
---|
40 | Fl_Browser *makebrowser(int X,int Y,int W,int H,const char*L=0) { |
---|
41 | Fl_Browser *b = new Fl_Browser(X,Y,W,H,L); |
---|
42 | b->type(FL_MULTI_BROWSER); |
---|
43 | b->align(FL_ALIGN_TOP); |
---|
44 | b->add("Papa"); b->add("Delta"); b->add("Hotel"); |
---|
45 | b->add("Long entry will show h-bar"); |
---|
46 | b->add("Charlie"); b->add("Echo"); b->add("Foxtrot"); |
---|
47 | b->add("Golf"); b->add("Lima"); b->add("Victor"); |
---|
48 | b->add("Alpha"); b->add("Xray"); b->add("Yankee"); |
---|
49 | b->add("Oscar"); b->add("India"); b->add("Juliet"); |
---|
50 | b->add("Kilo"); b->add("Mike"); b->add("Sierra"); |
---|
51 | b->add("November"); b->add("Tango"); b->add("Quebec"); |
---|
52 | b->add("Bravo"); b->add("Romeo"); b->add("Uniform"); |
---|
53 | b->add("Whisky"); b->add("Zulu"); |
---|
54 | b->add("Papa"); b->add("Delta"); b->add("Hotel"); |
---|
55 | b->add("Charlie"); b->add("Echo"); b->add("Foxtrot"); |
---|
56 | b->add("Golf"); b->add("Lima"); b->add("Victor"); |
---|
57 | b->add("Alpha"); b->add("Xray"); b->add("Yankee"); |
---|
58 | b->add("Oscar"); b->add("India"); b->add("Juliet"); |
---|
59 | b->add("Kilo"); b->add("Mike"); b->add("Sierra"); |
---|
60 | b->add("November"); b->add("Tango"); b->add("Quebec"); |
---|
61 | b->add("Bravo"); b->add("Romeo"); b->add("Uniform"); |
---|
62 | b->add("Whisky"); b->add("Zulu"); |
---|
63 | return(b); |
---|
64 | } |
---|
65 | Fl_Tree *maketree(int X,int Y,int W,int H,const char*L=0) { |
---|
66 | Fl_Tree *b = new Fl_Tree(X,Y,W,H,L); |
---|
67 | b->type(FL_TREE_SELECT_MULTI); |
---|
68 | b->align(FL_ALIGN_TOP); |
---|
69 | b->add("Papa"); b->add("Delta"); b->add("Hotel"); |
---|
70 | b->add("Long entry will show h-bar"); |
---|
71 | b->add("Charlie"); b->add("Echo"); b->add("Foxtrot"); |
---|
72 | b->add("Golf"); b->add("Lima"); b->add("Victor"); |
---|
73 | b->add("Alpha"); b->add("Xray"); b->add("Yankee"); |
---|
74 | b->add("Oscar"); b->add("India"); b->add("Juliet"); |
---|
75 | b->add("Kilo"); b->add("Mike"); b->add("Sierra"); |
---|
76 | b->add("November"); b->add("Tango"); b->add("Quebec"); |
---|
77 | b->add("Bravo"); b->add("Romeo"); b->add("Uniform"); |
---|
78 | b->add("Whisky"); b->add("Zulu"); |
---|
79 | return(b); |
---|
80 | } |
---|
81 | void slide_cb2(Fl_Value_Slider *in) { |
---|
82 | const char *label = in->label(); |
---|
83 | int val = int(in->value()); |
---|
84 | //fprintf(stderr, "VAL='%d'\n",val); |
---|
85 | if ( strcmp(label,"A: Scroll Size") == 0 ) { |
---|
86 | brow_a->scrollbar_size(val); |
---|
87 | tree_a->scrollbar_size(val); |
---|
88 | } else { |
---|
89 | Fl::scrollbar_size(val); |
---|
90 | } |
---|
91 | in->window()->redraw(); |
---|
92 | } |
---|
93 | static void slide_cb(Fl_Widget *w, void *data) { |
---|
94 | ScrollBarSizeTest *o = (ScrollBarSizeTest*)data; |
---|
95 | o->slide_cb2((Fl_Value_Slider*)w); |
---|
96 | } |
---|
97 | public: |
---|
98 | static Fl_Widget *create() { |
---|
99 | return(new ScrollBarSizeTest(TESTAREA_X, TESTAREA_Y, TESTAREA_W, TESTAREA_H)); |
---|
100 | } |
---|
101 | |
---|
102 | // CTOR |
---|
103 | ScrollBarSizeTest(int X, int Y, int W, int H) : Fl_Group(X,Y,W,H) { |
---|
104 | begin(); |
---|
105 | // _____________ _______________ |
---|
106 | // |_____________| |_______________| |
---|
107 | // --- ----- <-- tgrpy |
---|
108 | // brow_a brow_b brow_c | 14 | |
---|
109 | // ---------- ---------- ---------- --- | <-- browy |
---|
110 | // | | | | | | | | |
---|
111 | // | | | | | | |browh | |
---|
112 | // | | | | | | | | |
---|
113 | // ---------- ---------- ---------- --- tgrph |
---|
114 | // | | |
---|
115 | // tree_a tree_b tree_c | 20 | |
---|
116 | // ---------- ---------- ---------- --- | <-- treey |
---|
117 | // | | | | | | | | |
---|
118 | // | | | | | | |treeh | |
---|
119 | // | | | | | | | | |
---|
120 | // ---------- ---------- ---------- --- ------ |
---|
121 | // |
---|
122 | int tgrpy = Y+30; |
---|
123 | int tgrph = H-130; |
---|
124 | int browy = tgrpy+14; |
---|
125 | int browh = tgrph/2 - 20; |
---|
126 | int treey = browy + browh + 20; |
---|
127 | int treeh = browh; |
---|
128 | brow_a = makebrowser(X+ 10,browy,100,browh,"Browser A"); |
---|
129 | brow_b = makebrowser(X+120,browy,100,browh,"Browser B"); |
---|
130 | brow_c = makebrowser(X+240,browy,100,browh,"Browser C"); |
---|
131 | tree_a = maketree(X+ 10,treey,100,treeh,"Tree A"); |
---|
132 | tree_b = maketree(X+120,treey,100,treeh,"Tree B"); |
---|
133 | tree_c = maketree(X+240,treey,100,treeh,"Tree C"); |
---|
134 | Fl_Value_Slider *slide_glob = new Fl_Value_Slider(X+100,Y,100,18,"Global Scroll Size"); |
---|
135 | slide_glob->value(16); |
---|
136 | slide_glob->type(FL_HORIZONTAL); |
---|
137 | slide_glob->align(FL_ALIGN_LEFT); |
---|
138 | slide_glob->range(0.0, 30.0); |
---|
139 | slide_glob->step(1.0); |
---|
140 | slide_glob->callback(slide_cb, (void*)this); |
---|
141 | slide_glob->labelsize(12); |
---|
142 | Fl_Value_Slider *slide_browa = new Fl_Value_Slider(X+350,Y,100,18,"A: Scroll Size"); |
---|
143 | slide_browa->value(16); |
---|
144 | slide_browa->type(FL_HORIZONTAL); |
---|
145 | slide_browa->align(FL_ALIGN_LEFT); |
---|
146 | slide_browa->range(0.0, 30.0); |
---|
147 | slide_browa->step(1.0); |
---|
148 | slide_browa->callback(slide_cb, (void*)this); |
---|
149 | slide_browa->labelsize(12); |
---|
150 | end(); |
---|
151 | label("Verify global scroll sizing and per-widget scroll sizing.\n" |
---|
152 | "Scrollbar's size should change interactively as size sliders are changed.\n" |
---|
153 | "Changing 'Global Scroll Size' should affect all three browser's scrollbars UNLESS\n" |
---|
154 | "the 'A: Scroll Size' slider is changed, in which case its value will take precedence\n" |
---|
155 | "for 'Browser A', and the global size will only affect Browser B and C."); |
---|
156 | labelsize(12); |
---|
157 | align(FL_ALIGN_INSIDE|FL_ALIGN_BOTTOM|FL_ALIGN_LEFT|FL_ALIGN_WRAP); |
---|
158 | } |
---|
159 | }; |
---|
160 | |
---|
161 | UnitTest scrollbarsize("scrollbar size", ScrollBarSizeTest::create); |
---|
162 | |
---|
163 | // |
---|
164 | // End of "$Id: unittest_scrollbarsize.cxx 7913 2010-11-29 18:18:27Z greg.ercolano $" |
---|
165 | // |
---|