<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> <title>edelib: edelib/TableBase.h Source File</title> <link href="tabs.css" rel="stylesheet" type="text/css"/> <link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> <div id="top"><!-- do not remove this div! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> <td style="padding-left: 0.5em;"> <div id="projectname">edelib  <span id="projectnumber">2.0.0</span> </div> </td> </tr> </tbody> </table> </div> <!-- Generated by Doxygen 1.7.6.1 --> <div id="navrow1" class="tabs"> <ul class="tablist"> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="pages.html"><span>Related Pages</span></a></li> <li><a href="modules.html"><span>Modules</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li><a href="annotated.html"><span>Classes</span></a></li> <li class="current"><a href="files.html"><span>Files</span></a></li> </ul> </div> <div id="navrow2" class="tabs2"> <ul class="tablist"> <li><a href="files.html"><span>File List</span></a></li> </ul> </div> </div> <div class="header"> <div class="headertitle"> <div class="title">edelib/TableBase.h</div> </div> </div><!--header--> <div class="contents"> <div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">//</span> <a name="l00002"></a>00002 <span class="comment">// TableBase -- A table widget</span> <a name="l00003"></a>00003 <span class="comment">//</span> <a name="l00004"></a>00004 <span class="comment">// Copyright 2002 by Greg Ercolano.</span> <a name="l00005"></a>00005 <span class="comment">// Copyright (c) 2004 O'ksi'D</span> <a name="l00006"></a>00006 <span class="comment">//</span> <a name="l00007"></a>00007 <span class="comment">// This library is free software; you can redistribute it and/or</span> <a name="l00008"></a>00008 <span class="comment">// modify it under the terms of the GNU Library General Public</span> <a name="l00009"></a>00009 <span class="comment">// License as published by the Free Software Foundation; either</span> <a name="l00010"></a>00010 <span class="comment">// version 2 of the License, or (at your option) any later version.</span> <a name="l00011"></a>00011 <span class="comment">//</span> <a name="l00012"></a>00012 <span class="comment">// This library is distributed in the hope that it will be useful,</span> <a name="l00013"></a>00013 <span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span> <a name="l00014"></a>00014 <span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</span> <a name="l00015"></a>00015 <span class="comment">// Library General Public License for more details.</span> <a name="l00016"></a>00016 <span class="comment">//</span> <a name="l00017"></a>00017 <span class="comment">// You should have received a copy of the GNU Library General Public</span> <a name="l00018"></a>00018 <span class="comment">// License along with this library; if not, write to the Free Software</span> <a name="l00019"></a>00019 <span class="comment">// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307</span> <a name="l00020"></a>00020 <span class="comment">// USA.</span> <a name="l00021"></a>00021 <span class="comment">//</span> <a name="l00022"></a>00022 <span class="comment">// Please report all bugs and problems to "erco at seriss dot com".</span> <a name="l00023"></a>00023 <span class="comment">//</span> <a name="l00024"></a>00024 <span class="comment">// TODO:</span> <a name="l00025"></a>00025 <span class="comment">// o Auto scroll during dragged selection</span> <a name="l00026"></a>00026 <span class="comment">// o Keyboard navigation (up/down/left/right arrow)</span> <a name="l00027"></a>00027 <span class="comment">//</span> <a name="l00028"></a>00028 <a name="l00029"></a>00029 <span class="preprocessor">#ifndef __EDELIB_TABLEBASE_H__</span> <a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#define __EDELIB_TABLEBASE_H__</span> <a name="l00031"></a>00031 <span class="preprocessor"></span> <a name="l00032"></a>00032 <span class="preprocessor">#include "edelib-global.h"</span> <a name="l00033"></a>00033 <a name="l00034"></a>00034 <span class="preprocessor">#include <sys/types.h></span> <a name="l00035"></a>00035 <span class="preprocessor">#include <string.h></span> <span class="comment">// memcpy</span> <a name="l00036"></a>00036 <a name="l00037"></a>00037 <span class="preprocessor">#ifdef _WIN32</span> <a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor"># include <malloc.h></span> <span class="comment">// WINDOWS: malloc/realloc</span> <a name="l00039"></a>00039 <span class="preprocessor">#else</span> <a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor"># include <stdlib.h></span> <span class="comment">// UNIX: malloc/realloc</span> <a name="l00041"></a>00041 <span class="preprocessor">#endif</span> <a name="l00042"></a>00042 <span class="preprocessor"></span> <a name="l00043"></a>00043 <span class="preprocessor">#include <FL/Fl.H></span> <a name="l00044"></a>00044 <span class="preprocessor">#include <FL/Fl_Group.H></span> <a name="l00045"></a>00045 <span class="preprocessor">#include <FL/Fl_Scroll.H></span> <a name="l00046"></a>00046 <span class="preprocessor">#include <FL/Fl_Box.H></span> <a name="l00047"></a>00047 <span class="preprocessor">#include <FL/Fl_Scrollbar.H></span> <a name="l00048"></a>00048 <a name="l00049"></a>00049 EDELIB_NS_BEGIN <a name="l00050"></a>00050 <a name="l00166"></a><a class="code" href="classedelib_1_1TableBase.html">00166</a> <span class="keyword">class </span>EDELIB_API <a class="code" href="classedelib_1_1TableBase.html" title="A base class for table widgets.">TableBase</a> : <span class="keyword">public</span> Fl_Group { <a name="l00167"></a>00167 <span class="keyword">public</span>: <a name="l00172"></a><a class="code" href="classedelib_1_1TableBase.html#a1026825877324847ba9b3c47f8dbe164">00172</a> <span class="keyword">enum</span> <a class="code" href="classedelib_1_1TableBase.html#a1026825877324847ba9b3c47f8dbe164" title="What happened in table callback.">TableContext</a> { <a name="l00173"></a>00173 CONTEXT_NONE = 0, <a name="l00174"></a><a class="code" href="classedelib_1_1TableBase.html#a1026825877324847ba9b3c47f8dbe164a7986da5cc1d2d9aa0674099741700e13">00174</a> CONTEXT_STARTPAGE = 0x01, <a name="l00175"></a><a class="code" href="classedelib_1_1TableBase.html#a1026825877324847ba9b3c47f8dbe164a7b6b97fc5efb11d469eed0fb4af1ba97">00175</a> CONTEXT_ENDPAGE = 0x02, <a name="l00176"></a><a class="code" href="classedelib_1_1TableBase.html#a1026825877324847ba9b3c47f8dbe164a80f02b0970bdd7898814db7357e4ed25">00176</a> CONTEXT_ROW_HEADER = 0x04, <a name="l00177"></a><a class="code" href="classedelib_1_1TableBase.html#a1026825877324847ba9b3c47f8dbe164acfa2b41e08872a399aa50f10ba2f9a90">00177</a> CONTEXT_COL_HEADER = 0x08, <a name="l00178"></a><a class="code" href="classedelib_1_1TableBase.html#a1026825877324847ba9b3c47f8dbe164a7976b0a322b18c3a7c6180dbe64f22ee">00178</a> CONTEXT_CELL = 0x10, <a name="l00179"></a><a class="code" href="classedelib_1_1TableBase.html#a1026825877324847ba9b3c47f8dbe164ae733a53ae1a5f138cf00af81151e2010">00179</a> CONTEXT_TABLE = 0x20, <a name="l00180"></a><a class="code" href="classedelib_1_1TableBase.html#a1026825877324847ba9b3c47f8dbe164aa8e5cda2b23693a4084f6580a3833cc3">00180</a> CONTEXT_RC_RESIZE = 0x40 <a name="l00181"></a>00181 }; <a name="l00182"></a>00182 <a name="l00183"></a>00183 <span class="keyword">private</span>: <a name="l00184"></a>00184 <span class="keywordtype">int</span> _rows, _cols, <span class="comment">// total rows/cols</span> <a name="l00185"></a>00185 _row_header_w, <span class="comment">// width of row header</span> <a name="l00186"></a>00186 _col_header_h, <span class="comment">// height of column header</span> <a name="l00187"></a>00187 _row_position, <span class="comment">// last row_position set (not necessarily == toprow!)</span> <a name="l00188"></a>00188 _col_position; <span class="comment">// last col_position set (not necessarily == leftcol!)</span> <a name="l00189"></a>00189 <a name="l00190"></a>00190 <span class="keywordtype">char</span> _row_header, <span class="comment">// row header enabled?</span> <a name="l00191"></a>00191 _col_header, <span class="comment">// col header enabled?</span> <a name="l00192"></a>00192 _row_resize, <span class="comment">// row resizing enabled?</span> <a name="l00193"></a>00193 _col_resize; <span class="comment">// col resizing enabled?</span> <a name="l00194"></a>00194 <span class="keywordtype">int</span> <a name="l00195"></a>00195 _row_resize_min, <span class="comment">// row minimum resizing height (default=1)</span> <a name="l00196"></a>00196 _col_resize_min; <span class="comment">// col minimum resizing width (default=1)</span> <a name="l00197"></a>00197 <a name="l00198"></a>00198 <span class="comment">// OPTIMIZATION: partial row/column redraw variables</span> <a name="l00199"></a>00199 <span class="keywordtype">int</span> _redraw_toprow, _redraw_botrow, <a name="l00200"></a>00200 _redraw_leftcol, _redraw_rightcol; <a name="l00201"></a>00201 <a name="l00202"></a>00202 Fl_Color _row_header_color, <a name="l00203"></a>00203 _col_header_color; <a name="l00204"></a>00204 <a name="l00205"></a>00205 <span class="keywordtype">int</span> _auto_drag; <a name="l00206"></a>00206 <span class="keywordtype">int</span> _selecting; <a name="l00207"></a>00207 <a name="l00212"></a>00212 <span class="keyword">class </span>IntVector { <a name="l00213"></a>00213 <span class="keyword">private</span>: <a name="l00214"></a>00214 <span class="keywordtype">int</span> *arr; <a name="l00215"></a>00215 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> _size; <a name="l00216"></a>00216 <a name="l00217"></a>00217 <span class="keywordtype">void</span> init() { arr = NULL; _size = 0; } <a name="l00218"></a>00218 <span class="keywordtype">void</span> copy(<span class="keywordtype">int</span> *newarr, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> newsize) { size(newsize); memcpy(arr, newarr, newsize * <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)); } <a name="l00219"></a>00219 <span class="keyword">public</span>: <a name="l00221"></a>00221 IntVector() { init(); } <a name="l00223"></a>00223 ~IntVector() { <span class="keywordflow">if</span> ( arr ) free(arr); arr = NULL; } <a name="l00225"></a>00225 IntVector(IntVector&o) { init(); copy(o.arr, o._size); } <a name="l00227"></a>00227 IntVector& operator=(IntVector&o) { init(); copy(o.arr, o._size); <span class="keywordflow">return</span>(*<span class="keyword">this</span>); } <a name="l00229"></a>00229 <span class="keywordtype">int</span> operator[](<span class="keywordtype">int</span> x)<span class="keyword"> const </span>{ <span class="keywordflow">return</span>(arr[x]); } <a name="l00231"></a>00231 <span class="keywordtype">int</span>& operator[](<span class="keywordtype">int</span> x) { <span class="keywordflow">return</span>(arr[x]); } <a name="l00233"></a>00233 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> size() { <span class="keywordflow">return</span>(_size); } <a name="l00235"></a>00235 <span class="keywordtype">void</span> size(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> count) { <a name="l00236"></a>00236 <span class="keywordflow">if</span> ( count != _size ) <a name="l00237"></a>00237 { arr = (<span class="keywordtype">int</span>*)realloc(arr, count * <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)); _size = count; } <a name="l00238"></a>00238 } <a name="l00240"></a>00240 <span class="keywordtype">int</span> pop_back() { <span class="keywordtype">int</span> tmp = arr[_size-1]; _size--; <span class="keywordflow">return</span>(tmp); } <a name="l00242"></a>00242 <span class="keywordtype">void</span> push_back(<span class="keywordtype">int</span> val) { <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> x = _size; size(_size+1); arr[x] = val; } <a name="l00244"></a>00244 <span class="keywordtype">int</span> back() { <span class="keywordflow">return</span>(arr[_size-1]); } <a name="l00245"></a>00245 }; <a name="l00246"></a>00246 <a name="l00247"></a>00247 IntVector <a name="l00248"></a>00248 _colwidths, <span class="comment">// column widths in pixels</span> <a name="l00249"></a>00249 _rowheights; <span class="comment">// row heights in pixels</span> <a name="l00250"></a>00250 <a name="l00251"></a>00251 Fl_Cursor _last_cursor; <span class="comment">// last mouse cursor before changed to 'resize' cursor</span> <a name="l00252"></a>00252 <a name="l00253"></a>00253 <span class="comment">// EVENT CALLBACK DATA</span> <a name="l00254"></a>00254 TableContext _callback_context; <span class="comment">// event context</span> <a name="l00255"></a>00255 <span class="keywordtype">int</span> _callback_row, _callback_col; <span class="comment">// event row/col</span> <a name="l00256"></a>00256 <a name="l00257"></a>00257 <span class="comment">// handle() state variables.</span> <a name="l00258"></a>00258 <span class="comment">// Put here instead of local statics in handle(), so more</span> <a name="l00259"></a>00259 <span class="comment">// than one TableBase can exist without crosstalk between them.</span> <a name="l00260"></a>00260 <span class="comment">//</span> <a name="l00261"></a>00261 <span class="keywordtype">int</span> _resizing_col, <span class="comment">// column being dragged</span> <a name="l00262"></a>00262 _resizing_row, <span class="comment">// row being dragged</span> <a name="l00263"></a>00263 _dragging_x, <span class="comment">// starting x position for horiz drag</span> <a name="l00264"></a>00264 _dragging_y, <span class="comment">// starting y position for vert drag</span> <a name="l00265"></a>00265 _last_row; <span class="comment">// last row we FL_PUSH'ed</span> <a name="l00266"></a>00266 <a name="l00267"></a>00267 <span class="comment">// Redraw single cell</span> <a name="l00268"></a>00268 <span class="keywordtype">void</span> _redraw_cell(TableContext context, <span class="keywordtype">int</span> R, <span class="keywordtype">int</span> C); <a name="l00269"></a>00269 <a name="l00270"></a>00270 <span class="keywordtype">void</span> _start_auto_drag(); <a name="l00271"></a>00271 <span class="keywordtype">void</span> _stop_auto_drag(); <a name="l00272"></a>00272 <span class="keywordtype">void</span> _auto_drag_cb(); <a name="l00273"></a>00273 <span class="keyword">static</span> <span class="keywordtype">void</span> _auto_drag_cb2(<span class="keywordtype">void</span> *d); <a name="l00274"></a>00274 <a name="l00275"></a>00275 <a name="l00276"></a>00276 <span class="keyword">protected</span>: <a name="l00277"></a>00277 <span class="preprocessor">#ifndef SKIP_DOCS</span> <a name="l00278"></a>00278 <span class="preprocessor"></span> <span class="keyword">enum</span> ResizeFlag { <a name="l00279"></a>00279 RESIZE_NONE = 0, <a name="l00280"></a>00280 RESIZE_COL_LEFT = 1, <a name="l00281"></a>00281 RESIZE_COL_RIGHT = 2, <a name="l00282"></a>00282 RESIZE_ROW_ABOVE = 3, <a name="l00283"></a>00283 RESIZE_ROW_BELOW = 4 <a name="l00284"></a>00284 }; <a name="l00285"></a>00285 <a name="l00286"></a>00286 <span class="keywordtype">int</span> table_w, table_h; <span class="comment">// table's virtual size (in pixels)</span> <a name="l00287"></a>00287 <span class="keywordtype">int</span> toprow, botrow, <span class="comment">// four corners of viewable table</span> <a name="l00288"></a>00288 leftcol, rightcol; <a name="l00289"></a>00289 <a name="l00290"></a>00290 <span class="comment">// selection</span> <a name="l00291"></a>00291 <span class="keywordtype">int</span> current_row, current_col; <a name="l00292"></a>00292 <span class="keywordtype">int</span> select_row, select_col; <a name="l00293"></a>00293 <a name="l00294"></a>00294 <span class="comment">// OPTIMIZATION: Precomputed scroll positions for the toprow/leftcol</span> <a name="l00295"></a>00295 <span class="keywordtype">int</span> toprow_scrollpos, <a name="l00296"></a>00296 leftcol_scrollpos; <a name="l00297"></a>00297 <a name="l00298"></a>00298 <span class="comment">// Dimensions</span> <a name="l00299"></a>00299 <span class="keywordtype">int</span> tix, tiy, tiw, tih, <span class="comment">// data table inner dimension xywh</span> <a name="l00300"></a>00300 tox, toy, tow, toh, <span class="comment">// data table outer dimension xywh</span> <a name="l00301"></a>00301 wix, wiy, wiw, wih; <span class="comment">// widget inner dimension xywh</span> <a name="l00302"></a>00302 <a name="l00303"></a>00303 Fl_Scroll *table; <span class="comment">// container for child fltk widgets (if any)</span> <a name="l00304"></a>00304 Fl_Scrollbar *vscrollbar, <span class="comment">// vertical scrollbar</span> <a name="l00305"></a>00305 *hscrollbar; <span class="comment">// horizontal scrollbar</span> <a name="l00306"></a>00306 <a name="l00307"></a>00307 <span class="comment">// Fltk</span> <a name="l00308"></a>00308 <span class="keywordtype">int</span> handle(<span class="keywordtype">int</span> e); <span class="comment">// fltk handle() override</span> <a name="l00309"></a>00309 <a name="l00310"></a>00310 <span class="comment">// Class maintenance</span> <a name="l00311"></a>00311 <span class="keywordtype">void</span> recalc_dimensions(); <a name="l00312"></a>00312 <span class="keywordtype">void</span> table_resized(); <span class="comment">// table resized; recalc</span> <a name="l00313"></a>00313 <span class="keywordtype">void</span> table_scrolled(); <span class="comment">// table scrolled; recalc</span> <a name="l00314"></a>00314 <span class="keywordtype">void</span> get_bounds(TableContext context, <span class="comment">// return x/y/w/h bounds for context</span> <a name="l00315"></a>00315 <span class="keywordtype">int</span> &X, <span class="keywordtype">int</span> &Y, <span class="keywordtype">int</span> &W, <span class="keywordtype">int</span> &H); <a name="l00316"></a>00316 <span class="keywordtype">void</span> change_cursor(Fl_Cursor newcursor); <span class="comment">// change mouse cursor to some other shape</span> <a name="l00317"></a>00317 TableContext cursor2rowcol(<span class="keywordtype">int</span> &R, <span class="keywordtype">int</span> &C, ResizeFlag &resizeflag); <a name="l00318"></a>00318 <span class="comment">// find r/c given current x/y event</span> <a name="l00319"></a>00319 <span class="keywordtype">int</span> find_cell(TableContext context, <span class="comment">// find cell's x/y/w/h given r/c</span> <a name="l00320"></a>00320 <span class="keywordtype">int</span> R, <span class="keywordtype">int</span> C, <span class="keywordtype">int</span> &X, <span class="keywordtype">int</span> &Y, <span class="keywordtype">int</span> &W, <span class="keywordtype">int</span> &H); <a name="l00321"></a>00321 <span class="keywordtype">int</span> row_col_clamp(TableContext context, <span class="keywordtype">int</span> &R, <span class="keywordtype">int</span> &C); <a name="l00322"></a>00322 <span class="comment">// clamp r/c to known universe</span> <a name="l00323"></a>00323 <a name="l00324"></a>00324 <span class="comment">// Called to draw cells</span> <a name="l00325"></a>00325 <span class="keyword">virtual</span> <span class="keywordtype">void</span> draw_cell(TableContext context, <span class="keywordtype">int</span> R=0, <span class="keywordtype">int</span> C=0, <a name="l00326"></a>00326 <span class="keywordtype">int</span> X=0, <span class="keywordtype">int</span> Y=0, <span class="keywordtype">int</span> W=0, <span class="keywordtype">int</span> H=0) <a name="l00327"></a>00327 { } <span class="comment">// overridden by deriving class</span> <a name="l00328"></a>00328 <a name="l00329"></a>00329 <span class="keywordtype">long</span> row_scroll_position(<span class="keywordtype">int</span> row); <span class="comment">// find scroll position of row (in pixels)</span> <a name="l00330"></a>00330 <span class="keywordtype">long</span> col_scroll_position(<span class="keywordtype">int</span> col); <span class="comment">// find scroll position of col (in pixels)</span> <a name="l00331"></a>00331 <a name="l00332"></a>00332 <span class="keywordtype">int</span> is_fltk_container() <span class="comment">// does table contain fltk widgets?</span> <a name="l00333"></a>00333 { <span class="keywordflow">return</span>( Fl_Group::children() > 3 ); } <span class="comment">// (ie. more than box and 2 scrollbars?)</span> <a name="l00334"></a>00334 <a name="l00335"></a>00335 <span class="keyword">static</span> <span class="keywordtype">void</span> scroll_cb(Fl_Widget*,<span class="keywordtype">void</span>*); <span class="comment">// h/v scrollbar callback</span> <a name="l00336"></a>00336 <a name="l00337"></a>00337 <span class="keywordtype">void</span> damage_zone(<span class="keywordtype">int</span> r1, <span class="keywordtype">int</span> c1, <span class="keywordtype">int</span> r2, <span class="keywordtype">int</span> c2, <span class="keywordtype">int</span> r3 = 0, <span class="keywordtype">int</span> c3 = 0); <a name="l00338"></a>00338 <a name="l00339"></a>00339 <span class="keywordtype">void</span> redraw_range(<span class="keywordtype">int</span> trow, <span class="keywordtype">int</span> brow, <span class="keywordtype">int</span> lcol, <span class="keywordtype">int</span> rcol) { <a name="l00340"></a>00340 <span class="keywordflow">if</span> ( _redraw_toprow == -1 ) { <a name="l00341"></a>00341 <span class="comment">// Initialize redraw range</span> <a name="l00342"></a>00342 _redraw_toprow = trow; <a name="l00343"></a>00343 _redraw_botrow = brow; <a name="l00344"></a>00344 _redraw_leftcol = lcol; <a name="l00345"></a>00345 _redraw_rightcol = rcol; <a name="l00346"></a>00346 } <span class="keywordflow">else</span> { <a name="l00347"></a>00347 <span class="comment">// Extend redraw range</span> <a name="l00348"></a>00348 <span class="keywordflow">if</span> ( trow < _redraw_toprow ) _redraw_toprow = trow; <a name="l00349"></a>00349 <span class="keywordflow">if</span> ( brow > _redraw_botrow ) _redraw_botrow = brow; <a name="l00350"></a>00350 <span class="keywordflow">if</span> ( lcol < _redraw_leftcol ) _redraw_leftcol = lcol; <a name="l00351"></a>00351 <span class="keywordflow">if</span> ( rcol > _redraw_rightcol ) _redraw_rightcol = rcol; <a name="l00352"></a>00352 } <a name="l00353"></a>00353 <a name="l00354"></a>00354 <span class="comment">// Indicate partial redraw needed of some cells</span> <a name="l00355"></a>00355 damage(FL_DAMAGE_CHILD); <a name="l00356"></a>00356 } <a name="l00357"></a>00357 <a name="l00358"></a>00358 <span class="comment">// TODO: maybe _redraw_cell() put protected directly?</span> <a name="l00359"></a>00359 <span class="keywordtype">void</span> redraw_cell(TableContext context, <span class="keywordtype">int</span> R, <span class="keywordtype">int</span> C) { _redraw_cell(context, R, C); } <a name="l00360"></a>00360 <span class="preprocessor">#endif</span> <a name="l00361"></a>00361 <span class="preprocessor"></span> <a name="l00362"></a>00362 <span class="keyword">public</span>: <a name="l00367"></a>00367 TableBase(<span class="keywordtype">int</span> X, <span class="keywordtype">int</span> Y, <span class="keywordtype">int</span> W, <span class="keywordtype">int</span> H, <span class="keyword">const</span> <span class="keywordtype">char</span> *l=0); <a name="l00368"></a>00368 <a name="l00372"></a>00372 ~TableBase(); <a name="l00373"></a>00373 <a name="l00377"></a><a class="code" href="classedelib_1_1TableBase.html#aae048282c7011eedc2e0492f6421ea73">00377</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classedelib_1_1TableBase.html#aae048282c7011eedc2e0492f6421ea73">clear</a>() { rows(0); cols(0); } <a name="l00378"></a>00378 <a name="l00383"></a><a class="code" href="classedelib_1_1TableBase.html#ac6923421fdbde14ad2029adf65e14e1a">00383</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classedelib_1_1TableBase.html#ac6923421fdbde14ad2029adf65e14e1a">table_box</a>(Fl_Boxtype val) { table->box(val); table_resized(); } <a name="l00384"></a>00384 <a name="l00388"></a><a class="code" href="classedelib_1_1TableBase.html#ac0c7c5ecd037b580c0e0967ff8474b81">00388</a> <span class="keyword">inline</span> Fl_Boxtype <a class="code" href="classedelib_1_1TableBase.html#ac0c7c5ecd037b580c0e0967ff8474b81">table_box</a>( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span>(table->box()); } <a name="l00389"></a>00389 <a name="l00393"></a>00393 <span class="keyword">virtual</span> <span class="keywordtype">void</span> rows(<span class="keywordtype">int</span> val); <a name="l00394"></a>00394 <a name="l00398"></a><a class="code" href="classedelib_1_1TableBase.html#a8db75abaedab913d9c6a593539fbbd3e">00398</a> <span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="classedelib_1_1TableBase.html#a8db75abaedab913d9c6a593539fbbd3e">rows</a>() { <span class="keywordflow">return</span> _rows; } <a name="l00399"></a>00399 <a name="l00403"></a>00403 <span class="keyword">virtual</span> <span class="keywordtype">void</span> cols(<span class="keywordtype">int</span> val); <a name="l00404"></a>00404 <a name="l00408"></a><a class="code" href="classedelib_1_1TableBase.html#abc3ae4a5cdee42ffebdfc435b8035a86">00408</a> <span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="classedelib_1_1TableBase.html#abc3ae4a5cdee42ffebdfc435b8035a86">cols</a>() { <span class="keywordflow">return</span> _cols; } <a name="l00409"></a>00409 <a name="l00417"></a><a class="code" href="classedelib_1_1TableBase.html#a4b5191ddfbd201da8a2e99b79fda5012">00417</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classedelib_1_1TableBase.html#a4b5191ddfbd201da8a2e99b79fda5012">visible_cells</a>(<span class="keywordtype">int</span>& r1, <span class="keywordtype">int</span>& r2, <span class="keywordtype">int</span>& c1, <span class="keywordtype">int</span>& c2) { r1 = toprow; r2 = botrow; c1 = leftcol; c2 = rightcol; } <a name="l00418"></a>00418 <a name="l00422"></a><a class="code" href="classedelib_1_1TableBase.html#a81484715608b46d31821f48302b9feef">00422</a> <span class="keywordtype">int</span> <a class="code" href="classedelib_1_1TableBase.html#a81484715608b46d31821f48302b9feef">is_interactive_resize</a>() { <span class="keywordflow">return</span> (_resizing_row != -1 || _resizing_col != -1); } <a name="l00423"></a>00423 <a name="l00428"></a><a class="code" href="classedelib_1_1TableBase.html#ad04a01985d460b252b88eb1767ff5060">00428</a> <span class="keywordtype">void</span> <a class="code" href="classedelib_1_1TableBase.html#ad04a01985d460b252b88eb1767ff5060">row_resize</a>(<span class="keywordtype">int</span> flag) { _row_resize = flag; } <a name="l00429"></a>00429 <a name="l00433"></a><a class="code" href="classedelib_1_1TableBase.html#a5fc73159a86725cfefca622ac7c687c1">00433</a> <span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="classedelib_1_1TableBase.html#a5fc73159a86725cfefca622ac7c687c1">row_resize</a>() { <span class="keywordflow">return</span> _row_resize; } <a name="l00434"></a>00434 <a name="l00439"></a><a class="code" href="classedelib_1_1TableBase.html#a97a9b25061f6f6f9e56da4e559d8e7e8">00439</a> <span class="keywordtype">void</span> <a class="code" href="classedelib_1_1TableBase.html#a97a9b25061f6f6f9e56da4e559d8e7e8">col_resize</a>(<span class="keywordtype">int</span> flag) { _col_resize = flag; } <a name="l00440"></a>00440 <a name="l00444"></a><a class="code" href="classedelib_1_1TableBase.html#a50647b930711ded90f2b17634f1be9c5">00444</a> <span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="classedelib_1_1TableBase.html#a50647b930711ded90f2b17634f1be9c5">col_resize</a>() { <span class="keywordflow">return</span> _col_resize; } <a name="l00445"></a>00445 <a name="l00449"></a><a class="code" href="classedelib_1_1TableBase.html#aef476f2c10403fc1372f68c96affb470">00449</a> <span class="keywordtype">void</span> <a class="code" href="classedelib_1_1TableBase.html#aef476f2c10403fc1372f68c96affb470">col_resize_min</a>(<span class="keywordtype">int</span> val) { _col_resize_min = ( val < 1 ) ? 1 : val; } <a name="l00450"></a>00450 <a name="l00454"></a><a class="code" href="classedelib_1_1TableBase.html#a9632428d4428c4d81b4d526a6e841f0e">00454</a> <span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="classedelib_1_1TableBase.html#a9632428d4428c4d81b4d526a6e841f0e">col_resize_min</a>() { <span class="keywordflow">return</span> _col_resize_min; } <a name="l00455"></a>00455 <a name="l00459"></a><a class="code" href="classedelib_1_1TableBase.html#a3ec0ffe03057fbc1258b96f941d051ec">00459</a> <span class="keywordtype">void</span> <a class="code" href="classedelib_1_1TableBase.html#a3ec0ffe03057fbc1258b96f941d051ec">row_resize_min</a>(<span class="keywordtype">int</span> val) { _row_resize_min = ( val < 1 ) ? 1 : val; } <a name="l00460"></a>00460 <a name="l00464"></a><a class="code" href="classedelib_1_1TableBase.html#a499937417387dccd1d4ef518f19ff202">00464</a> <span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="classedelib_1_1TableBase.html#a499937417387dccd1d4ef518f19ff202">row_resize_min</a>() { <span class="keywordflow">return</span> _row_resize_min; } <a name="l00465"></a>00465 <a name="l00470"></a><a class="code" href="classedelib_1_1TableBase.html#a302efbc285d3c7de92f248cf52b4546f">00470</a> <span class="keywordtype">void</span> <a class="code" href="classedelib_1_1TableBase.html#a302efbc285d3c7de92f248cf52b4546f">row_header</a>(<span class="keywordtype">int</span> flag) { _row_header = flag; table_resized(); redraw(); } <a name="l00471"></a>00471 <a name="l00475"></a><a class="code" href="classedelib_1_1TableBase.html#a32077a08cdd181e77c21d985a02a27cb">00475</a> <span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="classedelib_1_1TableBase.html#a32077a08cdd181e77c21d985a02a27cb">row_header</a>() { <span class="keywordflow">return</span> _row_header; } <a name="l00476"></a>00476 <a name="l00481"></a><a class="code" href="classedelib_1_1TableBase.html#ab4673f7a931cdf3e753b4b603c1b4d98">00481</a> <span class="keywordtype">void</span> <a class="code" href="classedelib_1_1TableBase.html#ab4673f7a931cdf3e753b4b603c1b4d98">col_header</a>(<span class="keywordtype">int</span> flag) { _col_header = flag; table_resized(); redraw(); } <a name="l00482"></a>00482 <a name="l00486"></a><a class="code" href="classedelib_1_1TableBase.html#a3fdce3d751ecd575ef3bb53fbfde6a20">00486</a> <span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="classedelib_1_1TableBase.html#a3fdce3d751ecd575ef3bb53fbfde6a20">col_header</a>() { <span class="keywordflow">return</span>(_col_header); } <a name="l00487"></a>00487 <a name="l00491"></a><a class="code" href="classedelib_1_1TableBase.html#a75ad271da21d5503f3c9c32cfbfa0f8c">00491</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classedelib_1_1TableBase.html#a75ad271da21d5503f3c9c32cfbfa0f8c">col_header_height</a>(<span class="keywordtype">int</span> height) { _col_header_h = height; table_resized(); redraw(); } <a name="l00492"></a>00492 <a name="l00496"></a><a class="code" href="classedelib_1_1TableBase.html#aad986593f847e64df3fa65989cb9b005">00496</a> <span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="classedelib_1_1TableBase.html#aad986593f847e64df3fa65989cb9b005">col_header_height</a>() { <span class="keywordflow">return</span> _col_header_h; } <a name="l00497"></a>00497 <a name="l00501"></a><a class="code" href="classedelib_1_1TableBase.html#afe4bd79ad8150956df4d0d433af403ee">00501</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classedelib_1_1TableBase.html#afe4bd79ad8150956df4d0d433af403ee">row_header_width</a>(<span class="keywordtype">int</span> width) { _row_header_w = width; table_resized(); redraw(); } <a name="l00502"></a>00502 <a name="l00506"></a><a class="code" href="classedelib_1_1TableBase.html#a6cae8b6f9d7a9ebed2a59db4cd3b5b7a">00506</a> <span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="classedelib_1_1TableBase.html#a6cae8b6f9d7a9ebed2a59db4cd3b5b7a">row_header_width</a>() { <span class="keywordflow">return</span> _row_header_w; } <a name="l00507"></a>00507 <a name="l00511"></a><a class="code" href="classedelib_1_1TableBase.html#a5131ae3e634a1922ca0fe0ee2646623b">00511</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classedelib_1_1TableBase.html#a5131ae3e634a1922ca0fe0ee2646623b">row_header_color</a>(Fl_Color val) { _row_header_color = val; redraw(); } <a name="l00512"></a>00512 <a name="l00516"></a><a class="code" href="classedelib_1_1TableBase.html#aa997f69301f207522c3cc4120781861f">00516</a> <span class="keyword">inline</span> Fl_Color <a class="code" href="classedelib_1_1TableBase.html#aa997f69301f207522c3cc4120781861f">row_header_color</a>() { <span class="keywordflow">return</span> _row_header_color; } <a name="l00517"></a>00517 <a name="l00521"></a><a class="code" href="classedelib_1_1TableBase.html#a23f2006f7b30e3e6db2eb6a2c693b5dd">00521</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classedelib_1_1TableBase.html#a23f2006f7b30e3e6db2eb6a2c693b5dd">col_header_color</a>(Fl_Color val) { _col_header_color = val; redraw(); } <a name="l00522"></a>00522 <a name="l00526"></a><a class="code" href="classedelib_1_1TableBase.html#ac3c09bfb12210f2968c549792bc79bbf">00526</a> <span class="keyword">inline</span> Fl_Color <a class="code" href="classedelib_1_1TableBase.html#ac3c09bfb12210f2968c549792bc79bbf">col_header_color</a>() { <span class="keywordflow">return</span> _col_header_color; } <a name="l00527"></a>00527 <a name="l00532"></a>00532 <span class="keywordtype">void</span> row_height(<span class="keywordtype">int</span> row, <span class="keywordtype">int</span> height); <a name="l00533"></a>00533 <a name="l00537"></a><a class="code" href="classedelib_1_1TableBase.html#a2c0262cb3d449dfdb9132988b5c822aa">00537</a> <span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="classedelib_1_1TableBase.html#a2c0262cb3d449dfdb9132988b5c822aa">row_height</a>(<span class="keywordtype">int</span> row) { <span class="keywordflow">return</span> ((row<0 || row>=(<span class="keywordtype">int</span>)_rowheights.size()) ? 0 : _rowheights[row]); } <a name="l00538"></a>00538 <a name="l00543"></a>00543 <span class="keywordtype">void</span> col_width(<span class="keywordtype">int</span> col, <span class="keywordtype">int</span> width); <a name="l00544"></a>00544 <a name="l00548"></a><a class="code" href="classedelib_1_1TableBase.html#a30d62f6cbe73a2bd624135adf17a6d45">00548</a> <span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="classedelib_1_1TableBase.html#a30d62f6cbe73a2bd624135adf17a6d45">col_width</a>(<span class="keywordtype">int</span> col) { <span class="keywordflow">return</span> ((col<0 || col>=(<span class="keywordtype">int</span>)_colwidths.size()) ? 0 : _colwidths[col]); } <a name="l00549"></a>00549 <a name="l00553"></a><a class="code" href="classedelib_1_1TableBase.html#ab2b65bb82376c2700421c33ba639732c">00553</a> <span class="keywordtype">void</span> <a class="code" href="classedelib_1_1TableBase.html#ab2b65bb82376c2700421c33ba639732c">row_height_all</a>(<span class="keywordtype">int</span> height) { <span class="keywordflow">for</span> ( <span class="keywordtype">int</span> r=0; r<rows(); r++ ) row_height(r, height); } <a name="l00554"></a>00554 <a name="l00558"></a><a class="code" href="classedelib_1_1TableBase.html#abf1376bc69974cb9b6a263603f1ac8f7">00558</a> <span class="keywordtype">void</span> <a class="code" href="classedelib_1_1TableBase.html#abf1376bc69974cb9b6a263603f1ac8f7">col_width_all</a>(<span class="keywordtype">int</span> width) { <span class="keywordflow">for</span> ( <span class="keywordtype">int</span> c=0; c<cols(); c++ ) col_width(c, width); } <a name="l00559"></a>00559 <a name="l00563"></a>00563 <span class="keywordtype">void</span> row_position(<span class="keywordtype">int</span> row); <a name="l00564"></a>00564 <a name="l00568"></a><a class="code" href="classedelib_1_1TableBase.html#a34b0488b0042fd72ff7ea2841184392d">00568</a> <span class="keywordtype">int</span> <a class="code" href="classedelib_1_1TableBase.html#a34b0488b0042fd72ff7ea2841184392d">row_position</a>() { <span class="keywordflow">return</span> _row_position; } <a name="l00569"></a>00569 <a name="l00573"></a>00573 <span class="keywordtype">void</span> col_position(<span class="keywordtype">int</span> col); <a name="l00574"></a>00574 <a name="l00578"></a><a class="code" href="classedelib_1_1TableBase.html#aa2427ebc6290bc8b4a080f2778171127">00578</a> <span class="keywordtype">int</span> <a class="code" href="classedelib_1_1TableBase.html#aa2427ebc6290bc8b4a080f2778171127">col_position</a>() { <span class="keywordflow">return</span> _col_position; } <a name="l00579"></a>00579 <a name="l00583"></a><a class="code" href="classedelib_1_1TableBase.html#aeec104237fde6e62c7cfbbf9552da813">00583</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classedelib_1_1TableBase.html#aeec104237fde6e62c7cfbbf9552da813">top_row</a>(<span class="keywordtype">int</span> row) { row_position(row); } <a name="l00584"></a>00584 <a name="l00588"></a><a class="code" href="classedelib_1_1TableBase.html#a7b6291391fac506498a88eaab6fd190b">00588</a> <span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="classedelib_1_1TableBase.html#a7b6291391fac506498a88eaab6fd190b">top_row</a>() { <span class="keywordflow">return</span> row_position(); } <a name="l00589"></a>00589 <a name="l00593"></a>00593 <span class="keywordtype">int</span> is_selected(<span class="keywordtype">int</span> r, <span class="keywordtype">int</span> c); <a name="l00594"></a>00594 <a name="l00601"></a>00601 <span class="keywordtype">void</span> get_selection(<span class="keywordtype">int</span>& s_top, <span class="keywordtype">int</span>& s_left, <span class="keywordtype">int</span>& s_bottom, <span class="keywordtype">int</span>& s_right); <a name="l00602"></a>00602 <a name="l00609"></a>00609 <span class="keywordtype">void</span> set_selection(<span class="keywordtype">int</span> s_top, <span class="keywordtype">int</span> s_left, <span class="keywordtype">int</span> s_bottom, <span class="keywordtype">int</span> s_right); <a name="l00610"></a>00610 <a name="l00616"></a>00616 <span class="keywordtype">int</span> move_cursor(<span class="keywordtype">int</span> R, <span class="keywordtype">int</span> C); <a name="l00617"></a>00617 <a name="l00621"></a>00621 <span class="keywordtype">void</span> resize(<span class="keywordtype">int</span> X, <span class="keywordtype">int</span> Y, <span class="keywordtype">int</span> W, <span class="keywordtype">int</span> H); <a name="l00622"></a>00622 <a name="l00626"></a>00626 <span class="keywordtype">void</span> draw(<span class="keywordtype">void</span>); <a name="l00627"></a>00627 <a name="l00631"></a><a class="code" href="classedelib_1_1TableBase.html#af4c4c97aa08a7979bf4c2b27f56cb7bb">00631</a> <span class="keywordtype">void</span> <a class="code" href="classedelib_1_1TableBase.html#af4c4c97aa08a7979bf4c2b27f56cb7bb">init_sizes</a>() { table->init_sizes(); table->redraw(); } <a name="l00632"></a>00632 <a name="l00636"></a><a class="code" href="classedelib_1_1TableBase.html#affe56bb479d74e9f6975f9ad3f2a107b">00636</a> <span class="keywordtype">void</span> <a class="code" href="classedelib_1_1TableBase.html#affe56bb479d74e9f6975f9ad3f2a107b">add</a>(Fl_Widget& widget) { table->add(widget); } <a name="l00637"></a>00637 <a name="l00641"></a><a class="code" href="classedelib_1_1TableBase.html#a8661184c017f323c0a41572b5117088c">00641</a> <span class="keywordtype">void</span> <a class="code" href="classedelib_1_1TableBase.html#a8661184c017f323c0a41572b5117088c">add</a>(Fl_Widget* widget) { table->add(widget); } <a name="l00642"></a>00642 <a name="l00646"></a><a class="code" href="classedelib_1_1TableBase.html#ab10c725cef29d2470c509d53b48bc351">00646</a> <span class="keywordtype">void</span> <a class="code" href="classedelib_1_1TableBase.html#ab10c725cef29d2470c509d53b48bc351">insert</a>(Fl_Widget& widget, <span class="keywordtype">int</span> n) { table->insert(widget,n); } <a name="l00647"></a>00647 <a name="l00651"></a><a class="code" href="classedelib_1_1TableBase.html#a8e70b8334c5593d8de488ab683aa38c3">00651</a> <span class="keywordtype">void</span> <a class="code" href="classedelib_1_1TableBase.html#a8e70b8334c5593d8de488ab683aa38c3">insert</a>(Fl_Widget& widget1, Fl_Widget* widget2) { table->insert(widget1,widget2); } <a name="l00652"></a>00652 <a name="l00656"></a><a class="code" href="classedelib_1_1TableBase.html#ab7d568439331e45e6541742d184e7ed4">00656</a> <span class="keywordtype">void</span> <span class="keyword">remove</span>(Fl_Widget& widget) { table->remove(widget); } <a name="l00657"></a>00657 <a name="l00661"></a><a class="code" href="classedelib_1_1TableBase.html#ab0bdf5cca484fb2ba637c39384b27fb2">00661</a> <span class="keywordtype">void</span> <a class="code" href="classedelib_1_1TableBase.html#ab0bdf5cca484fb2ba637c39384b27fb2">begin</a>() { table->begin(); } <a name="l00662"></a>00662 <a name="l00666"></a><a class="code" href="classedelib_1_1TableBase.html#aaf81d3fdaf258088d7692fa70cece087">00666</a> <span class="keywordtype">void</span> <a class="code" href="classedelib_1_1TableBase.html#aaf81d3fdaf258088d7692fa70cece087">end</a>() { <a name="l00667"></a>00667 table->end(); <a name="l00668"></a>00668 <a name="l00669"></a>00669 <span class="comment">// HACK: Avoid showing Fl_Scroll; seems to erase screen</span> <a name="l00670"></a>00670 <span class="comment">// causing unnecessary flicker, even if its box() is FL_NO_BOX.</span> <a name="l00671"></a>00671 <span class="comment">//</span> <a name="l00672"></a>00672 <span class="keywordflow">if</span> ( table->children() > 2 ) <a name="l00673"></a>00673 table->show(); <a name="l00674"></a>00674 <span class="keywordflow">else</span> <a name="l00675"></a>00675 table->hide(); <a name="l00676"></a>00676 <a name="l00677"></a>00677 Fl_Group::current((Fl_Group*)(Fl_Group::parent())); <a name="l00678"></a>00678 } <a name="l00679"></a>00679 <a name="l00680"></a>00680 <span class="preprocessor">#ifndef SKIP_DOCS</span> <a name="l00681"></a>00681 <span class="preprocessor"></span> Fl_Widget * <span class="keyword">const</span> *array() { <span class="keywordflow">return</span> table->array(); } <a name="l00682"></a>00682 Fl_Widget *child(<span class="keywordtype">int</span> n)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> table->child(n); } <a name="l00683"></a>00683 <span class="keywordtype">int</span> children()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> table->children()-2; } <span class="comment">// -2: skip Fl_Scroll's h/v scrollbar widgets</span> <a name="l00684"></a>00684 <span class="keywordtype">int</span> find(<span class="keyword">const</span> Fl_Widget *widget)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> table->find(widget); } <a name="l00685"></a>00685 <span class="keywordtype">int</span> find(<span class="keyword">const</span> Fl_Widget &widget)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> table->find(widget); } <a name="l00686"></a>00686 <span class="preprocessor">#endif</span> <a name="l00687"></a>00687 <span class="preprocessor"></span> <a name="l00692"></a><a class="code" href="classedelib_1_1TableBase.html#a00363101219cbad63f84d521f375d783">00692</a> <span class="keywordtype">int</span> <a class="code" href="classedelib_1_1TableBase.html#a00363101219cbad63f84d521f375d783">callback_row</a>() { <span class="keywordflow">return</span> _callback_row; } <a name="l00693"></a>00693 <a name="l00698"></a><a class="code" href="classedelib_1_1TableBase.html#aa02812338364a05b228a339a20b12a08">00698</a> <span class="keywordtype">int</span> <a class="code" href="classedelib_1_1TableBase.html#aa02812338364a05b228a339a20b12a08">callback_col</a>() { <span class="keywordflow">return</span> _callback_col; } <a name="l00699"></a>00699 <a name="l00703"></a><a class="code" href="classedelib_1_1TableBase.html#ad5ae00cf02d2cc719700c6d3c28fdbab">00703</a> <a class="code" href="classedelib_1_1TableBase.html#a1026825877324847ba9b3c47f8dbe164" title="What happened in table callback.">TableContext</a> <a class="code" href="classedelib_1_1TableBase.html#ad5ae00cf02d2cc719700c6d3c28fdbab">callback_context</a>() { <span class="keywordflow">return</span> _callback_context; } <a name="l00704"></a>00704 <a name="l00708"></a><a class="code" href="classedelib_1_1TableBase.html#a3bc2a13d214f5901914dc62472b408b0">00708</a> <span class="keywordtype">void</span> <a class="code" href="classedelib_1_1TableBase.html#a3bc2a13d214f5901914dc62472b408b0">do_callback</a>(<a class="code" href="classedelib_1_1TableBase.html#a1026825877324847ba9b3c47f8dbe164" title="What happened in table callback.">TableContext</a> context, <span class="keywordtype">int</span> row, <span class="keywordtype">int</span> col) { <a name="l00709"></a>00709 _callback_context = context; <a name="l00710"></a>00710 _callback_row = row; <a name="l00711"></a>00711 _callback_col = col; <a name="l00712"></a>00712 Fl_Widget::do_callback(); <a name="l00713"></a>00713 } <a name="l00714"></a>00714 }; <a name="l00715"></a>00715 <a name="l00716"></a>00716 EDELIB_NS_END <a name="l00717"></a>00717 <span class="preprocessor">#endif</span> </pre></div></div><!-- contents --> <hr class="footer"/><address class="footer"><small> Generated on Tue Jun 5 2012 17:49:02 for edelib by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> </a> 1.7.6.1 </small></address> </body> </html>