> Carl Ding wrote:
> > The problem is when I delete a row, I use Fl::delete_widget to remove
> > all the embedded widgets in that row. The program crashed when doing
> > fl_draw(). Is there anything else should be done to remove a row from 
> > Fl_Table?
>
>       Tell Fl_Table there's one less row by setting Fl_Table::rows(val),
>       e.g.:
>
>               if ( table.rows() > 0 )
>                    table.rows(table.rows() - 1);
>
>       Fl_Table doesn't have a 'delete row' function because it doesn't
>       maintain any data of its own, so there's nothing to 'delete'.
>
>       It's just a space managing template that uses the rows() and
>       cols() values you tell it, and it just calls your draw method
>       once for each of the cells in all the rows and columns it knows
>       about.
>
>       When you delete a row of your data, you have to tell Fl_Table
>       there's one less row to draw, otherwise your draw function will
>       crash when Fl_Table calls it to draw data for that last row that
>       no longer exists.
>
>       Fl_Table is analogous to the 'for()' loop in the following:
>
>               for ( int row=0; row<rows; row++ )
>                   printf("%d) %f\n", row, data[row]);
>
>       ..where the 'for' loop is Fl_Table, and the printf() is your draw
>       routine, and data[] is your own data; Fl_Table is just the loop,
>       it knows nothing about the printf() or your array of data.. it just
>       knows to call your printf() once for all of the 'rows'.
>
>       So if you decide to realloc() the data[] array to be smaller,
>       but don't decrement 'rows', your printf() will crash printing
>       the last element because the data is no longer there. Decrementing
>       'rows' when you resize the array would be the same as decrementing
>       the Fl_Table::rows() value.
>

Thank you for your explanation. I have used Fl_Table::rows() to resize the 
table. Now, I add a remove() before calling delete_widget() in order to delete 
the embedded widget. It seems working. But I'm not sure whether it is the 
correct sequence to remove a widget.

I have another question regarding to Fl_Table. I embed some button widgets into 
Fl_Table. When I click those buttons, their callback functions can be 
triggered. Is it possible to pass these mouse click events to their parent, 
i.e., Fl_Table, so that its callback function can also be triggered?

_______________________________________________
fltk mailing list
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk

Reply via email to