Blame test/unittest_scrollbarsize.cxx

Packit Service 9ac617
//
Packit Service 9ac617
// "$Id: unittest_scrollbarsize.cxx 9706 2012-11-06 20:46:14Z matt $"
Packit Service 9ac617
//
Packit Service 9ac617
// Unit tests for the Fast Light Tool Kit (FLTK).
Packit Service 9ac617
//
Packit Service 9ac617
// Copyright 1998-2010 by Bill Spitzak and others.
Packit Service 9ac617
//
Packit Service 9ac617
// This library is free software. Distribution and use rights are outlined in
Packit Service 9ac617
// the file "COPYING" which should have been included with this file.  If this
Packit Service 9ac617
// file is missing or damaged, see the license at:
Packit Service 9ac617
//
Packit Service 9ac617
//     http://www.fltk.org/COPYING.php
Packit Service 9ac617
//
Packit Service 9ac617
// Please report all bugs and problems on the following page:
Packit Service 9ac617
//
Packit Service 9ac617
//     http://www.fltk.org/str.php
Packit Service 9ac617
//
Packit Service 9ac617
Packit Service 9ac617
#include <FL/Fl_Group.H>
Packit Service 9ac617
#include <FL/Fl_Browser.H>
Packit Service 9ac617
#include <FL/Fl_Tree.H>
Packit Service 9ac617
#include <FL/Fl_Table.H>
Packit Service 9ac617
#include <FL/Fl_Value_Slider.H>
Packit Service 9ac617
Packit Service 9ac617
//
Packit Service 9ac617
// Test new 1.3.x global vs. local scrollbar sizing
Packit Service 9ac617
//
Packit Service 9ac617
class MyTable : public Fl_Table {
Packit Service 9ac617
  // Handle drawing table's cells
Packit Service 9ac617
  //     Fl_Table calls this function to draw each visible cell in the table.
Packit Service 9ac617
  //     It's up to us to use FLTK's drawing functions to draw the cells the way we want.
Packit Service 9ac617
  //
Packit Service 9ac617
  void draw_cell(TableContext context, int ROW=0, int COL=0, int X=0, int Y=0, int W=0, int H=0) {
Packit Service 9ac617
    static char s[10];
Packit Service 9ac617
    switch ( context ) {
Packit Service 9ac617
      case CONTEXT_STARTPAGE:                   // before page is drawn..
Packit Service 9ac617
	fl_font(FL_HELVETICA, 8);               // set font for drawing operations
Packit Service 9ac617
	return; 
Packit Service 9ac617
      case CONTEXT_CELL:                        // Draw data in cells
Packit Service 9ac617
        sprintf(s, "%c", 'A'+ROW+COL);
Packit Service 9ac617
	fl_push_clip(X,Y,W,H);
Packit Service 9ac617
	  // Draw cell bg
Packit Service 9ac617
	  fl_color(FL_WHITE); fl_rectf(X,Y,W,H);
Packit Service 9ac617
	  // Draw cell data
Packit Service 9ac617
	  fl_color(FL_GRAY0); fl_draw(s, X,Y,W,H, FL_ALIGN_CENTER);
Packit Service 9ac617
	  // Draw box border
Packit Service 9ac617
	  fl_color(color()); fl_rect(X,Y,W,H);
Packit Service 9ac617
	fl_pop_clip();
Packit Service 9ac617
	return;
Packit Service 9ac617
      default:
Packit Service 9ac617
	return;
Packit Service 9ac617
    }
Packit Service 9ac617
  }
Packit Service 9ac617
  public:
Packit Service 9ac617
  // Constructor
Packit Service 9ac617
  //     Make our data array, and initialize the table options.
Packit Service 9ac617
  //
Packit Service 9ac617
  MyTable(int X, int Y, int W, int H, const char *L=0) : Fl_Table(X,Y,W,H,L) {
Packit Service 9ac617
    // Rows
Packit Service 9ac617
    rows(13);                   // how many rows
Packit Service 9ac617
    row_height_all(10);         // default height of rows
Packit Service 9ac617
    // Cols
Packit Service 9ac617
    cols(13);                   // how many columns
Packit Service 9ac617
    col_width_all(10);          // default width of columns
Packit Service 9ac617
    end();			// end the Fl_Table group
Packit Service 9ac617
  }
Packit Service 9ac617
  ~MyTable() { }
Packit Service 9ac617
};
Packit Service 9ac617
Packit Service 9ac617
class ScrollBarSizeTest : public Fl_Group {
Packit Service 9ac617
    Fl_Browser *brow_a, *brow_b, *brow_c;
Packit Service 9ac617
    Fl_Tree    *tree_a, *tree_b, *tree_c;
Packit Service 9ac617
    MyTable    *table_a,*table_b,*table_c;
Packit Service 9ac617
Packit Service 9ac617
    Fl_Browser *makebrowser(int X,int Y,int W,int H,const char*L=0) {
Packit Service 9ac617
	Fl_Browser *b = new Fl_Browser(X,Y,W,H,L);
Packit Service 9ac617
	b->type(FL_MULTI_BROWSER);
Packit Service 9ac617
	b->align(FL_ALIGN_TOP);
Packit Service 9ac617
	b->add("Papa");     b->add("Delta"); b->add("Hotel");
Packit Service 9ac617
        b->add("Long entry will show h-bar");
Packit Service 9ac617
	b->add("Charlie");  b->add("Echo");  b->add("Foxtrot");
Packit Service 9ac617
	b->add("Golf");     b->add("Lima");  b->add("Victor");
Packit Service 9ac617
	b->add("Alpha");    b->add("Xray");  b->add("Yankee");
Packit Service 9ac617
	b->add("Oscar");    b->add("India"); b->add("Juliet");
Packit Service 9ac617
	b->add("Kilo");     b->add("Mike");  b->add("Sierra");
Packit Service 9ac617
	b->add("November"); b->add("Tango"); b->add("Quebec");
Packit Service 9ac617
	b->add("Bravo");    b->add("Romeo"); b->add("Uniform");
Packit Service 9ac617
	b->add("Whisky");   b->add("Zulu");
Packit Service 9ac617
	b->add("Papa");     b->add("Delta"); b->add("Hotel");
Packit Service 9ac617
	b->add("Charlie");  b->add("Echo");  b->add("Foxtrot");
Packit Service 9ac617
	b->add("Golf");     b->add("Lima");  b->add("Victor");
Packit Service 9ac617
	b->add("Alpha");    b->add("Xray");  b->add("Yankee");
Packit Service 9ac617
	b->add("Oscar");    b->add("India"); b->add("Juliet");
Packit Service 9ac617
	b->add("Kilo");     b->add("Mike");  b->add("Sierra");
Packit Service 9ac617
	b->add("November"); b->add("Tango"); b->add("Quebec");
Packit Service 9ac617
	b->add("Bravo");    b->add("Romeo"); b->add("Uniform");
Packit Service 9ac617
	b->add("Whisky");   b->add("Zulu");
Packit Service 9ac617
	return(b);
Packit Service 9ac617
    }
Packit Service 9ac617
    Fl_Tree *maketree(int X,int Y,int W,int H,const char*L=0) {
Packit Service 9ac617
	Fl_Tree *b = new Fl_Tree(X,Y,W,H,L);
Packit Service 9ac617
	b->type(FL_TREE_SELECT_MULTI);
Packit Service 9ac617
	b->align(FL_ALIGN_TOP);
Packit Service 9ac617
	b->add("Papa");     b->add("Delta"); b->add("Hotel");
Packit Service 9ac617
        b->add("Long entry will show h-bar");
Packit Service 9ac617
	b->add("Charlie");  b->add("Echo");  b->add("Foxtrot");
Packit Service 9ac617
	b->add("Golf");     b->add("Lima");  b->add("Victor");
Packit Service 9ac617
	b->add("Alpha");    b->add("Xray");  b->add("Yankee");
Packit Service 9ac617
	b->add("Oscar");    b->add("India"); b->add("Juliet");
Packit Service 9ac617
	b->add("Kilo");     b->add("Mike");  b->add("Sierra");
Packit Service 9ac617
	b->add("November"); b->add("Tango"); b->add("Quebec");
Packit Service 9ac617
	b->add("Bravo");    b->add("Romeo"); b->add("Uniform");
Packit Service 9ac617
	b->add("Whisky");   b->add("Zulu");
Packit Service 9ac617
	return(b);
Packit Service 9ac617
    }
Packit Service 9ac617
    MyTable *maketable(int X,int Y,int W,int H,const char*L=0) {
Packit Service 9ac617
	MyTable *mta = new MyTable(X,Y,W,H,L);
Packit Service 9ac617
	mta->align(FL_ALIGN_TOP);
Packit Service 9ac617
	mta->end();
Packit Service 9ac617
	return(mta);
Packit Service 9ac617
    }
Packit Service 9ac617
    void slide_cb2(Fl_Value_Slider *in) {
Packit Service 9ac617
	const char *label = in->label();
Packit Service 9ac617
	int val = int(in->value());
Packit Service 9ac617
	//fprintf(stderr, "VAL='%d'\n",val);
Packit Service 9ac617
	if ( strcmp(label,"A: Scroll Size") == 0 ) {
Packit Service 9ac617
	    brow_a->scrollbar_size(val);
Packit Service 9ac617
	    tree_a->scrollbar_size(val);
Packit Service 9ac617
#if FLTK_ABI_VERSION >= 10301
Packit Service 9ac617
	    // NEW
Packit Service 9ac617
	    table_a->scrollbar_size(val);
Packit Service 9ac617
#endif
Packit Service 9ac617
	} else {
Packit Service 9ac617
	    Fl::scrollbar_size(val);
Packit Service 9ac617
	}
Packit Service 9ac617
	in->window()->redraw();
Packit Service 9ac617
    }
Packit Service 9ac617
    static void slide_cb(Fl_Widget *w, void *data) {
Packit Service 9ac617
        ScrollBarSizeTest *o = (ScrollBarSizeTest*)data;
Packit Service 9ac617
	o->slide_cb2((Fl_Value_Slider*)w);
Packit Service 9ac617
    }
Packit Service 9ac617
public: 
Packit Service 9ac617
    static Fl_Widget *create() {
Packit Service 9ac617
      return(new ScrollBarSizeTest(TESTAREA_X, TESTAREA_Y, TESTAREA_W, TESTAREA_H));
Packit Service 9ac617
    }
Packit Service 9ac617
Packit Service 9ac617
    // CTOR
Packit Service 9ac617
    ScrollBarSizeTest(int X, int Y, int W, int H) : Fl_Group(X,Y,W,H) {
Packit Service 9ac617
      begin();
Packit Service 9ac617
        //      _____________    _______________
Packit Service 9ac617
        //     |_____________|  |_______________|
Packit Service 9ac617
        //                                                ---   -----  <-- tgrpy
Packit Service 9ac617
        //       brow_a      brow_b      brow_c            | 14   | 
Packit Service 9ac617
        //     ----------  ----------  ----------         ---     |    <-- browy
Packit Service 9ac617
        //     |        |  |        |  |        |          |browh |
Packit Service 9ac617
        //     |        |  |        |  |        |          |      |
Packit Service 9ac617
        //     ----------  ----------  ----------         ---   tgrph 
Packit Service 9ac617
        //                                                 |      |
Packit Service 9ac617
        //       tree_a      tree_b      tree_c            | 20   | 
Packit Service 9ac617
        //     ----------  ----------  ----------         ---     |    <-- treey
Packit Service 9ac617
        //     |        |  |        |  |        |          |treeh |
Packit Service 9ac617
        //     |        |  |        |  |        |          |      |
Packit Service 9ac617
        //     ----------  ----------  ----------         ---     |
Packit Service 9ac617
        //                                                 |      |
Packit Service 9ac617
        //      table_a     table_b     table_c            | 20   | 
Packit Service 9ac617
        //     ----------  ----------  ----------         ---     |    <-- tabley
Packit Service 9ac617
        //     |        |  |        |  |        |          |tableh|
Packit Service 9ac617
        //     |        |  |        |  |        |          |      |
Packit Service 9ac617
        //     ----------  ----------  ----------         ---  ------
Packit Service 9ac617
        //  etc..
Packit Service 9ac617
        int tgrpy = Y+30;
Packit Service 9ac617
        int tgrph = H-130;
Packit Service 9ac617
        int browy = tgrpy+14;
Packit Service 9ac617
        int browh = tgrph/3 - 20;
Packit Service 9ac617
        int treey = browy + browh + 20;
Packit Service 9ac617
        int treeh = browh;
Packit Service 9ac617
        int tabley = treey + treeh + 20;
Packit Service 9ac617
        int tableh = browh;
Packit Service 9ac617
        brow_a = makebrowser(X+ 10,browy,100,browh,"Browser A");
Packit Service 9ac617
        brow_b = makebrowser(X+120,browy,100,browh,"Browser B");
Packit Service 9ac617
        brow_c = makebrowser(X+230,browy,100,browh,"Browser C");
Packit Service 9ac617
        tree_a = maketree(X+ 10,treey,100,treeh,"Tree A");
Packit Service 9ac617
        tree_b = maketree(X+120,treey,100,treeh,"Tree B");
Packit Service 9ac617
        tree_c = maketree(X+230,treey,100,treeh,"Tree C");
Packit Service 9ac617
        table_a = maketable(X+ 10,tabley,100,tableh,"Table A");
Packit Service 9ac617
        table_b = maketable(X+120,tabley,100,tableh,"Table B");
Packit Service 9ac617
        table_c = maketable(X+230,tabley,100,tableh,"Table C");
Packit Service 9ac617
        Fl_Value_Slider *slide_glob = new Fl_Value_Slider(X+100,Y,100,18,"Global Scroll Size");
Packit Service 9ac617
        slide_glob->value(16);
Packit Service 9ac617
        slide_glob->type(FL_HORIZONTAL);
Packit Service 9ac617
        slide_glob->align(FL_ALIGN_LEFT);
Packit Service 9ac617
        slide_glob->range(0.0, 30.0);
Packit Service 9ac617
        slide_glob->step(1.0);
Packit Service 9ac617
        slide_glob->callback(slide_cb, (void*)this);
Packit Service 9ac617
        slide_glob->labelsize(12);
Packit Service 9ac617
        Fl_Value_Slider *slide_browa = new Fl_Value_Slider(X+350,Y,100,18,"A: Scroll Size");
Packit Service 9ac617
        slide_browa->value(0);
Packit Service 9ac617
        slide_browa->type(FL_HORIZONTAL);
Packit Service 9ac617
        slide_browa->align(FL_ALIGN_LEFT);
Packit Service 9ac617
        slide_browa->range(0.0, 30.0);
Packit Service 9ac617
        slide_browa->step(1.0);
Packit Service 9ac617
        slide_browa->callback(slide_cb, (void*)this);
Packit Service 9ac617
        slide_browa->labelsize(12);
Packit Service 9ac617
      end();
Packit Service 9ac617
      label("Verify global scroll sizing and per-widget scroll sizing.\n"
Packit Service 9ac617
	    "Scrollbar's size should change interactively as size sliders are changed.\n"
Packit Service 9ac617
            "Changing 'Global Scroll Size' should affect all three browser's scrollbars UNLESS\n"
Packit Service 9ac617
	    "the 'A: Scroll Size' slider is changed, in which case its value will take precedence\n"
Packit Service 9ac617
#if FLTK_ABI_VERSION >= 10301
Packit Service 9ac617
	    "for the 'A' group of widgets.");
Packit Service 9ac617
#else
Packit Service 9ac617
	    "for the 'A' group of widgets. (NOTE: 'table_a' does not currently support this)");
Packit Service 9ac617
#endif
Packit Service 9ac617
      labelsize(10);
Packit Service 9ac617
      align(FL_ALIGN_INSIDE|FL_ALIGN_BOTTOM|FL_ALIGN_LEFT|FL_ALIGN_WRAP);
Packit Service 9ac617
    }
Packit Service 9ac617
};
Packit Service 9ac617
Packit Service 9ac617
UnitTest scrollbarsize("scrollbar size", ScrollBarSizeTest::create);
Packit Service 9ac617
Packit Service 9ac617
//
Packit Service 9ac617
// End of "$Id: unittest_scrollbarsize.cxx 9706 2012-11-06 20:46:14Z matt $"
Packit Service 9ac617
//