You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

166 lines
6.9KB

  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. #include <FL/Fl_Group.H>
  28. #include <FL/Fl_Browser.H>
  29. #include <FL/Fl_Tree.H>
  30. #include <FL/Fl_Value_Slider.H>
  31. //
  32. // Test new 1.3.x global vs. local scrollbar sizing
  33. //
  34. class ScrollBarSizeTest : public Fl_Group {
  35. Fl_Browser *brow_a, *brow_b, *brow_c;
  36. Fl_Tree *tree_a, *tree_b, *tree_c;
  37. Fl_Browser *makebrowser(int X,int Y,int W,int H,const char*L=0) {
  38. Fl_Browser *b = new Fl_Browser(X,Y,W,H,L);
  39. b->type(FL_MULTI_BROWSER);
  40. b->align(FL_ALIGN_TOP);
  41. b->add("Papa"); b->add("Delta"); b->add("Hotel");
  42. b->add("Long entry will show h-bar");
  43. b->add("Charlie"); b->add("Echo"); b->add("Foxtrot");
  44. b->add("Golf"); b->add("Lima"); b->add("Victor");
  45. b->add("Alpha"); b->add("Xray"); b->add("Yankee");
  46. b->add("Oscar"); b->add("India"); b->add("Juliet");
  47. b->add("Kilo"); b->add("Mike"); b->add("Sierra");
  48. b->add("November"); b->add("Tango"); b->add("Quebec");
  49. b->add("Bravo"); b->add("Romeo"); b->add("Uniform");
  50. b->add("Whisky"); b->add("Zulu");
  51. b->add("Papa"); b->add("Delta"); b->add("Hotel");
  52. b->add("Charlie"); b->add("Echo"); b->add("Foxtrot");
  53. b->add("Golf"); b->add("Lima"); b->add("Victor");
  54. b->add("Alpha"); b->add("Xray"); b->add("Yankee");
  55. b->add("Oscar"); b->add("India"); b->add("Juliet");
  56. b->add("Kilo"); b->add("Mike"); b->add("Sierra");
  57. b->add("November"); b->add("Tango"); b->add("Quebec");
  58. b->add("Bravo"); b->add("Romeo"); b->add("Uniform");
  59. b->add("Whisky"); b->add("Zulu");
  60. return(b);
  61. }
  62. Fl_Tree *maketree(int X,int Y,int W,int H,const char*L=0) {
  63. Fl_Tree *b = new Fl_Tree(X,Y,W,H,L);
  64. b->type(FL_TREE_SELECT_MULTI);
  65. b->align(FL_ALIGN_TOP);
  66. b->add("Papa"); b->add("Delta"); b->add("Hotel");
  67. b->add("Long entry will show h-bar");
  68. b->add("Charlie"); b->add("Echo"); b->add("Foxtrot");
  69. b->add("Golf"); b->add("Lima"); b->add("Victor");
  70. b->add("Alpha"); b->add("Xray"); b->add("Yankee");
  71. b->add("Oscar"); b->add("India"); b->add("Juliet");
  72. b->add("Kilo"); b->add("Mike"); b->add("Sierra");
  73. b->add("November"); b->add("Tango"); b->add("Quebec");
  74. b->add("Bravo"); b->add("Romeo"); b->add("Uniform");
  75. b->add("Whisky"); b->add("Zulu");
  76. return(b);
  77. }
  78. void slide_cb2(Fl_Value_Slider *in) {
  79. const char *label = in->label();
  80. int val = int(in->value());
  81. //fprintf(stderr, "VAL='%d'\n",val);
  82. if ( strcmp(label,"A: Scroll Size") == 0 ) {
  83. brow_a->scrollbar_size(val);
  84. tree_a->scrollbar_size(val);
  85. } else {
  86. Fl::scrollbar_size(val);
  87. }
  88. in->window()->redraw();
  89. }
  90. static void slide_cb(Fl_Widget *w, void *data) {
  91. ScrollBarSizeTest *o = (ScrollBarSizeTest*)data;
  92. o->slide_cb2((Fl_Value_Slider*)w);
  93. }
  94. public:
  95. static Fl_Widget *create() {
  96. return(new ScrollBarSizeTest(TESTAREA_X, TESTAREA_Y, TESTAREA_W, TESTAREA_H));
  97. }
  98. // CTOR
  99. ScrollBarSizeTest(int X, int Y, int W, int H) : Fl_Group(X,Y,W,H) {
  100. begin();
  101. // _____________ _______________
  102. // |_____________| |_______________|
  103. // --- ----- <-- tgrpy
  104. // brow_a brow_b brow_c | 14 |
  105. // ---------- ---------- ---------- --- | <-- browy
  106. // | | | | | | | |
  107. // | | | | | | |browh |
  108. // | | | | | | | |
  109. // ---------- ---------- ---------- --- tgrph
  110. // | |
  111. // tree_a tree_b tree_c | 20 |
  112. // ---------- ---------- ---------- --- | <-- treey
  113. // | | | | | | | |
  114. // | | | | | | |treeh |
  115. // | | | | | | | |
  116. // ---------- ---------- ---------- --- ------
  117. //
  118. int tgrpy = Y+30;
  119. int tgrph = H-130;
  120. int browy = tgrpy+14;
  121. int browh = tgrph/2 - 20;
  122. int treey = browy + browh + 20;
  123. int treeh = browh;
  124. brow_a = makebrowser(X+ 10,browy,100,browh,"Browser A");
  125. brow_b = makebrowser(X+120,browy,100,browh,"Browser B");
  126. brow_c = makebrowser(X+240,browy,100,browh,"Browser C");
  127. tree_a = maketree(X+ 10,treey,100,treeh,"Tree A");
  128. tree_b = maketree(X+120,treey,100,treeh,"Tree B");
  129. tree_c = maketree(X+240,treey,100,treeh,"Tree C");
  130. Fl_Value_Slider *slide_glob = new Fl_Value_Slider(X+100,Y,100,18,"Global Scroll Size");
  131. slide_glob->value(16);
  132. slide_glob->type(FL_HORIZONTAL);
  133. slide_glob->align(FL_ALIGN_LEFT);
  134. slide_glob->range(0.0, 30.0);
  135. slide_glob->step(1.0);
  136. slide_glob->callback(slide_cb, (void*)this);
  137. slide_glob->labelsize(12);
  138. Fl_Value_Slider *slide_browa = new Fl_Value_Slider(X+350,Y,100,18,"A: Scroll Size");
  139. slide_browa->value(16);
  140. slide_browa->type(FL_HORIZONTAL);
  141. slide_browa->align(FL_ALIGN_LEFT);
  142. slide_browa->range(0.0, 30.0);
  143. slide_browa->step(1.0);
  144. slide_browa->callback(slide_cb, (void*)this);
  145. slide_browa->labelsize(12);
  146. end();
  147. label("Verify global scroll sizing and per-widget scroll sizing.\n"
  148. "Scrollbar's size should change interactively as size sliders are changed.\n"
  149. "Changing 'Global Scroll Size' should affect all three browser's scrollbars UNLESS\n"
  150. "the 'A: Scroll Size' slider is changed, in which case its value will take precedence\n"
  151. "for 'Browser A', and the global size will only affect Browser B and C.");
  152. labelsize(12);
  153. align(FL_ALIGN_INSIDE|FL_ALIGN_BOTTOM|FL_ALIGN_LEFT|FL_ALIGN_WRAP);
  154. }
  155. };
  156. UnitTest scrollbarsize("scrollbar size", ScrollBarSizeTest::create);
  157. //
  158. // End of "$Id: unittest_scrollbarsize.cxx 7913 2010-11-29 18:18:27Z greg.ercolano $"
  159. //