Fl_Table was missing doxygen docs for several public + protected members.
Solves STR# 3381. Also: standardized doxygen comment style in both files; > /** */ doxygen commenting > 2 space indent Removed some confusing non-doxygen comments, and rewrote some confusing ones. Removed old license info Matt had imported from my original 2002 widget.. there was no reason for it to be in there; the Fl_Table code inside FLTK is licensed under the FLTK GPL license, no need for the extra noise in the docs. git-svn-id: file:///fltk/svn/fltk/branches/branch-1.4@12228 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
parent
18a84d073d
commit
afd118047b
935
FL/Fl_Table.H
935
FL/Fl_Table.H
File diff suppressed because it is too large
Load Diff
173
src/Fl_Table.cxx
173
src/Fl_Table.cxx
@ -25,7 +25,9 @@
|
|||||||
#include <FL/fl_utf8.H> // currently only Windows and Linux
|
#include <FL/fl_utf8.H> // currently only Windows and Linux
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Scroll display so 'row' is at top
|
/** Sets the vertical scroll position so 'row' is at the top,
|
||||||
|
and causes the screen to redraw.
|
||||||
|
*/
|
||||||
void Fl_Table::row_position(int row) {
|
void Fl_Table::row_position(int row) {
|
||||||
if ( _row_position == row ) return; // OPTIMIZATION: no change? avoid redraw
|
if ( _row_position == row ) return; // OPTIMIZATION: no change? avoid redraw
|
||||||
if ( row < 0 ) row = 0;
|
if ( row < 0 ) row = 0;
|
||||||
@ -41,7 +43,10 @@ void Fl_Table::row_position(int row) {
|
|||||||
_row_position = row; // HACK: override what table_scrolled() came up with
|
_row_position = row; // HACK: override what table_scrolled() came up with
|
||||||
}
|
}
|
||||||
|
|
||||||
// Scroll display so 'col' is at left
|
/**
|
||||||
|
Sets the horizontal scroll position so 'col' is at the left,
|
||||||
|
and causes the screen to redraw.
|
||||||
|
*/
|
||||||
void Fl_Table::col_position(int col) {
|
void Fl_Table::col_position(int col) {
|
||||||
if ( _col_position == col ) return; // OPTIMIZATION: no change? avoid redraw
|
if ( _col_position == col ) return; // OPTIMIZATION: no change? avoid redraw
|
||||||
if ( col < 0 ) col = 0;
|
if ( col < 0 ) col = 0;
|
||||||
@ -57,7 +62,9 @@ void Fl_Table::col_position(int col) {
|
|||||||
_col_position = col; // HACK: override what table_scrolled() came up with
|
_col_position = col; // HACK: override what table_scrolled() came up with
|
||||||
}
|
}
|
||||||
|
|
||||||
// Find scroll position of a row (in pixels)
|
/**
|
||||||
|
Returns the scroll position (in pixels) of the specified 'row'.
|
||||||
|
*/
|
||||||
long Fl_Table::row_scroll_position(int row) {
|
long Fl_Table::row_scroll_position(int row) {
|
||||||
int startrow = 0;
|
int startrow = 0;
|
||||||
long scroll = 0;
|
long scroll = 0;
|
||||||
@ -74,7 +81,9 @@ long Fl_Table::row_scroll_position(int row) {
|
|||||||
return(scroll);
|
return(scroll);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Find scroll position of a column (in pixels)
|
/**
|
||||||
|
Returns the scroll position (in pixels) of the specified column 'col'.
|
||||||
|
*/
|
||||||
long Fl_Table::col_scroll_position(int col) {
|
long Fl_Table::col_scroll_position(int col) {
|
||||||
int startcol = 0;
|
int startcol = 0;
|
||||||
long scroll = 0;
|
long scroll = 0;
|
||||||
@ -91,7 +100,11 @@ long Fl_Table::col_scroll_position(int col) {
|
|||||||
return(scroll);
|
return(scroll);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ctor
|
/**
|
||||||
|
The constructor for Fl_Table.
|
||||||
|
This creates an empty table with no rows or columns,
|
||||||
|
with headers and row/column resize behavior disabled.
|
||||||
|
*/
|
||||||
Fl_Table::Fl_Table(int X, int Y, int W, int H, const char *l) : Fl_Group(X,Y,W,H,l) {
|
Fl_Table::Fl_Table(int X, int Y, int W, int H, const char *l) : Fl_Group(X,Y,W,H,l) {
|
||||||
_rows = 0;
|
_rows = 0;
|
||||||
_cols = 0;
|
_cols = 0;
|
||||||
@ -156,12 +169,21 @@ Fl_Table::Fl_Table(int X, int Y, int W, int H, const char *l) : Fl_Group(X,Y,W,H
|
|||||||
table->begin(); // leave with fltk children getting added to the scroll
|
table->begin(); // leave with fltk children getting added to the scroll
|
||||||
}
|
}
|
||||||
|
|
||||||
// Dtor
|
|
||||||
|
/**
|
||||||
|
The destructor for Fl_Table.
|
||||||
|
Destroys the table and its associated widgets.
|
||||||
|
*/
|
||||||
Fl_Table::~Fl_Table() {
|
Fl_Table::~Fl_Table() {
|
||||||
// The parent Fl_Group takes care of destroying scrollbars
|
// The parent Fl_Group takes care of destroying scrollbars
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set height of a row
|
/**
|
||||||
|
Sets the height of the specified row in pixels,
|
||||||
|
and the 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.
|
||||||
|
*/
|
||||||
void Fl_Table::row_height(int row, int height) {
|
void Fl_Table::row_height(int row, int height) {
|
||||||
if ( row < 0 ) return;
|
if ( row < 0 ) return;
|
||||||
if ( row < (int)_rowheights.size() && _rowheights[row] == height ) {
|
if ( row < (int)_rowheights.size() && _rowheights[row] == height ) {
|
||||||
@ -185,7 +207,11 @@ void Fl_Table::row_height(int row, int height) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set width of a column
|
/**
|
||||||
|
Sets the width of the specified column in pixels, and the 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.
|
||||||
|
*/
|
||||||
void Fl_Table::col_width(int col, int width)
|
void Fl_Table::col_width(int col, int width)
|
||||||
{
|
{
|
||||||
if ( col < 0 ) return;
|
if ( col < 0 ) return;
|
||||||
@ -211,7 +237,11 @@ void Fl_Table::col_width(int col, int width)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return row/col clamped to reality
|
/**
|
||||||
|
Return specfied row/col values R and C to within the table's
|
||||||
|
current row/col limits.
|
||||||
|
\returns 0 if no changes were made, or 1 if they were.
|
||||||
|
*/
|
||||||
int Fl_Table::row_col_clamp(TableContext context, int &R, int &C) {
|
int Fl_Table::row_col_clamp(TableContext context, int &R, int &C) {
|
||||||
int clamped = 0;
|
int clamped = 0;
|
||||||
if ( R < 0 ) { R = 0; clamped = 1; }
|
if ( R < 0 ) { R = 0; clamped = 1; }
|
||||||
@ -237,7 +267,9 @@ int Fl_Table::row_col_clamp(TableContext context, int &R, int &C) {
|
|||||||
return(clamped);
|
return(clamped);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return bounding region for given context
|
/**
|
||||||
|
Returns the (X,Y,W,H) bounding region for the specified 'context'.
|
||||||
|
*/
|
||||||
void Fl_Table::get_bounds(TableContext context, int &X, int &Y, int &W, int &H) {
|
void Fl_Table::get_bounds(TableContext context, int &X, int &Y, int &W, int &H) {
|
||||||
switch ( context ) {
|
switch ( context ) {
|
||||||
case CONTEXT_COL_HEADER:
|
case CONTEXT_COL_HEADER:
|
||||||
@ -269,11 +301,11 @@ void Fl_Table::get_bounds(TableContext context, int &X, int &Y, int &W, int &H)
|
|||||||
//NOTREACHED
|
//NOTREACHED
|
||||||
}
|
}
|
||||||
|
|
||||||
// Find row/col beneath cursor
|
/**
|
||||||
//
|
Find row/col for the recent mouse event.
|
||||||
// Returns R/C and context.
|
Returns the context, and the row/column values in R/C.
|
||||||
// Also returns resizeflag, if mouse is hovered over a resize boundary.
|
Also returns 'resizeflag' if mouse is hovered over a resize boundary.
|
||||||
//
|
*/
|
||||||
Fl_Table::TableContext Fl_Table::cursor2rowcol(int &R, int &C, ResizeFlag &resizeflag) {
|
Fl_Table::TableContext Fl_Table::cursor2rowcol(int &R, int &C, ResizeFlag &resizeflag) {
|
||||||
// return values
|
// return values
|
||||||
R = C = 0;
|
R = C = 0;
|
||||||
@ -350,10 +382,12 @@ Fl_Table::TableContext Fl_Table::cursor2rowcol(int &R, int &C, ResizeFlag &resiz
|
|||||||
return(CONTEXT_NONE);
|
return(CONTEXT_NONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Find X/Y/W/H for cell at R/C
|
/**
|
||||||
// If R or C are out of range, returns -1
|
Find a cell's X/Y/W/H region for the specified cell in row 'R', column 'C'.
|
||||||
// with X/Y/W/H set to zero.
|
\returns
|
||||||
//
|
- 0 -- on success, XYWH returns the region of the specified cell.
|
||||||
|
- -1 -- if R or C are out of range, and X/Y/W/H will be set to zero.
|
||||||
|
*/
|
||||||
int Fl_Table::find_cell(TableContext context, int R, int C, int &X, int &Y, int &W, int &H) {
|
int Fl_Table::find_cell(TableContext context, int R, int C, int &X, int &Y, int &W, int &H) {
|
||||||
if ( row_col_clamp(context, R, C) ) { // row or col out of range? error
|
if ( row_col_clamp(context, R, C) ) { // row or col out of range? error
|
||||||
X=Y=W=H=0;
|
X=Y=W=H=0;
|
||||||
@ -458,7 +492,10 @@ void Fl_Table::_auto_drag_cb() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Recalculate the window dimensions
|
/**
|
||||||
|
Recalculate the dimensions of the table, and affect any children.
|
||||||
|
Internally, Fl_Group::resize() and init_sizes() are called.
|
||||||
|
*/
|
||||||
void Fl_Table::recalc_dimensions() {
|
void Fl_Table::recalc_dimensions() {
|
||||||
// Recalc to* (Table Outer), ti* (Table Inner), wi* ( Widget Inner)
|
// Recalc to* (Table Outer), ti* (Table Inner), wi* ( Widget Inner)
|
||||||
wix = ( x() + Fl::box_dx(box())); tox = wix; tix = tox + Fl::box_dx(table->box());
|
wix = ( x() + Fl::box_dx(box())); tox = wix; tix = tox + Fl::box_dx(table->box());
|
||||||
@ -494,12 +531,12 @@ void Fl_Table::recalc_dimensions() {
|
|||||||
table->init_sizes();
|
table->init_sizes();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Recalculate internals after a scroll.
|
/**
|
||||||
//
|
Recalculate internals after a scroll.
|
||||||
// Call this if table has been scrolled or resized.
|
Call this if table has been scrolled or resized.
|
||||||
// Does not handle redraw().
|
Does not handle redraw().
|
||||||
// TODO: Assumes ti[xywh] has already been recalculated.
|
TODO: Assumes ti[xywh] has already been recalculated.
|
||||||
//
|
*/
|
||||||
void Fl_Table::table_scrolled() {
|
void Fl_Table::table_scrolled() {
|
||||||
// Find top row
|
// Find top row
|
||||||
int y, row, voff = vscrollbar->value();
|
int y, row, voff = vscrollbar->value();
|
||||||
@ -537,11 +574,10 @@ void Fl_Table::table_scrolled() {
|
|||||||
draw_cell(CONTEXT_RC_RESIZE, 0,0,0,0,0,0);
|
draw_cell(CONTEXT_RC_RESIZE, 0,0,0,0,0,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Table resized: recalc internal data
|
/**
|
||||||
// Call this whenever the window is resized.
|
Call this if table was resized, to recalculate internal data.
|
||||||
// Recalculates the scrollbar sizes.
|
Calls recall_dimensions(), and recalculates scrollbar sizes.
|
||||||
// Makes no assumptions about any pre-initialized data.
|
*/
|
||||||
//
|
|
||||||
void Fl_Table::table_resized() {
|
void Fl_Table::table_resized() {
|
||||||
table_h = row_scroll_position(rows());
|
table_h = row_scroll_position(rows());
|
||||||
table_w = col_scroll_position(cols());
|
table_w = col_scroll_position(cols());
|
||||||
@ -582,7 +618,9 @@ void Fl_Table::table_resized() {
|
|||||||
// redraw();
|
// redraw();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Someone moved a scrollbar
|
/**
|
||||||
|
Callback for when someone moves a scrollbar.
|
||||||
|
*/
|
||||||
void Fl_Table::scroll_cb(Fl_Widget*w, void *data) {
|
void Fl_Table::scroll_cb(Fl_Widget*w, void *data) {
|
||||||
Fl_Table *o = (Fl_Table*)data;
|
Fl_Table *o = (Fl_Table*)data;
|
||||||
o->recalc_dimensions(); // recalc tix, tiy, etc.
|
o->recalc_dimensions(); // recalc tix, tiy, etc.
|
||||||
@ -590,7 +628,9 @@ void Fl_Table::scroll_cb(Fl_Widget*w, void *data) {
|
|||||||
o->redraw();
|
o->redraw();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set number of rows
|
/**
|
||||||
|
Sets the number of rows in the table, and the table is redrawn.
|
||||||
|
*/
|
||||||
void Fl_Table::rows(int val) {
|
void Fl_Table::rows(int val) {
|
||||||
int oldrows = _rows;
|
int oldrows = _rows;
|
||||||
_rows = val;
|
_rows = val;
|
||||||
@ -612,7 +652,9 @@ void Fl_Table::rows(int val) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set number of cols
|
/**
|
||||||
|
Set the number of columns in the table and redraw.
|
||||||
|
*/
|
||||||
void Fl_Table::cols(int val) {
|
void Fl_Table::cols(int val) {
|
||||||
_cols = val;
|
_cols = val;
|
||||||
{
|
{
|
||||||
@ -627,7 +669,9 @@ void Fl_Table::cols(int val) {
|
|||||||
redraw();
|
redraw();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Change mouse cursor to different type
|
/**
|
||||||
|
Change mouse cursor to different type
|
||||||
|
*/
|
||||||
void Fl_Table::change_cursor(Fl_Cursor newcursor) {
|
void Fl_Table::change_cursor(Fl_Cursor newcursor) {
|
||||||
if ( newcursor != _last_cursor ) {
|
if ( newcursor != _last_cursor ) {
|
||||||
fl_cursor(newcursor, FL_BLACK, FL_WHITE);
|
fl_cursor(newcursor, FL_BLACK, FL_WHITE);
|
||||||
@ -635,6 +679,10 @@ void Fl_Table::change_cursor(Fl_Cursor newcursor) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Sets the damage zone to the specified row/col values.
|
||||||
|
Calls redraw_range().
|
||||||
|
*/
|
||||||
void Fl_Table::damage_zone(int r1, int c1, int r2, int c2, int r3, int c3) {
|
void Fl_Table::damage_zone(int r1, int c1, int r2, int c2, int r3, int c3) {
|
||||||
int R1 = r1, C1 = c1;
|
int R1 = r1, C1 = c1;
|
||||||
int R2 = r2, C2 = c2;
|
int R2 = r2, C2 = c2;
|
||||||
@ -661,6 +709,32 @@ void Fl_Table::damage_zone(int r1, int c1, int r2, int c2, int r3, int c3) {
|
|||||||
redraw_range(R1, R2, C1, C2);
|
redraw_range(R1, R2, C1, C2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Moves the selection cursor a relative number of rows/columns specifed by R/C.
|
||||||
|
R/C can be positive or negative, depending on the direction to move.
|
||||||
|
A value of 0 for R or C prevents cursor movement on that axis.
|
||||||
|
|
||||||
|
If shiftselect is set, the selection range is extended to the new
|
||||||
|
cursor position. If clear, the cursor is simply moved, and any previous
|
||||||
|
selection is cancelled.
|
||||||
|
|
||||||
|
Used mainly by keyboard events (e.g. Fl_Right, FL_Home, FL_End..)
|
||||||
|
to let the user keyboard navigate the selection cursor around.
|
||||||
|
|
||||||
|
The scroll positions may be modified if the selection cursor traverses
|
||||||
|
into cells off the screen's edge.
|
||||||
|
|
||||||
|
Internal variables select_row/select_col and current_row/current_col
|
||||||
|
are modified, among others.
|
||||||
|
|
||||||
|
\code
|
||||||
|
Examples:
|
||||||
|
R=1, C=0 -- moves the selection cursor one row downward.
|
||||||
|
R=5, C=0 -- moves the selection cursor 5 rows downward.
|
||||||
|
R=-5, C=0 -- moves the cursor 5 rows upward.
|
||||||
|
R=2, C=2 -- moves the cursor 2 rows down and 2 columns to the right.
|
||||||
|
\endcode
|
||||||
|
*/
|
||||||
int Fl_Table::move_cursor(int R, int C, int shiftselect) {
|
int Fl_Table::move_cursor(int R, int C, int shiftselect) {
|
||||||
if (select_row == -1) R++;
|
if (select_row == -1) R++;
|
||||||
if (select_col == -1) C++;
|
if (select_col == -1) C++;
|
||||||
@ -683,6 +757,9 @@ int Fl_Table::move_cursor(int R, int C, int shiftselect) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Same as move_cursor(R,C,1);
|
||||||
|
*/
|
||||||
int Fl_Table::move_cursor(int R, int C) {
|
int Fl_Table::move_cursor(int R, int C) {
|
||||||
return move_cursor(R,C,1);
|
return move_cursor(R,C,1);
|
||||||
}
|
}
|
||||||
@ -696,7 +773,9 @@ int Fl_Table::move_cursor(int R, int C) {
|
|||||||
#define PRINTEVENT
|
#define PRINTEVENT
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Handle FLTK events
|
/**
|
||||||
|
Handle FLTK events.
|
||||||
|
*/
|
||||||
int Fl_Table::handle(int event) {
|
int Fl_Table::handle(int event) {
|
||||||
PRINTEVENT;
|
PRINTEVENT;
|
||||||
int ret = Fl_Group::handle(event); // let FLTK group handle events first
|
int ret = Fl_Group::handle(event); // let FLTK group handle events first
|
||||||
@ -1051,9 +1130,10 @@ int Fl_Table::handle(int event) {
|
|||||||
return(ret);
|
return(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Resize FLTK override
|
/**
|
||||||
// Handle resize events if user resizes parent window.
|
Handle resize events if user resizes parent window.
|
||||||
//
|
This changes the size of Fl_Table, causing it to redraw.
|
||||||
|
*/
|
||||||
void Fl_Table::resize(int X, int Y, int W, int H) {
|
void Fl_Table::resize(int X, int Y, int W, int H) {
|
||||||
// Tell group to resize, and recalc our own widget as well
|
// Tell group to resize, and recalc our own widget as well
|
||||||
Fl_Group::resize(X, Y, W, H);
|
Fl_Group::resize(X, Y, W, H);
|
||||||
@ -1070,9 +1150,9 @@ void Fl_Table::_redraw_cell(TableContext context, int r, int c) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
See if the cell at row \p r and column \p c is selected.
|
See if the cell at row \p r and column \p c is selected.
|
||||||
\returns 1 if the cell is selected, 0 if not.
|
\returns 1 if the cell is selected, 0 if not.
|
||||||
*/
|
*/
|
||||||
int Fl_Table::is_selected(int r, int c) {
|
int Fl_Table::is_selected(int r, int c) {
|
||||||
int s_left, s_right, s_top, s_bottom;
|
int s_left, s_right, s_top, s_bottom;
|
||||||
|
|
||||||
@ -1141,10 +1221,11 @@ void Fl_Table::set_selection(int row_top, int col_left, int row_bot, int col_rig
|
|||||||
damage_zone(current_row, current_col, select_row, select_col);
|
damage_zone(current_row, current_col, select_row, select_col);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw the entire Fl_Table
|
/**
|
||||||
// Override the draw() routine to draw the table.
|
Draws the entire Fl_Table.
|
||||||
// Then tell the group to draw over us.
|
Lets fltk widgets draw themselves first, followed by the cells
|
||||||
//
|
via calls to draw_cell().
|
||||||
|
*/
|
||||||
void Fl_Table::draw() {
|
void Fl_Table::draw() {
|
||||||
int scrollsize = _scrollbar_size ? _scrollbar_size : Fl::scrollbar_size();
|
int scrollsize = _scrollbar_size ? _scrollbar_size : Fl::scrollbar_size();
|
||||||
// Check if scrollbar size changed
|
// Check if scrollbar size changed
|
||||||
|
Loading…
x
Reference in New Issue
Block a user