1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223
|
//
// "$Id$"
//
// Unit tests for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
#include <FL/Fl_Group.H>
#include <FL/Fl_Browser.H>
#include <FL/Fl_Tree.H>
#include <FL/Fl_Table.H>
#include <FL/Fl_Value_Slider.H>
//
// Test new 1.3.x global vs. local scrollbar sizing
//
class MyTable : public Fl_Table {
// Handle drawing table's cells
// Fl_Table calls this function to draw each visible cell in the table.
// It's up to us to use FLTK's drawing functions to draw the cells the way we want.
//
void draw_cell(TableContext context, int ROW=0, int COL=0, int X=0, int Y=0, int W=0, int H=0) {
static char s[10];
switch ( context ) {
case CONTEXT_STARTPAGE: // before page is drawn..
fl_font(FL_HELVETICA, 8); // set font for drawing operations
return;
case CONTEXT_CELL: // Draw data in cells
sprintf(s, "%c", 'A'+ROW+COL);
fl_push_clip(X,Y,W,H);
// Draw cell bg
fl_color(FL_WHITE); fl_rectf(X,Y,W,H);
// Draw cell data
fl_color(FL_GRAY0); fl_draw(s, X,Y,W,H, FL_ALIGN_CENTER);
// Draw box border
fl_color(color()); fl_rect(X,Y,W,H);
fl_pop_clip();
return;
default:
return;
}
}
public:
// Constructor
// Make our data array, and initialize the table options.
//
MyTable(int X, int Y, int W, int H, const char *L=0) : Fl_Table(X,Y,W,H,L) {
// Rows
rows(13); // how many rows
row_height_all(10); // default height of rows
// Cols
cols(13); // how many columns
col_width_all(10); // default width of columns
end(); // end the Fl_Table group
}
~MyTable() { }
};
class ScrollBarSizeTest : public Fl_Group {
Fl_Browser *brow_a, *brow_b, *brow_c;
Fl_Tree *tree_a, *tree_b, *tree_c;
MyTable *table_a,*table_b,*table_c;
Fl_Browser *makebrowser(int X,int Y,int W,int H,const char*L=0) {
Fl_Browser *b = new Fl_Browser(X,Y,W,H,L);
b->type(FL_MULTI_BROWSER);
b->align(FL_ALIGN_TOP);
b->add("Papa"); b->add("Delta"); b->add("Hotel");
b->add("Long entry will show h-bar");
b->add("Charlie"); b->add("Echo"); b->add("Foxtrot");
b->add("Golf"); b->add("Lima"); b->add("Victor");
b->add("Alpha"); b->add("Xray"); b->add("Yankee");
b->add("Oscar"); b->add("India"); b->add("Juliet");
b->add("Kilo"); b->add("Mike"); b->add("Sierra");
b->add("November"); b->add("Tango"); b->add("Quebec");
b->add("Bravo"); b->add("Romeo"); b->add("Uniform");
b->add("Whisky"); b->add("Zulu");
b->add("Papa"); b->add("Delta"); b->add("Hotel");
b->add("Charlie"); b->add("Echo"); b->add("Foxtrot");
b->add("Golf"); b->add("Lima"); b->add("Victor");
b->add("Alpha"); b->add("Xray"); b->add("Yankee");
b->add("Oscar"); b->add("India"); b->add("Juliet");
b->add("Kilo"); b->add("Mike"); b->add("Sierra");
b->add("November"); b->add("Tango"); b->add("Quebec");
b->add("Bravo"); b->add("Romeo"); b->add("Uniform");
b->add("Whisky"); b->add("Zulu");
return(b);
}
Fl_Tree *maketree(int X,int Y,int W,int H,const char*L=0) {
Fl_Tree *b = new Fl_Tree(X,Y,W,H,L);
b->type(FL_TREE_SELECT_MULTI);
b->align(FL_ALIGN_TOP);
b->add("Papa"); b->add("Delta"); b->add("Hotel");
b->add("Long entry will show h-bar");
b->add("Charlie"); b->add("Echo"); b->add("Foxtrot");
b->add("Golf"); b->add("Lima"); b->add("Victor");
b->add("Alpha"); b->add("Xray"); b->add("Yankee");
b->add("Oscar"); b->add("India"); b->add("Juliet");
b->add("Kilo"); b->add("Mike"); b->add("Sierra");
b->add("November"); b->add("Tango"); b->add("Quebec");
b->add("Bravo"); b->add("Romeo"); b->add("Uniform");
b->add("Whisky"); b->add("Zulu");
return(b);
}
MyTable *maketable(int X,int Y,int W,int H,const char*L=0) {
MyTable *mta = new MyTable(X,Y,W,H,L);
mta->align(FL_ALIGN_TOP);
mta->end();
return(mta);
}
void slide_cb2(Fl_Value_Slider *in) {
const char *label = in->label();
int val = int(in->value());
//fprintf(stderr, "VAL='%d'\n",val);
if ( strcmp(label,"A: Scroll Size") == 0 ) {
brow_a->scrollbar_size(val);
tree_a->scrollbar_size(val);
#if FLTK_ABI_VERSION >= 10301
// NEW
table_a->scrollbar_size(val);
#endif
} else {
Fl::scrollbar_size(val);
}
in->window()->redraw();
}
static void slide_cb(Fl_Widget *w, void *data) {
ScrollBarSizeTest *o = (ScrollBarSizeTest*)data;
o->slide_cb2((Fl_Value_Slider*)w);
}
public:
static Fl_Widget *create() {
return(new ScrollBarSizeTest(TESTAREA_X, TESTAREA_Y, TESTAREA_W, TESTAREA_H));
}
// CTOR
ScrollBarSizeTest(int X, int Y, int W, int H) : Fl_Group(X,Y,W,H) {
begin();
// _____________ _______________
// |_____________| |_______________|
// --- ----- <-- tgrpy
// brow_a brow_b brow_c | 14 |
// ---------- ---------- ---------- --- | <-- browy
// | | | | | | |browh |
// | | | | | | | |
// ---------- ---------- ---------- --- tgrph
// | |
// tree_a tree_b tree_c | 20 |
// ---------- ---------- ---------- --- | <-- treey
// | | | | | | |treeh |
// | | | | | | | |
// ---------- ---------- ---------- --- |
// | |
// table_a table_b table_c | 20 |
// ---------- ---------- ---------- --- | <-- tabley
// | | | | | | |tableh|
// | | | | | | | |
// ---------- ---------- ---------- --- ------
// etc..
int tgrpy = Y+30;
int tgrph = H-130;
int browy = tgrpy+14;
int browh = tgrph/3 - 20;
int treey = browy + browh + 20;
int treeh = browh;
int tabley = treey + treeh + 20;
int tableh = browh;
brow_a = makebrowser(X+ 10,browy,100,browh,"Browser A");
brow_b = makebrowser(X+120,browy,100,browh,"Browser B");
brow_c = makebrowser(X+230,browy,100,browh,"Browser C");
tree_a = maketree(X+ 10,treey,100,treeh,"Tree A");
tree_b = maketree(X+120,treey,100,treeh,"Tree B");
tree_c = maketree(X+230,treey,100,treeh,"Tree C");
table_a = maketable(X+ 10,tabley,100,tableh,"Table A");
table_b = maketable(X+120,tabley,100,tableh,"Table B");
table_c = maketable(X+230,tabley,100,tableh,"Table C");
Fl_Value_Slider *slide_glob = new Fl_Value_Slider(X+100,Y,100,18,"Global Scroll Size");
slide_glob->value(16);
slide_glob->type(FL_HORIZONTAL);
slide_glob->align(FL_ALIGN_LEFT);
slide_glob->range(0.0, 30.0);
slide_glob->step(1.0);
slide_glob->callback(slide_cb, (void*)this);
slide_glob->labelsize(12);
Fl_Value_Slider *slide_browa = new Fl_Value_Slider(X+350,Y,100,18,"A: Scroll Size");
slide_browa->value(0);
slide_browa->type(FL_HORIZONTAL);
slide_browa->align(FL_ALIGN_LEFT);
slide_browa->range(0.0, 30.0);
slide_browa->step(1.0);
slide_browa->callback(slide_cb, (void*)this);
slide_browa->labelsize(12);
end();
label("Verify global scroll sizing and per-widget scroll sizing.\n"
"Scrollbar's size should change interactively as size sliders are changed.\n"
"Changing 'Global Scroll Size' should affect all three browser's scrollbars UNLESS\n"
"the 'A: Scroll Size' slider is changed, in which case its value will take precedence\n"
#if FLTK_ABI_VERSION >= 10301
"for the 'A' group of widgets.");
#else
"for the 'A' group of widgets. (NOTE: 'table_a' does not currently support this)");
#endif
labelsize(10);
align(FL_ALIGN_INSIDE|FL_ALIGN_BOTTOM|FL_ALIGN_LEFT|FL_ALIGN_WRAP);
}
};
UnitTest scrollbarsize("scrollbar size", ScrollBarSizeTest::create);
//
// End of "$Id$"
//
|