edelib  2.1.0
Classes | Public Types | Public Member Functions | List of all members
TableBase Class Reference

A base class for table widgets. More...

#include <edelib/TableBase.h>

Inheritance diagram for TableBase:

Public Types

enum  TableContext {
  CONTEXT_NONE = 0, CONTEXT_STARTPAGE = 0x01, CONTEXT_ENDPAGE = 0x02, CONTEXT_ROW_HEADER = 0x04,
  CONTEXT_COL_HEADER = 0x08, CONTEXT_CELL = 0x10, CONTEXT_TABLE = 0x20, CONTEXT_RC_RESIZE = 0x40
}
 What happened in table callback. More...
 

Public Member Functions

 TableBase (int X, int Y, int W, int H, const char *l=0)
 
 ~TableBase ()
 
virtual void clear ()
 
void table_box (Fl_Boxtype val)
 
Fl_Boxtype table_box (void)
 
virtual void rows (int val)
 
int rows ()
 
virtual void cols (int val)
 
int cols ()
 
void visible_cells (int &r1, int &r2, int &c1, int &c2)
 
int is_interactive_resize ()
 
void row_resize (int flag)
 
int row_resize ()
 
void col_resize (int flag)
 
int col_resize ()
 
void col_resize_min (int val)
 
int col_resize_min ()
 
void row_resize_min (int val)
 
int row_resize_min ()
 
void row_header (int flag)
 
int row_header ()
 
void col_header (int flag)
 
int col_header ()
 
void col_header_height (int height)
 
int col_header_height ()
 
void row_header_width (int width)
 
int row_header_width ()
 
void row_header_color (Fl_Color val)
 
Fl_Color row_header_color ()
 
void col_header_color (Fl_Color val)
 
Fl_Color col_header_color ()
 
void row_height (int row, int height)
 
int row_height (int row)
 
void col_width (int col, int width)
 
int col_width (int col)
 
void row_height_all (int height)
 
void col_width_all (int width)
 
void row_position (int row)
 
int row_position ()
 
void col_position (int col)
 
int col_position ()
 
void top_row (int row)
 
int top_row ()
 
int is_selected (int r, int c)
 
void get_selection (int &s_top, int &s_left, int &s_bottom, int &s_right)
 
void set_selection (int s_top, int s_left, int s_bottom, int s_right)
 
int move_cursor (int R, int C)
 
void resize (int X, int Y, int W, int H)
 
void draw (void)
 
void init_sizes ()
 
void add (Fl_Widget &widget)
 
void add (Fl_Widget *widget)
 
void insert (Fl_Widget &widget, int n)
 
void insert (Fl_Widget &widget1, Fl_Widget *widget2)
 
void remove (Fl_Widget &widget)
 
void begin ()
 
void end ()
 
int callback_row ()
 
int callback_col ()
 
TableContext callback_context ()
 
void do_callback (TableContext context, int row, int col)
 

Detailed Description

A base class for table widgets.

TableBase is incarnation of excelent Fl_Table widget, written by Greg Ercolano. To be useful, it must be subclassed and several virtual functions defined.

This widget does not handle the data in the table. draw_cell() must be overridden by a subclass to manage drawing the content of the cells.

Drawing (and callbacks, later explained) are done via contexts. Contexts shows what parts should be redrawn or are changed by user when callbacks are used.

See Also
TableContext

Here is the simple table implementation:

* // table callback
* void table_cb(Fl_Widget*, void* data) {
* MyTable* t = (MyTable*)data;
* t->table_callback();
* }
*
* class MyTable : public TableBase {
* protected:
* void draw_cell(TableContext context, int R, int C, int X, int Y, int W, int H) {
* switch(context):
* // When table or parts of the table are about to be redraw. Use it to initialize
* // static data such a font selections or to lock a database before accessing.
* // Here R and C will be zero and X, Y, W and H will have table dimensions.
* break;
* // When table has completed being redrawn. Useful for unlocking a database after accessing.
* // Here R and C will be zero and X, Y, W and H will have table dimensions.
* break;
* // When row header cell needs to be redrawn
* // When columnt header cell needs to be redrawn
* // Our table has both row and column headers so draw it
* fl_push_clip(X, Y, W, H);
* fl_draw_box(FL_UP_BOX, X, Y, W, H, color());
* fl_color(FL_BLACK);
*
* // draw "demo" label in each header cell
* fl_draw("demo", X, Y, W, H, FL_ALIGN_LEFT);
* fl_pop_clip();
* break;
* case CONTEXT_CELL:
* // When data in cells needs to be redrawn
* // Here, each cells will have borders and contains "foo" label
* fl_push_clip(X, Y, W, H);
*
* // background color
* fl_color(FL_WHITE);
* fl_rectf(X, Y, W, H);
*
* // text
* fl_color(FL_BLACK);
* fl_draw("foo", X, Y, W, H, FL_ALIGN_CENTER);
*
* // border
* fl_color(FL_GRAY);
* fl_rect(X, Y, W, H);
*
* fl_pop_clip();
* break;
* default:
* break;
* }
*
* public:
* MyTable() {
* // table used frames, not boxes
* box(FL_DOWN_FRAME);
* // let we get all events
* when(FL_WHEN_CHANGED | FL_WHEN_RELEASED);
* // register our callback
* callback(table_cb, this);
* }
*
* void table_callback() {
* // changed row
* int R = callback_row();
* // changed column
* int C = callback_col();
* // context
*
* if(context == CONTEXT_ROW_HEADER) {
* // clicked on a row header
* // excludes resizing
* } else if(context == CONTEXT_COL_HEADER) {
* // clicked on a column header
* // excludes resizing
* } else if(context == CONTEXT_CELL) {
* // clicked on a cell
* // to receive callback for FL_RELEASE events, you must set when(FL_WHEN_RELEASE)
* } else if(context == CONTEXT_RC_RESIZE) {
* // resized columns or rows interactively or via col_width() and row_height()
* // is_interactive_resize() should be used to determine interactive resize
* //
* // if row is resized, R will have row number and C will be 0
* // if column is resized, C will have column number and R will be 0
* //
* // to receive resize evenys, you must set when(FL_WHEN_CHANGED)
* }
* }
* };
*

Since TableBase is inherited from Fl_Group, it can be container for FLTK widgets too. In that case there is no need to use CONTEXT_CELL in draw_cell() and draw widgets: they will be drawn by itself. The only thing you should use is to add() them, as any other widget is addet to Fl_Group.

Member Enumeration Documentation

What happened in table callback.

Enumerator
CONTEXT_STARTPAGE 

before a page is redrawn

CONTEXT_ENDPAGE 

after a page is redrawn

CONTEXT_ROW_HEADER 

in the row header

CONTEXT_COL_HEADER 

in the col header

CONTEXT_CELL 

in one of the cells

CONTEXT_TABLE 

in the table

CONTEXT_RC_RESIZE 

column or row being resized

Constructor & Destructor Documentation

TableBase ( int  X,
int  Y,
int  W,
int  H,
const char *  l = 0 
)

The constructor that creates empty table with no rows or columns. Resizing of rows or columns is disabled. Header is not drawn too.

~TableBase ( )

Destroys the table and associated widgets

Member Function Documentation

void add ( Fl_Widget &  widget)
inline

Append widget to the table

void add ( Fl_Widget *  widget)
inline

Append widget to the table

void begin ( void  )
inline

Same as Fl_Group::begin()

int callback_col ( )
inline

Returns the current column event occured on. This function should be used from user's callback set with callback()

TableContext callback_context ( )
inline

Returns current TableContext

int callback_row ( )
inline

Returns the current row event occured on. This function should be used from user's callback set with callback()

virtual void clear ( void  )
inlinevirtual

Clears the table

void col_header ( int  flag)
inline

Enable or disable showing column headers. 1 will enable them and 0 will disable them. Table will be redrawn after this call

int col_header ( )
inline

Returns 1 if column headers are shown or 0 if not

void col_header_color ( Fl_Color  val)
inline

Sets the column header color. Table will be then redrawn

Fl_Color col_header_color ( )
inline

Returns the current column header color

void col_header_height ( int  height)
inline

Sets the column header heights. Table will be then redrawn

int col_header_height ( )
inline

Returns the column header heights

void col_position ( int  col)

Sets the table's current column scroll position

int col_position ( )
inline

Returns the current columnscroll position

void col_resize ( int  flag)
inline

Allow or disallow column resizing. If 1 is used, column will be resized; 0 is for opposite. Since interactive resizing is done via the column headers, col_header() must also be enabled to allow resizing

int col_resize ( )
inline

Returns 1 if column can be resized or 0 if not

void col_resize_min ( int  val)
inline

Sets the current column minimum resize value. Must be a value >= 1

int col_resize_min ( )
inline

Returns the current column minimum resize value

void col_width ( int  col,
int  width 
)

Sets the width of the specified column in pixels and table is redrawn. callback() will be invoked with CONTEXT_RC_RESIZE if the column's width was actually changed and when() is FL_WHEN_CHANGED

int col_width ( int  col)
inline

Returns the current height of specified column

void col_width_all ( int  width)
inline

Sets the width of all columns to the same value. Table is redrawn then

virtual void cols ( int  val)
virtual

Sets the number of columns in the table. Table is redraw

int cols ( )
inline

Returns the number of columns in the table

void do_callback ( TableContext  context,
int  row,
int  col 
)
inline

Execute user's callback with given TableContext, row and column

void draw ( void  )

Draw the table (called by FLTK)

void end ( void  )
inline

Same as Fl_Group::end()

void get_selection ( int &  s_top,
int &  s_left,
int &  s_bottom,
int &  s_right 
)

Returns selected rows and columns. Values will be leftmost/rightmost column and topmost/bottommost rows

This function is used to return bounds of multiple selected cells

void init_sizes ( )
inline

Calls Fl_Group::init_sizes(). Table will be redrawn

void insert ( Fl_Widget &  widget,
int  n 
)
inline

Same as Fl_Group::insert()

void insert ( Fl_Widget &  widget1,
Fl_Widget *  widget2 
)
inline

Same as Fl_Group::insert()

int is_interactive_resize ( )
inline

Returns 1 if row or column is interactively resized or 0 if not

int is_selected ( int  r,
int  c 
)

Returns 1 if the cell with the given row and column values is selected

int move_cursor ( int  R,
int  C 
)

Selects cell at the given row/column position

Todo:
This function should be called select_cell() or similar
void remove ( Fl_Widget &  widget)
inline

Remove a widget from the table

void resize ( int  X,
int  Y,
int  W,
int  H 
)

Resize table. Table is redrawn

void row_header ( int  flag)
inline

Enable or disable showing row headers. 1 will enable them and 0 will disable them. Table will be redrawn after this call

int row_header ( )
inline

Returns 1 if row headers are shown or 0 if not

void row_header_color ( Fl_Color  val)
inline

Sets the row header color. Table will be then redrawn

Fl_Color row_header_color ( )
inline

Returns the current row header color

void row_header_width ( int  width)
inline

Sets the row header heights. Table will be then redrawn

int row_header_width ( )
inline

Returns the row header heights

void row_height ( int  row,
int  height 
)

Sets the height of the specified row in pixels and table is redrawn. callback() will be invoked with CONTEXT_RC_RESIZE if the row's height was actually changed and when() is FL_WHEN_CHANGED

int row_height ( int  row)
inline

Returns the current height of specified row

void row_height_all ( int  height)
inline

Sets the height of all rows to the same value. Table is redrawn then

void row_position ( int  row)

Sets the table's current row scroll position

int row_position ( )
inline

Returns the current row scroll position

void row_resize ( int  flag)
inline

Allow or disallow row resizing. If 1 is used, row will be resized; 0 is for opposite. Since interactive resizing is done via the row headers, row_header() must also be enabled to allow resizing

int row_resize ( )
inline

Returns 1 if rows can be resized or 0 if not

void row_resize_min ( int  val)
inline

Sets the current row minimum resize value. Must be a value >= 1

int row_resize_min ( )
inline

Returns the current row minimum resize value

virtual void rows ( int  val)
virtual

Sets the number of rows in the table. Table is redrawn

int rows ( )
inline

Returns the number of rows in the table

void set_selection ( int  s_top,
int  s_left,
int  s_bottom,
int  s_right 
)

Select's rows and columns. Values should be leftmost/rightmost column and topmost/bottommost rows

This function is used to select multiple cells

void table_box ( Fl_Boxtype  val)
inline

Sets a kind of box around the table (default is FL_NO_BOX). Calling this function will redraw table

Fl_Boxtype table_box ( void  )
inline

Returns the current box type used for the data table

void top_row ( int  row)
inline

Sets which row should be at the top of the table, scrolling as necessary. Table is redrawn

int top_row ( )
inline

Returns the current top row. This row may be partially obscured

void visible_cells ( int &  r1,
int &  r2,
int &  c1,
int &  c2 
)
inline

Returns the range of row and column numbers for all the visible and partially visible cells in the table.

These values can be used e.g. by draw_cell() during CONTEXT_STARTPAGE to figure out what cells are about to be redrawn, for the purposes of locking the data from a database befire it's drawn


The documentation for this class was generated from the following file: