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
185
FL/Fl_Table.H
185
FL/Fl_Table.H
@ -113,59 +113,9 @@
|
||||
|
||||
LICENSE
|
||||
|
||||
Greg added the following license to the original distribution of Fl_Table. He
|
||||
kindly gave his permission to integrate Fl_Table and Fl_Table_Row into FLTK,
|
||||
allowing FLTK license to apply while his widgets are part of the library.
|
||||
|
||||
If used on its own, this is the license that applies:
|
||||
|
||||
\verbatim
|
||||
Fl_Table License
|
||||
December 16, 2002
|
||||
|
||||
The Fl_Table library and included programs are provided under the terms
|
||||
of the GNU Library General Public License (LGPL) with the following
|
||||
exceptions:
|
||||
|
||||
1. Modifications to the Fl_Table configure script, config
|
||||
header file, and makefiles by themselves to support
|
||||
a specific platform do not constitute a modified or
|
||||
derivative work.
|
||||
|
||||
The authors do request that such modifications be
|
||||
contributed to the Fl_Table project - send all
|
||||
contributions to "erco at seriss dot com".
|
||||
|
||||
2. Widgets that are subclassed from Fl_Table widgets do not
|
||||
constitute a derivative work.
|
||||
|
||||
3. Static linking of applications and widgets to the
|
||||
Fl_Table library does not constitute a derivative work
|
||||
and does not require the author to provide source
|
||||
code for the application or widget, use the shared
|
||||
Fl_Table libraries, or link their applications or
|
||||
widgets against a user-supplied version of Fl_Table.
|
||||
|
||||
If you link the application or widget to a modified
|
||||
version of Fl_Table, then the changes to Fl_Table must be
|
||||
provided under the terms of the LGPL in sections
|
||||
1, 2, and 4.
|
||||
|
||||
4. You do not have to provide a copy of the Fl_Table license
|
||||
with programs that are linked to the Fl_Table library, nor
|
||||
do you have to identify the Fl_Table license in your
|
||||
program or documentation as required by section 6
|
||||
of the LGPL.
|
||||
|
||||
However, programs must still identify their use of Fl_Table.
|
||||
The following example statement can be included in user
|
||||
documentation to satisfy this requirement:
|
||||
|
||||
[program/widget] is based in part on the work of
|
||||
the Fl_Table project http://seriss.com/people/erco/fltk/Fl_Table/
|
||||
\endverbatim
|
||||
|
||||
|
||||
Greg kindly gave his permission to integrate Fl_Table and Fl_Table_Row
|
||||
into FLTK, allowing FLTK license to apply while his widgets are part
|
||||
of the library. [updated by Greg, 04/26/17]
|
||||
*/
|
||||
class FL_EXPORT Fl_Table : public Fl_Group {
|
||||
public:
|
||||
@ -317,7 +267,6 @@ protected:
|
||||
int &X, int &Y, int &W, int &H);
|
||||
void change_cursor(Fl_Cursor newcursor); // change mouse cursor to some other shape
|
||||
TableContext cursor2rowcol(int &R, int &C, ResizeFlag &resizeflag);
|
||||
// find r/c given current x/y event
|
||||
int find_cell(TableContext context, // find cell's x/y/w/h given r/c
|
||||
int R, int C, int &X, int &Y, int &W, int &H);
|
||||
int row_col_clamp(TableContext context, int &R, int &C);
|
||||
@ -440,6 +389,9 @@ protected:
|
||||
long row_scroll_position(int row); // find scroll position of row (in pixels)
|
||||
long col_scroll_position(int col); // find scroll position of col (in pixels)
|
||||
|
||||
/**
|
||||
Does the table contain any child fltk widgets?
|
||||
*/
|
||||
int is_fltk_container() { // does table contain fltk widgets?
|
||||
return( Fl_Group::children() > 3 ); // (ie. more than box and 2 scrollbars?)
|
||||
}
|
||||
@ -448,6 +400,10 @@ protected:
|
||||
|
||||
void damage_zone(int r1, int c1, int r2, int c2, int r3 = 0, int c3 = 0);
|
||||
|
||||
/**
|
||||
Define region of cells to be redrawn by specified range of rows/cols,
|
||||
and then sets damage(DAMAGE_CHILD). Extends any previously defined range to redraw.
|
||||
*/
|
||||
void redraw_range(int topRow, int botRow, int leftCol, int rightCol) {
|
||||
if ( _redraw_toprow == -1 ) {
|
||||
// Initialize redraw range
|
||||
@ -462,23 +418,12 @@ protected:
|
||||
if ( leftCol < _redraw_leftcol ) _redraw_leftcol = leftCol;
|
||||
if ( rightCol > _redraw_rightcol ) _redraw_rightcol = rightCol;
|
||||
}
|
||||
|
||||
// Indicate partial redraw needed of some cells
|
||||
damage(FL_DAMAGE_CHILD);
|
||||
}
|
||||
|
||||
public:
|
||||
/**
|
||||
The constructor for the Fl_Table.
|
||||
This creates an empty table with no rows or columns,
|
||||
with headers and row/column resize behavior disabled.
|
||||
*/
|
||||
Fl_Table(int X, int Y, int W, int H, const char *l=0);
|
||||
|
||||
/**
|
||||
The destructor for the Fl_Table.
|
||||
Destroys the table and its associated widgets.
|
||||
*/
|
||||
~Fl_Table();
|
||||
|
||||
/**
|
||||
@ -486,7 +431,11 @@ public:
|
||||
any widgets (table->clear()) that were added with begin()/end() or add()/insert()/etc.
|
||||
\see rows(int), cols(int)
|
||||
*/
|
||||
virtual void clear() { rows(0); cols(0); table->clear(); }
|
||||
virtual void clear() {
|
||||
rows(0);
|
||||
cols(0);
|
||||
table->clear();
|
||||
}
|
||||
|
||||
// \todo: add topline(), middleline(), bottomline()
|
||||
|
||||
@ -507,9 +456,6 @@ public:
|
||||
return(table->box());
|
||||
}
|
||||
|
||||
/**
|
||||
Sets the number of rows in the table, and the table is redrawn.
|
||||
*/
|
||||
virtual void rows(int val); // set/get number of rows
|
||||
|
||||
/**
|
||||
@ -519,9 +465,6 @@ public:
|
||||
return(_rows);
|
||||
}
|
||||
|
||||
/**
|
||||
Set the number of columns in the table and redraw.
|
||||
*/
|
||||
virtual void cols(int val); // set/get number of columns
|
||||
|
||||
/**
|
||||
@ -597,6 +540,7 @@ public:
|
||||
inline int col_resize() {
|
||||
return(_col_resize);
|
||||
}
|
||||
|
||||
/**
|
||||
Allows/disallows column resizing by the user.
|
||||
1=allow interactive resizing, 0=disallow interactive resizing.
|
||||
@ -735,12 +679,6 @@ public:
|
||||
return(_col_header_color);
|
||||
}
|
||||
|
||||
/**
|
||||
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 row_height(int row, int height); // set/get row height
|
||||
|
||||
/**
|
||||
@ -750,11 +688,6 @@ public:
|
||||
return((row<0 || row>=(int)_rowheights.size()) ? 0 : _rowheights[row]);
|
||||
}
|
||||
|
||||
/**
|
||||
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 col_width(int col, int width); // set/get a column's width
|
||||
|
||||
/**
|
||||
@ -784,27 +717,20 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
Sets the row scroll position to 'row', and causes the screen to redraw.
|
||||
*/
|
||||
void row_position(int row); // set/get table's current scroll position
|
||||
|
||||
/**
|
||||
Sets the column scroll position to column 'col', and causes the screen to redraw.
|
||||
*/
|
||||
void col_position(int col);
|
||||
|
||||
/**
|
||||
Returns the current row scroll position as a row number.
|
||||
*/
|
||||
int row_position() { // current row position
|
||||
int row_position() {
|
||||
return(_row_position);
|
||||
}
|
||||
|
||||
/**
|
||||
Returns the current column scroll position as a column number.
|
||||
*/
|
||||
int col_position() { // current col position
|
||||
int col_position() {
|
||||
return(_col_position);
|
||||
}
|
||||
|
||||
@ -829,10 +755,6 @@ public:
|
||||
void set_selection(int row_top, int col_left, int row_bot, int col_right);
|
||||
int move_cursor(int R, int C, int shiftselect);
|
||||
int move_cursor(int R, int C);
|
||||
|
||||
/**
|
||||
Changes the size of the Fl_Table, causing it to redraw.
|
||||
*/
|
||||
void resize(int X, int Y, int W, int H); // fltk resize() override
|
||||
void draw(void); // fltk draw() override
|
||||
|
||||
@ -847,11 +769,21 @@ public:
|
||||
// return(Fl_Group::box());
|
||||
// }
|
||||
|
||||
// Child group
|
||||
// Child group management
|
||||
|
||||
/**
|
||||
Resets the internal array of widget sizes and positions.
|
||||
\sa Fl_Group::init_sizes()
|
||||
*/
|
||||
void init_sizes() {
|
||||
table->init_sizes();
|
||||
table->redraw();
|
||||
}
|
||||
|
||||
/**
|
||||
The specified widget is removed from its current group (if any)
|
||||
and added to the end of Fl_Table's group.
|
||||
*/
|
||||
void add(Fl_Widget& wgt) {
|
||||
table->add(wgt);
|
||||
if ( table->children() > 2 ) {
|
||||
@ -860,21 +792,45 @@ public:
|
||||
table->hide();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
The specified widget is removed from its current group (if any)
|
||||
and added to the end of Fl_Table's group.
|
||||
*/
|
||||
void add(Fl_Widget* wgt) {
|
||||
add(*wgt);
|
||||
}
|
||||
|
||||
/**
|
||||
The specified widget is removed from its current group (if any)
|
||||
and inserted into the Fl_Table's group at position 'n'.
|
||||
*/
|
||||
void insert(Fl_Widget& wgt, int n) {
|
||||
table->insert(wgt,n);
|
||||
}
|
||||
|
||||
/**
|
||||
The specified widget is removed from its current group (if any)
|
||||
and inserted into Fl_Table's group before widget 'w2'.
|
||||
This will append if 'w2' is not in Fl_Table's group.
|
||||
*/
|
||||
void insert(Fl_Widget& wgt, Fl_Widget* w2) {
|
||||
table->insert(wgt,w2);
|
||||
}
|
||||
|
||||
/**
|
||||
The specified widget is removed from Fl_Table's group.
|
||||
*/
|
||||
void remove(Fl_Widget& wgt) {
|
||||
table->remove(wgt);
|
||||
}
|
||||
|
||||
// (doxygen will substitute Fl_Group's docs here)
|
||||
void begin() {
|
||||
table->begin();
|
||||
}
|
||||
|
||||
// (doxygen will substitute Fl_Group's docs here)
|
||||
void end() {
|
||||
table->end();
|
||||
// HACK: Avoid showing Fl_Scroll; seems to erase screen
|
||||
@ -887,6 +843,11 @@ public:
|
||||
}
|
||||
Fl_Group::current(Fl_Group::parent());
|
||||
}
|
||||
|
||||
/**
|
||||
Returns a pointer to the array of children. <I>This pointer is only
|
||||
valid until the next time a child is added or removed.</I>
|
||||
*/
|
||||
Fl_Widget*const* array() {
|
||||
return(table->array());
|
||||
}
|
||||
@ -920,41 +881,53 @@ public:
|
||||
int children() const {
|
||||
return(table->children()-2); // -2: skip Fl_Scroll's h/v scrollbar widgets
|
||||
}
|
||||
|
||||
// (doxygen will substitute Fl_Group's docs here)
|
||||
int find(const Fl_Widget *wgt) const {
|
||||
return(table->find(wgt));
|
||||
}
|
||||
|
||||
// (doxygen will substitute Fl_Group's docs here)
|
||||
int find(const Fl_Widget &wgt) const {
|
||||
return(table->find(wgt));
|
||||
}
|
||||
|
||||
// CALLBACKS
|
||||
|
||||
/**
|
||||
* Returns the current row the event occurred on.
|
||||
*
|
||||
* This function should only be used from within the user's callback function.
|
||||
Returns the current row the event occurred on.
|
||||
|
||||
This function should only be used from within the user's callback function.
|
||||
*/
|
||||
int callback_row() {
|
||||
return(_callback_row);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the current column the event occurred on.
|
||||
*
|
||||
* This function should only be used from within the user's callback function.
|
||||
Returns the current column the event occurred on.
|
||||
|
||||
This function should only be used from within the user's callback function.
|
||||
*/
|
||||
int callback_col() {
|
||||
return(_callback_col);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the current 'table context'.
|
||||
*
|
||||
* This function should only be used from within the user's callback function.
|
||||
Returns the current 'table context'.
|
||||
|
||||
This function should only be used from within the user's callback function.
|
||||
*/
|
||||
TableContext callback_context() {
|
||||
return(_callback_context);
|
||||
}
|
||||
|
||||
/**
|
||||
Calls the widget callback.
|
||||
|
||||
Saves the specified 'context', 'row', and 'col' values, so that the user's
|
||||
callback can then access them with the member functions
|
||||
callback_context(), callback_row() and callback_col().
|
||||
*/
|
||||
void do_callback(TableContext context, int row, int col) {
|
||||
_callback_context = context;
|
||||
_callback_row = row;
|
||||
|
167
src/Fl_Table.cxx
167
src/Fl_Table.cxx
@ -25,7 +25,9 @@
|
||||
#include <FL/fl_utf8.H> // currently only Windows and Linux
|
||||
#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) {
|
||||
if ( _row_position == row ) return; // OPTIMIZATION: no change? avoid redraw
|
||||
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
|
||||
}
|
||||
|
||||
// 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) {
|
||||
if ( _col_position == col ) return; // OPTIMIZATION: no change? avoid redraw
|
||||
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
|
||||
}
|
||||
|
||||
// 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) {
|
||||
int startrow = 0;
|
||||
long scroll = 0;
|
||||
@ -74,7 +81,9 @@ long Fl_Table::row_scroll_position(int row) {
|
||||
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) {
|
||||
int startcol = 0;
|
||||
long scroll = 0;
|
||||
@ -91,7 +100,11 @@ long Fl_Table::col_scroll_position(int col) {
|
||||
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) {
|
||||
_rows = 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
|
||||
}
|
||||
|
||||
// Dtor
|
||||
|
||||
/**
|
||||
The destructor for Fl_Table.
|
||||
Destroys the table and its associated widgets.
|
||||
*/
|
||||
Fl_Table::~Fl_Table() {
|
||||
// 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) {
|
||||
if ( row < 0 ) return;
|
||||
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)
|
||||
{
|
||||
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 clamped = 0;
|
||||
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 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) {
|
||||
switch ( context ) {
|
||||
case CONTEXT_COL_HEADER:
|
||||
@ -269,11 +301,11 @@ void Fl_Table::get_bounds(TableContext context, int &X, int &Y, int &W, int &H)
|
||||
//NOTREACHED
|
||||
}
|
||||
|
||||
// Find row/col beneath cursor
|
||||
//
|
||||
// Returns R/C and context.
|
||||
// Also returns resizeflag, if mouse is hovered over a resize boundary.
|
||||
//
|
||||
/**
|
||||
Find row/col for the recent mouse event.
|
||||
Returns the context, and the row/column values in R/C.
|
||||
Also returns 'resizeflag' if mouse is hovered over a resize boundary.
|
||||
*/
|
||||
Fl_Table::TableContext Fl_Table::cursor2rowcol(int &R, int &C, ResizeFlag &resizeflag) {
|
||||
// return values
|
||||
R = C = 0;
|
||||
@ -350,10 +382,12 @@ Fl_Table::TableContext Fl_Table::cursor2rowcol(int &R, int &C, ResizeFlag &resiz
|
||||
return(CONTEXT_NONE);
|
||||
}
|
||||
|
||||
// Find X/Y/W/H for cell at R/C
|
||||
// If R or C are out of range, returns -1
|
||||
// with X/Y/W/H set to zero.
|
||||
//
|
||||
/**
|
||||
Find a cell's X/Y/W/H region for the specified cell in row 'R', column 'C'.
|
||||
\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) {
|
||||
if ( row_col_clamp(context, R, C) ) { // row or col out of range? error
|
||||
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() {
|
||||
// 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());
|
||||
@ -494,12 +531,12 @@ void Fl_Table::recalc_dimensions() {
|
||||
table->init_sizes();
|
||||
}
|
||||
|
||||
// Recalculate internals after a scroll.
|
||||
//
|
||||
// Call this if table has been scrolled or resized.
|
||||
// Does not handle redraw().
|
||||
// TODO: Assumes ti[xywh] has already been recalculated.
|
||||
//
|
||||
/**
|
||||
Recalculate internals after a scroll.
|
||||
Call this if table has been scrolled or resized.
|
||||
Does not handle redraw().
|
||||
TODO: Assumes ti[xywh] has already been recalculated.
|
||||
*/
|
||||
void Fl_Table::table_scrolled() {
|
||||
// Find top row
|
||||
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);
|
||||
}
|
||||
|
||||
// Table resized: recalc internal data
|
||||
// Call this whenever the window is resized.
|
||||
// Recalculates the scrollbar sizes.
|
||||
// Makes no assumptions about any pre-initialized data.
|
||||
//
|
||||
/**
|
||||
Call this if table was resized, to recalculate internal data.
|
||||
Calls recall_dimensions(), and recalculates scrollbar sizes.
|
||||
*/
|
||||
void Fl_Table::table_resized() {
|
||||
table_h = row_scroll_position(rows());
|
||||
table_w = col_scroll_position(cols());
|
||||
@ -582,7 +618,9 @@ void Fl_Table::table_resized() {
|
||||
// redraw();
|
||||
}
|
||||
|
||||
// Someone moved a scrollbar
|
||||
/**
|
||||
Callback for when someone moves a scrollbar.
|
||||
*/
|
||||
void Fl_Table::scroll_cb(Fl_Widget*w, void *data) {
|
||||
Fl_Table *o = (Fl_Table*)data;
|
||||
o->recalc_dimensions(); // recalc tix, tiy, etc.
|
||||
@ -590,7 +628,9 @@ void Fl_Table::scroll_cb(Fl_Widget*w, void *data) {
|
||||
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) {
|
||||
int oldrows = _rows;
|
||||
_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) {
|
||||
_cols = val;
|
||||
{
|
||||
@ -627,7 +669,9 @@ void Fl_Table::cols(int val) {
|
||||
redraw();
|
||||
}
|
||||
|
||||
// Change mouse cursor to different type
|
||||
/**
|
||||
Change mouse cursor to different type
|
||||
*/
|
||||
void Fl_Table::change_cursor(Fl_Cursor newcursor) {
|
||||
if ( newcursor != _last_cursor ) {
|
||||
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) {
|
||||
int R1 = r1, C1 = c1;
|
||||
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);
|
||||
}
|
||||
|
||||
/**
|
||||
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) {
|
||||
if (select_row == -1) R++;
|
||||
if (select_col == -1) C++;
|
||||
@ -683,6 +757,9 @@ int Fl_Table::move_cursor(int R, int C, int shiftselect) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
Same as move_cursor(R,C,1);
|
||||
*/
|
||||
int Fl_Table::move_cursor(int R, int C) {
|
||||
return move_cursor(R,C,1);
|
||||
}
|
||||
@ -696,7 +773,9 @@ int Fl_Table::move_cursor(int R, int C) {
|
||||
#define PRINTEVENT
|
||||
#endif
|
||||
|
||||
// Handle FLTK events
|
||||
/**
|
||||
Handle FLTK events.
|
||||
*/
|
||||
int Fl_Table::handle(int event) {
|
||||
PRINTEVENT;
|
||||
int ret = Fl_Group::handle(event); // let FLTK group handle events first
|
||||
@ -1051,9 +1130,10 @@ int Fl_Table::handle(int event) {
|
||||
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) {
|
||||
// Tell group to resize, and recalc our own widget as well
|
||||
Fl_Group::resize(X, Y, W, H);
|
||||
@ -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);
|
||||
}
|
||||
|
||||
// Draw the entire Fl_Table
|
||||
// Override the draw() routine to draw the table.
|
||||
// Then tell the group to draw over us.
|
||||
//
|
||||
/**
|
||||
Draws the entire Fl_Table.
|
||||
Lets fltk widgets draw themselves first, followed by the cells
|
||||
via calls to draw_cell().
|
||||
*/
|
||||
void Fl_Table::draw() {
|
||||
int scrollsize = _scrollbar_size ? _scrollbar_size : Fl::scrollbar_size();
|
||||
// Check if scrollbar size changed
|
||||
|
Loading…
Reference in New Issue
Block a user