diff --git a/examples/Makefile b/examples/Makefile index 44132068f..0a8f0b4a8 100644 --- a/examples/Makefile +++ b/examples/Makefile @@ -4,6 +4,7 @@ ALL = howto-add_fd-and-popen$(EXEEXT) \ howto-parse-args$(EXEEXT) \ howto-text-over-image-button$(EXEEXT) \ table-as-container$(EXEEXT) \ + table-simple$(EXEEXT) \ table-with-keyboard-nav$(EXEEXT) \ tabs-simple$(EXEEXT) \ tree-simple$(EXEEXT) \ diff --git a/examples/table-simple.cxx b/examples/table-simple.cxx new file mode 100644 index 000000000..63c62b854 --- /dev/null +++ b/examples/table-simple.cxx @@ -0,0 +1,125 @@ +// +// "$Id$" +// +// Simple example of using Fl_Table - Greg Ercolano 11/29/2010 +// +// Demonstrates the simplest use of Fl_Table possible. +// Display a 10x10 array of integers with row/col headers. +// No interaction; simple display of data only. +// See other examples for more complex interactions with the table. +// +// Copyright 1998-2010 by Bill Spitzak and others. +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Library General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Library General Public License for more details. +// +// You should have received a copy of the GNU Library General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +// USA. +// +// Please report all bugs and problems on the following page: +// +// http://www.fltk.org/str.php +// +#include +#include +#include +#include + +// Derive a class from Fl_Table +class MyTable : public Fl_Table { + + int data[10][10]; // our 10x10 data array + + // Draw the row/col headings + // Make this a dark thin upbox with the text inside. + // + void DrawHeader(const char *s, int X, int Y, int W, int H) { + fl_push_clip(X,Y,W,H); + fl_draw_box(FL_THIN_UP_BOX, X,Y,W,H, row_header_color()); + fl_color(FL_BLACK); + fl_draw(s, X,Y,W,H, FL_ALIGN_CENTER); + fl_pop_clip(); + } + // Draw the cell data + // Dark gray text on white background with subtle border + // + void DrawData(const char *s, int X, int Y, int W, int H) { + 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_DARK3); 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(); + } + // 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[40]; + switch ( context ) { + case CONTEXT_STARTPAGE: // before page is drawn.. + fl_font(FL_HELVETICA, 16); // set the font for our drawing operations + return; + case CONTEXT_COL_HEADER: // Draw column headers + sprintf(s,"%c",'A'+COL); // "A", "B", "C", etc. + DrawHeader(s,X,Y,W,H); + return; + case CONTEXT_ROW_HEADER: // Draw row headers + sprintf(s,"%03d:",ROW); // "001:", "002:", etc + DrawHeader(s,X,Y,W,H); + return; + case CONTEXT_CELL: // Draw data in cells + sprintf(s,"%d",data[ROW][COL]); + DrawData(s,X,Y,W,H); + 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) { + // Fill data array + for ( int x=0; x<10; x++ ) + for ( int y=0; y<10; y++ ) + data[x][y] = 1000+x*1000+y; + // Rows + rows(10); // how many rows + row_header(1); // enable row headers (along left) + row_height_all(20); // default height of rows + row_resize(0); // disable row resizing + // Cols + cols(10); // how many columns + col_header(1); // enable column headers (along top) + col_width_all(80); // default width of columns + col_resize(1); // enable column resizing + } + ~MyTable() { } +}; + +int main(int argc, char **argv) { + Fl_Window win(900, 400, "Simple Table"); + MyTable table(10,10,880,380); + win.end(); + win.resizable(table); + win.show(argc,argv); + return(Fl::run()); +} + +// +// End of "$Id$". +//